90 lines
1.7 KiB
C++
90 lines
1.7 KiB
C++
|
|
|
|
#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
|