diff --git a/App/mainwindow.cpp b/App/mainwindow.cpp index 1b5a8e1..e37c5e4 100644 --- a/App/mainwindow.cpp +++ b/App/mainwindow.cpp @@ -158,8 +158,6 @@ MainWindow::MainWindow(QWidget *parent) qRegisterMetaType("uint8_t"); qRegisterMetaType("uint16_t"); qRegisterMetaType("uint32_t"); - qRegisterMetaType("float"); - qRegisterMetaType("double"); //commandbox ----- dlink connect(toolsui->command,SIGNAL(cmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)), @@ -194,14 +192,14 @@ MainWindow::MainWindow(QWidget *parent) */ //this ----- dlink - connect(dlink->mavlinknode,SIGNAL(beep()), - this,SLOT(beep())); + connect(dlink->mavlinknode,SIGNAL(beep(int)), + this,SLOT(beep(int))); connect(dlink->mavlinknode,SIGNAL(CommuniationLost(bool)), this,SLOT(setCommunicationLostState(bool))); - connect(dlink->mavlinknode,SIGNAL(updateDlink(float,uint64_t)), - this,SLOT(updateDlink(float,uint64_t))); + connect(dlink->mavlinknode,SIGNAL(updateDlink(float,uint64_t,uint64_t)), + this,SLOT(updateDlink(float,uint64_t,uint64_t))); //this ----- map connect(map,SIGNAL(TotalDistanceUpdate(double)), @@ -819,8 +817,9 @@ void MainWindow::showMessage(const QString &message, int TimeOut) toolsui->index1->setLog(message); } -void MainWindow::beep(void) +void MainWindow::beep(int id) { + Q_UNUSED(id) QApplication::beep(); } @@ -901,10 +900,10 @@ void MainWindow::setCommunicationLostState(bool flag) } -void MainWindow::updateDlink(float rssi, uint64_t bitrate) +void MainWindow::updateDlink(float rssi,uint64_t in,uint64_t out) { statusui->setDlink(1,QString::number(rssi,'f',0), - QString::number(bitrate)); + QString::number(in)); } diff --git a/App/mainwindow.h b/App/mainwindow.h index 65cb4bd..158e564 100644 --- a/App/mainwindow.h +++ b/App/mainwindow.h @@ -74,7 +74,7 @@ public slots: void setCommunicationLostState(bool flag); - void beep(void); + void beep(int id); void setServoOffset(QVariant dirla, QVariant dirra, QVariant dirle, QVariant dirre, QVariant dirru, @@ -104,7 +104,7 @@ private slots: void Timer_1s_out(void); - void updateDlink(float rssi,uint64_t bitrate); + void updateDlink(float rssi, uint64_t in, uint64_t out); protected slots: diff --git a/MavLinkNode/MavLinkNode.pro b/MavLinkNode/MavLinkNode.pro index 958e6f4..8cc81c5 100644 --- a/MavLinkNode/MavLinkNode.pro +++ b/MavLinkNode/MavLinkNode.pro @@ -39,7 +39,7 @@ DEFINES += QT_DEPRECATED_WARNINGS # include sub project -DESTDIR = $$PWD/../bin +DESTDIR = $$PWD/../thirdpart/lib MOC_DIR = $$PWD/../build OBJECTS_DIR = $$PWD/../build @@ -73,18 +73,18 @@ SOURCES += \ sbusparser.cpp \ statusprocess.cpp -INCLUDEPATH += $$DESTDIR/include +INCLUDEPATH += $$PWD/../thirdpart/include # Capture whether this is a release/debug build. CONFIG(debug, debug|release) { - LIBS += -L$$DESTDIR -lcored - LIBS += -L$$DESTDIR -linternalsd - LIBS += -L$$DESTDIR -lopmapwidgetd + LIBS += -L$$PWD/../thirdpart/lib -lcored + LIBS += -L$$PWD/../thirdpart/lib -linternalsd + LIBS += -L$$PWD/../thirdpart/lib -lopmapwidgetd } CONFIG(release, debug|release) { - LIBS += -L$$DESTDIR -lcore - LIBS += -L$$DESTDIR -linternals - LIBS += -L$$DESTDIR -lopmapwidget + LIBS += -L$$PWD/../thirdpart/lib -lcore + LIBS += -L$$PWD/../thirdpart/lib -linternals + LIBS += -L$$PWD/../thirdpart/lib -lopmapwidget } @@ -104,9 +104,9 @@ INCLUDEPATH += $$PWD/../mavlink \ -win32|win64 { +win32|win64 { src_dir = $$PWD\\*.h - dst_dir = $$PWD\\..\\bin\\include\\ + dst_dir = $$PWD\\..\\thirdpart\\include\\ # dst_dir 最后的 \\ 是必须的,用来标示 xcopy 到一个文件夹,若不存在,创建之 # Replace slashes in paths with backslashes for Windows @@ -114,13 +114,12 @@ win32|win64 { dst_dir ~= s,/,\\,g system(xcopy $$src_dir $$dst_dir /y /e) - } unix { src_dir = $$PWD/*.h - dst_dir = $$PWD/../bin/include/ + dst_dir = $$PWD/../thirdpart/include/ !exists($$dst_dir): system(mkdir -p $$dst_dir) diff --git a/MavLinkNode/mavlinknode.cpp b/MavLinkNode/mavlinknode.cpp index 1fb5988..efa5835 100644 --- a/MavLinkNode/mavlinknode.cpp +++ b/MavLinkNode/mavlinknode.cpp @@ -488,7 +488,7 @@ void MavLinkNode::process()//线程函数 while (running_flag) { count ++; - QThread::msleep(1000/running_frq); + //QThread::msleep(1000/running_frq); //timer->start(); //解码从UDP来的 @@ -498,7 +498,12 @@ void MavLinkNode::process()//线程函数 { //qDebug() << "client parse"; Mavlinkparse(SourceType::c_sock,datagram); - + QApplication::processEvents(); + } + else + { + //QThread::msleep(1000/running_frq); + QThread::yieldCurrentThread(); } //解码从串口来的 @@ -509,7 +514,12 @@ void MavLinkNode::process()//线程函数 { //qDebug() << "serial port parse"; Mavlinkparse(SourceType::s_port,datagram); - + QApplication::processEvents(); + } + else + { + //QThread::msleep(1000/running_frq); + QThread::yieldCurrentThread(); } if(isInterruptionRequested())//退出 @@ -601,6 +611,8 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram) hasConneted = true; + count_in += datagram.size(); + for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i) { @@ -779,7 +791,10 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) { - _vehicle vehicle = vehicleList.value(msg.sysid); + //_vehicle vehicle = vehicleList.value(msg.sysid); + + vehicle.sysid = msg.sysid; + vehicle.compid = msg.compid; switch (msg.msgid) { case MAVLINK_MSG_ID_AUTOPILOT_VERSION: { @@ -1132,13 +1147,14 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) - vehicleList.insert(msg.sysid,vehicle);//直接覆盖 + + //vehicleList.insert(msg.sysid,vehicle);//直接覆盖 emit signal_vehicle(vehicle); - //emit state_updated(); + emit state_updated(); } diff --git a/dlink/dlink.cpp b/dlink/dlink.cpp index f0cf7de..4e45f6e 100644 --- a/dlink/dlink.cpp +++ b/dlink/dlink.cpp @@ -8,14 +8,12 @@ DLink::DLink(QObject *parent) : QObject(parent) qDebug() << "Dlink " << QThread::currentThreadId(); - //采用插件导入的方式(plugin) - - //mavlink协议节点 + //采用插件导入的方式(plugin) mavlinknode = new MavLinkNode();//不允许带参数,因为这是单独的线程 //在当前线程运行 connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)), - this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::BlockingQueuedConnection);//采用直连的方式,因为是多线程 + this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::BlockingQueuedConnection);//BlockingQueuedConnection);//信号和槽必须在不同的线程中,否则就产生死锁 //在当前线程运行 connect(mavlinknode,SIGNAL(showMessage(QString,int)), @@ -25,15 +23,13 @@ DLink::DLink(QObject *parent) : QObject(parent) connect(this,SIGNAL(recieveMessage(quint32,QByteArray)), mavlinknode,SLOT(setbuff(quint32,QByteArray)),Qt::DirectConnection); - mavlinknode->start(); - //其他协议节点。。。 } DLink::~DLink() { stopPort(); - mavlinknode->stop(); - mavlinknode->deleteLater(); + + delete mavlinknode; mavlinknode = nullptr; }