#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);