协同dlink和mavlink
This commit is contained in:
+51
-24
@@ -14,6 +14,10 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
|
|
||||||
//ui->maintoolBar->addAction(ui->action);
|
//ui->maintoolBar->addAction(ui->action);
|
||||||
|
|
||||||
|
dlink = new DLink();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
nav = new QNavigationWidget(this);
|
nav = new QNavigationWidget(this);
|
||||||
|
|
||||||
copk = new Cockpit(this);
|
copk = new Cockpit(this);
|
||||||
@@ -25,17 +29,29 @@ MainWindow::MainWindow(QWidget *parent)
|
|||||||
|
|
||||||
|
|
||||||
nav->setRowHeight(50);
|
nav->setRowHeight(50);
|
||||||
nav->addItem(tr("设备"));
|
nav->addItem(tr("DRV"));
|
||||||
nav->addItem(tr("地图"));
|
nav->addItem(tr("MAP"));
|
||||||
nav->addItem(tr("指令"));
|
nav->addItem(tr("CMD"));
|
||||||
nav->addItem(tr("检查"));
|
nav->addItem(tr("CHK"));
|
||||||
nav->addItem(tr("航线"));
|
nav->addItem(tr("WAY"));
|
||||||
nav->addItem(tr("任务"));
|
nav->addItem(tr("MIS"));
|
||||||
nav->addItem(tr("数据"));
|
nav->addItem(tr("DAT"));
|
||||||
nav->addItem(tr("回放"));
|
nav->addItem(tr("REP"));
|
||||||
nav->addItem(tr("关于"));
|
nav->addItem(tr("COM"));
|
||||||
|
/*
|
||||||
|
connect(nav,SIGNAL(currentItemChanged(const int &index)),
|
||||||
|
this,SLOT(onTabIndexChanged(const int &index)));
|
||||||
|
*/
|
||||||
|
|
||||||
|
connect(nav,SIGNAL(ItemChanged(int)),
|
||||||
|
this,SLOT(onTabIndexChanged(int)));
|
||||||
|
|
||||||
|
//connect(nav,&QNavigationWidget::currentItemChanged,
|
||||||
|
// this,&MainWindow::onTabIndexChanged);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
node = new MavLinkNode();
|
|
||||||
//node->start();
|
//node->start();
|
||||||
|
|
||||||
qDebug() << "mainwindow " << QThread::currentThreadId();
|
qDebug() << "mainwindow " << QThread::currentThreadId();
|
||||||
@@ -89,7 +105,17 @@ void MainWindow::resizeEvent(QResizeEvent *e)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::onTabIndexChanged(const int &index)
|
||||||
|
{
|
||||||
|
if(index == 1)
|
||||||
|
{
|
||||||
|
dlink_triggered();
|
||||||
|
}
|
||||||
|
else if (index == 2)
|
||||||
|
{
|
||||||
|
client_triggered();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void MainWindow::dlink_triggered()
|
void MainWindow::dlink_triggered()
|
||||||
@@ -105,9 +131,6 @@ void MainWindow::dlink_triggered()
|
|||||||
if (QDialog::Accepted == ret)
|
if (QDialog::Accepted == ret)
|
||||||
{
|
{
|
||||||
dlink->stopPort();
|
dlink->stopPort();
|
||||||
// statusBar()->showMessage(tr("SerialPort Disconnect"));
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -123,22 +146,26 @@ void MainWindow::dlink_triggered()
|
|||||||
if (QDialog::Accepted == ret)
|
if (QDialog::Accepted == ret)
|
||||||
{
|
{
|
||||||
dlink->setupPort(dlg.port, dlg.baudrate,dlg.parity);
|
dlink->setupPort(dlg.port, dlg.baudrate,dlg.parity);
|
||||||
//statusBar()->showMessage(tr("SerialPort Connected:") + dlg.port + tr(",") + QString::number(dlg.baudrate));
|
|
||||||
|
|
||||||
node->start();
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
node->stop();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::client_triggered()
|
||||||
|
{
|
||||||
|
ClientLinkDialog dlg(this);
|
||||||
|
|
||||||
|
dlg.setWindowTitle(tr("ClientLink"));
|
||||||
|
//dlg.setWindowIcon(ui->action_dlink->icon());
|
||||||
|
|
||||||
|
int ret = dlg.exec();
|
||||||
|
if (QDialog::Accepted == ret)
|
||||||
|
{
|
||||||
|
dlink->setupClient(dlg.remote_addr,dlg.remote_port,dlg.local_port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+7
-3
@@ -17,7 +17,7 @@
|
|||||||
#include "opmapwidget.h"
|
#include "opmapwidget.h"
|
||||||
#include "Cockpit.h"
|
#include "Cockpit.h"
|
||||||
#include "dlink.h"
|
#include "dlink.h"
|
||||||
|
#include "clientlinkdialog.h"
|
||||||
#include "mavlinknode.h"
|
#include "mavlinknode.h"
|
||||||
|
|
||||||
#pragma execution_character_set("utf-8")
|
#pragma execution_character_set("utf-8")
|
||||||
@@ -38,15 +38,19 @@ public:
|
|||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void dlink_triggered();
|
void dlink_triggered();
|
||||||
|
void client_triggered();
|
||||||
protected:
|
protected:
|
||||||
void resizeEvent(QResizeEvent * e);
|
void resizeEvent(QResizeEvent * e);
|
||||||
|
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onTabIndexChanged(const int &index);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Cockpit *copk;
|
Cockpit *copk;
|
||||||
|
|
||||||
MavLinkNode *node;
|
|
||||||
QNavigationWidget *nav;
|
QNavigationWidget *nav;
|
||||||
mapcontrol::OPMapWidget *map;
|
mapcontrol::OPMapWidget *map;
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
|
||||||
running_flag = false;
|
running_flag = false;
|
||||||
|
|
||||||
Nodethread = new QThread();
|
Nodethread = new QThread();
|
||||||
|
|
||||||
this->moveToThread(Nodethread);
|
this->moveToThread(Nodethread);
|
||||||
@@ -25,6 +23,16 @@ MavLinkNode::~MavLinkNode()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MavLinkNode::setRunFrq(uint32_t frq)
|
||||||
|
{
|
||||||
|
if((frq != 0)||(frq <= 1000))
|
||||||
|
{
|
||||||
|
running_frq = frq;
|
||||||
|
qDebug() << "set running frquency:" <<frq <<"Hz";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void MavLinkNode::start()
|
void MavLinkNode::start()
|
||||||
{
|
{
|
||||||
if(!Nodethread->isRunning())
|
if(!Nodethread->isRunning())
|
||||||
@@ -61,17 +69,17 @@ void MavLinkNode::process()//线程函数
|
|||||||
uint8_t count = 0;
|
uint8_t count = 0;
|
||||||
while (running_flag) {
|
while (running_flag) {
|
||||||
|
|
||||||
//qDebug() << "Process " << QThread::currentThreadId();
|
//qDebug() << "mavlink Process " << QThread::currentThreadId();
|
||||||
count ++;
|
count ++;
|
||||||
//qDebug() << "run " << count << "ms";
|
//qDebug() << "run " << count << "ms";
|
||||||
QThread::msleep(20);//50Hz
|
QThread::msleep(1000/running_frq);//50Hz
|
||||||
|
|
||||||
}
|
}
|
||||||
//退出线程
|
//退出线程
|
||||||
Nodethread->quit();
|
Nodethread->quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MavLinkNode::setbuff(QByteArray data)
|
void MavLinkNode::setbuff(uint32_t src,QByteArray data)
|
||||||
{
|
{
|
||||||
if(buff_select == 1)
|
if(buff_select == 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ public:
|
|||||||
explicit MavLinkNode(QObject *parent = nullptr);
|
explicit MavLinkNode(QObject *parent = nullptr);
|
||||||
~MavLinkNode();
|
~MavLinkNode();
|
||||||
|
|
||||||
|
void setRunFrq(uint32_t frq);
|
||||||
|
|
||||||
//void start();
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
@@ -35,11 +35,12 @@ public slots:
|
|||||||
|
|
||||||
|
|
||||||
//对外的填充数据的接口
|
//对外的填充数据的接口
|
||||||
void setbuff(QByteArray data);
|
void setbuff(uint32_t src, QByteArray data);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
bool running_flag = false;
|
bool running_flag = false;
|
||||||
|
quint32 running_frq = 10;//10Hz
|
||||||
|
|
||||||
QThread *Nodethread;
|
QThread *Nodethread;
|
||||||
|
|
||||||
|
|||||||
+68
-22
@@ -7,11 +7,16 @@
|
|||||||
|
|
||||||
DLink::DLink(QObject *parent) : QObject(parent)
|
DLink::DLink(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
|
qDebug() << "Dlink " << QThread::currentThreadId();
|
||||||
|
|
||||||
|
mavlinknode = new MavLinkNode();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
DLink::~DLink()
|
DLink::~DLink()
|
||||||
{
|
{
|
||||||
|
mavlinknode->stop();
|
||||||
|
delete mavlinknode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -20,8 +25,11 @@ int DLink::SendMessageTo(uint8_t, uint8_t *msg, uint16_t len)
|
|||||||
//mavlinknode::bytes_num_out += len;
|
//mavlinknode::bytes_num_out += len;
|
||||||
if (DLink::Clientsock)
|
if (DLink::Clientsock)
|
||||||
{
|
{
|
||||||
DLink::Clientsock->writeDatagram((const char *)msg, len,
|
foreach(Node node,clientSockets)
|
||||||
DLink::clientSockets.last().addr, DLink::clientSockets.last().port);
|
{
|
||||||
|
DLink::Clientsock->writeDatagram((const char *)msg, len,
|
||||||
|
node.addr, node.port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DLink::serialPort)
|
if (DLink::serialPort)
|
||||||
@@ -41,7 +49,7 @@ void DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
|||||||
serialPort->close();
|
serialPort->close();
|
||||||
delete serialPort;
|
delete serialPort;
|
||||||
}
|
}
|
||||||
serialPort = new QSerialPort(port, this);
|
serialPort = new QSerialPort(port,this);
|
||||||
|
|
||||||
if (serialPort->open(QIODevice::ReadWrite))
|
if (serialPort->open(QIODevice::ReadWrite))
|
||||||
{
|
{
|
||||||
@@ -50,7 +58,11 @@ void DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
|||||||
serialPort->setDataBits(QSerialPort::Data8);
|
serialPort->setDataBits(QSerialPort::Data8);
|
||||||
serialPort->setStopBits(QSerialPort::OneStop);
|
serialPort->setStopBits(QSerialPort::OneStop);
|
||||||
|
|
||||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
|
mavlinknode->start();
|
||||||
|
|
||||||
|
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
|
||||||
|
|
||||||
|
qDebug() << "Serial Port Open Success";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -74,8 +86,7 @@ void DLink::stopPort()
|
|||||||
|
|
||||||
|
|
||||||
void DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int local_port)
|
void DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int local_port)
|
||||||
{
|
{
|
||||||
|
|
||||||
Clientsock = new QUdpSocket(this);
|
Clientsock = new QUdpSocket(this);
|
||||||
if (Clientsock->bind(QHostAddress::Any, local_port))
|
if (Clientsock->bind(QHostAddress::Any, local_port))
|
||||||
{
|
{
|
||||||
@@ -87,11 +98,40 @@ void DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int lo
|
|||||||
node.sock = Clientsock;
|
node.sock = Clientsock;
|
||||||
node.addr = remote_addr;
|
node.addr = remote_addr;
|
||||||
node.port = remote_port;
|
node.port = remote_port;
|
||||||
|
|
||||||
clientSockets.append(node);
|
clientSockets.append(node);
|
||||||
qDebug() << "sock open:"
|
qDebug() << "UdpSocket open:"
|
||||||
<< remote_addr
|
<< remote_addr
|
||||||
<< local_port
|
<< local_port
|
||||||
<< remote_port;
|
<< remote_port;
|
||||||
|
|
||||||
|
mavlinknode->start();
|
||||||
|
|
||||||
|
|
||||||
|
//想办法只让这个UDP打开一次
|
||||||
|
/*
|
||||||
|
foreach(Node nodex,clientSockets)
|
||||||
|
{
|
||||||
|
qDebug() << "in";
|
||||||
|
//如果不存在就添加进去
|
||||||
|
if((nodex.sock == node.sock)&&
|
||||||
|
(nodex.addr == node.addr)&&
|
||||||
|
(nodex.port == node.port))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
clientSockets.append(node);
|
||||||
|
qDebug() << "sock open:"
|
||||||
|
<< remote_addr
|
||||||
|
<< local_port
|
||||||
|
<< remote_port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -112,40 +152,35 @@ void DLink::readPendingDatagramsSerialPort(void)
|
|||||||
{
|
{
|
||||||
QByteArray datagram = serialPort->readAll();
|
QByteArray datagram = serialPort->readAll();
|
||||||
|
|
||||||
//static mavlink_message_t msg;
|
mavlinknode->setbuff(SourceType::s_port,datagram);
|
||||||
//static mavlink_status_t status;
|
|
||||||
uint8_t ret = '\0';
|
|
||||||
|
|
||||||
|
|
||||||
SendMessageTo(ret,(uint8_t *)datagram.data(),datagram.size());
|
|
||||||
|
|
||||||
|
/*
|
||||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
ret = mavlink_parse_char(MAVLINK_COMM_0,*i,&msg,&status);
|
ret = mavlink_parse_char(MAVLINK_COMM_0,*i,&msg,&status);
|
||||||
if(MAVLINK_FRAMING_OK == ret)
|
if(MAVLINK_FRAMING_OK == ret)
|
||||||
{
|
{
|
||||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DLink::readPendingDatagramsClient(void)
|
void DLink::readPendingDatagramsClient(void)
|
||||||
{
|
{
|
||||||
|
//轮番查询
|
||||||
|
|
||||||
|
|
||||||
while (Clientsock->hasPendingDatagrams()) {
|
while (Clientsock->hasPendingDatagrams()) {
|
||||||
QByteArray datagram;
|
QByteArray datagram;
|
||||||
datagram.resize(Clientsock->pendingDatagramSize());
|
datagram.resize(Clientsock->pendingDatagramSize());
|
||||||
Clientsock->readDatagram(datagram.data(), datagram.size());
|
Clientsock->readDatagram(datagram.data(), datagram.size());
|
||||||
|
|
||||||
|
mavlinknode->setbuff(SourceType::c_sock,datagram);
|
||||||
|
|
||||||
//SendMessageTo(ret,(uint8_t *)datagram.data(),datagram.size());
|
//SendMessageTo(ret,(uint8_t *)datagram.data(),datagram.size());
|
||||||
|
|
||||||
|
|
||||||
//qDebug() << "Client Read All" << datagram;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||||
{
|
{
|
||||||
@@ -159,3 +194,14 @@ void DLink::readPendingDatagramsClient(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <QHostAddress>
|
#include <QHostAddress>
|
||||||
#include <QUdpSocket>
|
#include <QUdpSocket>
|
||||||
#include "QDebug"
|
#include "QDebug"
|
||||||
|
#include "mavlinknode.h"
|
||||||
//#include "mavlink/ardupilotmega/mavlink.h"
|
//#include "mavlink/ardupilotmega/mavlink.h"
|
||||||
|
|
||||||
|
|
||||||
@@ -91,6 +92,7 @@ signals:
|
|||||||
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
void readPendingDatagramsSerialPort(void);
|
void readPendingDatagramsSerialPort(void);
|
||||||
|
|
||||||
void readPendingDatagramsClient(void);
|
void readPendingDatagramsClient(void);
|
||||||
@@ -99,6 +101,12 @@ public slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
enum SourceType{
|
||||||
|
s_port = 0,
|
||||||
|
c_sock = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
QSerialPort *serialPort = nullptr;
|
QSerialPort *serialPort = nullptr;
|
||||||
|
|
||||||
QUdpSocket *Clientsock = nullptr;
|
QUdpSocket *Clientsock = nullptr;
|
||||||
@@ -106,6 +114,8 @@ private:
|
|||||||
QList<Node> clientSockets;
|
QList<Node> clientSockets;
|
||||||
|
|
||||||
|
|
||||||
|
MavLinkNode *mavlinknode = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+8
-1
@@ -3,7 +3,7 @@ QT += serialport
|
|||||||
QT += network
|
QT += network
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
TARGET = Dlink
|
TARGET = Dlink
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
@@ -16,6 +16,7 @@ CONFIG += plugin \
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The following define makes your compiler emit warnings if you use
|
# The following define makes your compiler emit warnings if you use
|
||||||
# any feature of Qt which has been marked as deprecated (the exact warnings
|
# any feature of Qt which has been marked as deprecated (the exact warnings
|
||||||
# depend on your compiler). Please consult the documentation of the
|
# depend on your compiler). Please consult the documentation of the
|
||||||
@@ -35,6 +36,12 @@ HEADERS += \
|
|||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/dlink.cpp
|
$$PWD/dlink.cpp
|
||||||
|
|
||||||
|
#加入第三方库
|
||||||
|
INCLUDEPATH += $$PWD/../thirdpart/include
|
||||||
|
|
||||||
|
LIBS += -L$$PWD/../thirdpart/lib -lMavLinkNode
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESTDIR = $$PWD/../thirdpart/lib
|
DESTDIR = $$PWD/../thirdpart/lib
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ void QNavigationWidget::mousePressEvent(QMouseEvent *e)
|
|||||||
{
|
{
|
||||||
currentIndex = e->y() / rowHeight;
|
currentIndex = e->y() / rowHeight;
|
||||||
|
|
||||||
emit currentItemChanged(currentIndex);
|
emit ItemChanged(currentIndex);
|
||||||
|
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,10 @@ public:
|
|||||||
|
|
||||||
int Index(void);
|
int Index(void);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void ItemChanged(const int &index);
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *);
|
void paintEvent(QPaintEvent *);
|
||||||
void mouseMoveEvent(QMouseEvent *);
|
void mouseMoveEvent(QMouseEvent *);
|
||||||
@@ -57,8 +61,7 @@ private:
|
|||||||
bool isHidden = false;
|
bool isHidden = false;
|
||||||
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void currentItemChanged(const int &index);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user