You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/Src/ModelCamera/encodemodelcamera.cpp

57 lines
1.6 KiB
C++

#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<uint8_t*>(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<uint8_t*>(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);
}
}