From 35f6597d9723724814e7966b3177eb6736be300f Mon Sep 17 00:00:00 2001 From: andy Date: Sun, 15 Oct 2023 20:59:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=95=E7=8B=AC=E6=B3=A8?= =?UTF-8?q?=E7=A0=81=E5=91=BD=E4=BB=A4,=E5=AE=9E=E7=8E=B0=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E6=97=B6=E6=B3=A8=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- checher_slave.uvoptx | 8 +- source/ReadMe.txt | 3 + source/elec_det/elec_det.c | 164 ++++++++++++++++++++++++----------- source/elec_det/elec_det.h | 1 + source/main/compiler_info.h | 4 +- source/main/main.c | 1 + source/prebuild.py | 2 +- source/soft/mystdlib.c | 1 + source/task/tran_for_slave.c | 6 +- 9 files changed, 129 insertions(+), 61 deletions(-) diff --git a/checher_slave.uvoptx b/checher_slave.uvoptx index d03c784..b1dd4f5 100644 --- a/checher_slave.uvoptx +++ b/checher_slave.uvoptx @@ -1167,7 +1167,7 @@ elec_det - 0 + 1 0 0 0 @@ -1495,7 +1495,7 @@ rt_thread - 1 + 0 0 0 0 @@ -1871,7 +1871,7 @@ task - 0 + 1 0 0 0 @@ -1939,7 +1939,7 @@ codec - 0 + 1 0 0 0 diff --git a/source/ReadMe.txt b/source/ReadMe.txt index ceee94c..79db817 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -210,3 +210,6 @@ 2023.10.12 添加 app_debug 分类 ,app 分类禁用调试,程序压缩到100k以下 app启动时如果boot魔数校验错误则自动升级bootloader +2023.10.15 + 添加单独注码命令,实现检测时注码 + diff --git a/source/elec_det/elec_det.c b/source/elec_det/elec_det.c index 32b3391..6f74d84 100644 --- a/source/elec_det/elec_det.c +++ b/source/elec_det/elec_det.c @@ -29,6 +29,7 @@ typedef struct{ CheckerTask_Info_st* task_info_array[PLAN_MAX_TASK];//方案参数结构体指针 + int task_num; int scheme_inited; array_def *data; }self_def; @@ -37,13 +38,15 @@ typedef struct{ static self_def g_self; +int elec_check_scheme(void); +void elec_load_scheme(void); +int elec_parper_power(void); // 初始化 int elec_init(void) { void Ye_BoardInit(void); - int elec_parper_power(void); Ye_BoardInit(); elec_bootinfo(); DBG_LOG("local addr:%d.",elec_local_addr()); @@ -56,9 +59,6 @@ int elec_scheme_init(void) { self_def *s=&g_self; int ret=0; - int elec_check_scheme(void); - void elec_load_scheme(void); - int elec_parper_power(void); if(elec_check_scheme()!=0){ // 方案校验失败 DBG_WARN("scheme check failed."); @@ -149,9 +149,6 @@ array_def *elec_check_result(void) array_def *r=0; if(s->data){ r=arr_duplicate(s->data); - }else{ - r=arr_creat(); - arr_append(r,2); } return arr_temp(r); } @@ -257,7 +254,9 @@ static int elec_check_scheme(void) board_st.plan_id = ~0; LED1_Out_Off; return 1; - } + }else{ + board_st.plan_id = *((uint32_t*)APP_TEST_PLAN_ADDR); + } return 0; } @@ -276,18 +275,83 @@ static void elec_load_scheme(void) s->task_info_array[uc_index] = 0; } uc_index = 0; + s->task_num=0; while((pinfo_st->runindex != 0xFF) && (uc_index < PLAN_MAX_TASK)) { s->task_info_array[uc_index++] = pinfo_st; + s->task_num++; ul_len = pinfo_st->param_rtv_count & 0x0F; ul_len = (ul_len<<1)+5; - pinfo_st = (CheckerTask_Info_st*)((uint8_t*)pinfo_st + ul_len); } } +// 注码 参数校验 +static int elec_code_param_check(array_def *uid_psw) +{ + if((uid_psw==0)||(arr_length(uid_psw)==0)){ + return 1; + } + if(arr_length(uid_psw)!=(arr_get(uid_psw,0)+arr_get(uid_psw,1)+1)){ + return 2; + } + if(arr_get(uid_psw,2)!=0){ + return 2; + } + if((arr_get(uid_psw,0)>13)||(arr_get(uid_psw,1)>8)){ + return 4; + } + return 0; +} + +// 注码 准备参数 +static int elec_code_load_param(array_def *uid_psw) +{ + uint8_t pwd_len=0,uid_len=0; + uid_len = arr_get(uid_psw,0); + pwd_len = arr_get(uid_psw,1); + checker_runcfg.uid_len=uid_len; + checker_runcfg.pwd_len=pwd_len; + memcpy(checker_runcfg.writeuid,arr_data(uid_psw)+3,uid_len); + memcpy(checker_runcfg.writepwd,arr_data(uid_psw)+3+uid_len,pwd_len); + return 0; +} + +// 检测 准备参数 +static int elec_check_load_task_param(uint8_t taskid, + CheckerTask_Info_st *task_par,CheckerTask task_fun) +{ + memset(&checker_runcfg.task_info,0,sizeof(CheckerTask_Info_st)); + memset(checker_runcfg.params,0,20); + checker_runcfg.param_count = 0;//参数个数 + checker_runcfg.rtv_count = 0;//返回值个数 + checker_runcfg.excue_rtv = 0; + checker_runcfg.task_info.retry_time = 0; + if(taskid>=CHECKER_MAXID_COUNT){ + DBG_WARN("taskid=%d out of bound.",taskid); + return 1; + } + if(task_par==0){ + DBG_WARN("can not find task params."); + return 2; + } + if(task_fun==0){ + DBG_WARN("can not find task fun."); + return 3; + } + + // 装载参数 + memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st)); + checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F; + checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F; + memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2); + return 0; +} + + + // 进行检测 array_def *elec_check_with_scheme(array_def *uid_psw) { @@ -300,7 +364,14 @@ array_def *elec_check_with_scheme(array_def *uid_psw) CheckerTask task_fun=0; uint8_t res=0; array_def *r=arr_creat(); + CHECK_DO(s->data,arr_delete); + memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); chip_type=(board_st.plan_id >> 12 ) & 0x0F; + if(elec_code_param_check(uid_psw)==0){ + checker_runcfg.code_bind_check_flag = 1;//检测 绑定一起执行 + elec_code_load_param(uid_psw); + } + if(s->scheme_inited==0){ DBG_WARN("scheme not init."); arr_append(r,1); @@ -311,39 +382,16 @@ array_def *elec_check_with_scheme(array_def *uid_psw) arr_append(r,2); return arr_temp(r); } - memset(&checker_runcfg,0,sizeof(Checker_RunCfg_st)); int task_index=0; - int err_flag=0; LED1_Out_Off; - while((taskid_table[task_index]!=0xff)&&(task_indextask_num){ taskid=taskid_table[task_index]; - memset(checker_runcfg.params,0,20); - checker_runcfg.param_count = 0;//参数个数 - checker_runcfg.rtv_count = 0;//返回值个数 - checker_runcfg.excue_rtv = 0; - checker_runcfg.task_info.retry_time = 0; - if(taskid>=CHECKER_MAXID_COUNT){ - DBG_WARN("taskid=%d out of bound.",taskid); - break; - } - task_par= s->task_info_array[task_index]; - if(task_par==0){ - DBG_WARN("can not find task params."); - break; - } task_fun=tasks_fun_table[chip_type][taskid]; - if(task_fun==0){ - DBG_WARN("can not find task fun."); + task_par= s->task_info_array[task_index]; + if(elec_check_load_task_param(taskid,task_par,task_fun)){ break; } - // 装载参数 - rt_memcpy(&checker_runcfg.task_info,task_par,sizeof(CheckerTask_Info_st)); - checker_runcfg.param_count = checker_runcfg.task_info.param_rtv_count & 0x0F; - checker_runcfg.rtv_count = (checker_runcfg.task_info.param_rtv_count >> 4) & 0x0F; - rt_memcpy(checker_runcfg.params,checker_runcfg.task_info.params,checker_runcfg.param_count*2); - // 执行任务 for(int i=0;i<1+task_par->retry_time;i++) { @@ -357,22 +405,16 @@ array_def *elec_check_with_scheme(array_def *uid_psw) DBG_LOG("task_index:%d,taskid:%d,ret=%d.",task_index,taskid,checker_runcfg.excue_rtv); // 找寻下一个任务 - if((checker_runcfg.excue_rtv != 0) - && (checker_runcfg.task_info.error_jumpto != 0) - && (checker_runcfg.task_info.error_jumpto != 0xFF) - ) - { - uint8_t uc_index = task_index+1;//如果时跳至下一个,直接顺序执行 - task_index = checker_runcfg.task_info.error_jumpto; - while(uc_index < task_index) - { - Checker_MaskResult(1,uc_index);//将跳过的步骤标记未执行 - //调整参数返回值下标,将跳过的步骤里面的返回值存储空间保留 - checker_runcfg.rtv_index += (s->task_info_array[uc_index]->param_rtv_count >> 4) & 0x0F; - uc_index++; + task_index++; + if(checker_runcfg.excue_rtv != 0){ + uint8_t err_to=checker_runcfg.task_info.error_jumpto; + uint8_t temp; + if(err_to>s->task_num-1) err_to=s->task_num-1; + for(;task_indextask_info_array[task_index]->param_rtv_count >> 4) & 0x0F; + checker_runcfg.rtv_index+=temp; } - }else{ - task_index++;//正常情况直接顺序执行 } } @@ -380,13 +422,29 @@ array_def *elec_check_with_scheme(array_def *uid_psw) arr_appends(r,checker_runcfg.Task_Result,8); arr_appends(r,checker_runcfg.Task_Excute,8); arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2); + s->data=arr_duplicate(r); + return arr_temp(r); +} + +// 单独注码 +array_def *elec_code(array_def *uid_psw) +{ + self_def *s=&g_self; + array_def *r=arr_creat(); + uint8_t ret=0; + int check_ret=0; CHECK_DO(s->data,arr_delete); + check_ret=elec_code_param_check(uid_psw); + if(check_ret){ + arr_append(r,check_ret); + return arr_temp(r); + } + elec_code_load_param(uid_psw); + ret = XT_UID_PWD_Bind(); + arr_append(r,ret); s->data=arr_duplicate(r); return arr_temp(r); } - - - diff --git a/source/elec_det/elec_det.h b/source/elec_det/elec_det.h index 184bedb..fede35e 100644 --- a/source/elec_det/elec_det.h +++ b/source/elec_det/elec_det.h @@ -30,6 +30,7 @@ array_def *elec_check_resistor(void); array_def *elec_check_with_scheme(array_def *uid_psw); +array_def *elec_code(array_def *uid_psw); diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index e0c55c4..16eabac 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,8 +6,8 @@ -#define BUILD_DATE "2023-10-12 23:23:27" -#define SOFT_VERSION "0.03" +#define BUILD_DATE "2023-10-15 20:45:20" +#define SOFT_VERSION "2.00" diff --git a/source/main/main.c b/source/main/main.c index c935317..d8ea926 100644 --- a/source/main/main.c +++ b/source/main/main.c @@ -193,6 +193,7 @@ static int sysinfo(list_def *argv) cmd_print("startup: %s",bk_get_currtype()); cmd_print("watch dog: %s",bk_wdog_fun()?"on":"off"); cmd_print("reboot times: %d",bk_reboot_times()); + cmd_print("bootloader: %s",(bk_check_magic_num()==0)?"ok":"err"); print_sys_param(par); return 0; } diff --git a/source/prebuild.py b/source/prebuild.py index 9b9f717..1023078 100644 --- a/source/prebuild.py +++ b/source/prebuild.py @@ -7,7 +7,7 @@ import mycopy # 定义软件版本号 -SOFT_VERION = "0.03" +SOFT_VERION = "2.00" diff --git a/source/soft/mystdlib.c b/source/soft/mystdlib.c index eba93bf..7c1188d 100644 --- a/source/soft/mystdlib.c +++ b/source/soft/mystdlib.c @@ -351,6 +351,7 @@ void *tappend(void *p,void *del) { temp_def *t=&g_tempptr; void *ret=NULL; + if(p==NULL) return p; rt_mutex_take(t->mutex,RT_WAITING_FOREVER); { if(tempptr_find(t,p)==0) diff --git a/source/task/tran_for_slave.c b/source/task/tran_for_slave.c index d357e72..8c645de 100644 --- a/source/task/tran_for_slave.c +++ b/source/task/tran_for_slave.c @@ -46,7 +46,10 @@ static void slave_del(ucport_def *u) static int check_result_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str) { slave_def *s=(slave_def *)u; - emit tran_reply_signal(u->p,arr_temp(elec_check_result())); + array_def *r=elec_check_result(); + if(r){ + emit tran_reply_signal(u->p,arr_temp(r)); + } return 0; } static ucport_def *check_result(tran_def *t, uint8_t cmd,array_def *data) @@ -60,6 +63,7 @@ static ucport_def *check_result(tran_def *t, uint8_t cmd,array_def *data) return (ucport_def *)u; } transmit_export(ym_slave,0x02,check_result) +transmit_export(ym_slave,0x18,check_result)