串口调通,采用在其他线程的模式
This commit is contained in:
@@ -67,6 +67,8 @@ CommandUI::CommandUI(QWidget *parent) :
|
||||
|
||||
btn->setText(info.toObject().find(_TextJsonKey).value().toString());
|
||||
|
||||
//btn->setMinimumSize(CMDwidth,CMDheight);
|
||||
//btn->resize(CMDwidth,CMDheight);
|
||||
btn->setFixedSize(CMDwidth,CMDheight);
|
||||
|
||||
ui->gridLayout_Command->addWidget(btn,
|
||||
@@ -91,7 +93,28 @@ CommandUI::~CommandUI()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void CommandUI::wheelEvent(QWheelEvent *e)
|
||||
{
|
||||
QObjectList list = ui->groupBox_Command->children();
|
||||
|
||||
foreach (QObject *obj, list) {
|
||||
QPushButton *btn = qobject_cast<QPushButton *>(obj);
|
||||
if(btn)
|
||||
{
|
||||
qreal width = btn->width();
|
||||
qreal height = btn->height();
|
||||
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
btn->resize(width - 1,height - 1);
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
btn->resize(width + 1,height + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CommandUI::loadCommandJson(const QString& jsonFilename)
|
||||
{
|
||||
@@ -363,7 +386,32 @@ void CommandUI::commandAccepted(bool flag,uint16_t command,uint8_t result)
|
||||
}
|
||||
|
||||
|
||||
|
||||
//专门为航点设计的一个确认窗口
|
||||
|
||||
void CommandUI::setCurrent(QVariant value)
|
||||
{
|
||||
if(value.toBool() == true)
|
||||
{
|
||||
emit SetCurrentPoint(currentSeq);
|
||||
}
|
||||
}
|
||||
|
||||
void CommandUI::missionConfirm(int seq)
|
||||
{
|
||||
currentSeq = seq;
|
||||
|
||||
//根据这个comfirm 确定要输入的参数
|
||||
Confirm *confirmor = new Confirm(this);
|
||||
confirmor->setGeometry(0,0,this->width(),this->height());
|
||||
|
||||
//设置警告界面
|
||||
confirmor->setNotice(tr("click confirm to set Point %1 as current point").arg(seq));
|
||||
|
||||
connect(confirmor,SIGNAL(confirmValue(QVariant)),
|
||||
this,SLOT(setCurrent(QVariant)));
|
||||
|
||||
confirmor->show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "CharInputter.h"
|
||||
#include "Confirm.h"
|
||||
|
||||
#include "QMouseEvent"
|
||||
|
||||
#include "mavlink.h"
|
||||
|
||||
@@ -45,14 +46,20 @@ public:
|
||||
explicit CommandUI(QWidget *parent = nullptr);
|
||||
~CommandUI();
|
||||
|
||||
protected:
|
||||
|
||||
void wheelEvent(QWheelEvent *e);
|
||||
|
||||
public slots:
|
||||
|
||||
void commandAccepted(bool flag,uint16_t command,uint8_t result);
|
||||
|
||||
|
||||
void missionConfirm(int seq);
|
||||
|
||||
signals:
|
||||
|
||||
void SetCurrentPoint(int seq);
|
||||
|
||||
void cmd_int(float param1, float param2, float param3, float param4, int x, int y, float z);
|
||||
void cmd_long( float param1,float param2,float param3,float param4,float param5,float param6,float param7,uint16_t command,uint8_t confirmation);
|
||||
|
||||
@@ -63,6 +70,8 @@ private slots:
|
||||
|
||||
void setSecondConfirm(QVariant value);
|
||||
|
||||
void setCurrent(QVariant value);
|
||||
|
||||
protected:
|
||||
|
||||
void loadCommandJson(const QString& jsonFilename);
|
||||
@@ -118,6 +127,8 @@ private:
|
||||
|
||||
|
||||
|
||||
int currentSeq = 0;
|
||||
|
||||
};
|
||||
|
||||
#endif // COMMANDUI_H
|
||||
|
||||
@@ -8,6 +8,8 @@ Chart::Chart(QChart *chart, QWidget *parent)
|
||||
chart->legend()->setMarkerShape(QLegend::MarkerShapeCircle);
|
||||
chart->setTheme(QChart::ChartThemeLight);
|
||||
|
||||
//chart->setPlotArea(this->geometry());
|
||||
|
||||
QValueAxis *axisX = new QValueAxis();
|
||||
axisX->setRange(-5, 5);
|
||||
axisX->setTickCount(11);
|
||||
@@ -24,12 +26,15 @@ Chart::Chart(QChart *chart, QWidget *parent)
|
||||
setChart(chart);
|
||||
|
||||
//默认不使用,因为使用显卡加速图形会闪
|
||||
setUseOpenGL(false);
|
||||
setUseOpenGL(false);
|
||||
|
||||
updateTimer = new QTimer(this);
|
||||
connect(updateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(timeout()));
|
||||
updateTimer->start(50);//20hz刷新
|
||||
if(!updateTimer)
|
||||
{
|
||||
updateTimer = new QTimer(this);
|
||||
connect(updateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(timeout()));
|
||||
updateTimer->start(50);//20hz刷新
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -40,6 +45,8 @@ Chart::Chart(QWidget *parent)
|
||||
chart()->legend()->setMarkerShape(QLegend::MarkerShapeCircle);
|
||||
chart()->setTheme(QChart::ChartThemeLight);
|
||||
|
||||
//chart()->setPlotArea(this->geometry());
|
||||
|
||||
QValueAxis *axisX = new QValueAxis();
|
||||
axisX->setRange(-5, 5);
|
||||
axisX->setTickCount(11);
|
||||
@@ -53,12 +60,15 @@ Chart::Chart(QWidget *parent)
|
||||
chart()->addAxis(axisY, Qt::AlignLeft);
|
||||
|
||||
//默认不使用,因为使用显卡加速图形会闪
|
||||
setUseOpenGL(false);
|
||||
setUseOpenGL(false);
|
||||
|
||||
updateTimer = new QTimer(this);
|
||||
connect(updateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(timeout()));
|
||||
updateTimer->start(50);//20hz刷新
|
||||
if(!updateTimer)
|
||||
{
|
||||
updateTimer = new QTimer(this);
|
||||
connect(updateTimer,SIGNAL(timeout()),
|
||||
this,SLOT(timeout()));
|
||||
updateTimer->start(50);//20hz刷新
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -79,9 +89,23 @@ void Chart::leaveEvent(QEvent *e)
|
||||
{
|
||||
isPress = false;
|
||||
setCursor(Qt::ArrowCursor);
|
||||
//QChartView::leaveEvent(e);
|
||||
QChartView::leaveEvent(e);
|
||||
}
|
||||
|
||||
void Chart::hideEvent(QHideEvent *e)
|
||||
{
|
||||
qDebug() << e;
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Chart::showEvent(QShowEvent *e)
|
||||
{
|
||||
qDebug() << e;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Chart::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
const QPoint curPos = e->pos();
|
||||
@@ -91,14 +115,14 @@ void Chart::mouseMoveEvent(QMouseEvent *e)
|
||||
lastPoint = curPos;
|
||||
chart()->scroll(-offset.x(), offset.y());
|
||||
}
|
||||
//QChartView::mouseMoveEvent(e);
|
||||
QChartView::mouseMoveEvent(e);
|
||||
}
|
||||
|
||||
void Chart::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
isPress = false;
|
||||
setCursor(Qt::ArrowCursor);
|
||||
//QChartView::mouseReleaseEvent(e);
|
||||
QChartView::mouseReleaseEvent(e);
|
||||
}
|
||||
|
||||
void Chart::mousePressEvent(QMouseEvent *e)
|
||||
@@ -109,13 +133,16 @@ void Chart::mousePressEvent(QMouseEvent *e)
|
||||
isPress = true;
|
||||
setCursor(Qt::ClosedHandCursor);
|
||||
}
|
||||
//QChartView::mousePressEvent(e);
|
||||
QChartView::mousePressEvent(e);
|
||||
}
|
||||
|
||||
void Chart::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "Chart double clicked" << e;
|
||||
//QChartView::mouseDoubleClickEvent(e);
|
||||
//双击生成一个标
|
||||
|
||||
|
||||
QChartView::mouseDoubleClickEvent(e);
|
||||
}
|
||||
|
||||
void Chart::wheelEvent(QWheelEvent *e)
|
||||
@@ -183,17 +210,19 @@ void Chart::wheelEvent(QWheelEvent *e)
|
||||
}
|
||||
}
|
||||
}
|
||||
//QChartView::wheelEvent(e);
|
||||
|
||||
QChartView::wheelEvent(e);
|
||||
}
|
||||
|
||||
void Chart::resizeEvent(QResizeEvent *e)
|
||||
{
|
||||
//qDebug() << e;
|
||||
//Q_UNUSED(e)
|
||||
chart()->setPos(0,0);
|
||||
chart()->setGeometry(this->geometry());
|
||||
//chart()->setPlotArea(this->geometry());
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Chart::timeout(void)//100Hz
|
||||
{
|
||||
timeseries += 0.01;
|
||||
@@ -207,16 +236,15 @@ void Chart::chartUpdate(void)
|
||||
{
|
||||
//读取新数据,如果没有,那就保持
|
||||
|
||||
//滚动显示器
|
||||
|
||||
//当到达最大时(0.95),开始滚动
|
||||
if(isScroll() == true)
|
||||
{
|
||||
QValueAxis *axis = dynamic_cast<QValueAxis*>(chart()->axisX());
|
||||
qreal dwidth = chart()->plotArea().width()/(axis->tickCount() - 1);
|
||||
if(timeseries > (axis->min() + (axis->max() - axis->min()) * 0.95))
|
||||
const double Min = axis->min();
|
||||
const double Max = axis->max();
|
||||
if(timeseries > (Min + (Max - Min) * 0.95))
|
||||
{
|
||||
chart()->scroll(dwidth * 0.01,0);//每次增加0.01
|
||||
chart()->axisX()->setRange(Min + 0.01,Max + 0.01);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -245,7 +273,7 @@ bool Chart::addSeries(QString name = tr("new"))
|
||||
QLineSeries *s = new QLineSeries();
|
||||
s->setColor(ColorMap::Color[ChannelIndex]);
|
||||
s->setName(name);
|
||||
s->append(timeseries,0);
|
||||
//s->append(timeseries,0);
|
||||
s->setUseOpenGL(isOpenGL);
|
||||
chart()->addSeries(s);
|
||||
chart()->setAxisX(chart()->axisX(),s);
|
||||
@@ -288,7 +316,7 @@ bool Chart::addSeries(QString name = tr("new"), int index = 0)
|
||||
QLineSeries *s = new QLineSeries();
|
||||
s->setColor(ColorMap::Color[ChannelIndex]);
|
||||
s->setName(name);
|
||||
s->append(timeseries,0);
|
||||
//s->append(timeseries,0);
|
||||
s->setUseOpenGL(isOpenGL);
|
||||
chart()->addSeries(s);
|
||||
chart()->setAxisX(chart()->axisX(),s);
|
||||
@@ -325,7 +353,7 @@ bool Chart::addSeries(QString name = tr("new"),QColor color = QColor("#FFFFFF"))
|
||||
QLineSeries *s = new QLineSeries();
|
||||
s->setColor(color);
|
||||
s->setName(name);
|
||||
s->append(timeseries,0);
|
||||
//s->append(timeseries,0);
|
||||
s->setUseOpenGL(isOpenGL);
|
||||
chart()->addSeries(s);
|
||||
chart()->setAxisX(chart()->axisX(),s);
|
||||
@@ -356,20 +384,19 @@ void Chart::setSerieData(QString name,QVariant data)
|
||||
{
|
||||
//设置最大值
|
||||
const double Min = axis->min();
|
||||
chart()->axisY()->setRange(Min, data.toDouble() * 1.1);
|
||||
double FreeArea = (data.toDouble() - Min) * 0.1;
|
||||
chart()->axisY()->setRange(Min, data.toDouble() + FreeArea);
|
||||
|
||||
}
|
||||
else if(data.toDouble() < axis->min())
|
||||
{
|
||||
//设置最小值
|
||||
const double Max = axis->max();
|
||||
chart()->axisY()->setRange(data.toDouble() * 1.1, Max);
|
||||
double FreeArea = (Max - data.toDouble()) * 0.1;
|
||||
chart()->axisY()->setRange(data.toDouble() - FreeArea, Max);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取当前的时间撮
|
||||
//series->append(timeseries,data.toFloat());
|
||||
//查找有没有这个名字的序列
|
||||
bool isContain = false;
|
||||
QList<QAbstractSeries *> slist = chart()->series();
|
||||
@@ -392,6 +419,16 @@ void Chart::setSerieData(QString name,QVariant data)
|
||||
{
|
||||
ChannelIndex = 0;
|
||||
}
|
||||
|
||||
QList<QAbstractSeries *> slist = chart()->series();
|
||||
for(QAbstractSeries *serie:slist)
|
||||
{
|
||||
QLineSeries *s = qobject_cast<QLineSeries *>(serie);
|
||||
if(s->name() == name)
|
||||
{
|
||||
s->append(timeseries,data.toDouble());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -410,7 +447,6 @@ void Chart::removeSerie(QString name)
|
||||
s->clear();
|
||||
s->deleteLater();
|
||||
delete s;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,6 +68,8 @@ public:
|
||||
|
||||
|
||||
protected:
|
||||
void hideEvent(QHideEvent *e);
|
||||
void showEvent(QShowEvent *e);
|
||||
void leaveEvent(QEvent *e);
|
||||
void mouseMoveEvent(QMouseEvent *e);
|
||||
void mouseReleaseEvent(QMouseEvent *e);
|
||||
|
||||
@@ -36,27 +36,27 @@ Scope::~Scope()
|
||||
|
||||
void Scope::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
//QWidget::mouseMoveEvent(e);
|
||||
QWidget::mouseMoveEvent(e);
|
||||
}
|
||||
|
||||
void Scope::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
//QWidget::mouseReleaseEvent(e);
|
||||
QWidget::mouseReleaseEvent(e);
|
||||
}
|
||||
|
||||
void Scope::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
//QWidget::mousePressEvent(e);
|
||||
QWidget::mousePressEvent(e);
|
||||
}
|
||||
|
||||
void Scope::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
{
|
||||
//QWidget::mouseDoubleClickEvent(e);
|
||||
QWidget::mouseDoubleClickEvent(e);
|
||||
}
|
||||
|
||||
void Scope::wheelEvent(QWheelEvent *e)
|
||||
{
|
||||
//QWidget::wheelEvent(e);
|
||||
QWidget::wheelEvent(e);
|
||||
}
|
||||
|
||||
void Scope::resizeEvent(QResizeEvent *e)
|
||||
@@ -65,7 +65,7 @@ void Scope::resizeEvent(QResizeEvent *e)
|
||||
{
|
||||
chartView->setGeometry(ui->frame->geometry());
|
||||
}
|
||||
//QWidget::resizeEvent(e);
|
||||
QWidget::resizeEvent(e);
|
||||
}
|
||||
|
||||
void Scope::on_pushButton_Pause_clicked()
|
||||
|
||||
+37
-8
@@ -16,6 +16,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
qmlDir->mkdir("./qml");//如果文件夹不存在就新建
|
||||
|
||||
|
||||
|
||||
setFocusPolicy(Qt::StrongFocus);
|
||||
setAttribute(Qt::WA_AcceptTouchEvents);
|
||||
|
||||
@@ -205,9 +206,17 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
connect(dlink->mavlinknode->Mission,SIGNAL(sendItemOK(uint16_t,bool)),
|
||||
map,SLOT(WPSendItemOK(uint16_t,bool)),Qt::DirectConnection);
|
||||
|
||||
//航点确认窗口
|
||||
connect(map,SIGNAL(setCurrent(int)),
|
||||
commandUI,SLOT(missionConfirm(int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
connect(commandUI,SIGNAL(SetCurrentPoint(int)),
|
||||
dlink->mavlinknode->Mission,SLOT(SetCurrentPoint(int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
|
||||
|
||||
connect(dlink->mavlinknode->Mission,SIGNAL(currentPoint(int)),
|
||||
map,SLOT(WPSetCurrent(int)),Qt::DirectConnection);
|
||||
|
||||
@@ -237,6 +246,11 @@ MainWindow::~MainWindow()
|
||||
delete map;
|
||||
}
|
||||
|
||||
if(dlink)
|
||||
{
|
||||
//dlink->stopPort();
|
||||
delete dlink;
|
||||
}
|
||||
|
||||
if(copk)
|
||||
{
|
||||
@@ -396,7 +410,7 @@ void MainWindow::keyPressEvent(QKeyEvent *event) //键盘按下事件
|
||||
{
|
||||
if(event->modifiers() == Qt::AltModifier)
|
||||
{
|
||||
|
||||
map->DeleteTrail();
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -544,8 +558,8 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
dlink->mavlinknode->vehicle.attitude.roll * 57.3,
|
||||
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
|
||||
|
||||
copk->setAltitude(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4 );
|
||||
copk->setAltitudeTarget(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4
|
||||
copk->setAltitude(dlink->mavlinknode->vehicle.global_position_int.relative_alt * 10e-4);
|
||||
copk->setAltitudeTarget(dlink->mavlinknode->vehicle.global_position_int.relative_alt * 10e-4
|
||||
+dlink->mavlinknode->vehicle.nav_controller_output.alt_error);
|
||||
|
||||
copk->setAirSpeed(dlink->mavlinknode->vehicle.vfr_hud.airspeed,2);
|
||||
@@ -565,6 +579,7 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
copk->setYawTarget(dlink->mavlinknode->vehicle.nav_controller_output.nav_bearing);
|
||||
|
||||
|
||||
|
||||
QString gps_str;
|
||||
gps_str.clear();
|
||||
|
||||
@@ -599,6 +614,12 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
if(state != state_old)
|
||||
{
|
||||
isStateChanged = true;
|
||||
|
||||
//解锁后清除航迹
|
||||
if(state == MAV_MODE_FLAG::MAV_MODE_FLAG_SAFETY_ARMED)
|
||||
{
|
||||
map->DeleteTrail();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -703,11 +724,19 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
|
||||
|
||||
|
||||
map->setUAVPos(dlink->mavlinknode->vehicle.sysid,
|
||||
dlink->mavlinknode->vehicle.compid,
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lat * 10e-8),
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lon * 10e-8),
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4));
|
||||
//经纬度大于正常值,将舍弃
|
||||
|
||||
double lat = (double)(dlink->mavlinknode->vehicle.gps_raw_int.lat * 10e-8);
|
||||
double lng = (double)(dlink->mavlinknode->vehicle.gps_raw_int.lon * 10e-8);
|
||||
|
||||
if(((lat > -90)&&(lat < 90))&&((lng > -180)&&(lng < 180)))
|
||||
{
|
||||
map->setUAVPos(dlink->mavlinknode->vehicle.sysid,
|
||||
dlink->mavlinknode->vehicle.compid,
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lat * 10e-8),
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lon * 10e-8),
|
||||
(double)(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4));
|
||||
}
|
||||
|
||||
map->setUAVHeading(dlink->mavlinknode->vehicle.sysid,
|
||||
dlink->mavlinknode->vehicle.compid,
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ VS_VERSION_INFO VERSIONINFO
|
||||
VALUE "FileDescription", "UAV Ground Control System\0"
|
||||
VALUE "FileVersion", "1.0.0.0\0"
|
||||
VALUE "ProductVersion", "0.0.0.1\0"
|
||||
VALUE "LegalCopyright", "Sunny\0"
|
||||
VALUE "LegalCopyright", "Copyright © 2020 by HM - All Rights Reserved\0"
|
||||
VALUE "LegalTrademarks", "xxx\0"
|
||||
VALUE "OriginalFilename", "gcs_nf.exe\0"
|
||||
VALUE "ProductName", "GCS\0"
|
||||
|
||||
+204
-93
@@ -9,6 +9,9 @@
|
||||
|
||||
Cockpit::Cockpit(QWidget *parent): QWidget(parent)
|
||||
{
|
||||
//载入配置参数
|
||||
|
||||
|
||||
//颜色初始化
|
||||
m_Color.NormalColor = QColor("#00FF00");
|
||||
m_Color.NoticeColor = QColor("#FF8C00");
|
||||
@@ -96,16 +99,42 @@ void Cockpit::UpdateTimeout(void)
|
||||
|
||||
}
|
||||
|
||||
void Cockpit::mouseMoveEvent(QMouseEvent *e)
|
||||
{
|
||||
const QPoint curPos = e->pos();
|
||||
if (isPress)
|
||||
{
|
||||
QPoint offset = curPos - lastPoint;
|
||||
lastPoint = curPos;
|
||||
|
||||
V_pos += 100.0 * offset.y()/height();
|
||||
H_pos += 100.0 * offset.x()/width();
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void Cockpit::mouseReleaseEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "cockpit release" << e;
|
||||
isPress = false;
|
||||
setCursor(Qt::ArrowCursor);
|
||||
}
|
||||
|
||||
void Cockpit::mousePressEvent(QMouseEvent *e)
|
||||
{
|
||||
qDebug() << "cockpit press" << e;
|
||||
if (e->button() == Qt::RightButton)
|
||||
{
|
||||
lastPoint = e->pos();
|
||||
isPress = true;
|
||||
setCursor(Qt::ClosedHandCursor);
|
||||
}
|
||||
else if(e->buttons() == Qt::MiddleButton)
|
||||
{
|
||||
Scale = 2100;//默认很大
|
||||
H_pos = 44.7059;
|
||||
V_pos = 43.8235;
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
void Cockpit::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
@@ -115,20 +144,81 @@ void Cockpit::mouseDoubleClickEvent(QMouseEvent *e)
|
||||
|
||||
void Cockpit::wheelEvent(QWheelEvent *e)
|
||||
{
|
||||
Q_UNUSED(e);
|
||||
//update();
|
||||
}
|
||||
/*
|
||||
void Cockpit::setUseOpenGL(const bool &value)
|
||||
{
|
||||
if (value) {
|
||||
//setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
||||
} else {
|
||||
//setupViewport(new QWidget());
|
||||
switch(e->modifiers())
|
||||
{
|
||||
case Qt::ControlModifier://垂直移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
V_pos -= 1;
|
||||
if(V_pos < 1)
|
||||
{
|
||||
V_pos = 1;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
V_pos += 1;
|
||||
if(V_pos > 100)
|
||||
{
|
||||
V_pos = 100;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case Qt::ShiftModifier://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
H_pos -= 1;
|
||||
if(H_pos < 1)
|
||||
{
|
||||
H_pos = 1;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
H_pos += 1;
|
||||
if(H_pos > 100)
|
||||
{
|
||||
H_pos = 100;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
case Qt::AltModifier://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
m_State.altitude -= 0.1;
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
m_State.altitude += 0.1;
|
||||
}
|
||||
}break;
|
||||
default://水平移动
|
||||
{
|
||||
if(e->delta() > 0)
|
||||
{
|
||||
Scale -= 50;
|
||||
if(Scale < 50)
|
||||
{
|
||||
Scale = 50;
|
||||
}
|
||||
}
|
||||
else if(e->delta() < 0)
|
||||
{
|
||||
Scale += 50;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//保存配置参数
|
||||
|
||||
update();
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
void Cockpit::setPitch(double Pitch)
|
||||
{
|
||||
@@ -431,16 +521,14 @@ void Cockpit::setLed(QColor LED)
|
||||
|
||||
void Cockpit::paintEvent(QPaintEvent *)
|
||||
{
|
||||
qreal scale = 2500.0;
|
||||
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing); /* 使用反锯齿(如果可用) */
|
||||
painter.setRenderHint(QPainter::TextAntialiasing);
|
||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||
|
||||
painter.translate(width() / 2, 4* height() / 10); /* 坐标变换为窗体中心 */
|
||||
painter.translate(width() * H_pos / 100,height() * V_pos / 100); /* 坐标变换为窗体中心 */
|
||||
int side = qMin(width(), height()); /* 这一句决定了这个模块只能是方形 */
|
||||
painter.scale(side / scale, side / scale); /* 比例缩放 */
|
||||
painter.scale(side / Scale, side / Scale); /* 比例缩放 */
|
||||
painter.setPen(Qt::NoPen);
|
||||
|
||||
//全局设置字体
|
||||
@@ -588,19 +676,19 @@ void Cockpit::drawPitch(QPainter *painter)
|
||||
painter->save();
|
||||
QPainterPath path;
|
||||
//画外面边框
|
||||
path.moveTo(-4000,-4000);
|
||||
path.lineTo( 4000,-4000);
|
||||
path.lineTo( 4000, 4000);
|
||||
path.lineTo(-4000, 4000);
|
||||
path.moveTo(-4100,-4100);
|
||||
path.lineTo( 4100,-4100);
|
||||
path.lineTo( 4100, 4100);
|
||||
path.lineTo(-4100, 4100);
|
||||
//画里面边框
|
||||
path.addRoundRect(-500,-500,1000,1000,20,20);
|
||||
//按照规则填充两个边框之间的部分
|
||||
path.setFillRule(Qt::OddEvenFill);
|
||||
|
||||
pen.setColor(Qt::black);
|
||||
painter->setPen(pen);
|
||||
painter->fillPath(path,Qt::black);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
}
|
||||
|
||||
//画姿态roll
|
||||
@@ -745,8 +833,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
QFont font;
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(8);
|
||||
font.setPointSize(60);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPointSize(70);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -835,17 +923,30 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(15);
|
||||
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
QString DacadeText = QString::number(qAbs(int(m_State.airspeed/10))); //设置十位以上
|
||||
QString UnitText = QString::number(qAbs(int(m_State.airspeed)%10)); //设置个位
|
||||
|
||||
|
||||
qreal Unit = m_State.airspeed - int(m_State.airspeed)/10 * 10;
|
||||
qreal Decimal = m_State.airspeed - int(m_State.airspeed);
|
||||
|
||||
|
||||
QString DacadeText; //设置十位以上
|
||||
|
||||
if(Unit > 9.5)
|
||||
{
|
||||
DacadeText = QString::number(qAbs(int((m_State.airspeed + 1)/10)));
|
||||
}
|
||||
else
|
||||
{
|
||||
DacadeText = QString::number(qAbs(int(m_State.airspeed/10)));
|
||||
}
|
||||
|
||||
//显示10位
|
||||
if((m_State.airspeed < 0)&&(m_State.airspeed > -10))
|
||||
{
|
||||
@@ -857,12 +958,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
//qDebug() << DacadeText;
|
||||
}
|
||||
|
||||
|
||||
qreal Unit = m_State.airspeed - int(m_State.airspeed)/10 * 10;
|
||||
qreal Decimal = m_State.airspeed - int(m_State.airspeed);
|
||||
|
||||
//qDebug() << Unit << Decimal;
|
||||
|
||||
//显示个位
|
||||
int count = 1;
|
||||
for(int i = -1.5 - Unit;i<(1.5 - Unit);i+=1)
|
||||
{
|
||||
@@ -877,7 +974,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(90);
|
||||
font.setPixelSize(120);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -888,7 +985,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
else
|
||||
painter->translate(150,(i + Unit) * 120 + 60);
|
||||
|
||||
//qDebug() << "Unit" << Unit;
|
||||
|
||||
//此段程序在未理解之前,请不要随意修改(负数未解决)
|
||||
switch (count) {
|
||||
@@ -941,10 +1037,6 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
}
|
||||
|
||||
count++;
|
||||
|
||||
|
||||
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
@@ -993,12 +1085,13 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
ePen.setColor(QColor("#FFFFFF"));
|
||||
ePen.setWidth(8);
|
||||
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,300,100);
|
||||
painter->drawRect(0,600,300,150);
|
||||
|
||||
|
||||
QString AS_flag = "I";
|
||||
@@ -1006,17 +1099,17 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
switch (m_State.AirspeedFlag) {
|
||||
default:
|
||||
case 0:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"IAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "I";
|
||||
ePen.setColor(m_Color.NoticeColor);
|
||||
break;
|
||||
case 1:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"CAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "C";
|
||||
ePen.setColor(m_Color.NoticeColor);
|
||||
break;
|
||||
case 2:
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"TAS " + QString::number(m_State.airspeed,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.airspeed,'f',0));
|
||||
AS_flag = "T";
|
||||
ePen.setColor(m_Color.NormalColor);
|
||||
break;
|
||||
@@ -1024,7 +1117,7 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(100);
|
||||
font.setBold(true);//加粗
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -1038,8 +1131,10 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
ePen.setWidth(15);
|
||||
font.setPixelSize(100);
|
||||
font.setPixelSize(120);
|
||||
font.setFamily("Arial");//非衬线
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -1060,8 +1155,8 @@ void Cockpit::drawLeftScale(QPainter *painter)
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-820,300,120),Qt::AlignLeft|Qt::AlignVCenter,"OL " +QString::number(m_Target.airspeed,'f',0));
|
||||
painter->drawText(QRect(0,-920,300,120),Qt::AlignLeft|Qt::AlignVCenter,"AOA " +QString::number(m_Target.airspeed,'f',0));
|
||||
painter->drawText(QRect(0,-820,300,120),Qt::AlignLeft|Qt::AlignVCenter,"OL " +QString::number(m_State.OL,'f',0));
|
||||
painter->drawText(QRect(0,-920,300,120),Qt::AlignLeft|Qt::AlignVCenter,"AOA " +QString::number(m_State.AOA,'f',0));
|
||||
|
||||
painter->restore();//画顶部过载值和迎角结束
|
||||
|
||||
@@ -1105,9 +1200,9 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
QFont font;
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(90);
|
||||
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -1115,10 +1210,8 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
if((i%100) == 0)
|
||||
{
|
||||
|
||||
painter->drawLine(0,i * h,40,i * h);
|
||||
painter->drawText(QRect(50,i * h - 30,240,80),Qt::AlignVCenter|Qt::AlignRight, strText);
|
||||
|
||||
painter->drawText(QRect(50,i * h - 75,240,150),Qt::AlignVCenter|Qt::AlignRight, strText);
|
||||
}
|
||||
else if((i%50) == 0)
|
||||
{
|
||||
@@ -1172,14 +1265,14 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
ePen.setWidth(15);
|
||||
|
||||
font.setPixelSize(100);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(0,-720,310,100),Qt::AlignRight|Qt::AlignVCenter,QString::number(m_Target.altitude,'f',0));
|
||||
painter->drawText(QRect(0,-720,300,120),Qt::AlignRight|Qt::AlignVCenter,QString::number(m_Target.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -1190,17 +1283,17 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
ePen.setWidth(8);
|
||||
|
||||
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(120);
|
||||
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->setBrush(QColor("#000000"));
|
||||
painter->drawRect(0,600,300,100);
|
||||
painter->drawRect(0,600,300,150);
|
||||
|
||||
painter->drawText(QRect(20,600,280,100),Qt::AlignLeft|Qt::AlignVCenter,"Hei " + QString::number(m_State.altitude,'f',0));
|
||||
painter->drawText(QRect(20,600,280,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.altitude,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -1230,17 +1323,34 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPixelSize(90);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
qreal Unit = m_State.altitude - int(m_State.altitude)/100 * 100;
|
||||
//qreal Dacade = qreal(int(m_State.altitude)%100)/10.0;
|
||||
//qreal Decimal = m_State.altitude - int(m_State.altitude);
|
||||
|
||||
QString thousandText = QString::number(qAbs(int(m_State.altitude/1000)));//设置千位以上
|
||||
QString HundredText = QString::number(qAbs(int(m_State.altitude/100)%10));//设置百位
|
||||
QString DacadeText = QString::number(int(m_State.altitude/10)); //设置十位
|
||||
QString UnitText = QString::number(qAbs(int(m_State.altitude)%10)); //设置个位
|
||||
QString HundredText;//设置百位
|
||||
//QString DacadeText = QString::number(int(m_State.altitude/10)); //设置十位
|
||||
//QString UnitText = QString::number(qAbs(int(m_State.altitude)%10)); //设置个位
|
||||
|
||||
if(Unit > 99.5)
|
||||
{
|
||||
HundredText = QString::number(qAbs(int(m_State.altitude/100)%10) + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
HundredText = QString::number(qAbs(int(m_State.altitude/100)%10));
|
||||
}
|
||||
|
||||
//qDebug() << thousandText << HundredText << Unit;
|
||||
|
||||
//写千位
|
||||
if(m_State.altitude >= 0)
|
||||
@@ -1264,7 +1374,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPixelSize(90);
|
||||
font.setPixelSize(120);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(160,-50,90,100),Qt::AlignVCenter|Qt::AlignRight, thousandText);
|
||||
@@ -1280,10 +1390,13 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPixelSize(70);
|
||||
font.setPixelSize(120);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
//写百位
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
|
||||
/*
|
||||
if(int(qAbs(m_State.altitude/100)) > 0)//说明有数
|
||||
{
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, HundredText);
|
||||
@@ -1292,13 +1405,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
{
|
||||
painter->drawText(QRect(0,-50,300,100),Qt::AlignVCenter|Qt::AlignRight, "0");
|
||||
}
|
||||
|
||||
|
||||
qreal Unit = m_State.altitude - int(m_State.altitude)/100 * 100;
|
||||
qreal Dacade = qreal(int(m_State.altitude)%100)/10.0;
|
||||
|
||||
qreal Decimal = m_State.altitude - int(m_State.altitude);
|
||||
//float m_Unit =qAbs(Dacade - int(Dacade));
|
||||
*/
|
||||
|
||||
|
||||
//写十个位
|
||||
@@ -1336,7 +1443,7 @@ void Cockpit::drawRightScale(QPainter *painter)
|
||||
|
||||
ePen.setColor(m_Color.CentreLineColor);
|
||||
ePen.setWidth(10);
|
||||
font.setPixelSize(70);
|
||||
font.setPixelSize(100);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
@@ -1426,8 +1533,8 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(Qt::white);
|
||||
font.setPixelSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(80);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -1518,14 +1625,14 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_Color.TargetColor);
|
||||
font.setPixelSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-80,-550,120,60),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_Target.verticalspeed,'f',(qAbs(m_Target.verticalspeed) < 10.0)?(1):(0)));
|
||||
painter->drawText(QRect(-80,-600,120,150),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_Target.verticalspeed,'f',(qAbs(m_Target.verticalspeed) < 10.0)?(1):(0)));
|
||||
|
||||
painter->restore();//画目标值结束
|
||||
|
||||
@@ -1537,14 +1644,14 @@ void Cockpit::drawVRate(QPainter *painter)
|
||||
|
||||
ePen.setWidth(8);
|
||||
ePen.setColor(m_Color.CurrentColor);
|
||||
font.setPixelSize(50);
|
||||
font.setWeight(QFont::ExtraLight);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
//在下方显示当前值
|
||||
painter->drawText(QRect(-80,500,120,60),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_State.verticalspeed,'f',(qAbs(m_State.verticalspeed) < 10.0)?(1):(0)));
|
||||
painter->drawText(QRect(-80,500,120,150),Qt::AlignHCenter|Qt::AlignLeft,QString::number(m_State.verticalspeed,'f',(qAbs(m_State.verticalspeed) < 10.0)?(1):(0)));
|
||||
|
||||
painter->restore();//画当前值结束
|
||||
|
||||
@@ -1743,10 +1850,10 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->save();
|
||||
|
||||
static const QPointF Rectpoints[4] = {
|
||||
QPointF(-90,-620),
|
||||
QPointF( 90,-620),
|
||||
QPointF( 90, -540),
|
||||
QPointF(-90, -540),
|
||||
QPointF(-120,-650),
|
||||
QPointF( 120,-650),
|
||||
QPointF( 120, -540),
|
||||
QPointF(-120, -540),
|
||||
};
|
||||
|
||||
ePen.setWidth(1);
|
||||
@@ -1756,10 +1863,11 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->drawPolygon(Rectpoints,4);
|
||||
|
||||
ePen.setColor(m_Color.CurrentColor);
|
||||
font.setPixelSize(60);
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
painter->drawText(QRect(-90,-625,180,80),Qt::AlignCenter,QString::number(m_State.yaw,'f',0));
|
||||
painter->drawText(QRect(-90,-670,180,150),Qt::AlignCenter,QString::number(m_State.yaw,'f',0));
|
||||
|
||||
painter->restore();
|
||||
|
||||
@@ -1767,6 +1875,7 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
ePen.setWidth(10);
|
||||
|
||||
font.setPixelSize(60);
|
||||
|
||||
painter->setPen(ePen);
|
||||
painter->setFont(font);
|
||||
|
||||
@@ -1815,9 +1924,12 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
break;
|
||||
}
|
||||
|
||||
font.setPixelSize(120);
|
||||
font.setWeight(QFont::Bold);
|
||||
|
||||
painter->setFont(font);
|
||||
|
||||
painter->drawText(QRect(-40,-450,80,80),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
|
||||
painter->drawText(QRect(-75,-470,150,150),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
|
||||
painter->restore();
|
||||
}
|
||||
else
|
||||
@@ -1871,6 +1983,7 @@ void Cockpit::drawTopStatuts(QPainter *painter)
|
||||
ePen.setColor(m_Color.StatusColor);
|
||||
ePen.setWidth(12);
|
||||
font.setPixelSize(90);
|
||||
font.setWeight(QFont::Bold);
|
||||
font.setFamily("Arial");//非衬线
|
||||
|
||||
painter->setPen(ePen);
|
||||
@@ -1878,8 +1991,6 @@ void Cockpit::drawTopStatuts(QPainter *painter)
|
||||
|
||||
painter->drawText(QRect(-550,0,365,150),Qt::AlignCenter,m_State.GPS);
|
||||
painter->drawText(QRect(-185,0,365,150),Qt::AlignCenter,m_State. MODE);
|
||||
|
||||
|
||||
painter->drawText(QRect( 185,0,365,150),Qt::AlignCenter,m_State.STATE);
|
||||
|
||||
painter->restore();//画状态结束
|
||||
|
||||
+8
-3
@@ -76,7 +76,7 @@ typedef struct {
|
||||
qreal horizontalspeed = 0;
|
||||
|
||||
qreal AOA = 0;
|
||||
|
||||
qreal OL = 0;
|
||||
|
||||
|
||||
qreal wp_dist = 0;
|
||||
@@ -177,7 +177,7 @@ public Q_SLOTS:
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
void mouseMoveEvent(QMouseEvent *e);
|
||||
void mouseReleaseEvent(QMouseEvent *e);
|
||||
void mousePressEvent(QMouseEvent *e);
|
||||
void mouseDoubleClickEvent(QMouseEvent *e);
|
||||
@@ -211,7 +211,12 @@ private:
|
||||
|
||||
QTimer *UpdateTimer = nullptr;
|
||||
|
||||
QPoint m_c;
|
||||
qreal Scale = 2100;//默认很大
|
||||
qreal H_pos = 44.7059;
|
||||
qreal V_pos = 43.8235;
|
||||
|
||||
QPoint lastPoint;
|
||||
bool isPress = false;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -80,8 +80,7 @@ void commandprocess::process()//线程函数
|
||||
|
||||
void commandprocess::setID(int m_sysid,int m_compid)
|
||||
{
|
||||
//qDebug() << "command set id";
|
||||
sysid = (uint8_t)m_sysid;
|
||||
sysid = (uint8_t)m_sysid;
|
||||
compid = (uint8_t)m_compid;
|
||||
}
|
||||
|
||||
@@ -146,10 +145,6 @@ void commandprocess::WriteCmd_long(float param1, float param2, float param3, fl
|
||||
start();//开启线程
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//这个函数类似中断,专门处理接收到的状态
|
||||
void commandprocess::Parse(mavlink_message_t msg)
|
||||
{
|
||||
@@ -177,11 +172,13 @@ void commandprocess::Parse(mavlink_message_t msg)
|
||||
|
||||
if(command_ack.result == MAV_RESULT_ACCEPTED)
|
||||
{
|
||||
if(cmd_long.command != command_ack.command)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
status.transmit.isWaitingforACK = false;
|
||||
|
||||
emit commandAccepted(true,command_ack.command,command_ack.result);//广播指令反馈
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -191,6 +191,7 @@ void MavLinkNode::process()//线程函数
|
||||
}
|
||||
//退出线程
|
||||
Nodethread->quit();
|
||||
Nodethread->wait();
|
||||
}
|
||||
|
||||
void MavLinkNode::initbuff(void)
|
||||
@@ -208,7 +209,6 @@ void MavLinkNode::initbuff(void)
|
||||
|
||||
void MavLinkNode::setbuff(quint32 src,QByteArray data)
|
||||
{
|
||||
//qDebug() << "apend data" << src;
|
||||
switch (src) {
|
||||
default:
|
||||
case SourceType::c_sock:
|
||||
@@ -296,19 +296,7 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
||||
{
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
|
||||
{
|
||||
//qDebug() << "fifo parse:" << count << msg.msgid;
|
||||
|
||||
count++;
|
||||
|
||||
/*
|
||||
if(msg.compid == Current_CompID) //过滤地面站发过来的数据
|
||||
{
|
||||
//不能使用这种方法过滤,不正确
|
||||
qDebug() << msg.msgid << "msg come from groundstation";
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
if(msg.sysid < 250) //过滤地面站发过来的数据
|
||||
{
|
||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
MissionProcess::MissionProcess(QObject *parent) : QObject(parent)
|
||||
{
|
||||
setRunFrq(50);//默认200Hz频率运行
|
||||
setRunFrq(20);//默认50Hz频率运行
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,6 @@ void MissionProcess::process()//线程函数
|
||||
|
||||
void MissionProcess::setID(int m_sysid,int m_compid)
|
||||
{
|
||||
//qDebug() << "Mission set id";
|
||||
sysid = (uint8_t)m_sysid;
|
||||
compid = (uint8_t)m_compid;
|
||||
}
|
||||
@@ -100,13 +99,14 @@ void MissionProcess::SendMessage(mavlink_message_t msg)
|
||||
uint8_t buff[256+20];
|
||||
uint16_t len = mavlink_msg_to_send_buffer(buff, &msg);
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
num.append(QString::number(buff[i],16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
|
||||
*/
|
||||
|
||||
emit SendMessageTo(0,buff, len);//使用信号和槽
|
||||
}
|
||||
@@ -135,7 +135,7 @@ void MissionProcess::SetCurrentPoint(int seq)
|
||||
{
|
||||
mission_status.transmit.type = 1;
|
||||
mission_status.m_Mode = TransmitMode;//发送模式
|
||||
mission_status.transmit.seq = seq;
|
||||
mission_status.transmit.seq = seq - 1;
|
||||
//start();//开启线程
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ void MissionProcess::transmitPoint(float param1,float param2,float param3,float
|
||||
item.x = x;
|
||||
item.y = y;
|
||||
item.z = z;
|
||||
item.seq = seq;
|
||||
item.seq = seq-1;
|
||||
item.group = group;
|
||||
item.command = command;
|
||||
item.target_system = target_system;
|
||||
@@ -194,10 +194,8 @@ void MissionProcess::transmitPoint(float param1,float param2,float param3,float
|
||||
<< item.current
|
||||
<< item.autocontinue
|
||||
<< item.mission_type;
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
@@ -233,7 +231,7 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
|
||||
qDebug() << "recieve mission_request_int ";
|
||||
emit sendItemOK(mission_item_int.seq,true);
|
||||
mission_item_int.seq++;
|
||||
mission_item_int.seq ++;
|
||||
mission_status.transmit.isWaiteforRequest = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST: {
|
||||
@@ -247,7 +245,7 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
|
||||
qDebug() << "recieve mission_request ";
|
||||
emit sendItemOK(mission_item_int.seq,true);
|
||||
mission_item_int.seq++;
|
||||
mission_item_int.seq ++;
|
||||
mission_status.transmit.isWaiteforRequest = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
|
||||
@@ -299,9 +297,7 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_CURRENT: {
|
||||
mavlink_msg_mission_current_decode(&msg,&mission_current);
|
||||
|
||||
emit currentPoint(mission_current.seq);
|
||||
|
||||
emit currentPoint(mission_current.seq + 1);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_SET_CURRENT: {
|
||||
mavlink_msg_mission_set_current_decode(&msg,&mission_set_current);
|
||||
@@ -328,7 +324,7 @@ void MissionProcess::ReadStateMachine(void)
|
||||
{
|
||||
static uint8_t step = 0;
|
||||
static uint8_t timeout_count = 0;
|
||||
static uint32_t time = 0;
|
||||
static int time = 0;
|
||||
|
||||
if(step == 0)
|
||||
{
|
||||
@@ -461,7 +457,7 @@ void MissionProcess::WriteStateMachine(void)
|
||||
if(step == 0)
|
||||
{
|
||||
//向其他线程或者自己读取航点的数量
|
||||
qDebug() << "start send count";
|
||||
qDebug() << "start send count" << mission_status.transmit.count;
|
||||
count(mission_status.transmit.count);//发送count
|
||||
mission_status.transmit.isWaiteforRequest = true;
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
@@ -514,6 +510,8 @@ void MissionProcess::WriteStateMachine(void)
|
||||
|
||||
qDebug() << "send item time out,abort transmit";
|
||||
}
|
||||
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
//如果超时了,重新发一次当前航点
|
||||
qDebug() << "send item time out" << timeout_count;
|
||||
mission_status.transmit.isWaiteforRequest = false;
|
||||
@@ -532,11 +530,23 @@ void MissionProcess::WriteStateMachine(void)
|
||||
|
||||
i = *items.find(mission_item_int.seq);
|
||||
|
||||
|
||||
item_int(i.param1,i.param2,i.param3,i.param4,
|
||||
i.x*10,i.y*10,i.z,
|
||||
i.seq,i.command,i.frame,
|
||||
i.current,i.autocontinue,i.mission_type);//发送航点
|
||||
|
||||
qDebug() << i.param1
|
||||
<< i.param2
|
||||
<< i.param3
|
||||
<< i.param4
|
||||
<< i.x*10
|
||||
<< i.y*10
|
||||
<< i.z
|
||||
<< i.seq;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
item(i.param1,i.param2,i.param3,i.param4,
|
||||
i.x * 10e-7,i.y * 10e-7,i.z * 10e-4,
|
||||
@@ -544,7 +554,8 @@ void MissionProcess::WriteStateMachine(void)
|
||||
i.current,i.autocontinue,i.mission_type);//发送航点
|
||||
*/
|
||||
|
||||
if(mission_item_int.seq < (mission_status.transmit.count - 1))
|
||||
|
||||
if(mission_item_int.seq < mission_status.transmit.count)
|
||||
{
|
||||
mission_status.transmit.isWaiteforRequest = true;
|
||||
}
|
||||
|
||||
@@ -214,13 +214,10 @@ void ParameterProcess::ReadStateMachine(void)//一整列
|
||||
qDebug() << "parameter item time out ";
|
||||
timeout_count = 0;
|
||||
|
||||
|
||||
if(status.recieve.type == _readtype::All)//如果是ALL的情况下,那么再用单独一个一个去请求一次
|
||||
{
|
||||
qDebug() << "try One mode";
|
||||
|
||||
status.recieve.type =_readtype::One;
|
||||
|
||||
status.recieve.isWaitingforValue = true;
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
request_read("xxx",0);//读取0
|
||||
@@ -237,9 +234,7 @@ void ParameterProcess::ReadStateMachine(void)//一整列
|
||||
{
|
||||
//qDebug() << "parameter item reccieved";
|
||||
timeout_count = 0;
|
||||
|
||||
time = QTime::currentTime().msecsSinceStartOfDay();
|
||||
|
||||
//如果参数count 大于当前index,那么继续等待
|
||||
if((param_value.param_index+1) < param_value.param_count)
|
||||
{
|
||||
@@ -257,7 +252,6 @@ void ParameterProcess::ReadStateMachine(void)//一整列
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(step == 2)//传输结束
|
||||
{
|
||||
|
||||
+107
-108
@@ -8,29 +8,53 @@ DLink::DLink(QObject *parent) : QObject(parent)
|
||||
{
|
||||
qDebug() << "Dlink " << QThread::currentThreadId();
|
||||
|
||||
QDir *temp = new QDir;
|
||||
if(!temp->exists("./Tlog"))
|
||||
{
|
||||
qDebug() << "make dir tlog";
|
||||
temp->mkdir("./Tlog");//如果文件夹不存在就新建
|
||||
}
|
||||
|
||||
|
||||
connect(this,SIGNAL(recieveMessage(quint32,QByteArray)),
|
||||
this,SLOT(record(quint32,QByteArray)));
|
||||
|
||||
|
||||
|
||||
//采用插件导入的方式(plugin)
|
||||
|
||||
//mavlink协议节点
|
||||
mavlinknode = new MavLinkNode();//不允许带参数,因为这是单独的线程
|
||||
connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);//采用直连的方式,因为是多线程
|
||||
|
||||
//在当前线程运行
|
||||
connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::BlockingQueuedConnection);//采用直连的方式,因为是多线程
|
||||
|
||||
//在当前线程运行
|
||||
connect(mavlinknode,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
//在当前线程运行
|
||||
connect(this,SIGNAL(recieveMessage(quint32,QByteArray)),
|
||||
mavlinknode,SLOT(setbuff(quint32,QByteArray)),Qt::DirectConnection);
|
||||
|
||||
mavlinknode->start();
|
||||
|
||||
|
||||
|
||||
connect(this,&DLink::REVMessageTo1,
|
||||
this,&DLink::SendMessageTo1);
|
||||
|
||||
//其他协议节点。。。
|
||||
|
||||
}
|
||||
DLink::~DLink()
|
||||
{
|
||||
stopPort();
|
||||
|
||||
|
||||
//查询所有的接口,然后删除
|
||||
if (mavLogFile)
|
||||
{
|
||||
mavLogFile->close();
|
||||
delete mavLogFile;
|
||||
mavLogFile = NULL;
|
||||
}
|
||||
|
||||
mavlinknode->stop();
|
||||
delete mavlinknode;
|
||||
}
|
||||
@@ -39,7 +63,12 @@ DLink::~DLink()
|
||||
int DLink::SendMessageTo(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
//让这个函数在其他线程运行
|
||||
|
||||
QString num;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
num.append(QString::number(msg[i],16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
//Q_UNUSED(ch);
|
||||
|
||||
//更加ch选择
|
||||
@@ -47,24 +76,14 @@ int DLink::SendMessageTo(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
foreach(Node node,clientSockets)
|
||||
{
|
||||
DLink::Clientsock->writeDatagram((const char *)msg, len,
|
||||
node.addr, node.port);
|
||||
qDebug() << "Client Send Msg";
|
||||
qint64 flag = DLink::Clientsock->writeDatagram((const char *)msg,len,node.addr, node.port);
|
||||
if(flag != -1)
|
||||
{
|
||||
qDebug() << "Client Send Msg";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (DLink::serialPort)
|
||||
{
|
||||
emit REVMessageTo1(ch,msg,len);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
|
||||
if (DLink::serialPort)
|
||||
{
|
||||
qint64 flag = DLink::serialPort->write((const char *)msg,len);
|
||||
@@ -77,12 +96,11 @@ int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//这个函数就在本线程内运行
|
||||
bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity parity)
|
||||
{
|
||||
|
||||
qDebug() << port
|
||||
qWarning() << port
|
||||
<< baudrate
|
||||
<< parity;
|
||||
|
||||
@@ -106,23 +124,29 @@ bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
||||
|
||||
DLink::serialPort->write("serial connet ok",16);
|
||||
|
||||
qDebug() << QThread::currentThread();
|
||||
|
||||
//mavlinknode->start();//启动之后串口就找不到了
|
||||
|
||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
|
||||
|
||||
|
||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));//本线程内调用
|
||||
isSuccess = true;
|
||||
|
||||
|
||||
if (mavLogFile)
|
||||
{
|
||||
mavLogFile->close();
|
||||
delete mavLogFile;
|
||||
}
|
||||
|
||||
QDateTime current = QDateTime::currentDateTime();
|
||||
mavLogFile = new QFile(QString("./Tlog/%1.tlog").arg(current.toString("yyyyMMddHHmmss")));
|
||||
mavLogFile->open(QIODevice::WriteOnly);
|
||||
|
||||
|
||||
emit showMessage(tr("Serial Port Open Success"));
|
||||
qDebug() << "Serial Port Open Success";
|
||||
qWarning() << "Serial Port Open Success";
|
||||
}
|
||||
else
|
||||
{
|
||||
isSuccess = false;
|
||||
emit showMessage(tr("Serial Port Open Fail"));
|
||||
qDebug() << "Serial Port Open Fail";
|
||||
qWarning() << "Serial Port Open Fail";
|
||||
delete serialPort;
|
||||
serialPort = nullptr;
|
||||
}
|
||||
@@ -132,15 +156,24 @@ bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
||||
|
||||
bool DLink::statesPort()
|
||||
{
|
||||
return (serialPort != nullptr)?(true):(false);
|
||||
if(serialPort)
|
||||
{
|
||||
return (serialPort != nullptr)?(true):(false);
|
||||
}
|
||||
}
|
||||
|
||||
void DLink::stopPort()
|
||||
{
|
||||
emit showMessage(tr("Serial Port close"));
|
||||
serialPort->close();
|
||||
delete serialPort;
|
||||
serialPort = nullptr;
|
||||
if(serialPort)
|
||||
{
|
||||
emit showMessage(tr("Serial Port close"));
|
||||
if(serialPort->isOpen())
|
||||
{
|
||||
serialPort->close();
|
||||
}
|
||||
delete serialPort;
|
||||
serialPort = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void DLink::connectSignal(QVariant m_state,
|
||||
@@ -170,7 +203,7 @@ void DLink::connectSignal(QVariant m_state,
|
||||
}
|
||||
|
||||
|
||||
qDebug() << m_Type << m_Param1 << m_Param2.toString().toInt() << parity;
|
||||
qWarning() << m_Type << m_Param1 << m_Param2.toString().toInt() << parity;
|
||||
|
||||
if(setupPort(m_Param1.toString(),m_Param2.toString().toInt(),parity))
|
||||
{
|
||||
@@ -196,7 +229,7 @@ void DLink::connectSignal(QVariant m_state,
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "disconnect";
|
||||
qWarning() << "disconnect";
|
||||
if(m_Type.toString() == "SerialPort")
|
||||
{
|
||||
stopPort();
|
||||
@@ -231,8 +264,6 @@ bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHos
|
||||
if(Clientsock->open(QIODevice::ReadWrite))
|
||||
//if(Clientsock->joinMulticastGroup(remote_addr))
|
||||
{
|
||||
|
||||
|
||||
connect(Clientsock, SIGNAL(readyRead()),
|
||||
this, SLOT(readPendingDatagramsClient()));
|
||||
|
||||
@@ -242,18 +273,29 @@ bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHos
|
||||
node.port = remote_port;
|
||||
|
||||
clientSockets.append(node);
|
||||
qDebug() << "UdpSocket open:"
|
||||
qWarning() << "UdpSocket open:"
|
||||
<< remote_addr
|
||||
<< local_port
|
||||
<< remote_port;
|
||||
|
||||
if (mavLogFile)
|
||||
{
|
||||
mavLogFile->close();
|
||||
delete mavLogFile;
|
||||
}
|
||||
|
||||
QDateTime current = QDateTime::currentDateTime();
|
||||
mavLogFile = new QFile(QString("./Tlog/%1.tlog").arg(current.toString("yyyyMMddHHmmss")));
|
||||
mavLogFile->open(QIODevice::WriteOnly);
|
||||
|
||||
|
||||
isSuccess = true;
|
||||
emit showMessage(tr("UdpSocket open"));
|
||||
}
|
||||
else
|
||||
{
|
||||
isSuccess = false;
|
||||
qDebug() << "sock not open";
|
||||
qWarning() << "sock not open";
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -269,82 +311,39 @@ bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHos
|
||||
|
||||
void DLink::readPendingDatagramsSerialPort(void)
|
||||
{
|
||||
static int count = 0;
|
||||
|
||||
QByteArray datagram = serialPort->readAll();
|
||||
mavlinknode->setbuff(SourceType::s_port,datagram);
|
||||
|
||||
/*
|
||||
|
||||
mavlink_message_t msg;
|
||||
mavlink_status_t status;
|
||||
|
||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||
{
|
||||
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(3,*i,&msg,&status))
|
||||
{
|
||||
qDebug() << "direct parse:" << count << msg.msgid;
|
||||
count++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < datagram.size(); ++i) {
|
||||
num.append(QString::number((uint8_t)datagram.at(i) & 0xFF,16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
//qDebug() << "port recieve";
|
||||
|
||||
emit recieveMessage(SourceType::s_port,datagram);
|
||||
}
|
||||
|
||||
void DLink::readPendingDatagramsClient(void)
|
||||
{
|
||||
|
||||
static int count = 0;
|
||||
|
||||
//轮番查询
|
||||
while (Clientsock->hasPendingDatagrams()) {
|
||||
QByteArray datagram;
|
||||
datagram.resize(Clientsock->pendingDatagramSize());
|
||||
Clientsock->readDatagram(datagram.data(), datagram.size());
|
||||
mavlinknode->setbuff(SourceType::c_sock,datagram);
|
||||
|
||||
|
||||
/*
|
||||
mavlink_message_t msg;
|
||||
mavlink_status_t status;
|
||||
|
||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||
{
|
||||
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(2,*i,&msg,&status))
|
||||
{
|
||||
qDebug() << "direct parse:" << count << msg.msgid;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
emit recieveMessage(SourceType::c_sock,datagram);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//qDebug() << "client recieve";
|
||||
|
||||
}
|
||||
|
||||
|
||||
//在这里做一个检查缓冲区有没有数,有数据就往上发的一个函数
|
||||
//dlink底下的所有协议都可以往这个缓存发数据
|
||||
void DLink::record(quint32 src,QByteArray data)
|
||||
{
|
||||
Q_UNUSED(src)
|
||||
|
||||
//加时间撮
|
||||
|
||||
if (mavLogFile)
|
||||
{
|
||||
//使用数据流的方式可能更好
|
||||
mavLogFile->write((const char *)data, sizeof(data));
|
||||
}
|
||||
}
|
||||
|
||||
void DLink::replay(quint32 src,QByteArray data)
|
||||
{
|
||||
//定时器回放
|
||||
}
|
||||
|
||||
|
||||
+12
-4
@@ -50,6 +50,7 @@ public:
|
||||
signals:
|
||||
void showMessage(const QString &message,int TimeOut = 0);
|
||||
|
||||
void recieveMessage(quint32 src,QByteArray data);
|
||||
|
||||
void PortConnected(QVariant m_state,
|
||||
QVariant m_usrName,QVariant m_Type,
|
||||
@@ -57,8 +58,6 @@ signals:
|
||||
QVariant m_Param3,QVariant m_Param4,
|
||||
QVariant m_Param5);
|
||||
|
||||
int REVMessageTo1(quint8 ch, quint8 *msg, quint16 len);
|
||||
|
||||
public slots:
|
||||
|
||||
void connectSignal(QVariant m_state,
|
||||
@@ -67,15 +66,20 @@ public slots:
|
||||
QVariant m_Param3,QVariant m_Param4,
|
||||
QVariant m_Param5);
|
||||
|
||||
|
||||
void readPendingDatagramsSerialPort(void);
|
||||
|
||||
void readPendingDatagramsClient(void);
|
||||
|
||||
int SendMessageTo(quint8 ch, quint8 *msg, quint16 len);
|
||||
|
||||
private slots:
|
||||
|
||||
void record(quint32 src,QByteArray data);
|
||||
void replay(quint32 src,QByteArray data);
|
||||
|
||||
|
||||
|
||||
|
||||
int SendMessageTo1(quint8 ch, quint8 *msg, quint16 len);
|
||||
|
||||
protected:
|
||||
|
||||
@@ -90,6 +94,10 @@ protected:
|
||||
|
||||
QList<Node> clientSockets;
|
||||
|
||||
|
||||
QFile *mavLogFile = NULL;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -99,34 +99,6 @@ OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config) : QGraphicsView
|
||||
void OPMapWidget::SetShowDiagnostics(bool const & value)
|
||||
{
|
||||
showDiag = value;
|
||||
/*
|
||||
if (!showDiag) {
|
||||
if (diagGraphItem != 0) {
|
||||
delete diagGraphItem;
|
||||
diagGraphItem = 0;
|
||||
}
|
||||
if (diagTimer != 0) {
|
||||
delete diagTimer;
|
||||
diagTimer = 0;
|
||||
}
|
||||
|
||||
if (GPS != 0) {
|
||||
GPS->DeleteTrail();
|
||||
delete GPS;
|
||||
GPS = 0;
|
||||
}
|
||||
} else {
|
||||
diagTimer = new QTimer();
|
||||
connect(diagTimer, SIGNAL(timeout()), this, SLOT(diagRefresh()));
|
||||
diagTimer->start(500);
|
||||
if (GPS == 0) {
|
||||
GPS = new GPSItem(map, this);
|
||||
GPS->setParentItem(map);
|
||||
GPS->setOpacity(overlayOpacity);
|
||||
setOverlayOpacity(overlayOpacity);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
void OPMapWidget::SetUavPic(QString UAVPic)
|
||||
{
|
||||
@@ -177,7 +149,7 @@ void OPMapWidget::addUAV(int sysid,int compid)
|
||||
|
||||
uavItem->setOpacity(overlayOpacity);
|
||||
|
||||
uavItem->setSelect(true);
|
||||
uavItem->setSelect(false);
|
||||
|
||||
}
|
||||
|
||||
@@ -264,6 +236,24 @@ void OPMapWidget::setUAVHeading(int sysid,int compid,float Heading)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void OPMapWidget::DeleteTrail(void)
|
||||
{
|
||||
foreach(QGraphicsItem * i, map->childItems()) {
|
||||
UAVItem *u = qgraphicsitem_cast<UAVItem *>(i);
|
||||
if (u) {
|
||||
if(u->Select())
|
||||
{
|
||||
u->DeleteTrail();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
WayPointLine *OPMapWidget::WPLineCreate(WayPointItem *from, WayPointItem *to, QColor color, bool dashed, int width)
|
||||
{
|
||||
if (!from | !to) {
|
||||
|
||||
@@ -424,6 +424,10 @@ public:
|
||||
|
||||
void setUAVPos(int sysid,int compid,double x,double y,double z);
|
||||
void setUAVHeading(int sysid,int compid,float Heading);
|
||||
void DeleteTrail(void);
|
||||
|
||||
|
||||
|
||||
|
||||
double TotalDistance(void)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user