赋码仪错误判断

This commit is contained in:
ranchuan
2023-07-06 19:02:03 +08:00
parent 350ac689c4
commit aca05d5dc0
17 changed files with 1378 additions and 264 deletions

View File

@@ -11,6 +11,7 @@
#include "coder_lib.h"
#include "PSDGenerate.h"
#include "mystring.h"
#include "coder_judge.h"
// 这个文件解析跟赋码仪相关的命令
@@ -93,6 +94,8 @@ static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *e
emit tran_send_signal(w->u.p,0x82,arr_temp(a));
tran_set_busy(w->u.p,0);
g_self.step=0;
// 把命令字改为0x82用于接收主机应答
w->u.cmd=0x82;
}
}
@@ -123,6 +126,14 @@ static void write_del(ucport_def *u)
}
static int write_uid_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
DBG_LOG("recv write_uid end signal.");
return 0;
}
static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
{
if(arr_length(data)<140+4+1){
@@ -134,6 +145,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
u->u.p=t;
u->u.del=write_del;
u->u.doend=write_uid_end;
u->u.dolater=write_uid_dolater;
u->addrs_num=arr_get(data,0);
memcpy(u->year,arr_data(data)+1,4);
DBG_LOG("coder, year=%s",u->year);
@@ -329,7 +341,13 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
ack_d[3]=(errcode>>8)&0xff;
ack_d[4]=(errcode>>16)&0xff;
ack_d[5]=(errcode>>24)&0xff;
if(ack_d[1]==0) ack_d[1]=ack_d[2];
if(ack_d[1]==0){
// 先判断主要错误,如果没有主要错误,则填充为子错误
ack_d[1]=coder_judge(arr_data(data));
if(ack_d[1]==0){
ack_d[1]=ack_d[2];
}
}
}else{
}
@@ -342,6 +360,8 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
arr_appends(a,w->ack,(6)*10);
emit tran_send_signal(w->u.p,0x81,arr_temp(a));
tran_set_busy(w->u.p,0);
// 把命令字改为0x81用于接收主机应答
w->u.cmd=0x81;
g_self.step=1;
}
}
@@ -372,6 +392,11 @@ static void check_del(ucport_def *u)
free(u);
}
static int check_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{
DBG_LOG("recv check end signal.");
return 0;
}
static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
@@ -384,6 +409,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
u->u.p=t;
u->u.del=check_del;
u->u.doend=check_end;
u->u.dolater=check_dolater;
u->addrs_num=arr_get(data,0);
u->type=arr_get(data,0);
// 默认失败