#include "encodemodelcamera.h" #include "global.h" EncodeModelCamera::EncodeModelCamera(QObject *parent) : QObject{parent} { cameraUDP = new QUdpSocket(this); cameraUDP->bind(QHostAddress("127.0.0.1"),8899); cmdArray.insert(0,0xFA); cmdArray.insert(1,0xFA); connect(cameraUDP,SIGNAL(readyRead()),this,SLOT(ReadData())); } /** * @brief 发送三维建模相机指令 * @param cmdDataArray 指令ID与负载数据 */ 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("127.0.0.1"),8181); } //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); } }