添加赋码设备注码命令,实现ew检测时注码
This commit is contained in:
@@ -296,6 +296,8 @@
|
||||
2023.12.18
|
||||
添加写三码验三码任务,实现0x20任务,完成任务插槽机制
|
||||
添加文件 tran_for_broadcast.c
|
||||
|
||||
2023.12.19
|
||||
添加赋码设备注码命令,实现ew检测时注码
|
||||
添加文件 tran_for_coder.c
|
||||
|
||||
|
||||
|
@@ -69,8 +69,12 @@ static int coder_calc_year(const char *year,const char shell_year,char *uid_year
|
||||
}
|
||||
// year是实时数据,鉴于12月31生产的雷管,year可能不同
|
||||
// 此时year-1来保证与uid码上的相同
|
||||
if(year[3]!=shell_year)
|
||||
y--;
|
||||
for(int i=0;i<10;i++){
|
||||
if((y%10)!=(shell_year-'0'))
|
||||
y--;
|
||||
else
|
||||
break;
|
||||
}
|
||||
uid_year[0]=y%100/10+'0';
|
||||
uid_year[1]=y%10+'0';
|
||||
if(uid_year[1]==shell_year)
|
||||
|
@@ -555,7 +555,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
|
||||
array_def *r=arr_creat();
|
||||
if(s->scheme_inited==0){
|
||||
DBG_WARN("scheme not init.");
|
||||
arr_append(r,1);
|
||||
arr_append(r,20);
|
||||
return arr_temp(r);
|
||||
}
|
||||
res=checker_runcfg.power_prapare_exe;
|
||||
@@ -568,7 +568,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
|
||||
|
||||
if(s->chip_type>=LENGTH(s->tasks_fun_table)){
|
||||
DBG_WARN("unknown chip type.");
|
||||
arr_append(r,2);
|
||||
arr_append(r,20);
|
||||
return arr_temp(r);
|
||||
}
|
||||
elec_check_result_clear();
|
||||
@@ -597,9 +597,9 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
|
||||
elec_judge_def *e=malloc(sizeof(elec_judge_def));
|
||||
elec_judge(e,s->task_num,checker_runcfg.Task_Result,
|
||||
checker_runcfg.Task_Excute,
|
||||
(uint8_t *)checker_runcfg.Test_Rtv,0,0);
|
||||
(uint8_t *)checker_runcfg.Test_Rtv,&res,0);
|
||||
free(e);
|
||||
arr_append(r,0);
|
||||
arr_append(r,res);
|
||||
arr_appends(r,checker_runcfg.Task_Result,8);
|
||||
arr_appends(r,checker_runcfg.Task_Excute,8);
|
||||
arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2);
|
||||
|
@@ -218,5 +218,7 @@ void CheckerExt_Slot(void)
|
||||
CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={
|
||||
CheckerExt_CalcErr,
|
||||
CheckerExt_Repeat,
|
||||
CheckerExt_SetUID,
|
||||
CheckerExt_Slot,
|
||||
};
|
||||
|
||||
|
@@ -157,7 +157,7 @@ void EW_Test_ReadUID(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(checker_runcfg.writeuid,EW_RunBuf,checker_runcfg.uid_len);
|
||||
memcpy(checker_runcfg.writeuid,EW_RunBuf,checker_runcfg.params[0]);
|
||||
ul_temp = Power_ConvCur(EW_FreeBack_MaxCur,EWDriver_Sample_R);
|
||||
ul_temp = (ul_temp + 500)/1000;
|
||||
|
||||
@@ -857,6 +857,11 @@ void EW_Test_VerifyUID(void)
|
||||
{
|
||||
uint8_t uc_rtv = 0;
|
||||
System_State_un state;
|
||||
if(JQXT_Test_IsNeedBind() == 0)
|
||||
{
|
||||
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
|
||||
return;
|
||||
}
|
||||
//读UID MTP
|
||||
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
|
||||
EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
|
||||
@@ -874,6 +879,7 @@ void EW_Test_VerifyUID(void)
|
||||
return;
|
||||
}
|
||||
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
|
||||
delay_ms(50);
|
||||
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1);
|
||||
if(EW_RunBuf[checker_runcfg.uid_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.uid_len))
|
||||
{
|
||||
@@ -891,6 +897,7 @@ void EW_Test_VerifyUID(void)
|
||||
|
||||
//读PWD MTP
|
||||
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
|
||||
delay_ms(50);
|
||||
EW_ReadMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1);
|
||||
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
|
||||
{
|
||||
@@ -906,6 +913,7 @@ void EW_Test_VerifyUID(void)
|
||||
return;
|
||||
}
|
||||
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
|
||||
delay_ms(50);
|
||||
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1);
|
||||
if(EW_RunBuf[checker_runcfg.pwd_len] != CheckCRC_8(EW_RunBuf,checker_runcfg.pwd_len))
|
||||
{
|
||||
@@ -923,6 +931,7 @@ void EW_Test_VerifyUID(void)
|
||||
|
||||
//读UID
|
||||
memset(EW_RunBuf,0,sizeof(EW_RunBuf));
|
||||
delay_ms(50);
|
||||
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.uid_len);
|
||||
if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
|
||||
{
|
||||
|
@@ -1260,6 +1260,10 @@ JQ_Test_WriteFacBuff ,//35 写缓存数据
|
||||
JQ_Test_VerifyFacBuff ,//36 验证缓存数据
|
||||
JQ_Test_VerifyDelay ,//37 读取延时值和otp数据相比
|
||||
JQ_Test_Toggle ,//38 切换总线极性
|
||||
CheckerExt_CalcErr ,//39 计算异常
|
||||
CheckerExt_Repeat ,//40 重新执行任务
|
||||
CheckerExt_SetUID ,//41 设置uid数据到小板
|
||||
CheckerExt_Slot ,//42 任务插槽
|
||||
(void*)0 //数组结束
|
||||
};
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
|
||||
#define BUILD_DATE "2023-12-18 18:02:16"
|
||||
#define BUILD_DATE "2023-12-19 15:39:10"
|
||||
#define SOFT_VERSION "2.08"
|
||||
|
||||
|
||||
|
@@ -5,7 +5,7 @@
|
||||
#include "prot_uc.h"
|
||||
#include "transmit.h"
|
||||
#include "tran_for_broadcast.h"
|
||||
#include "tran_for_coder2ch.h"
|
||||
#include "tran_for_coder.h"
|
||||
#include "tran_for_slave.h"
|
||||
|
||||
|
||||
|
@@ -22,8 +22,8 @@
|
||||
/*
|
||||
|
||||
执行任务命令格式
|
||||
[0]=总包数,[1]=当前包数(1开始)
|
||||
[2...n]=数据
|
||||
[0...1]=总字节数,[2]=当前包数(0开始),[3]=当前包字节数
|
||||
[4...n]=数据
|
||||
|
||||
数据域格式
|
||||
[0]=小板地址,[1]=数据长度,[2...n]=数据
|
||||
@@ -47,8 +47,6 @@ typedef struct{
|
||||
ucport_def u;
|
||||
rt_timer_t timer;
|
||||
array_def *data;
|
||||
int pack_all;
|
||||
int pack_curr;
|
||||
}slave_def;
|
||||
|
||||
|
||||
@@ -139,36 +137,36 @@ static array_def *slave_creat_retdata(slave_def *s,array_def *r)
|
||||
static int run_task_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
|
||||
{
|
||||
slave_def *s=(slave_def *)u;
|
||||
int pack_curr=0,pack_all=0;
|
||||
int pack_curr=0,pack_all=0,pack_size=0;
|
||||
array_def *r=0;
|
||||
array_def *check=0;
|
||||
uint8_t *d;
|
||||
pack_all=arr_get(data,0);
|
||||
pack_curr=arr_get(data,1);
|
||||
s->pack_all=pack_all;
|
||||
if(pack_curr==1){
|
||||
pack_all=arr_get(data,0)|(arr_get(data,1)<<8);
|
||||
pack_curr=arr_get(data,2);
|
||||
pack_size=arr_get(data,3);
|
||||
if(pack_curr==0){
|
||||
// 第一个数据包重置接收
|
||||
CHECK_DO(s->data,arr_delete);
|
||||
s->data=arr_creat();
|
||||
}
|
||||
if(pack_curr==s->pack_curr+1){
|
||||
s->pack_curr++;
|
||||
d=arr_data(data)+2;
|
||||
arr_appends(s->data,d,arr_length(data)-2);
|
||||
if(s->pack_curr<s->pack_all){
|
||||
r=arr_creat();
|
||||
arr_append(r,0);
|
||||
emit tran_reply_signal(u->p,arr_temp(r));
|
||||
}else{
|
||||
// 接收完成后执行命令
|
||||
r=arr_creat();
|
||||
slave_get_self(s);
|
||||
slave_adds(s);
|
||||
check=elec_check_with_scheme(0);
|
||||
arr_append(r,arr_get(check,0));
|
||||
slave_creat_retdata(s,r);
|
||||
emit tran_reply_signal(u->p,arr_temp(r));
|
||||
}
|
||||
if(arr_length(s->data)<pack_all){
|
||||
d=arr_data(data)+4;
|
||||
arr_appends(s->data,d,arr_length(data)-4);
|
||||
}
|
||||
if(arr_length(s->data)<pack_all){
|
||||
r=arr_creat();
|
||||
arr_append(r,0);
|
||||
emit tran_reply_signal(u->p,arr_temp(r));
|
||||
}
|
||||
else if(arr_length(s->data)==pack_all){
|
||||
// 接收完成后执行命令
|
||||
r=arr_creat();
|
||||
slave_get_self(s);
|
||||
slave_adds(s);
|
||||
check=elec_check_with_scheme(0);
|
||||
arr_append(r,arr_get(check,0));
|
||||
slave_creat_retdata(s,r);
|
||||
emit tran_reply_signal(u->p,arr_temp(r));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
128
source/task/tran_for_coder.c
Normal file
128
source/task/tran_for_coder.c
Normal file
@@ -0,0 +1,128 @@
|
||||
#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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1,5 +1,5 @@
|
||||
#ifndef tran_for_coder2ch_h__
|
||||
#define tran_for_coder2ch_h__
|
||||
#ifndef tran_for_coder_h__
|
||||
#define tran_for_coder_h__
|
||||
|
||||
|
||||
|
@@ -1,316 +0,0 @@
|
||||
#include "tran_for_coder2ch.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 "JQ_PSDGenerate.h"
|
||||
#include "mystring.h"
|
||||
#include "coder_judge.h"
|
||||
#include "JQ_UIDGenerate.h"
|
||||
#include "transmit.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// JQ模块在检测时注码
|
||||
|
||||
|
||||
typedef struct{
|
||||
int step;// 检测注码顺序
|
||||
}self_def;
|
||||
|
||||
static self_def g_self;
|
||||
|
||||
|
||||
// 从机地址偏移
|
||||
static inline int slave_addr_off(void)
|
||||
{
|
||||
if(sys_param()->slave_addr_start)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
typedef struct{
|
||||
ucport_def u;
|
||||
uint8_t addrs_num;
|
||||
char year[10];
|
||||
struct{
|
||||
char shell_code[20];
|
||||
char uid_code[20];
|
||||
char password[10];
|
||||
uint8_t uid_pw_hex[15];
|
||||
}item[10];
|
||||
uint8_t ack[390];
|
||||
uint8_t ack_num;
|
||||
void (*doexert)(ucport_def *u);
|
||||
}write_uid_def;
|
||||
|
||||
|
||||
|
||||
// 上报注码结果
|
||||
static void write_uid_upmit(write_uid_def *w)
|
||||
{
|
||||
int ack=0;
|
||||
array_def *a=arr_creat();
|
||||
arr_append(a,w->addrs_num);
|
||||
// arr_appends(a,w->ack,390);
|
||||
for(int i=0;i<w->addrs_num;i++)
|
||||
{
|
||||
uint8_t *d=&w->ack[i*38];
|
||||
ack|=d[1];
|
||||
if(sys_param()->coder_ret_mode)
|
||||
{
|
||||
// 完整模式
|
||||
arr_appends(a,d,38);
|
||||
}
|
||||
else{
|
||||
// 精简模式
|
||||
arr_appends(a,d,2);
|
||||
d+=2+13+15;
|
||||
arr_appends(a,d,8);
|
||||
}
|
||||
}
|
||||
// emit tran_send_signal(w->u.p,0x82,arr_temp(a));
|
||||
// 发送赋码结束信号
|
||||
emit code2_end_signal(w->u.p,ack,arr_temp(a));
|
||||
|
||||
g_self.step=0;
|
||||
// 把命令字改为0x82用于接收主机应答
|
||||
tran_set_busy(w->u.p,0);
|
||||
w->u.cmd=0x82;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 填充注码结果
|
||||
static void write_uid_fillret(write_uid_def *w,int addr,int ack)
|
||||
{
|
||||
addr-=1;
|
||||
uint8_t *d=&w->ack[(addr)*38];
|
||||
w->ack_num++;
|
||||
d[0]=addr+slave_addr_off();
|
||||
//d[1]=((ack==0xff)||(ack==0x00))?ack:(ack+0xc0);
|
||||
d[1]=ack;
|
||||
memcpy(&d[2],w->item[addr].shell_code,13);
|
||||
memcpy(&d[2+13],w->item[addr].uid_code,15);
|
||||
memcpy(&d[2+13+15],w->item[addr].password,8);
|
||||
if(w->ack_num>=w->addrs_num)
|
||||
{
|
||||
write_uid_upmit(w);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 判断检测数据错误码
|
||||
// 返回 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 注码完成
|
||||
static void write_uid_end(ucport_def *u,void *src,void *data,int ack,char *err_str)
|
||||
{
|
||||
write_uid_def *w=(write_uid_def *)u;
|
||||
uint8_t addr=0;
|
||||
if(addr<=0||addr>w->addrs_num){
|
||||
DBG_WARN("addr err:%d",addr);
|
||||
return;
|
||||
}
|
||||
uint32_t errcode=0;
|
||||
if(ack==0)
|
||||
{
|
||||
if(data)
|
||||
{
|
||||
errcode=in_range_err(arr_data(data)+8+8,arr_data(data));
|
||||
ack=coder_judge_jq(arr_data(data));
|
||||
if(ack==0){
|
||||
ack=errcode&0xff;
|
||||
}
|
||||
}else{
|
||||
ack=0xd0;
|
||||
DBG_WARN("check return data is none.");
|
||||
}
|
||||
}else{
|
||||
ack=0xd0;// 通信超时
|
||||
}
|
||||
DBG_LOG("addr=%d,errcode=%d",addr,ack);
|
||||
write_uid_fillret(w,addr,ack);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static void write_uid_return_ok(void *p)
|
||||
{
|
||||
write_uid_def *u=p;
|
||||
array_def *a=arr_creat();
|
||||
arr_append(a,u->addrs_num);
|
||||
for(int i=0;i<u->addrs_num;i++)
|
||||
{
|
||||
arr_append(a,i+slave_addr_off());
|
||||
arr_append(a,0);
|
||||
arr_append_num(a,37,'0');
|
||||
}
|
||||
emit tran_send_signal(u->u.p,0x82,arr_temp(a));
|
||||
tran_set_busy(u->u.p,0);
|
||||
g_self.step=0;
|
||||
}
|
||||
|
||||
|
||||
static void write_del(ucport_def *u)
|
||||
{
|
||||
free(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.");
|
||||
tran_set_busy(u->p,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static ucport_def *write_uid(tran_def *t, uint8_t cmd,array_def *data)
|
||||
{
|
||||
if(arr_length(data)<14+4+1){
|
||||
DBG_WARN("cmd format err.");
|
||||
DBG_WARN("data=%s",str_temp(arr_string(data)));
|
||||
return 0;
|
||||
}
|
||||
int ret=0;
|
||||
write_uid_def *u=calloc(1,sizeof(write_uid_def));
|
||||
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);
|
||||
|
||||
// 数据固定140字节,如果不检测某通道,则该通道填充占位符
|
||||
uint8_t *d_off=arr_data(data)+4+1;
|
||||
uint8_t *d_;
|
||||
tran_set_busy(t,1);
|
||||
for(int i=0;i<u->addrs_num;i++)
|
||||
{
|
||||
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码
|
||||
ret|=coder_shell_to_uid_jq(u->year,u->item[i].shell_code,u->item[i].uid_code);
|
||||
DBG_LOG("slave:%d, uid=%s",i,u->item[i].uid_code);
|
||||
// 生成存储码
|
||||
//ret|=coder_uid_to_save(u->item[i].uid_code,u->item[i].uid_pw_hex);
|
||||
UidCode_YM2JQ((PST_JQUID_TYPEDEF)u->item[i].uid_pw_hex,(PST_YMUID_TYPEDEF)u->item[i].uid_code);
|
||||
// 生成密码
|
||||
JQ_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]);
|
||||
// 默认失败
|
||||
u->ack[i*38+0]=i+slave_addr_off();
|
||||
u->ack[i*38+1]=1;
|
||||
if(1){
|
||||
if(check_shell_code(u->item[i].shell_code)){
|
||||
// 开始注码
|
||||
//port_start(mcu,code2_creat(8,4,u->item[i].uid_pw_hex));
|
||||
}else{
|
||||
// 管壳码无效,不注码,此时默认已ack
|
||||
// 管壳码无效不视为失败
|
||||
ret=0;
|
||||
write_uid_fillret(u,i+1,0xff);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
array_def *a=arr_creat();
|
||||
arr_append(a,u->addrs_num);
|
||||
// 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:稍后返回成功
|
||||
//later_execute(write_uid_return_ok,u,500);
|
||||
|
||||
// 发送注码开始信号
|
||||
emit code2_start_signal(u->u.p);
|
||||
|
||||
return (ucport_def *)u;
|
||||
}
|
||||
|
||||
|
||||
transmit_export(ym_checker,0x02,write_uid)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user