#ifndef CODEC_H #define CODEC_H #include "QObject" #include "base/base.h" class Codec : public QObject { Q_OBJECT public: Codec() { fullFrame = false; } virtual ~Codec() {} // 返回true,则是一个完整的帧 // virtual bool packCheck(myarray data){return false;} // virtual bool recvByte(int byte){return false;} // virtual myarray encode(int srcAddr, int dstAddr, int cmd, myarray data){return myarray();} // virtual myarray decode(int &srcAddr, int &dstAddr, int &cmd, myarray data){return myarray();} virtual bool packCheck(myarray data)=0; virtual bool recvByte(int byte)=0; virtual myarray encode(int srcAddr, int dstAddr, int cmd, myarray data)=0; virtual myarray decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)=0; myarray decode(int &srcAddr, int &dstAddr, int &cmd) { if (fullFrame == true) { fullFrame = false; return decode(srcAddr, dstAddr, cmd, data); } return myarray(); } protected: bool fullFrame; myarray data; }; Codec *codecFind(const char *name); typedef struct{ const char *name; Codec *(*codec_get_fun)(); }codec_def; #define codec_export(name_,fun_) \ const static char __codec_##name_##_name[] __attribute__((section(".rodata.codecstr"))) = #name_; \ __attribute__((used)) static codec_def _codec_##name_ __attribute__((section("codecdef")))={\ .name=__codec_##name_##_name,\ .codec_get_fun=fun_,\ } #endif // CODEC_H