广播方式升级从机成功
This commit is contained in:
@@ -100,6 +100,11 @@ signals:
|
||||
};
|
||||
|
||||
|
||||
using namespace std;
|
||||
// using namespace std::placeholders;
|
||||
|
||||
typedef std::function<void(int addr,int ack,myarray data)> prots_end_cbfun;
|
||||
typedef std::function<void(int rate,mystring data)> prots_rate_cbfun;
|
||||
|
||||
|
||||
|
||||
@@ -116,6 +121,8 @@ public:
|
||||
timer_retry_=nullptr;
|
||||
times_retry=0;
|
||||
addr_response=0;
|
||||
end_cb=nullptr;
|
||||
rate_cb=nullptr;
|
||||
}
|
||||
virtual ~HandleBoardCast() {
|
||||
if(timer_!=nullptr){
|
||||
@@ -145,6 +152,10 @@ public:
|
||||
addr|=1<<(adr-1);
|
||||
}
|
||||
}
|
||||
void set_cbfun(prots_end_cbfun end_fun,prots_rate_cbfun rate_fun){
|
||||
this->end_cb=end_fun;
|
||||
this->rate_cb=rate_fun;
|
||||
}
|
||||
signals:
|
||||
void timeout_stop_retry_signal();
|
||||
void timeout_stop_signal();
|
||||
@@ -156,39 +167,52 @@ protected:
|
||||
this->cmd=cmd;
|
||||
this->data_send=data;
|
||||
this->times_retry=times;
|
||||
this->addr_response=0;
|
||||
if(timer_retry_==nullptr){
|
||||
timer_retry_=new QTimer();
|
||||
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry);
|
||||
connect(timer_retry_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry);
|
||||
connect(this,&HandleBoardCast::timeout_stop_retry_signal,timer_retry_,&QTimer::stop);
|
||||
connect(this,&HandleBoardCast::timeout_start_retry_signal,this,&HandleBoardCast::timeout_start_retry_cb);
|
||||
}
|
||||
qDebug("handle_board:start retry");
|
||||
timeout_retry();
|
||||
// timeout_retry();
|
||||
// emit timeout_start_retry_signal(5);
|
||||
timeout_start_retry_cb(5);
|
||||
return 0;
|
||||
}
|
||||
// 发送操作结束信号
|
||||
int end(int ack,myarray data){
|
||||
emit end_signal(0x1f,ack,data);
|
||||
if(end_cb!=nullptr){
|
||||
end_cb(0x1f,ack,data);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
void rate(int rate,mystring str){
|
||||
emit rate_signal(rate,str);
|
||||
if(rate_cb!=nullptr){
|
||||
rate_cb(rate,str);
|
||||
}
|
||||
}
|
||||
// 开始超时计时器,此计时器用于整个操作的超时
|
||||
void timeout_start(int ms){
|
||||
qDebug("handle_board:start timeout");
|
||||
if(timer_==nullptr){
|
||||
timer_=new QTimer();
|
||||
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout);
|
||||
connect(this,&HandleBoardCast::timeout_stop_signal,timer_,&QTimer::stop);
|
||||
connect(this,&HandleBoardCast::timeout_start_signal,this,&HandleBoardCast::timeout_start_cb);
|
||||
}else{
|
||||
emit timeout_start_signal(ms);
|
||||
// timer_->start(ms);
|
||||
}
|
||||
// emit timeout_start_signal(ms);
|
||||
timeout_start_cb(ms);
|
||||
}
|
||||
void timeout_start_cb(int ms){
|
||||
timer_->start(ms);
|
||||
qDebug("handle_board:start timeout");
|
||||
timer_->setInterval(ms);
|
||||
timer_->start();
|
||||
}
|
||||
void timeout_start_retry_cb(int ms){
|
||||
timer_retry_->start(ms);
|
||||
qDebug("handle_board:start retry");
|
||||
timer_retry_->setInterval(ms);
|
||||
timer_retry_->start();
|
||||
}
|
||||
// 停止超时计时器,此方法同时停止重发计时器
|
||||
void timeout_stop(){
|
||||
@@ -217,10 +241,11 @@ private:
|
||||
s.append(data_send);
|
||||
emit send_data_signal(0x1f,cmd,s);
|
||||
// timer_retry_->start(300);
|
||||
emit timeout_start_retry_signal(300);
|
||||
//emit timeout_start_retry_signal(300);
|
||||
timeout_start_retry_cb(1000);
|
||||
}else{
|
||||
// timer_retry_->stop();
|
||||
emit timeout_stop_retry_signal();
|
||||
timeout_stop_retry();
|
||||
}
|
||||
}
|
||||
private:
|
||||
@@ -228,9 +253,12 @@ private:
|
||||
QTimer *timer_retry_;
|
||||
int times_retry;
|
||||
myarray data_send;
|
||||
prots_end_cbfun end_cb;
|
||||
prots_rate_cbfun rate_cb;
|
||||
signals:
|
||||
void send_data_signal(int addr, int cmd, myarray data);
|
||||
void end_signal(int addr,int ack,myarray data);
|
||||
void rate_signal(int rate,mystring str);
|
||||
};
|
||||
|
||||
|
||||
@@ -260,6 +288,10 @@ protected:
|
||||
Codec *codec_;
|
||||
QList<HandleSlave *> slaves;
|
||||
HandleBoardCast *broadcast_;
|
||||
signals:
|
||||
void boardcast_dolater_signal(int cmd,myarray data);
|
||||
void slave_dolater_signal(int cmd,myarray data);
|
||||
|
||||
};
|
||||
|
||||
prot_slave *protSlave();
|
||||
|
Reference in New Issue
Block a user