Files
checker_host/interface/codec_m4.cpp

88 lines
1.4 KiB
C++
Raw Normal View History

2023-11-26 23:05:35 +08:00
#include "codec_m4.h"
#include "QDebug"
bool codec_m4::recvByte(int byte)
{
2023-11-27 14:31:00 +08:00
bool ack = false;
if (fullFrame == true)
{
return fullFrame;
}
data.append(byte);
switch (data.size())
{
case 1:
if (uint8_t(data[0]) == 0xff)
2023-11-26 23:05:35 +08:00
{
2023-11-27 14:31:00 +08:00
num_to_read = 2;
2023-11-26 23:05:35 +08:00
}
2023-11-27 14:31:00 +08:00
else
2023-11-26 23:05:35 +08:00
{
2023-11-27 14:31:00 +08:00
data.remove(0, 1);
num_to_read = 0;
2023-11-26 23:05:35 +08:00
}
2023-11-27 14:31:00 +08:00
break;
case 2:
{
int len = data[1];
num_to_read = len + 2;
}
break;
default:
break;
}
// 此时一帧数据已完成
if (num_to_read > 0 && num_to_read == data.size())
{
data.remove(0, 2);
qDebug() << "recv_m4:" << QString(data) << endl;
ack = true;
num_to_read = 0;
}
fullFrame = ack;
return fullFrame;
2023-11-26 23:05:35 +08:00
}
2023-11-29 15:36:45 +08:00
int codec_m4::packCheck(myarray data)
2023-11-26 23:05:35 +08:00
{
2023-11-27 14:31:00 +08:00
if (data[0] != 0xff)
{
2023-11-29 15:36:45 +08:00
return 0;
2023-11-27 14:31:00 +08:00
}
2023-11-29 15:36:45 +08:00
if (data.size() >= 2 && (data.size() >= (data[1] + 2)))
2023-11-27 14:31:00 +08:00
{
2023-11-29 15:36:45 +08:00
return data[1] + 2;
2023-11-27 14:31:00 +08:00
}
2023-11-29 15:36:45 +08:00
return 0;
2023-11-26 23:05:35 +08:00
}
myarray codec_m4::encode(int srcAddr, int dstAddr, int cmd, myarray data)
{
2023-11-27 14:31:00 +08:00
myarray r;
r.append(0xff);
r.append(char(data.size()));
r.append(data);
return r;
2023-11-26 23:05:35 +08:00
}
myarray codec_m4::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
{
2023-11-29 15:36:45 +08:00
// qDebug("m4 recv:%s",data.toHex(' ').data());
2023-11-27 14:31:00 +08:00
if (packCheck(data))
{
return data.mid(2,data[1]);
2023-11-27 14:31:00 +08:00
}
return myarray();
2023-11-26 23:05:35 +08:00
}
Codec *codec_get()
{
2023-11-27 14:31:00 +08:00
static Codec *codec_ = nullptr;
if (codec_ == nullptr)
{
codec_ = new codec_m4();
}
return codec_;
2023-11-26 23:05:35 +08:00
}
2023-11-27 14:31:00 +08:00
codec_export(codec_m4, codec_get);