test_sdk/hw/ADCCluster/idserver.cpp

62 lines
1.6 KiB
C++
Raw Permalink Normal View History

#include "idserver.h"
idServer::idServer(uint16_t sn, QObject *parent)
: QObject{parent},
_socket(new QUdpSocket()),
_addresses(new QList<QHostAddress>()),
_sn(sn)
{
_socket = new QUdpSocket();
QObject::connect(_socket, &QUdpSocket::readyRead, [=] {
_processData(_socket->receiveDatagram());
});
foreach(auto __if, QNetworkInterface::allInterfaces()) {
foreach(auto __addressEntry, __if.addressEntries()) {
bool __isIPv4 = false;
__addressEntry.ip().toIPv4Address(&__isIPv4);
if (__isIPv4) {
_addresses->append(__addressEntry.broadcast());
}
}
}
}
void idServer::sendIdRequest()
{
foreach(auto __address, *_addresses) {
_socket->writeDatagram(stpClient::packIdSnRequest(_sn), __address, 7000);
}
}
void idServer::_processData(QNetworkDatagram dg)
{
QByteArray __data = dg.data();
if (__data.size() < CONST_HEADER_SIZE) return;
trans_ns::bytes2word __size;
__size.bytes.L = __data[1];
__size.bytes.H = __data[2];
if (__data[0] == stpProtocol_ns::packetType::DATA) {
if (uint8_t(__data[3]) == uint8_t(stpProtocol_ns::stpCommand::ID)
&& (__size.word == 5)) {
{
trans_ns::bytes2word __model;
__model.bytes.L = __data[4];
__model.bytes.H = __data[5];
trans_ns::bytes2word __sn;
__sn.bytes.L = __data[6];
__sn.bytes.H = __data[7];
emit newIdMessage(__model.word, __sn.word, dg.senderAddress());
}
}
}
}