重新构建的批检仪主板程序
This commit is contained in:
77
prot/prot_slave.cpp
Normal file
77
prot/prot_slave.cpp
Normal file
@@ -0,0 +1,77 @@
|
||||
#include "prot_slave.h"
|
||||
#include "QDebug"
|
||||
|
||||
|
||||
|
||||
|
||||
void prot_slave::init()
|
||||
{
|
||||
if_=interFaceFind("can");
|
||||
codec_=codecFind("codec_slave");
|
||||
mycfg *cfg_=syscfg();
|
||||
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);
|
||||
}else{
|
||||
handle=slaves[src-1];
|
||||
if(handle!=nullptr){
|
||||
handle->dolater(cmd,data);
|
||||
}else{
|
||||
qWarning("slave addr=%d not have handle.",src);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
bool prot_slave::set_slave_handle(int addr,HandleSlave *handle)
|
||||
{
|
||||
if((addr>slaves.size())||(addr<=0)){
|
||||
delete handle;
|
||||
return false;
|
||||
}
|
||||
HandleSlave *temp;
|
||||
temp=slaves[addr-1];
|
||||
if(temp!=nullptr){
|
||||
if(temp->busy!=0){
|
||||
delete handle;
|
||||
return false;
|
||||
}else{
|
||||
delete temp;
|
||||
}
|
||||
}
|
||||
connect(handle,&HandleSlave::send_data_signal,this,&prot_slave::send_data_slot);
|
||||
slaves.replace(addr-1,handle);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static prot_slave *g_protslave;
|
||||
prot_slave *protSlave(){
|
||||
if(g_protslave==nullptr){
|
||||
g_protslave=new prot_slave();
|
||||
//g_protslave->init();
|
||||
}
|
||||
return g_protslave;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user