diff --git a/App/mainwindow.cpp b/App/mainwindow.cpp index 1960456..9404ee9 100644 --- a/App/mainwindow.cpp +++ b/App/mainwindow.cpp @@ -80,10 +80,10 @@ MainWindow::MainWindow(QWidget *parent) //构建Other目录 QDir *Otherdir = new QDir; - if(!Otherdir->exists("./log/Other")) + if(!Otherdir->exists("./log/other")) { - qDebug() << "make dir Other"; - Otherdir->mkdir("./log/Other");//如果文件夹不存在就新建 + qDebug() << "make dir other"; + Otherdir->mkdir("./log/other");//如果文件夹不存在就新建 } @@ -254,9 +254,11 @@ MainWindow::MainWindow(QWidget *parent) this,SLOT(dlinkCount(int,int))); - connect(dlink->mavlinknode,SIGNAL(heartbeatTimeStamp(quint32)), + /*connect(dlink->mavlinknode,SIGNAL(heartbeatTimeStamp(quint32)), + copk,SLOT(setHeartBeatTime(quint32))); + */ + connect(dlink->mavlinknode->Status,SIGNAL(heartbeatTimeStamp(quint32)), copk,SLOT(setHeartBeatTime(quint32))); - //this ----- map @@ -644,6 +646,8 @@ MainWindow::MainWindow(QWidget *parent) connect(setting->index0->globalsetting,&GlobalSetting::setHeartBeat, dlink->mavlinknode,&MavLinkNode::setHeartbeat,Qt::DirectConnection); + connect(setting->index0->globalsetting,&GlobalSetting::setHeartBeat, + dlink->mavlinknode->Status,&statusprocess::setHeartbeat,Qt::DirectConnection); //设置地面站ID setting->index0->globalsetting->getGCSID(); diff --git a/MavLinkNode/mavlinknode.cpp b/MavLinkNode/mavlinknode.cpp index ef4ce8d..6cdd22e 100644 --- a/MavLinkNode/mavlinknode.cpp +++ b/MavLinkNode/mavlinknode.cpp @@ -55,6 +55,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent) mavLogFile = new QFile(mavlogFileName); mavLogFile->open(QIODevice::WriteOnly); + /* HeartBeatTimeName = QString("./log/Other/HeartBeat%1.csv").arg(current.toString("yyyyMMddHHmmss")); HeartBeatTimeFile = new QFile(HeartBeatTimeName); HeartBeatTimeFile->open(QIODevice::WriteOnly); @@ -79,6 +80,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent) stream << data; HeartBeatTimeFile->flush(); } + */ if(logTimer) @@ -136,7 +138,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent) connect(Commander,SIGNAL(showMessage(QString,int)), this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection); - /* + Status = new statusprocess(); Status->setGCSID(Current_sysID,Current_CompID); connect(Status,SIGNAL(SendMessageTo(quint8,quint8*,quint16)), @@ -147,7 +149,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : ThreadTemplet(parent) connect(Status,SIGNAL(showMessage(QString,int)), this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection); - */ + /* Terminal = new terminal(); @@ -222,13 +224,14 @@ MavLinkNode::~MavLinkNode() delete mavLogFile; mavLogFile = NULL; } - +/* if (HeartBeatTimeFile) { HeartBeatTimeFile->close(); delete HeartBeatTimeFile; HeartBeatTimeFile = NULL; } + */ if(logTimer) { @@ -265,13 +268,13 @@ MavLinkNode::~MavLinkNode() Commander = nullptr; } - /* + if(Status) { delete Status; Status = nullptr; } - */ + /* if(Terminal) { @@ -319,13 +322,13 @@ void MavLinkNode::setGCSID(int id) Commander->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER); } -/* + if(Status) { Status->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER); } - +/* if(Terminal) { Terminal->setGCSID(gcsid,MAV_COMP_ID_MISSIONPLANNER); @@ -655,6 +658,7 @@ void MavLinkNode::process()//线程函数 QThread::msleep(1000/running_frq); //timer->start(); + /* if(isSendHeartBeat == true) { if((QTime::currentTime().msecsSinceStartOfDay() - HeartBeatTime) >= (1000.0/heartbeatFrq)) @@ -696,6 +700,7 @@ void MavLinkNode::process()//线程函数 HeartBeatTime = QTime::currentTime().msecsSinceStartOfDay(); } } + */ if(isSendTerminal == true) { diff --git a/MavLinkNode/statusprocess.cpp b/MavLinkNode/statusprocess.cpp index a05d2d4..b347794 100644 --- a/MavLinkNode/statusprocess.cpp +++ b/MavLinkNode/statusprocess.cpp @@ -5,12 +5,60 @@ statusprocess::statusprocess(QObject *parent) : ThreadTemplet(parent) { - setRunFrq(1); + setRunFrq(500); status.m_Mode = _modetype::Nop_Mode; + + QDateTime current = QDateTime::currentDateTime(); + + HeartBeatTimeName = QString("./log/other/HeartBeat%1.csv").arg(current.toString("yyyyMMddHHmmss")); + HeartBeatTimeFile = new QFile(HeartBeatTimeName); + HeartBeatTimeFile->open(QIODevice::WriteOnly); + + + + if(HeartBeatTimeFile) + { + QString data; + + data.clear(); + data.append("date"); data.append(","); + data.append("elapse"); data.append(","); + data.append("custom_mode "); data.append(","); + data.append("type "); data.append(","); + data.append("autopilot "); data.append(","); + data.append("base_mode "); data.append(","); + data.append("system_status "); data.append(","); + data.append("mavlink_version "); data.append("\n"); + + QTextStream stream(HeartBeatTimeFile); + stream << data; + HeartBeatTimeFile->flush(); + } + + + timer = new QTimer(); + + timer->setInterval(1000); + connect(timer,&QTimer::timeout,[=]{ + // qDebug() << "heart time out"; + emitSignal = true; + status.m_Mode = TransmitMode; + + }); + + + } statusprocess::~statusprocess() { + if (HeartBeatTimeFile) + { + HeartBeatTimeFile->close(); + delete HeartBeatTimeFile; + HeartBeatTimeFile = NULL; + } + qDebug() << "stop status" << QThread::currentThreadId(); status.m_Mode = _modetype::Nop_Mode; @@ -20,22 +68,72 @@ statusprocess::~statusprocess() void statusprocess::process()//线程函数 { uint8_t count = 0; - static int time = 0; - QThread::msleep(5000);//5s后再发送 + //QThread::msleep(4000);//5s后再发送 + + //static int time = QTime::currentTime().msecsSinceStartOfDay(); + + //QThread::msleep(1000);//5s后再发送 while (true) { count ++; + switch(status.m_Mode) { default: - case Nop_Mode : QThread::msleep(1000.0/frq());break; + case Nop_Mode : QThread::msleep(10);break; case RecieveMode : ReadStateMachine();break;//QApplication::processEvents();break; case TransmitMode : { + if(emitSignal) + { + heartbeat(m_heartbeat.custom_mode, + m_heartbeat.type, + m_heartbeat.autopilot, + m_heartbeat.base_mode, + m_heartbeat.system_status, + m_heartbeat.mavlink_version); + + + emit heartbeatTimeStamp(QTime::currentTime().msecsSinceStartOfDay() - timeCount); + + //qDebug() << "time:" << QTime::currentTime().msecsSinceStartOfDay() - time; + + + if(HeartBeatTimeFile) + { + QString data; + + data.clear(); + data.append(QDateTime::currentDateTimeUtc().toString("yyyy.MM.dd HH:mm:ss:zzz")); data.append(","); + data.append(QString::number(QTime::currentTime().msecsSinceStartOfDay() - timeCount)); data.append(","); + data.append(QString::number(m_heartbeat.custom_mode)); data.append(","); + data.append(QString::number(m_heartbeat.type)); data.append(","); + data.append(QString::number(m_heartbeat.autopilot)); data.append(","); + data.append(QString::number(m_heartbeat.base_mode)); data.append(","); + data.append(QString::number(m_heartbeat.system_status)); data.append(","); + data.append(QString::number(m_heartbeat.mavlink_version));data.append("\n"); + + QTextStream stream(HeartBeatTimeFile); + + stream << data; + + HeartBeatTimeFile->flush(); + + } + + + emitSignal = false; + status.m_Mode = Nop_Mode; + + timeCount = QTime::currentTime().msecsSinceStartOfDay(); + } + + + /* //QApplication::processEvents(); if((QTime::currentTime().msecsSinceStartOfDay() - time) > (1000.0/running_frq)) { @@ -52,6 +150,7 @@ void statusprocess::process()//线程函数 QThread::msleep(1000.0/frq()); //QThread::yieldCurrentThread(); } + */ } } @@ -67,24 +166,46 @@ void statusprocess::process()//线程函数 void statusprocess::setHeartbeat(QVariant state,QVariant frq) { //给指令赋值 - + setRunFrq(frq.toFloat()); //开启线程开始传输 status.transmit.type = 0; if(state.toBool() == true) { status.m_Mode = _modetype::TransmitMode;//发送模式 + + if(timer) + { + timer->stop(); + timer->setInterval(1000.0/running_frq); + timer->start(); + timeCount = QTime::currentTime().msecsSinceStartOfDay(); + } + + } else { + + if(timer) + { + timer->stop(); + emitSignal = false; + } status.m_Mode = _modetype::Nop_Mode;//空闲模式 } - setRunFrq(frq.toFloat()); + + + + } - +void statusprocess::timeOut(void) +{ + qDebug() << "heart time out"; +} //读状态机 void statusprocess::ReadStateMachine(void)//没有读指令这个说法 diff --git a/MavLinkNode/statusprocess.h b/MavLinkNode/statusprocess.h index a8a368d..f20979e 100644 --- a/MavLinkNode/statusprocess.h +++ b/MavLinkNode/statusprocess.h @@ -39,6 +39,7 @@ public slots: //线程对外接口 + void timeOut(void); private slots: @@ -63,8 +64,20 @@ private slots: signals: void readError(); + + void heartbeatTimeStamp(quint32 time); + private: + QString HeartBeatTimeName; + QFile *HeartBeatTimeFile = NULL; + + bool emitSignal = false; + + QTimer *timer = nullptr; + + int timeCount = 0; + }; #endif // STATUSPROCESS_H diff --git a/opmap/mapwidget/opmapwidget.cpp b/opmap/mapwidget/opmapwidget.cpp index 0726c98..460a323 100644 --- a/opmap/mapwidget/opmapwidget.cpp +++ b/opmap/mapwidget/opmapwidget.cpp @@ -2524,7 +2524,10 @@ void OPMapWidget::WPSave(QString path)//带文件目录参数 foreach(QGraphicsItem * i, map->childItems()) { WayPointItem *w = qgraphicsitem_cast(i); if (w) {//逐渐往下增加 - wlist.insert(w->Number(),w); + if(w->MissionType() == currentGroup) + { + wlist.insert(w->Number(),w); + } } } @@ -2963,6 +2966,31 @@ void OPMapWidget::WPGroup(int value) find_PointNumber(currentGroup); + + QMap Info_Elevation; + QMap Info_Altitude; + + foreach(QGraphicsItem * i, map->childItems()) { + WayPointItem *w = qgraphicsitem_cast(i); + if (w) + { + if(w->MissionType() == currentGroup) + { + if(!w->FollowPrevious()) + { + Info_Elevation.insert(w->Number(),w->getElevation()); + Info_Altitude.insert(w->Number(),w->Alt()); + } + } + } + } + if(altitudeitem) + { + altitudeitem->setElevation(Info_Elevation); + altitudeitem->setAltitude(Info_Altitude); + } + + update(); } @@ -3521,8 +3549,11 @@ void OPMapWidget::ElevationChanged(int seq,double value) WayPointItem *w = qgraphicsitem_cast(i); if (w) { - if(!w->FollowPrevious()) - Info.insert(w->Number(),w->getElevation()); + if(w->MissionType() == currentGroup) + { + if(!w->FollowPrevious()) + Info.insert(w->Number(),w->getElevation()); + } } } if(altitudeitem) @@ -3539,8 +3570,11 @@ void OPMapWidget::AltitudeChanged(int seq,double value) WayPointItem *w = qgraphicsitem_cast(i); if (w) { - if(!w->FollowPrevious()) - Info.insert(w->Number(),w->Alt()); + if(w->MissionType() == currentGroup) + { + if(!w->FollowPrevious()) + Info.insert(w->Number(),w->Alt()); + } } }