添加错误代码

This commit is contained in:
ranchuan
2023-06-28 18:08:38 +08:00
parent c2b79fe523
commit 28889fa479
21 changed files with 2299 additions and 99 deletions

View File

@@ -17,6 +17,13 @@
typedef struct{
int step;// 检测注码顺序
}self_def;
static self_def g_self;
// 从机地址偏移
static inline int slave_addr_off(void)
{
@@ -85,6 +92,7 @@ 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;
}
}
@@ -105,6 +113,7 @@ static void write_uid_return_ok(void *p)
}
emit tran_send_signal(u->u.p,0x82,arr_temp(a));
tran_set_busy(u->u.p,0);
g_self.step=0;
}
@@ -120,6 +129,7 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
DBG_WARN("cmd format err.");
return 0;
}
int ret=0;
write_uid_def *u=calloc(1,sizeof(write_uid_def));
u->u.p=t;
u->u.del=write_del;
@@ -135,10 +145,10 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
memcpy(u->item[i].shell_code,d_off+i*14+1,13);
DBG_LOG("slave:%d, shell=%s",i,u->item[i].shell_code);
// 生成uid码
coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
ret|=coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
DBG_LOG("slave:%d, uid=%s",i,u->item[i].uid_code);
// 生成存储码
coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
ret|=coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
// 生成密码
GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]);
d_=u->item[i].uid_pw_hex;
@@ -155,6 +165,8 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
u->ack[i*39+0]=i+slave_addr_off();
u->ack[i*39+1]=1;
}
tran_set_busy(t,1);
for(int i=0;i<10;i++)
{
@@ -169,7 +181,14 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
array_def *a=arr_creat();
arr_append(a,u->addrs_num);
arr_append(a,0);
if(g_self.step==1){
if(ret==0)
arr_append(a,TRAN_ERR_NONE);
else
arr_append(a,TRAN_ERR_PARAM);
}else{
arr_append(a,TRAN_ERR_STEP);
}
emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功
@@ -236,6 +255,45 @@ transmit_export(ym_checker,0x03,write_uid2)
// 判断检测数据错误码
// 返回 errcode,1=param/0=execute,taskindex,paramindex
static uint32_t in_range_err(const uint8_t *src_data,const uint8_t *errbit)
{
const scheme_def *s=check_scheme();
const scheme_task_def *t;
int temp;
int index=0;
uint32_t ret=0;
for(int i=0;i<s->task_num;i++)
{
t=&s->task[i];
if((errbit[i/8]&(1<<(i%8)))!=0)
{
ret=(t->err&0xff)|(i<<16);
return ret;
}
for(int j=0;j<t->item_num;j++)
{
temp=src_data[index*2]|(src_data[index*2+1]<<8);
if(temp>=t->range[j].min&&temp<=t->range[j].max){
// 正常
}else{
ret=(t->range[j].err&0xff)|(1<<8)|(i<<16)|(j<<24);
return ret;
}
index++;
}
}
return ret;
}
typedef struct{
ucport_def u;
uint8_t addrs_num;
@@ -258,10 +316,16 @@ static void check_end(ucport_def *u,port_mcu *src,void *data,int ack,char *err_s
}
addr-=1;
uint32_t errcode=0;
uint8_t *ack_d=&w->ack[(addr)*6];
ack_d[0]=addr+slave_addr_off();
ack_d[1]=ack;
// TODO: 还有4字节数据
errcode=in_range_err(arr_data(data)+8+8,arr_data(data));
ack_d[2]=errcode&0xff;
ack_d[3]=(errcode>>8)&0xff;
ack_d[4]=(errcode>>16)&0xff;
ack_d[5]=(errcode>>24)&0xff;
w->ack_num++;
if(w->ack_num>=10)
@@ -272,6 +336,7 @@ 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);
g_self.step=1;
}
}
@@ -292,6 +357,7 @@ static void check_return_ok(void *p)
}
emit tran_send_signal(u->u.p,0x81,arr_temp(a));
tran_set_busy(u->u.p,0);
g_self.step=1;
}
@@ -335,7 +401,7 @@ static ucport_def *check(tran_def *t, uint8_t cmd,array_def *data)
array_def *a=arr_creat();
arr_append(a,u->addrs_num);
arr_append(a,u->type);
arr_append(a,0);
arr_append(a,TRAN_ERR_NONE);
emit tran_reply_signal(u->u.p,arr_temp(a));
// test:稍后返回成功