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