添加广播方式升级
This commit is contained in:
@@ -6,26 +6,36 @@ void prot_slave::init()
|
||||
if_ = interFaceFind("can");
|
||||
codec_ = codecFind("codec_slave");
|
||||
mycfg *cfg_ = syscfg();
|
||||
if(if_==nullptr||codec_==nullptr){
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < cfg_->slave_num; i++)
|
||||
{
|
||||
slaves.append(nullptr);
|
||||
}
|
||||
if_->set_irq([=](myarray recv)
|
||||
{
|
||||
if(codec_->packCheck(recv)==true){
|
||||
int cmd,src,dst;
|
||||
HandleSlave *handle=nullptr;
|
||||
myarray data=codec_->decode(src,dst,cmd,recv);
|
||||
if((src>slaves.size())||(src<=0)){
|
||||
qWarning("slave addr err:%d",src);
|
||||
int pack_len=0;
|
||||
if(pack_len=codec_->packCheck(recv),pack_len>0){
|
||||
int cmd,src,dst;
|
||||
HandleSlave *handle=nullptr;
|
||||
myarray data=codec_->decode(src,dst,cmd,recv);
|
||||
if((src>slaves.size())||(src<=0)){
|
||||
qWarning("slave addr err:%d",src);
|
||||
}else{
|
||||
if((broadcast_!=nullptr)&&(broadcast_->busy)){
|
||||
broadcast_->addr_response|=1<<(src-1);
|
||||
if(broadcast_->check_response()==true)
|
||||
broadcast_->dolater(cmd,data);
|
||||
}else{
|
||||
handle=slaves[src-1];
|
||||
if(handle!=nullptr){
|
||||
handle->dolater(cmd,data);
|
||||
}else{
|
||||
qWarning("slave addr=%d not have handle.",src);
|
||||
}
|
||||
handle=slaves[src-1];
|
||||
if(handle!=nullptr){
|
||||
handle->dolater(cmd,data);
|
||||
}else{
|
||||
qWarning("slave addr=%d not have handle.",src);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -51,17 +61,38 @@ bool prot_slave::set_slave_handle(int addr, HandleSlave *handle)
|
||||
delete temp;
|
||||
}
|
||||
}
|
||||
handle->addr=addr;
|
||||
connect(handle, &HandleSlave::send_data_signal, this, &prot_slave::send_data_slot);
|
||||
slaves.replace(addr - 1, handle);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool prot_slave::set_boardcast_handle(QList<int> addrs,HandleBoardCast *handle)
|
||||
{
|
||||
if (broadcast_ != nullptr)
|
||||
{
|
||||
if (broadcast_->busy != 0)
|
||||
{
|
||||
delete handle;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
delete broadcast_;
|
||||
}
|
||||
}
|
||||
broadcast_=handle;
|
||||
broadcast_->trun_list_to_bit(addrs);
|
||||
connect(handle, &HandleBoardCast::send_data_signal, this, &prot_slave::send_data_slot);
|
||||
return true;
|
||||
}
|
||||
|
||||
void prot_slave::send_data_slot(int addr, int cmd, myarray data)
|
||||
{
|
||||
if ((if_ != nullptr) && (codec_ != nullptr))
|
||||
{
|
||||
myarray send = codec_->encode(0, addr, cmd, data);
|
||||
if_->write(send);
|
||||
if_->write(addr,send);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +102,7 @@ prot_slave *protSlave()
|
||||
if (g_protslave == nullptr)
|
||||
{
|
||||
g_protslave = new prot_slave();
|
||||
// g_protslave->init();
|
||||
g_protslave->init();
|
||||
}
|
||||
return g_protslave;
|
||||
}
|
||||
|
Reference in New Issue
Block a user