添加错误代码
This commit is contained in:
		| @@ -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:稍后返回成功 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 ranchuan
					ranchuan