udp
This commit is contained in:
+1
-1
@@ -169,4 +169,4 @@ TRANSLATIONS = GCS_zh_CN.ts
|
||||
RESOURCES += \
|
||||
res.qrc
|
||||
|
||||
|
||||
RC_FILE += version.rc
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 264 KiB |
+1
-1
@@ -213,7 +213,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
map,SLOT(WPSetCurrent(int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
menuBarUI->showMessage(tr("存在bug,连接界面udp数字输入的.可以超过3个,不合理"));
|
||||
//menuBarUI->showMessage(tr("存在bug,连接界面udp数字输入的.可以超过3个,不合理"));
|
||||
|
||||
//==== showmessage=====
|
||||
connect(copk,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
|
||||
|
||||
+3
-1
@@ -1,4 +1,6 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "LYL/icons/tubiao.ico"
|
||||
|
||||
IDI_ICON1 ICON DISCARDABLE "logo.ico"
|
||||
|
||||
|
||||
#if defined(UNDER_CE)
|
||||
#include <winbase.h>
|
||||
|
||||
@@ -22,7 +22,6 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
int Current_sysID = 0xF1;
|
||||
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
|
||||
|
||||
|
||||
Mission = new MissionProcess();
|
||||
Mission->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Mission,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
@@ -34,8 +33,6 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
connect(Mission,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
|
||||
Parameter = new ParameterProcess();
|
||||
Parameter->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Parameter,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
@@ -44,7 +41,6 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
connect(Parameter,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
Commander = new commandprocess();
|
||||
Commander->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Commander,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
@@ -287,8 +283,11 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
||||
{
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
|
||||
{
|
||||
emit recievemsg(msg); //将信息广播出去
|
||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||
if(msg.compid != Current_CompID)//过滤地面站发过来的数据
|
||||
{
|
||||
emit recievemsg(msg); //将信息广播出去
|
||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+14
-14
@@ -46,15 +46,6 @@ int DLink::SendMessageTo(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
foreach(Node node,clientSockets)
|
||||
{
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
num.append(QString::number(msg[i],16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
DLink::Clientsock->writeDatagram((const char *)msg, len,
|
||||
node.addr, node.port);
|
||||
qDebug() << "Client Send Msg";
|
||||
@@ -241,16 +232,27 @@ void DLink::connectSignal(QVariant m_state,
|
||||
|
||||
bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHostAddress &remote_addr,int remote_port)
|
||||
{
|
||||
if(Clientsock)
|
||||
{
|
||||
delete Clientsock;
|
||||
Clientsock = nullptr;
|
||||
}
|
||||
|
||||
bool isSuccess = false;
|
||||
Clientsock = new QUdpSocket(this);
|
||||
if (Clientsock->bind(QHostAddress::AnyIPv4, local_port))
|
||||
if (Clientsock->bind(QHostAddress::AnyIPv4, local_port, QUdpSocket::ShareAddress))
|
||||
{
|
||||
Clientsock->joinMulticastGroup(remote_addr);//加入组播
|
||||
|
||||
if(Clientsock->open(QIODevice::ReadWrite))
|
||||
//if(Clientsock->joinMulticastGroup(remote_addr))
|
||||
{
|
||||
|
||||
Clientsock->joinMulticastGroup(remote_addr);
|
||||
Clientsock->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,1024*1024*8);
|
||||
Clientsock->setSocketOption(QAbstractSocket::MulticastTtlOption, 3);
|
||||
|
||||
connect(Clientsock, SIGNAL(readyRead()),
|
||||
this, SLOT(readPendingDatagramsClient()));
|
||||
|
||||
Node node;
|
||||
node.sock = Clientsock;
|
||||
node.addr = remote_addr;
|
||||
@@ -262,8 +264,6 @@ bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHos
|
||||
<< local_port
|
||||
<< remote_port;
|
||||
|
||||
//mavlinknode->start();//启动
|
||||
|
||||
isSuccess = true;
|
||||
emit showMessage(tr("UdpSocket open"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,322 @@
|
||||
#include "dlink.h"
|
||||
#include <string.h>
|
||||
//#include "windows.h"
|
||||
#include "QDateTime"
|
||||
|
||||
|
||||
DLink::DLink(QObject *parent) : QObject(parent)
|
||||
{
|
||||
qDebug() << "Dlink " << QThread::currentThreadId();
|
||||
|
||||
//采用插件导入的方式(plugin)
|
||||
|
||||
//mavlink协议节点
|
||||
mavlinknode = new MavLinkNode();//不允许带参数,因为这是单独的线程
|
||||
connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);//采用直连的方式,因为是多线程
|
||||
|
||||
connect(mavlinknode,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
mavlinknode->start();
|
||||
|
||||
|
||||
connect(this,&DLink::REVMessageTo1,
|
||||
this,&DLink::SendMessageTo1);
|
||||
|
||||
//其他协议节点。。。
|
||||
|
||||
}
|
||||
DLink::~DLink()
|
||||
{
|
||||
mavlinknode->stop();
|
||||
delete mavlinknode;
|
||||
}
|
||||
|
||||
|
||||
int DLink::SendMessageTo(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
//让这个函数在其他线程运行
|
||||
|
||||
//Q_UNUSED(ch);
|
||||
|
||||
//更加ch选择
|
||||
if (DLink::Clientsock)
|
||||
{
|
||||
foreach(Node node,clientSockets)
|
||||
{
|
||||
DLink::Clientsock->writeDatagram((const char *)msg, len,
|
||||
node.addr, node.port);
|
||||
qDebug() << "Client Send Msg";
|
||||
}
|
||||
}
|
||||
|
||||
//这个地方有问题,会导致数据中断
|
||||
emit REVMessageTo1(ch,msg,len);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
|
||||
if (DLink::serialPort)
|
||||
{
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
num.append(QString::number(msg[i],16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
//qDebug() << QThread::currentThread();
|
||||
|
||||
qint64 flag = DLink::serialPort->write((const char *)msg,len);
|
||||
|
||||
/*
|
||||
if(flag != -1)
|
||||
{
|
||||
qDebug() << "serial send Success,Send " << flag << "bytes";
|
||||
}
|
||||
|
||||
qDebug() << QThread::currentThread();
|
||||
|
||||
*/
|
||||
qDebug() << "serialPort Send Msg";
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity parity)
|
||||
{
|
||||
|
||||
qDebug() << port
|
||||
<< baudrate
|
||||
<< parity;
|
||||
|
||||
bool isSuccess = false;
|
||||
|
||||
if (serialPort)//多串口接入
|
||||
{
|
||||
serialPort->close();
|
||||
delete serialPort;
|
||||
}
|
||||
serialPort = new QSerialPort(this);
|
||||
|
||||
serialPort->setPortName(port);
|
||||
|
||||
if (serialPort->open(QIODevice::ReadWrite))
|
||||
{
|
||||
serialPort->setBaudRate(baudrate);
|
||||
serialPort->setParity(parity);
|
||||
serialPort->setDataBits(QSerialPort::Data8);
|
||||
serialPort->setStopBits(QSerialPort::OneStop);
|
||||
|
||||
DLink::serialPort->write("serial connet ok",16);
|
||||
|
||||
qDebug() << QThread::currentThread();
|
||||
|
||||
//mavlinknode->start();//启动之后串口就找不到了
|
||||
|
||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
|
||||
|
||||
|
||||
isSuccess = true;
|
||||
|
||||
emit showMessage(tr("Serial Port Open Success"));
|
||||
qDebug() << "Serial Port Open Success";
|
||||
}
|
||||
else
|
||||
{
|
||||
isSuccess = false;
|
||||
emit showMessage(tr("Serial Port Open Fail"));
|
||||
qDebug() << "Serial Port Open Fail";
|
||||
delete serialPort;
|
||||
serialPort = nullptr;
|
||||
}
|
||||
|
||||
return isSuccess;
|
||||
}
|
||||
|
||||
bool DLink::statesPort()
|
||||
{
|
||||
return (serialPort != nullptr)?(true):(false);
|
||||
}
|
||||
|
||||
void DLink::stopPort()
|
||||
{
|
||||
emit showMessage(tr("Serial Port close"));
|
||||
serialPort->close();
|
||||
delete serialPort;
|
||||
serialPort = nullptr;
|
||||
}
|
||||
|
||||
void DLink::connectSignal(QVariant m_state,
|
||||
QVariant m_usrName,QVariant m_Type,
|
||||
QVariant m_Param1,QVariant m_Param2,
|
||||
QVariant m_Param3,QVariant m_Param4,
|
||||
QVariant m_Param5)
|
||||
{
|
||||
if(m_state.toBool() == true)
|
||||
{
|
||||
|
||||
|
||||
if(m_Type.toString() == "SerialPort")
|
||||
{
|
||||
QSerialPort::Parity parity;
|
||||
if(m_Param4.toString() == "NONE")
|
||||
{
|
||||
parity = QSerialPort::Parity::NoParity;
|
||||
}
|
||||
if(m_Param4.toString() == "ODD")
|
||||
{
|
||||
parity = QSerialPort::Parity::OddParity;
|
||||
}
|
||||
if(m_Param4.toString() == "EVEN")
|
||||
{
|
||||
parity = QSerialPort::Parity::EvenParity;
|
||||
}
|
||||
|
||||
|
||||
qDebug() << m_Type << m_Param1 << m_Param2.toString().toInt() << parity;
|
||||
|
||||
if(setupPort(m_Param1.toString(),m_Param2.toString().toInt(),parity))
|
||||
{
|
||||
emit PortConnected(true,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
else
|
||||
{
|
||||
emit PortConnected(false,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
}
|
||||
else if(m_Type.toString() == "UDP")
|
||||
{
|
||||
//qDebug() << m_Type << m_Param1 << m_Param2 << m_Param4;
|
||||
if(setupClient(QHostAddress(m_Param1.toString()),m_Param2.toString().toInt(),QHostAddress(m_Param3.toString()),m_Param4.toString().toInt()))
|
||||
{
|
||||
emit PortConnected(true,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
else
|
||||
{
|
||||
emit PortConnected(false,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
qDebug() << "disconnect";
|
||||
if(m_Type.toString() == "SerialPort")
|
||||
{
|
||||
stopPort();
|
||||
emit PortConnected(false,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
else if(m_Type.toString() == "UDP")
|
||||
{
|
||||
emit PortConnected(false,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool DLink::setupClient(const QHostAddress &local_addr,int local_port,const QHostAddress &remote_addr,int remote_port)
|
||||
{
|
||||
if(Clientsock)
|
||||
{
|
||||
delete Clientsock;
|
||||
Clientsock = nullptr;
|
||||
}
|
||||
|
||||
bool isSuccess = false;
|
||||
Clientsock = new QUdpSocket(this);
|
||||
if (Clientsock->bind(QHostAddress::AnyIPv4, local_port, QUdpSocket::ShareAddress))
|
||||
{
|
||||
if(Clientsock->open(QIODevice::ReadWrite))
|
||||
//if(Clientsock->joinMulticastGroup(remote_addr))
|
||||
{
|
||||
Clientsock->joinMulticastGroup(remote_addr);
|
||||
Clientsock->setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption,1024*1024*8);
|
||||
Clientsock->setSocketOption(QAbstractSocket::MulticastTtlOption, 3);
|
||||
|
||||
connect(Clientsock, SIGNAL(readyRead()),
|
||||
this, SLOT(readPendingDatagramsClient()));
|
||||
|
||||
Node node;
|
||||
node.sock = Clientsock;
|
||||
node.addr = remote_addr;
|
||||
node.port = remote_port;
|
||||
|
||||
clientSockets.append(node);
|
||||
qDebug() << "UdpSocket open:"
|
||||
<< remote_addr
|
||||
<< local_port
|
||||
<< remote_port;
|
||||
|
||||
isSuccess = true;
|
||||
emit showMessage(tr("UdpSocket open"));
|
||||
}
|
||||
else
|
||||
{
|
||||
isSuccess = false;
|
||||
qDebug() << "sock not open";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
isSuccess = false;
|
||||
qWarning("sock is not binded.");
|
||||
delete Clientsock;
|
||||
}
|
||||
|
||||
return isSuccess;
|
||||
|
||||
}
|
||||
|
||||
void DLink::readPendingDatagramsSerialPort(void)
|
||||
{
|
||||
QByteArray datagram = serialPort->readAll();
|
||||
mavlinknode->setbuff(SourceType::s_port,datagram);
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < datagram.size(); ++i) {
|
||||
num.append(QString::number((uint8_t)datagram.at(i) & 0xFF,16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
//qDebug() << "reci";
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
//qDebug() << "client recieve";
|
||||
|
||||
}
|
||||
|
||||
|
||||
//在这里做一个检查缓冲区有没有数,有数据就往上发的一个函数
|
||||
//dlink底下的所有协议都可以往这个缓存发数据
|
||||
|
||||
|
||||
Reference in New Issue
Block a user