diff --git a/App/mainwindow.cpp b/App/mainwindow.cpp index dd643e9..05c069d 100644 --- a/App/mainwindow.cpp +++ b/App/mainwindow.cpp @@ -1005,7 +1005,6 @@ void MainWindow::setServoOffset(QVariant dirla, QVariant dirra, QVariant dirle, // 16~20Hz左右 运行频率可能太高 void MainWindow::updateUI()//事件驱动式更新数据 { - static uint32_t custommode_old = 0; static uint8_t state_old = 0; bool isCustomChanged = false; @@ -1293,6 +1292,10 @@ void MainWindow::updateUI()//事件驱动式更新数据 dlink->mavlinknode->vehicle.attitude.yaw * 57.3); + + + + uint64_t time = ((uint64_t)dlink->mavlinknode->vehicle.ins2.time)% 1000000; uint64_t date = ((uint64_t)dlink->mavlinknode->vehicle.ins2.time)/ 1000000; @@ -1442,6 +1445,8 @@ void MainWindow::updateUI()//事件驱动式更新数据 toolsui->servosystem->setCheckState(10,getBit(health,26)?(HealthUI::state::failure):(HealthUI::state::success)); toolsui->servosystem->setCheckState(11,getBit(health,27)?(HealthUI::state::failure):(HealthUI::state::success)); + + /* qDebug() << getBit(health,22) << getBit(health,23) @@ -1465,6 +1470,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 //qDebug() << getBit(health,16); + uint16_t servoHealt = dlink->mavlinknode->vehicle.servo_output_raw.servo10_raw; healthui->setState(11,getBit(health,16)?(getBit(servoHealt,3)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//LA @@ -1714,6 +1720,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 if(toolsui->senser) { + toolsui->senser->setAltChart("海拔高度",dlink->mavlinknode->vehicle.global_position_int.alt * 10e-4,2); toolsui->senser->setAltChart("气压高度",dlink->mavlinknode->vehicle.vfr_hud.alt,1); @@ -1740,6 +1747,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 toolsui->senser->setSpeedChart("目标表速",dlink->mavlinknode->vehicle.vfr_hud.airspeed +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,1); + } @@ -1768,7 +1776,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 statusui->setServo(5,QString::number(ru_command,'f',2), QString::number(ru_angle,'f',2)); - /* + if(toolsui->senser) { @@ -1783,7 +1791,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 toolsui->senser->setServoChart("方向舵",ru_angle,2); //toolsui->senser->setServoChart("方向舵角度",ru_command); } -*/ + statusui->setEngine(1,QString::number((dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw - 1000) * 0.1,'f',0), QString::number(dlink->mavlinknode->vehicle.turbinstate.RPM_mea,'f',0)); @@ -1921,6 +1929,8 @@ void MainWindow::updateUI()//事件驱动式更新数据 */ + + /* QString Fix; switch (dlink->mavlinknode->vehicle.gps_raw_int.fix_type) { case 0: @@ -1941,6 +1951,9 @@ void MainWindow::updateUI()//事件驱动式更新数据 Fix.append(tr("%1").arg(dlink->mavlinknode->vehicle.gps_raw_int.fix_type)); break; } + + */ + /* toolsui->diagram->setNavigation(1,Fix);//定位状态 toolsui->diagram->setNavigation(2,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));//微型数 @@ -1983,6 +1996,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 //dlink->mavlinknode->vehicle.turbinstate.RPM_mea = 12000; + if((isEngineStartUp == false)&&(dlink->mavlinknode->vehicle.turbinstate.RPM_mea >= 10000)) { StartupTime->setTime(QDateTime::currentDateTime().time()); diff --git a/MavLinkNode/Terminal.cpp b/MavLinkNode/Terminal.cpp index 59b8b7b..ba46c84 100644 --- a/MavLinkNode/Terminal.cpp +++ b/MavLinkNode/Terminal.cpp @@ -26,8 +26,8 @@ void terminal::process()//线程函数 { default: case Nop_Mode : QThread::msleep(1000/frq());break; - case RecieveMode : ReadStateMachine();break; - case TransmitMode : WriteStateMachine();break; + case RecieveMode : ReadStateMachine();QApplication::processEvents();break; + case TransmitMode : WriteStateMachine();QApplication::processEvents();break; } if(isInterruptionRequested())//退出 diff --git a/MavLinkNode/ThreadTemplet.cpp b/MavLinkNode/ThreadTemplet.cpp index fd837ff..cdcfdc3 100644 --- a/MavLinkNode/ThreadTemplet.cpp +++ b/MavLinkNode/ThreadTemplet.cpp @@ -4,6 +4,9 @@ ThreadTemplet::ThreadTemplet(QObject *parent) : QObject(parent) { running_flag = false; thread = new QThread(); + + thread->setPriority(QThread::IdlePriority); + this->moveToThread(thread); connect(thread, &QThread::started, this, &ThreadTemplet::process); diff --git a/MavLinkNode/commandprocess.cpp b/MavLinkNode/commandprocess.cpp index 5d32906..916f7d8 100644 --- a/MavLinkNode/commandprocess.cpp +++ b/MavLinkNode/commandprocess.cpp @@ -31,8 +31,8 @@ void commandprocess::process()//线程函数 { default: case Nop_Mode : QThread::msleep(1000.0/frq());break; - case RecieveMode : ReadStateMachine();break;//QApplication::processEvents();break; - case TransmitMode : WriteStateMachine();break;//QApplication::processEvents();break; + case RecieveMode : ReadStateMachine();QApplication::processEvents();break; + case TransmitMode : WriteStateMachine();QApplication::processEvents();break; } if(isInterruptionRequested())//退出 diff --git a/MavLinkNode/mavlinknode.cpp b/MavLinkNode/mavlinknode.cpp index b032b7f..fbafc9f 100644 --- a/MavLinkNode/mavlinknode.cpp +++ b/MavLinkNode/mavlinknode.cpp @@ -480,6 +480,7 @@ void MavLinkNode::process()//线程函数 uint8_t count = 0; QByteArray datagram = nullptr; + bool isIdle = true; while (running_flag) { count ++; @@ -493,12 +494,6 @@ void MavLinkNode::process()//线程函数 { //qDebug() << "client parse"; Mavlinkparse(SourceType::c_sock,datagram); - //QApplication::processEvents(); - } - else - { - QThread::msleep(1000/running_frq); - //QThread::yieldCurrentThread(); } //解码从串口来的 @@ -507,21 +502,23 @@ void MavLinkNode::process()//线程函数 //qDebug() << "serial port parse"; if(!datagram.isEmpty()) { + //isIdle //qDebug() << "serial port parse"; Mavlinkparse(SourceType::s_port,datagram); - //QApplication::processEvents(); - } - else - { - QThread::msleep(1000/running_frq); - //QThread::yieldCurrentThread();//打开这个CPU占用50% + } if(isInterruptionRequested())//退出 { break; } - //QApplication::processEvents(); + QApplication::processEvents(); + //QThread::yieldCurrentThread();//打开这个CPU占用50% + + if(isIdle) + { + // QThread::msleep(1000/running_frq); + } } } @@ -610,6 +607,8 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram) for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i) { + //QApplication::processEvents(); + if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status)) { @@ -1157,7 +1156,7 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) - emit signal_vehicle(vehicle); + //emit signal_vehicle(vehicle); emit state_updated(); diff --git a/MavLinkNode/missionprocess.cpp b/MavLinkNode/missionprocess.cpp index bee44e3..30680f0 100644 --- a/MavLinkNode/missionprocess.cpp +++ b/MavLinkNode/missionprocess.cpp @@ -27,10 +27,10 @@ void MissionProcess::process()//线程函数 { default: case Nop_Mode : QThread::msleep(1000/frq());break; - case RecieveMode : ReadStateMachine();break;//QApplication::processEvents();break; + case RecieveMode : ReadStateMachine();QApplication::processEvents();break; case TransmitMode : { - //QApplication::processEvents(); + QApplication::processEvents(); if(mission_status.transmit.type == 0)//航线传输 { WriteStateMachine(); diff --git a/MavLinkNode/parameterprocess.cpp b/MavLinkNode/parameterprocess.cpp index ec759b3..a30dd39 100644 --- a/MavLinkNode/parameterprocess.cpp +++ b/MavLinkNode/parameterprocess.cpp @@ -24,8 +24,8 @@ void ParameterProcess::process()//线程函数 { default: case Nop_Mode : QThread::msleep(1000/frq());break; - case RecieveMode : ReadStateMachine();break;//QApplication::processEvents();break; - case TransmitMode : WriteStateMachine();break;//QApplication::processEvents();break; + case RecieveMode : ReadStateMachine();QApplication::processEvents();break; + case TransmitMode : WriteStateMachine();QApplication::processEvents();break; } if(isInterruptionRequested())//退出 diff --git a/MavLinkNode/rcprocess.cpp b/MavLinkNode/rcprocess.cpp index deaff0d..6c1eaa6 100644 --- a/MavLinkNode/rcprocess.cpp +++ b/MavLinkNode/rcprocess.cpp @@ -49,9 +49,11 @@ void rcprocess::process()//线程函数 //解码从串口来的 datagram.clear(); datagram = readbuff(SourceType::s_port);//每次全部读取 - //qDebug() << "serial port parse"; + + if(datagram.size() > 0) { + QApplication::processEvents(); parse(SourceType::s_port,datagram); } diff --git a/MavLinkNode/replay.cpp b/MavLinkNode/replay.cpp index eac49b9..982e43d 100644 --- a/MavLinkNode/replay.cpp +++ b/MavLinkNode/replay.cpp @@ -108,6 +108,8 @@ void Replay::process()//线程函数 emit readReady(); lastTimestamp = currentTimestamp; + + QApplication::processEvents(); } else { diff --git a/MavLinkNode/rtkprocess.cpp b/MavLinkNode/rtkprocess.cpp index 026eec9..5e62fe7 100644 --- a/MavLinkNode/rtkprocess.cpp +++ b/MavLinkNode/rtkprocess.cpp @@ -29,6 +29,7 @@ void rtkprocess::process()//线程函数 datagram = readbuff(SourceType::s_port);//每次全部读取 if(datagram.size() > 0) { + QApplication::processEvents(); rtkrawdata.append(datagram); } diff --git a/MavLinkNode/statusprocess.cpp b/MavLinkNode/statusprocess.cpp index 17eeb7c..9a593f6 100644 --- a/MavLinkNode/statusprocess.cpp +++ b/MavLinkNode/statusprocess.cpp @@ -33,9 +33,10 @@ void statusprocess::process()//线程函数 { default: case Nop_Mode : QThread::msleep(1000.0/frq());break; - case RecieveMode : ReadStateMachine();break; + case RecieveMode : ReadStateMachine();QApplication::processEvents();break; case TransmitMode : { + QApplication::processEvents(); if((QTime::currentTime().msecsSinceStartOfDay() - time) > (1000.0/running_frq)) { heartbeat(m_heartbeat.custom_mode, diff --git a/opmap/mapwidget/opmapwidget.cpp b/opmap/mapwidget/opmapwidget.cpp index b3edef4..ddc47b7 100644 --- a/opmap/mapwidget/opmapwidget.cpp +++ b/opmap/mapwidget/opmapwidget.cpp @@ -557,7 +557,7 @@ void OPMapWidget::SetUseOpenGL(const bool &value) { useOpenGL = value; if (useOpenGL) { - setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + setViewport(new QGLWidget(QGLFormat(QGL::DoubleBuffer))); } else { setupViewport(new QWidget()); } @@ -1828,20 +1828,6 @@ void OPMapWidget::WPLoad(QString path)//带文件目录参数 Item->SetNumber(seq); - if(command > MAV_CMD::MAV_CMD_NAV_LAST) - { - - } - else - { - //WPLineCreate(WPFind(Item->Number() - 1),Item,Qt::green,false,2); - } - - //Item->setParent(map); - - //qDebug() << "autocontinue" << autocontinue; - - emit setWPProperty(param1,param2,param3,param4, x,y,z, seq, @@ -1857,6 +1843,15 @@ void OPMapWidget::WPLoad(QString path)//带文件目录参数 Item->emitWPProperty(); + + + WayPointItem *w_last = WPFind(Item->MissionType(),Item->Number() - 1); + + if(w_last) + { + WPLineCreate(w_last,Item,Qt::green,false,2); + } + } } diff --git a/opmap/mapwidget/traillineitem.cpp b/opmap/mapwidget/traillineitem.cpp index 2cf5341..6cfd3fb 100644 --- a/opmap/mapwidget/traillineitem.cpp +++ b/opmap/mapwidget/traillineitem.cpp @@ -34,6 +34,9 @@ TrailLineItem::TrailLineItem(internals::PointLatLng const & coord1, internals::P pen.setBrush(m_brush); pen.setWidth(2); this->setPen(pen); + + + } int TrailLineItem::type() const