重新构建的批检仪主板程序
This commit is contained in:
@@ -1,18 +1,10 @@
|
||||
|
||||
#include "codec.h"
|
||||
#include "base/crc.h"
|
||||
#include "interface/codec_ym.h"
|
||||
|
||||
class CodecYm : public Codec
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
CodecYm() : Codec()
|
||||
{
|
||||
is_big_data = false;
|
||||
num_to_read = 0;
|
||||
}
|
||||
~CodecYm() {}
|
||||
// 重载接收字节函数
|
||||
bool recvByte(int byte)
|
||||
bool CodecYm::recvByte(int byte)
|
||||
{
|
||||
bool ack = false;
|
||||
if (fullFrame == true)
|
||||
@@ -74,26 +66,38 @@ public:
|
||||
return fullFrame;
|
||||
}
|
||||
// 重载解码函数
|
||||
QByteArray decode(int &srcAddr, int &dstAddr, int &cmd, QByteArray data)
|
||||
myarray CodecYm::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
|
||||
{
|
||||
Q_UNUSED(srcAddr);
|
||||
Q_UNUSED(dstAddr);
|
||||
QByteArray r;
|
||||
myarray r;
|
||||
if(packCheck(data)==true){
|
||||
cmd=this->cmd;
|
||||
if (is_big_data == false)
|
||||
r = data.mid(7, len - 3);
|
||||
else
|
||||
r = data.mid(11, len - 7);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
bool CodecYm::packCheck(myarray data)
|
||||
{
|
||||
bool ack=false;
|
||||
if (data.size() < 9)
|
||||
{
|
||||
// 主机一帧数据至少9字节
|
||||
qWarning("recv data len too less");
|
||||
return r;
|
||||
return ack;
|
||||
}
|
||||
|
||||
if ((uint8_t(data[0]) != 0x59u) || (uint8_t(data[1]) != 0x6du))
|
||||
{
|
||||
// 帧头不对
|
||||
qWarning("frame head not 0x59 0x6d");
|
||||
return r;
|
||||
return ack;
|
||||
}
|
||||
|
||||
int len = (data[2] | (data[3] << 8));
|
||||
len = (data[2] | (data[3] << 8));
|
||||
if (len == 65535)
|
||||
{
|
||||
// 重新设置数据长度
|
||||
@@ -108,10 +112,10 @@ public:
|
||||
{
|
||||
// 如果长度不相等则产生了数据丢失
|
||||
qWarning("recv data have lossed");
|
||||
return r;
|
||||
return ack;
|
||||
}
|
||||
uint8_t chk_a = 0, chk_b = 0;
|
||||
// crc::crc16((uint8_t *)data.data(),2,len+4,&chk_a,&chk_b);
|
||||
crc::crc16((uint8_t *)data.data(),2,len+4,&chk_a,&chk_b);
|
||||
if (chk_a != uint8_t(data[data.size() - 2]) || chk_b != uint8_t(data[data.size() - 1]))
|
||||
{
|
||||
// crc校验不对
|
||||
@@ -122,15 +126,58 @@ public:
|
||||
cmd_no = data[5] | (data[6] << 8);
|
||||
cmd = data[4];
|
||||
// 数据负载
|
||||
if (is_big_data == false)
|
||||
r = data.mid(7, len - 3);
|
||||
else
|
||||
r = data.mid(11, len - 7);
|
||||
return r;
|
||||
return true;
|
||||
}
|
||||
myarray CodecYm::encode(int srcAddr, int dstAddr, int cmd, myarray data)
|
||||
{
|
||||
Q_UNUSED(srcAddr);
|
||||
Q_UNUSED(dstAddr);
|
||||
myarray t;
|
||||
uint32_t len=data.size()+3;
|
||||
|
||||
t.append(0x59u);
|
||||
t.append(0x6du);
|
||||
t.append(0x43u);
|
||||
if(len<65535)
|
||||
{
|
||||
t.append((len)&0xff);
|
||||
t.append((len)>>8);
|
||||
t.append(cmd);
|
||||
t.append(cmd_no&0xff);
|
||||
t.append(cmd_no>>8);
|
||||
}else{
|
||||
len+=4;
|
||||
t.append(0xff);
|
||||
t.append(0xff);
|
||||
t.append(cmd);
|
||||
t.append(cmd_no&0xff);
|
||||
t.append(cmd_no>>8);
|
||||
t.append(len&0xff);
|
||||
t.append((len>>8)&0xff);
|
||||
t.append((len>>16)&0xff);
|
||||
t.append((len>>24)&0xff);
|
||||
}
|
||||
t.append(data);
|
||||
uint8_t chk_a,chk_b;
|
||||
crc::crc16((uint8_t *)t.data(),3,len+5,&chk_a,&chk_b);
|
||||
t.append(chk_a);
|
||||
t.append(chk_b);
|
||||
return t;
|
||||
}
|
||||
|
||||
private:
|
||||
bool is_big_data;
|
||||
int num_to_read;
|
||||
int cmd_no;
|
||||
};
|
||||
|
||||
|
||||
|
||||
Codec *codec_ym_get()
|
||||
{
|
||||
static Codec *codec_=nullptr;
|
||||
if(codec_==nullptr){
|
||||
codec_=new CodecYm();
|
||||
}
|
||||
return codec_;
|
||||
}
|
||||
|
||||
|
||||
codec_export(codec_ym,codec_ym_get);
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user