移植与电子模块通信相关代码

This commit is contained in:
andy
2023-10-06 18:47:05 +08:00
parent bf440a35bc
commit 8e3a140bec
77 changed files with 13331 additions and 1168 deletions

View File

@@ -20,49 +20,15 @@
#define PORT_NUM 2
typedef struct _tran_def{
ucport_def *u;
port_mcu *port[PORT_NUM];
uint32_t slave_online;// 对应位为1则从机在线
int is_busy;
}tran_def;
// 打印从机状态
static void tran_print_slave_stat(void *t)
{
list_def *l=list_creat_int();
uint32_t a=tran_get_slave_online(t);
for(int i=0;i<PORT_NUM;i++)
{
if(a&(1<<i)){
list_append_int(l,i+1);
}
}
DBG_LOG("slave online stat:%s",str_temp(list_string(l)));
//DBG_LOG("slave online stat:%08x",a);
list_delete(l);
}
// 扫描从机
static void tran_scan_slave(void *t)
{
for(int i=0;i<PORT_NUM;i++)
{
// 只给在线设备升级方案
port_mcu *mcu=tran_get_portm(t,i);
if(mcu&&(tran_get_slave_online(t)&(1<<i))){
// f9用于获取运行状态失败则设备不在线
port_start(mcu,usercmd_creat(0xf9,arr_temp(arr_creat())));
}
}
later_execute(tran_print_slave_stat,t,5500);
}
@@ -71,27 +37,18 @@ static int tran_init(void)
{
sig_thread t=thread_creat(10);
tran_def *tran= tran_creat(t);
tran->slave_online=0xfffff;
app_variable("tran",tran,0);
later_execute(tran_scan_slave,tran,500);
return 0;
}
app_init_export(tran_init);
void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str);
void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str);
tran_def *tran_creat(sig_thread t)
{
tran_def *tr=calloc(1,sizeof(tran_def));
param_check(tr);
port_init();
for(int i=0;i<PORT_NUM;i++)
{
tr->port[i]=port_creat(i+1,t);
// 连接操作结束信号
connect(tr->port[i],port_end_signal,0,tr,tran_end_slot);
}
return tr;
}
@@ -133,33 +90,16 @@ void tran_recv_slot(tran_def *t,const char *codec_name,uint8_t cmd,array_def *da
}
}
void tran_set_slave_online(tran_def *t,uint8_t addr,int stat)
{
param_check(t);
uint32_t a=0;
a=1<<(addr-1);
if(stat)
t->slave_online|=a;
else{
t->slave_online&=(~a);
//DBG_LOG("a=%08x",a);
}
}
uint32_t tran_get_slave_online(tran_def *t)
{
param_check(t);
return t->slave_online;
}
void tran_end_slot(tran_def *obj,port_mcu *src,void *data,int ack,char *err_str)
void tran_end_slot(tran_def *obj,void *src,void *data,int ack,char *err_str)
{
//DBG_LOG("tran end slot");
param_check(obj);
if(strcmp(err_str,"timeout")==0)
{
tran_set_slave_online(obj,port_get_addr(src),0);
}else{
tran_set_slave_online(obj,port_get_addr(src),1);
}
if((obj->u)&&obj->u->doend)
obj->u->doend(obj->u,src,data,ack,err_str);
@@ -175,13 +115,7 @@ int tran_get_busy(tran_def *t)
}
// 获取指定通道
port_mcu *tran_get_portm(tran_def *t,int index)
{
if(index<0||index>=PORT_NUM)
return 0;
return t->port[index];
}
@@ -374,13 +308,6 @@ static void when_scheme_done(ucport_def *u)
DBG_LOG("memused:%d",mem_perused());
rt_thread_mdelay(100);
DBG_LOG("memused:%d",mem_perused());
for(int i=0;i<PORT_NUM;i++)
{
// 只给在线设备升级方案
port_mcu *mcu=tran_get_portm(tran,i);
if(mcu&&(tran_get_slave_online(tran)&(1<<i)))
port_start(mcu,updata_scheme_creat(check_scheme()->slave_data,2048));
}
}
static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data)
{