#include "encodemodelcamera.h" #include "global.h" EncodeModelCamera::EncodeModelCamera(QObject *parent) : QObject{parent} { cameraUDP = new QUdpSocket(this); // cameraUDP->bind(QHostAddress("172.10.1.104"), 8899); cmdArray.insert(0, 0xFA); cmdArray.insert(1, 0xFA); connect(cameraUDP, SIGNAL(readyRead()), this, SLOT(ReadData())); } void EncodeModelCamera::SendCMD(QByteArray cmdDataArray) { cmdArray.clear(); cmdArray.insert(0, 0xFA); cmdArray.insert(1, 0xFA); cmdArray.append(cmdDataArray); uint8_t *data = reinterpret_cast(cmdArray.data()); uint16_t crc16 = calCRC16(data, cmdArray.size()); QByteArray byteArray; QDataStream stream(&byteArray, QIODevice::WriteOnly); stream.setByteOrder(QDataStream::BigEndian); stream << crc16; cmdArray.append(byteArray); cameraUDP->writeDatagram(cmdArray, QHostAddress(m_net.remoteIp), m_net.remotePort); } // upd socket收到数据 void EncodeModelCamera::ReadData() { QByteArray array; QHostAddress address; quint16 port; array.resize(cameraUDP->bytesAvailable()); // 根据可读数据来设置空间大小 cameraUDP->readDatagram(array.data(), array.size(), &address, &port); // 读取数据 // 校验 int len = array.size(); if (len <= 2) { return; } uint8_t *data = reinterpret_cast(array.data()); uint16_t crc16 = calCRC16(data, array.size() - 2); uint16_t Rcrc = (array[len - 2] << 8) | array[len - 1]; if (crc16 == Rcrc) { emit UDP_Receive(array); } } void EncodeModelCamera::setIPandPort(netStruct net) { m_net = net; // 断开 重连 cameraUDP->abort(); cameraUDP->bind(QHostAddress(m_net.localIp), m_net.localPort); }