|
|
|
#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<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(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<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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void EncodeModelCamera::setIPandPort(netStruct net) {
|
|
|
|
m_net = net;
|
|
|
|
// 断开 重连
|
|
|
|
cameraUDP->abort();
|
|
|
|
cameraUDP->bind(QHostAddress(m_net.localIp), m_net.localPort);
|
|
|
|
}
|