#ifndef prot_pc_h__ #define prot_pc_h__ #include "QObject" #include "base/base.h" #include "QList" #include "interface/codec.h" #include "interface/interface.h" #include "base/mycfg.h" #include "QThread" #include "QTimer" // 定义处理命令的类 class HandlePc : public QObject { Q_OBJECT public: HandlePc() { busy = 0; timer_ = nullptr; } virtual ~HandlePc() { if(timer_!=nullptr){ delete timer_; } } virtual int dolater(int cmd, myarray data) = 0; virtual void timeout()=0; int busy; protected: void timeout_start(int ms){ if(timer_==nullptr){ timer_=new QTimer(); connect(timer_,&QTimer::timeout,this,&HandlePc::timeout); } timer_->start(ms); } void timeout_stop(){ if(timer_!=nullptr){ timer_->stop(); } } private: QTimer *timer_; signals: void send_data_signal(int cmd, myarray data); }; class ProtPc : public QObject { Q_OBJECT public: ProtPc() { if_ = nullptr; codec_ = nullptr; handle_ = nullptr; } ~ProtPc() {} void init(); bool docmd(int cmd,myarray data); public slots: void send_data_slot(int cmd, myarray data); protected: InterFace *if_; Codec *codec_; HandlePc *handle_; QThread thread; myarray recv_data; }; ProtPc *protPc(); typedef struct { int cmd; HandlePc *(*handle_get_fun)(); } handlepc_def; #define protpc_export(cmd_, fun_) \ __attribute__((used)) static handlepc_def _handlepc_##cmd_ __attribute__((section("protpc"))) = { \ .cmd = cmd_, \ .handle_get_fun = fun_, \ } #endif