129 lines
2.3 KiB
C
129 lines
2.3 KiB
C
#include "tran_for_coder.h"
|
|
#include "debug.h"
|
|
#include "mymisc.h"
|
|
#include "mystdlib.h"
|
|
#include "board.h"
|
|
#include "dev_flash.h"
|
|
#include "prot_uc.h"
|
|
#include "coder_lib.h"
|
|
#include "PSDGenerate.h"
|
|
#include "mystring.h"
|
|
#include "coder_judge.h"
|
|
#include "JQ_UIDGenerate.h"
|
|
#include "transmit.h"
|
|
#include "elec_judge.h"
|
|
#include "elec_task_slot.h"
|
|
#include "elec_det.h"
|
|
|
|
|
|
|
|
typedef struct{
|
|
ucport_def u;
|
|
char uid_code[20];
|
|
uint8_t save_code[12];
|
|
uint8_t psw[10];
|
|
char psw_ascii[10];
|
|
}slave_def;
|
|
|
|
|
|
|
|
|
|
static slave_def *slave_creat(void)
|
|
{
|
|
slave_def *u=calloc(1,sizeof(slave_def));
|
|
return u;
|
|
}
|
|
|
|
|
|
|
|
static void slave_del(ucport_def *u)
|
|
{
|
|
slave_def *s=(slave_def *)u;
|
|
free(u);
|
|
}
|
|
|
|
|
|
|
|
// 赋码仪 注码使用xt算法
|
|
static int code_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
|
|
{
|
|
slave_def *s=(slave_def *)u;
|
|
uint8_t *d=arr_data(data);
|
|
if(d[0]!=1){
|
|
// 只支持1个通道
|
|
return 1;
|
|
}
|
|
if(check_shell_code((const char *)&d[6])==0){
|
|
// 管壳码无效
|
|
return 2;
|
|
}
|
|
if(coder_shell_to_uid((const char *)&d[1],(const char *)&d[6],s->uid_code)!=0){
|
|
// uid校验失败
|
|
return 3;
|
|
}
|
|
{
|
|
array_def *r=arr_creat();
|
|
arr_append(r,1);
|
|
arr_append(r,0);
|
|
emit tran_reply_signal(u->p,arr_temp(r));
|
|
}
|
|
|
|
coder_uid_to_save(s->uid_code,s->save_code);
|
|
GetPasswordByUidCode((const uint8_t *)s->uid_code,s->psw);
|
|
sprintf(s->psw_ascii,"%02X%02X%02X%02X",
|
|
s->psw[0],s->psw[1],s->psw[2],s->psw[3]);
|
|
array_def *uid_psw=arr_creat();
|
|
arr_append(uid_psw,8);
|
|
arr_append(uid_psw,4);
|
|
arr_append(uid_psw,1);
|
|
arr_appends(uid_psw,s->save_code,8);
|
|
arr_appends(uid_psw,s->psw,4);
|
|
array_def *r=elec_check_with_scheme(uid_psw);
|
|
arr_delete(uid_psw);
|
|
if(r){
|
|
array_def *ret=arr_creat();
|
|
arr_append(ret,1);
|
|
arr_append(ret,1);
|
|
arr_append(ret,arr_get(r,0));
|
|
arr_appends(ret,&d[6],13);
|
|
arr_appends(ret,s->uid_code,16);
|
|
arr_appends(ret,s->psw_ascii,8);
|
|
emit tran_send_signal(u->p,0x82,arr_temp(ret));
|
|
}
|
|
return 0;
|
|
}
|
|
static ucport_def *code(tran_def *t, uint8_t cmd,array_def *data)
|
|
{
|
|
int ret=0;
|
|
slave_def *u=slave_creat();
|
|
u->u.p=t;
|
|
u->u.del=slave_del;
|
|
u->u.dolater=code_dolater;
|
|
u->u.dolater(&u->u,cmd,data,"ok");
|
|
return (ucport_def *)u;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
transmit_export(ym_checker,0x02,code)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|