添加DLink,用于把所有的通讯设备都聚到一起管理的一个插件

This commit is contained in:
hm
2020-02-26 00:19:59 +08:00
parent 21ff0ea1e7
commit 9502eecea5
12 changed files with 637 additions and 396 deletions
+161
View File
@@ -0,0 +1,161 @@
#include "dlink.h"
#include <string.h>
//#include "windows.h"
#include "QDateTime"
DLink::DLink(QObject *parent) : QObject(parent)
{
}
DLink::~DLink()
{
}
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);
}
if (DLink::serialPort)
{
DLink::serialPort->write((const char *)msg,len);
}
return 0;
}
void DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity parity)
{
if (serialPort)
{
serialPort->close();
delete serialPort;
}
serialPort = new QSerialPort(port, this);
if (serialPort->open(QIODevice::ReadWrite))
{
serialPort->setBaudRate(baudrate);
serialPort->setParity(parity);
serialPort->setDataBits(QSerialPort::Data8);
serialPort->setStopBits(QSerialPort::OneStop);
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagrams()));
}
else
{
delete serialPort;
serialPort = nullptr;
}
}
bool DLink::statesPort()
{
return (serialPort != nullptr)?(true):(false);
}
void DLink::stopPort()
{
serialPort->close();
delete serialPort;
serialPort = nullptr;
}
void DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int local_port)
{
Clientsock = new QUdpSocket(this);
if (Clientsock->bind(QHostAddress::Any, local_port))
{
if(Clientsock->open(QIODevice::ReadWrite))
{
connect(Clientsock, SIGNAL(readyRead()),
this, SLOT(readPendingDatagramsClient()));
Node node;
node.sock = Clientsock;
node.addr = remote_addr;
node.port = remote_port;
clientSockets.append(node);
qDebug() << "sock open:"
<< remote_addr
<< local_port
<< remote_port;
}
else
{
qDebug() << "sock not open";
}
}
else
{
qWarning("sock is not binded.");
delete Clientsock;
}
}
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());
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());
//SendMessageTo(ret,(uint8_t *)datagram.data(),datagram.size());
//qDebug() << "Client Read All" << 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); //接收完一帧数据并处理
}
}
*/
}
}