与上位机测试通过
This commit is contained in:
@@ -48,15 +48,9 @@ static void write_uid_end(ucport_def *u,port_mcu *src,void *data,int ack,char *e
|
||||
w->ack_num++;
|
||||
d[0]=addr-1;
|
||||
d[1]=ack;
|
||||
if(ack==0)
|
||||
{
|
||||
memcpy(&d[2],w->item[addr-1].shell_code,13);
|
||||
memcpy(&d[2+13],w->item[addr-1].uid_code,16);
|
||||
memcpy(&d[2+13+16],w->item[addr-1].password,8);
|
||||
}else{
|
||||
// 失败的数据全部填充'0'
|
||||
memset(&d[2],'0',37);
|
||||
}
|
||||
memcpy(&d[2],w->item[addr-1].shell_code,13);
|
||||
memcpy(&d[2+13],w->item[addr-1].uid_code,16);
|
||||
memcpy(&d[2+13+16],w->item[addr-1].password,8);
|
||||
if(w->ack_num>=10)
|
||||
{
|
||||
array_def *a=arr_creat();
|
||||
@@ -95,7 +89,7 @@ static void write_del(ucport_def *u)
|
||||
|
||||
static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
|
||||
{
|
||||
if(arr_length(data)<242){
|
||||
if(arr_length(data)<140+4+1){
|
||||
DBG_WARN("cmd format err.");
|
||||
return 0;
|
||||
}
|
||||
@@ -105,16 +99,25 @@ static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
|
||||
u->u.doend=write_uid_end;
|
||||
u->addrs_num=arr_get(data,0);
|
||||
memcpy(u->year,arr_data(data)+1,4);
|
||||
DBG_LOG("coder, year=%s",u->year);
|
||||
// 数据固定140字节,如果不检测某通道,则该通道填充占位符
|
||||
uint8_t *d_off=arr_data(data)+4+1;
|
||||
uint8_t *d_;
|
||||
for(int i=0;i<10;i++)
|
||||
{
|
||||
memcpy(u->item[i].shell_code,arr_data(data)+1+i*14,14);
|
||||
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);
|
||||
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);
|
||||
// 生成密码
|
||||
GetPasswordByUidCode((uint8_t *)u->item[i].uid_code,&u->item[i].uid_pw_hex[8]);
|
||||
d_=u->item[i].uid_pw_hex;
|
||||
DBG_LOG("slave:%d, uid_pw=%02X %02X %02X %02X %02X %02X %02X %02X "
|
||||
"%02X %02X %02X %02X ",i,d_[0],d_[1],d_[2],d_[3],d_[4],d_[5],d_[6],d_[7],
|
||||
d_[8],d_[9],d_[10],d_[11]);
|
||||
// 生成密码字符串
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
|
||||
u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
|
||||
@@ -191,56 +194,11 @@ static void write_uid2_end(ucport_def *u,port_mcu *src,void *data,int ack,char *
|
||||
|
||||
static ucport_def *write_uid2(tran_def *t, uint8_t cmd,array_def *data)
|
||||
{
|
||||
if(arr_length(data)<242){
|
||||
DBG_WARN("cmd format err.");
|
||||
return 0;
|
||||
}
|
||||
write_uid_def *u=calloc(1,sizeof(write_uid_def));
|
||||
u->u.p=t;
|
||||
u->u.del=write_del;
|
||||
u->u.doend=write_uid2_end;
|
||||
u->addrs_num=arr_get(data,0);
|
||||
memcpy(u->year,arr_data(data)+1,4);
|
||||
// 数据固定140字节,如果不检测某通道,则该通道填充占位符
|
||||
for(int i=0;i<10;i++)
|
||||
write_uid_def *u=(write_uid_def *)write_uid(t,cmd,data);
|
||||
if(u)
|
||||
{
|
||||
memcpy(u->item[i].shell_code,arr_data(data)+1+i*14,14);
|
||||
// 生成uid码
|
||||
coder_shell_to_uid(u->year,u->item[i].shell_code,u->item[i].uid_code);
|
||||
// 生成存储码
|
||||
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]);
|
||||
// 生成密码字符串
|
||||
sprintf(u->item[i].password,"%02X%02X%02X%02X",u->item[i].uid_pw_hex[8],
|
||||
u->item[i].uid_pw_hex[9],u->item[i].uid_pw_hex[10],u->item[i].uid_pw_hex[11]);
|
||||
u->u.doend=write_uid2_end;
|
||||
}
|
||||
// 默认失败
|
||||
for(int i=0;i<10;i++)
|
||||
{
|
||||
u->ack[i*39+0]=i;
|
||||
u->ack[i*39+1]=1;
|
||||
}
|
||||
tran_set_busy(t,1);
|
||||
for(int i=0;i<10;i++)
|
||||
{
|
||||
if(1){
|
||||
port_mcu *mcu=tran_get_portm(u->u.p,i);
|
||||
// 这里打开赋码操作
|
||||
if(mcu){
|
||||
port_start(mcu,code_creat(8,4,u->item[i].uid_pw_hex));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
array_def *a=arr_creat();
|
||||
arr_append(a,u->addrs_num);
|
||||
arr_append(a,0);
|
||||
emit tran_reply_signal(u->u.p,arr_temp(a));
|
||||
|
||||
// test:稍后返回成功
|
||||
//later_execute(write_uid_return_ok,u,500);
|
||||
|
||||
return (ucport_def *)u;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user