重新构建的批检仪主板程序
This commit is contained in:
91
interface/codec_m4.cpp
Normal file
91
interface/codec_m4.cpp
Normal file
@@ -0,0 +1,91 @@
|
||||
#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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool codec_m4::packCheck(myarray data)
|
||||
{
|
||||
if(data[0]!=0xff){
|
||||
return false;
|
||||
}
|
||||
if(data.size()>=2&&(data.size()==(data[1]+2))){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
if(packCheck(data)){
|
||||
return myarray(data.mid(2));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Codec *codec_get()
|
||||
{
|
||||
static Codec *codec_=nullptr;
|
||||
if(codec_==nullptr){
|
||||
codec_=new codec_m4();
|
||||
}
|
||||
return codec_;
|
||||
}
|
||||
|
||||
|
||||
codec_export(codec_m4,codec_get);
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user