Files
checker_host/interface/codec_m4.cpp

88 lines
1.4 KiB
C++

#include "codec_m4.h"
#include "QDebug"
bool codec_m4::recvByte(int byte)
{
bool ack = false;
if (fullFrame == true)
{
return fullFrame;
}
data.append(byte);
switch (data.size())
{
case 1:
if (uint8_t(data[0]) == 0xff)
{
num_to_read = 2;
}
else
{
data.remove(0, 1);
num_to_read = 0;
}
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;
}
int codec_m4::packCheck(myarray data)
{
if (data[0] != 0xff)
{
return 0;
}
if (data.size() >= 2 && (data.size() >= (data[1] + 2)))
{
return data[1] + 2;
}
return 0;
}
myarray codec_m4::encode(int srcAddr, int dstAddr, int cmd, myarray data)
{
myarray r;
r.append(0xff);
r.append(char(data.size()));
r.append(data);
return r;
}
myarray codec_m4::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
{
// qDebug("m4 recv:%s",data.toHex(' ').data());
if (packCheck(data))
{
return data.mid(2,data[1]);
}
return myarray();
}
Codec *codec_get()
{
static Codec *codec_ = nullptr;
if (codec_ == nullptr)
{
codec_ = new codec_m4();
}
return codec_;
}
codec_export(codec_m4, codec_get);