添加写三码验三码任务,实现0x20任务,完成任务插槽机制

添加文件 tran_for_broadcast.c
This commit is contained in:
ranchuan
2023-12-18 18:17:21 +08:00
parent 8f28200ffe
commit 58c902a94f
13 changed files with 525 additions and 28 deletions

View File

@@ -119,6 +119,26 @@ static int calc_skip_num(int index)
/*rc{
设置UID和密码到小板内存三码绑定函数使用此数据
输入参数[0]=uid长度[1]=pwd长度[uid][pwd]
}*/
void CheckerExt_SetUID(void)
{
uint8_t pwd_len=0,uid_len=0;
uint8_t *uid_psw=(uint8_t *)checker_runcfg.params;
uint8_t ret=0;
uid_len = uid_psw[0];
pwd_len = uid_psw[1];
if(uid_len==0||pwd_len==0){
ret=1;
}
checker_runcfg.uid_len=uid_len;
checker_runcfg.pwd_len=pwd_len;
memcpy(checker_runcfg.writeuid,uid_psw+2,uid_len);
memcpy(checker_runcfg.writepwd,uid_psw+2+uid_len,pwd_len);
Checker_MaskResult(ret,checker_runcfg.task_info.runindex);
}
/*rc{
@@ -132,9 +152,11 @@ void CheckerExt_Slot(void)
{
int index;
uint16_t ret=0;
uint16_t exe_ret=0;
int self_index=checker_runcfg.task_info.runindex;
task_def *t=0;
void *task_slot=0;
CheckerTask fun=0;
if(checker_runcfg.param_count<1){
ret=1;
goto end;
@@ -149,12 +171,37 @@ void CheckerExt_Slot(void)
goto end;
}
while(t=task_slot_next(task_slot,(uint8_t)index),t){
// t->
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;
checker_runcfg.task_info.runindex=self_index;
checker_runcfg.param_count = t->par_count;
checker_runcfg.rtv_count = t->ret_count;
memcpy(checker_runcfg.params,t->params,checker_runcfg.param_count*2);
fun=elec_get_task_fun(t->task_id);
checker_runcfg.excue_rtv=1;
if(fun){
fun();
checker_runcfg.rtv_index-=checker_runcfg.rtv_count;
}
exe_ret|=checker_runcfg.excue_rtv;
memcpy(t->rets,&checker_runcfg.Test_Rtv[checker_runcfg.rtv_index],checker_runcfg.rtv_count*2);
memset(&checker_runcfg.Test_Rtv[checker_runcfg.rtv_index],0,checker_runcfg.rtv_count*2);
if(checker_runcfg.excue_rtv){
task_slot_add_err(task_slot,t->errcode);
}
}
if(elec_task_env_restore()){
ret=5;
ret=3;
goto end;
}
if(exe_ret){
ret=4;
}
end:
Checker_MaskResult(ret,self_index);
}

View File

@@ -19,7 +19,9 @@ void CheckerExt_CalcErr(void);
void CheckerExt_Repeat(void);
void CheckerExt_SetUID(void);
void CheckerExt_Slot(void);

View File

@@ -353,7 +353,7 @@ void EW_Test_VerifyThreedCode(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
return;
}
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
@@ -367,7 +367,7 @@ void EW_Test_VerifyThreedCode(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(2,checker_runcfg.task_info.runindex);
return;
}
@@ -383,7 +383,7 @@ void EW_Test_VerifyThreedCode(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(3,checker_runcfg.task_info.runindex);
return;
}
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
@@ -397,7 +397,7 @@ void EW_Test_VerifyThreedCode(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(4,checker_runcfg.task_info.runindex);
return;
}
@@ -409,30 +409,34 @@ void EW_Test_VerifyThreedCode(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(5,checker_runcfg.task_info.runindex);
return;
}
//验证PWD
memcpy(EW_RunBuf,EW_Test_PWD,checker_runcfg.pwd_len);
delay_ms(200);
uc_rtv = EW_VerfyPWD(checker_runcfg.netid,EW_RunBuf,checker_runcfg.pwd_len);
if(uc_rtv > 0)
{
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_MaskResult(6,checker_runcfg.task_info.runindex);
return;
}
//读状态
delay_ms(200);
uc_rtv = EW_ReadState(checker_runcfg.netid,(uint8_t*)state.datas);
if(uc_rtv > 0 || state.State_st.erprom_error >0 || state.State_st.pswd_flag == 0)
// if(uc_rtv > 0 || state.State_st.erprom_error >0 || state.State_st.pswd_flag == 0)
if(uc_rtv > 0 || state.State_st.pswd_flag == 0)
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
Checker_MaskResult(7,checker_runcfg.task_info.runindex);
return;
}
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
}
/*
@brief 自检
@param 自检模式
@param1 自检时间ms
@rtv 自检模式0x08的回读数据
*/
void EW_Test_CheckSelf()
@@ -441,8 +445,9 @@ void EW_Test_CheckSelf()
uint32_t ul_temp;
uint8_t uc_mode = checker_runcfg.params[0];
uc_rtv = EW_ChecSelf(checker_runcfg.netid,uc_mode,(uint8_t*)&ul_temp);
delay_ms(checker_runcfg.params[1]);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_SetRtv((uint16_t*)ul_temp,checker_runcfg.rtv_count);
}
/*
@@ -702,9 +707,9 @@ void EW_Test_EnBoom(void)
}
/*
@brief 起爆
@param0 采样超时
@param1 起爆电流AD
@param2 延迟采样
@param0 采样超时 0.01ms
@param1 起爆电流AD
@param2 延迟采样ms
*/
void EW_Test_Boom()
@@ -814,6 +819,147 @@ void EW_Test_PowerOFF(void)
/*
@brief 写三码数据
*/
void EW_Test_WriteUID(void)
{
uint8_t uc_rtv = 0;
if(JQXT_Test_IsNeedBind() == 0)
{
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
return;
}
memcpy(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len);
EW_RunBuf[checker_runcfg.uid_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
delay_os_ms(50);
memcpy(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len);
EW_RunBuf[checker_runcfg.pwd_len] = CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
/*
@breif 验证写入的三码数据
*/
void EW_Test_VerifyUID(void)
{
uint8_t uc_rtv = 0;
System_State_un state;
//读UID MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
return;
}
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(2,checker_runcfg.task_info.runindex);
return;
}
//读PWD MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(3,checker_runcfg.task_info.runindex);
return;
}
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(0 != memcmp(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(4,checker_runcfg.task_info.runindex);
return;
}
//读UID
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.uid_len);
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{
uc_rtv = 1;
}
if(uc_rtv > 0)
{
Checker_MaskResult(5,checker_runcfg.task_info.runindex);
return;
}
//验证PWD
memcpy(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len);
delay_ms(200);
uc_rtv = EW_VerfyPWD(checker_runcfg.netid,EW_RunBuf,checker_runcfg.pwd_len);
if(uc_rtv > 0)
{
Checker_MaskResult(6,checker_runcfg.task_info.runindex);
return;
}
//读状态
delay_ms(200);
uc_rtv = EW_ReadState(checker_runcfg.netid,(uint8_t*)state.datas);
// if(uc_rtv > 0 || state.State_st.erprom_error >0 || state.State_st.pswd_flag == 0)
if(uc_rtv > 0 || state.State_st.pswd_flag == 0)
{
Checker_MaskResult(7,checker_runcfg.task_info.runindex);
return;
}
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
}
void EW_Empty(void)
{
Checker_RunCfg_st *cfg=&checker_runcfg;
@@ -863,6 +1009,10 @@ EW_Updata, //27 升级
EW_Test_ChgEnergy, //28 充能统计
CheckerExt_CalcErr, //29 计算异常
CheckerExt_Repeat, //30 重新执行一次指定任务
EW_Test_WriteUID, //31 写入三码数据
EW_Test_VerifyUID, //32 验证三码数据
CheckerExt_SetUID, //33 配置三码数据到小板
CheckerExt_Slot, //34 任务插槽
(void*)0 //数组结束
};