添加DLink,用于把所有的通讯设备都聚到一起管理的一个插件
This commit is contained in:
+161
@@ -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); //接收完一帧数据并处理
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user