新广播命令测试检测,注码正常,加宽了数据上报的时间片

添加异常代码9,槽任务未执行
This commit is contained in:
ranchuan
2023-12-21 18:45:48 +08:00
parent d709a522ea
commit 6cf5e9e720
12 changed files with 301 additions and 55 deletions

View File

@@ -340,7 +340,7 @@ int elec_err_classify(int err)
// 找到异常代码序号
int elec_report_err(elec_judge_def *e)
{
static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,20,0};
static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,9,20,0};
uint8_t index=0;
for (int i=0;i<sizeof(pro_table);i++){
for(int j=0;j<ERR_LIST_LEN;j++){

View File

@@ -12,6 +12,7 @@ typedef struct{
uint8_t ret_count;// 返回值个数
uint8_t errcode;
uint8_t task_index;
uint8_t exe_flag;// 此项为1则已执行
uint8_t params[20];
uint8_t rets[20];
}task_def;

View File

@@ -187,6 +187,7 @@ void CheckerExt_Slot(void)
if(fun){
fun();
checker_runcfg.rtv_index-=checker_runcfg.rtv_count;
t->exe_flag=1;
}
exe_ret|=checker_runcfg.excue_rtv;
memcpy(t->rets,&checker_runcfg.Test_Rtv[checker_runcfg.rtv_index],checker_runcfg.rtv_count*2);

View File

@@ -835,18 +835,36 @@ void EW_Test_WriteUID(void)
return;
}
delay_os_ms(50);
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);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
if(uc_rtv){
uc_rtv=1;
goto end;
}
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
if(uc_rtv){
uc_rtv=2;
goto end;
}
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);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
if(uc_rtv){
uc_rtv=3;
goto end;
}
delay_os_ms(50);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
uc_rtv = EW_WriteMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
if(uc_rtv){
uc_rtv=4;
goto end;
}
end:
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
@@ -859,10 +877,11 @@ void EW_Test_VerifyUID(void)
System_State_un state;
if(JQXT_Test_IsNeedBind() == 0)
{
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
return;
uc_rtv=0;
goto end;
}
//读UID MTP
delay_ms(50);
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))
@@ -875,11 +894,11 @@ void EW_Test_VerifyUID(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(1,checker_runcfg.task_info.runindex);
return;
uc_rtv=1;
goto end;
}
delay_ms(50);
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
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))
{
@@ -891,8 +910,8 @@ void EW_Test_VerifyUID(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(2,checker_runcfg.task_info.runindex);
return;
uc_rtv=2;
goto end;
}
//读PWD MTP
@@ -909,8 +928,8 @@ void EW_Test_VerifyUID(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(3,checker_runcfg.task_info.runindex);
return;
uc_rtv=3;
goto end;
}
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
@@ -925,8 +944,8 @@ void EW_Test_VerifyUID(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(4,checker_runcfg.task_info.runindex);
return;
uc_rtv=4;
goto end;
}
//读UID
@@ -939,8 +958,8 @@ void EW_Test_VerifyUID(void)
}
if(uc_rtv > 0)
{
Checker_MaskResult(5,checker_runcfg.task_info.runindex);
return;
uc_rtv=5;
goto end;
}
//验证PWD
memcpy(EW_RunBuf,checker_runcfg.writepwd,checker_runcfg.pwd_len);
@@ -948,8 +967,8 @@ void EW_Test_VerifyUID(void)
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;
uc_rtv=6;
goto end;
}
//读状态
delay_ms(200);
@@ -957,10 +976,12 @@ void EW_Test_VerifyUID(void)
// 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;
uc_rtv=7;
goto end;
}
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
end:
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
@@ -973,7 +994,7 @@ void EW_Test_ReadMTP(void)
uint8_t addr=checker_runcfg.params[0];
uint8_t len=checker_runcfg.params[1];
delay_ms(50);
uc_rtv|EW_ReadMTP(checker_runcfg.netid,addr,EW_RunBuf,len);
uc_rtv|=EW_ReadMTP(checker_runcfg.netid,addr,EW_RunBuf,len);
Checker_SetRtv((uint16_t *)EW_RunBuf,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
@@ -993,6 +1014,80 @@ void EW_Test_WriteMTP(void)
// 读流水号
void EW_Test_ReadSN(void)
{
uint8_t uc_rtv=0;
uint8_t addr=9;
uint8_t len=4;
typedef union{
uint8_t arr[4];
uint32_t data;
}temp_def;
temp_def temp={0};
uint32_t sn;
sn=checker_runcfg.params[0]|(checker_runcfg.params[1]<<16);
if(sn>=134217728)
{
// 如果流水号超过了2^27 则失败
uc_rtv=1;
goto end;
}
delay_ms(50);
uc_rtv|=EW_ReadMTP(checker_runcfg.netid,addr,temp.arr,len);
if(uc_rtv){
uc_rtv=2;
goto end;
}
// 流水号域如果不为要设置的流水号则失败
temp.data>>=5;
if((temp.data)!=sn){
uc_rtv=3;
}
end:
Checker_SetRtv((uint16_t *)&temp,checker_runcfg.rtv_count);
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
// 写流水号,读改写
void EW_Test_WriteSN(void)
{
uint8_t uc_rtv=0;
uint8_t addr=9;
uint8_t len=4;
typedef union{
uint8_t arr[4];
uint32_t data;
}temp_def;
temp_def temp={0};
uint32_t sn;
delay_ms(50);
uc_rtv|=EW_ReadMTP(checker_runcfg.netid,addr,temp.arr,len);
if(uc_rtv){
uc_rtv=1;
goto end;
}
if(sn>=134217728)
{
// 如果流水号超过了2^27 则失败
uc_rtv=2;
goto end;
}
temp.data=(temp.data&0x1f)|(sn<<5);
uc_rtv |= EW_WriteMTP(checker_runcfg.netid,addr,temp.arr,len);
if(uc_rtv){
uc_rtv=3;
goto end;
}
end:
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
}
void EW_Empty(void)
{
@@ -1054,6 +1149,8 @@ CheckerExt_Slot, //34 任务插槽
EW_Test_ReadMTP, //35 读取mtp
EW_Test_WriteMTP, //36 写入mtp
CheckerExt_SetCbv, //37 设置电阻校准值
EW_Test_ReadSN, //38 读取流水号
EW_Test_WriteSN, //39 写入流水号
(void*)0 //数组结束
};

View File

@@ -1221,6 +1221,121 @@ void JQ_Test_Toggle(void)
}
/*rc{
写入流水号,使用读改写
par0,par1,流水号,小端存储
}*/
void JQ_Test_WriteSN(void)
{
uint8_t uc_rtv = 0;
uint8_t uc_ack;
uint8_t uc_otpAddr = 20;
uint8_t uc_writeCount = 4;
typedef union{
uint8_t arr[4];
uint32_t data;
}temp_def;
temp_def temp={0};
uint32_t sn=0;
JQ_EnWOTP();
JQ_EnWOTP();
for(int i = 0; i < uc_writeCount;i++)
{
uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpAddr+i,1,temp.arr+i);
if(uc_ack < 1)
{
uc_rtv = 1;
goto end;
}
}
sn=checker_runcfg.params[0]|(checker_runcfg.params[1]<<16);
if(sn>=134217728)
{
// 如果流水号超过了2^27 则失败
uc_rtv=2;
goto end;
}
// 流水号域如果有值且不为要设置的流水号则失败
if((temp.data&(~0x1f))!=0){
if((temp.data>>5)!=sn){
uc_rtv=3;
}
goto end;
}
temp.data=temp.data|(sn<<5);
for(int i = 0; i < uc_writeCount;i++)
{
uc_ack = JQ_WriteOTP(uc_otpAddr+i,1,temp.arr+i);
if(uc_ack != 1)
{
uc_rtv = 4;
goto end;
}
}
end:
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
return;
}
/*rc{
校验流水号
par0,par1,流水号,小端存储
ret校验失败则此任务失败
rtv返回读取的流水号数据
}*/
void JQ_Test_ReadSN(void)
{
uint8_t uc_rtv = 0;
uint8_t uc_ack;
uint8_t uc_otpAddr = 20;
uint8_t uc_writeCount = 4;
typedef union{
uint8_t arr[4];
uint32_t data;
}temp_def;
temp_def temp={0};
uint32_t sn=0;
JQ_EnWOTP();
JQ_EnWOTP();
for(int i = 0; i < uc_writeCount;i++)
{
uc_ack = JQ_ReadOTP(CHECKER_NET_ID,uc_otpAddr+i,1,temp.arr+i);
if(uc_ack < 1)
{
uc_rtv = 1;
goto end;
}
}
sn=checker_runcfg.params[0]|(checker_runcfg.params[1]<<16);
if(sn>=134217728)
{
// 如果流水号超过了2^27 则失败
uc_rtv=2;
goto end;
}
// 流水号域如果不为要设置的流水号则失败
temp.data>>=5;
if((temp.data)!=sn){
uc_rtv=3;
}
end:
Checker_MaskResult(uc_rtv,checker_runcfg.task_info.runindex);
Checker_SetRtv((uint16_t *)&temp,checker_runcfg.rtv_count);
return;
}
CheckerTask jqtaskArray[CHECKER_MAXID_COUNT] ={
Checker_PowerPrapare, //0 电源准备
JQ_Test_PowerOn, //1 上电充能
@@ -1266,6 +1381,8 @@ CheckerExt_Repeat ,//40 重新执行任务
CheckerExt_SetUID ,//41 设置uid数据到小板
CheckerExt_Slot ,//42 任务插槽
CheckerExt_SetCbv ,//43 设置电阻校准值
JQ_Test_WriteSN ,//44 写入流水号
JQ_Test_ReadSN ,//45 读取流水号
(void*)0 //数组结束
};