启动时调压改为查找任务id0,自检信息中的方案id由方案初始化时确定

接收到升级方案命令时把本机方案状态设置为无效
    检测电阻命令index为5时读取本机校准值
This commit is contained in:
ranchuan
2023-11-03 18:15:01 +08:00
parent 250f91bbad
commit c13291bc03
10 changed files with 100 additions and 56 deletions

View File

@@ -116,7 +116,11 @@ transmit_export(ym_slave,0x04,write_resistor_cbv)
// 测量桥丝阻值
static int check_resistor_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
emit tran_reply_signal(u->p,arr_temp(elec_check_resistor()));
uint8_t index=0;
if(data){
index=arr_get(data,0);
}
emit tran_reply_signal(u->p,arr_temp(elec_check_resistor(index)));
return 0;
}
static ucport_def *check_resistor(tran_def *t, uint8_t cmd,array_def *data)
@@ -282,6 +286,7 @@ typedef struct{
uint8_t device_state;
uint32_t flash_addr;
uint32_t flash_addr_base;
int erased;
}updata_def;
static updata_def g_updata;
@@ -445,24 +450,34 @@ static int write_data2_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e
uint32_t addr=(arr_get(data,0))|(arr_get(data,1)<<8)|(arr_get(data,2)<<16)|(arr_get(data,3)<<24);
int len=arr_length(data)-4;
int ret=0;
if(strcmp(err_str,"ok")!=0){
return -1;
}
if((addr)==MCU_TASKID_ADDR_BASE){
//flash_erase_scheme();
// 只擦除两个扇区
flash_erase_addr((uint32_t)flash_get_scheme());
flash_erase_addr((uint32_t)flash_get_scheme()+2048);
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin");
g_updata.flash_addr_base=MCU_TASKID_ADDR_BASE;
if(g_updata.erased==0){
flash_erase_scheme();
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_scheme(),"scheme.bin");
g_updata.flash_addr_base=MCU_TASKID_ADDR_BASE;
elec_scheme_deinit();
g_updata.erased=1;
}
}else if((addr)==MCU_JWT_ADDR_BASE){
flash_erase_jwtcode();
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_jwtcode(),"jwtcode.jwt");
g_updata.flash_addr_base=MCU_JWT_ADDR_BASE;
if(g_updata.erased==0){
flash_erase_jwtcode();
g_updata.flash_addr=creat_file_head((uint32_t)flash_get_jwtcode(),"jwtcode.jwt");
g_updata.flash_addr_base=MCU_JWT_ADDR_BASE;
g_updata.erased=1;
}
}
uint32_t offset=addr-g_updata.flash_addr_base;
addr=g_updata.flash_addr+offset;
ret=flash_write((uint8_t *)addr,&arr_data(data)[4],len);
array_def *r=arr_creat();
arr_append(r,(ret!=0));
arr_append(r,ret);
emit tran_reply_signal(u->p,arr_temp(r));
if(ret){
g_updata.erased=0;
}
return 0;
}
static ucport_def *write_data2(tran_def *t, uint8_t cmd,array_def *data)
@@ -486,6 +501,9 @@ static int load_scheme_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *e
array_def *r=arr_creat();
arr_append(r,ret);
emit tran_reply_signal(u->p,arr_temp(r));
// 此处如果重启的话会丢失缓存
// later_execute((void (*)(void *))bk_reboot_app,0,100);
g_updata.erased=0;
ret=elec_scheme_init();
return 0;
}

View File

@@ -307,11 +307,8 @@ static void updata_prepar_read(updata_def *u,uint8_t cmd,array_def *data)
static void when_scheme_done(ucport_def *u)
{
tran_def *tran=app_variable("tran",0,0);
if(tran==0){
DBG_WARN("can not fond variable \"tran\"");
return;
}
// 升级完成后延时50ms重启
later_execute((void (*)(void *))bk_reboot_app,0,50);
}
static ucport_def *tran_scheme(tran_def *t, uint8_t cmd,array_def *data)
{