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