实现赋码仪命令
升级小板程序失败时停止
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
#include "cmd_coder.h"
|
||||
#include "QDebug"
|
||||
|
||||
|
||||
|
||||
#include "elec/elec_judge.h"
|
||||
#include "elec/coder_lib.h"
|
||||
#include "elec/JQ_PSDGenerate.h"
|
||||
#include "elec/JQ_UIDGenerate.h"
|
||||
#include "elec/PSDGenerate.h"
|
||||
|
||||
|
||||
|
||||
@@ -47,6 +49,8 @@ static const task_def g_ew_task_table[]={
|
||||
{"读MTP",35,5,2,8},
|
||||
{"写MTP",36,5,10,0},
|
||||
{"设置电阻校准值",37,1,1,0},
|
||||
{"读取流水号",38,5,2,2},
|
||||
{"写入流水号",39,5,2,0},
|
||||
{nullptr,0,0,0,0},
|
||||
};
|
||||
|
||||
@@ -100,6 +104,8 @@ static const task_def g_jq_task_table[]={
|
||||
{"配置三码数据到小板",41,1,10,0},
|
||||
{"任务插槽",42,1,1,0},
|
||||
{"设置电阻校准值",43,1,1,0},
|
||||
{"写入流水号",44,5,2,0},
|
||||
{"读取流水号",45,5,2,2},
|
||||
{nullptr,0,0,0,0},
|
||||
};
|
||||
|
||||
@@ -123,8 +129,13 @@ const task_def *coder_find_task(const char *str)
|
||||
{
|
||||
int chip=elec_extract_chip(check_plan()->get_plan_id());
|
||||
const task_def *table=nullptr;
|
||||
|
||||
qDebug("find task in ext_table.");
|
||||
table=g_ext_task_table;
|
||||
for(int i=0;i<100;i++){
|
||||
if(table[i].name==nullptr){
|
||||
break;
|
||||
}
|
||||
if(qstrcmp(str,table[i].name)==0){
|
||||
return &table[i];
|
||||
}
|
||||
@@ -132,14 +143,20 @@ const task_def *coder_find_task(const char *str)
|
||||
table=nullptr;
|
||||
if(chip==0){
|
||||
table=g_jq_task_table;
|
||||
qDebug("find task in jq_table.");
|
||||
}else if(chip==2){
|
||||
table=g_ew_task_table;
|
||||
qDebug("find task in ew_table.");
|
||||
}
|
||||
if(table==nullptr){
|
||||
return nullptr;
|
||||
}
|
||||
for(int i=0;i<100;i++){
|
||||
if(table[i].name==nullptr){
|
||||
break;
|
||||
}
|
||||
if(qstrcmp(str,table[i].name)==0){
|
||||
qDebug("find task index=%d.",i);
|
||||
return &table[i];
|
||||
}
|
||||
}
|
||||
@@ -167,7 +184,11 @@ int coder_add_task(myarray &d,const char *name,int slot_index,int task_index,uin
|
||||
const task_def *task=nullptr;
|
||||
task=coder_find_task(name);
|
||||
if(task==nullptr){
|
||||
qWarning("can not find task with %s.",name);
|
||||
return -1;
|
||||
}else{
|
||||
qDebug("task_name:%s,task_id=%d,par_count=%d,ret_count=%d,err=%d",name,task->task_id,
|
||||
task->par_count,task->ret_count,task->errcode);
|
||||
}
|
||||
char *par=(char *)params;
|
||||
d.append(uint8_t(slot_index));
|
||||
@@ -176,7 +197,9 @@ int coder_add_task(myarray &d,const char *name,int slot_index,int task_index,uin
|
||||
d.append(uint8_t(task->ret_count));
|
||||
d.append(uint8_t(task->errcode));
|
||||
d.append(uint8_t(task_index));
|
||||
d.append(par,task->par_count*2);
|
||||
if(task->par_count*2>0){
|
||||
d.append(par,task->par_count*2);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -192,6 +215,18 @@ int coder_slave_pack(myarray &d,int addr)
|
||||
}
|
||||
|
||||
|
||||
// 找到指定任务序号的数据
|
||||
myarray coder_slave_find_ret_data(myarray data,int task_index)
|
||||
{
|
||||
for(int i=0;i<data.size();)
|
||||
{
|
||||
if(data[i]==task_index){
|
||||
return data.mid(i+2,data[i+1]);
|
||||
}
|
||||
i+=2+data[i+1];
|
||||
}
|
||||
return myarray();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -199,8 +234,6 @@ int coder_slave_pack(myarray &d,int addr)
|
||||
|
||||
|
||||
|
||||
|
||||
// 检测任务需要读取模块工厂信息
|
||||
myarray cmd_coder_check::cmd_pc_to_slave(myarray data)
|
||||
{
|
||||
myarray d;
|
||||
@@ -220,7 +253,11 @@ myarray cmd_coder_check::ret_slave_to_pc(QList<myarray> data)
|
||||
myarray &sdata=data[i];
|
||||
int addr=i+syscfg()->slave_addr_start;
|
||||
r.append(uint8_t(addr));
|
||||
r.append(sdata[0]);
|
||||
if(sdata.size()>0){
|
||||
r.append(sdata[0]);
|
||||
}else{
|
||||
r.append(uint8_t(0xd0));
|
||||
}
|
||||
r.append(4,uint8_t(0));
|
||||
}
|
||||
return r;
|
||||
@@ -274,7 +311,21 @@ myarray cmd_coder_check2::ret_slave_to_pc(QList<myarray> data)
|
||||
r.append(uint8_t(coder_chip_type()));
|
||||
for (int i=0;i<data.size();i++)
|
||||
{
|
||||
|
||||
myarray &sdata=data[i];
|
||||
int addr=i+syscfg()->slave_addr_start;
|
||||
myarray sret=coder_slave_find_ret_data(sdata.mid(1),1);
|
||||
r.append(uint8_t(addr));
|
||||
if(sdata.size()==0){
|
||||
r.append(uint8_t(0xd0));
|
||||
r.append(8,uint8_t(0));
|
||||
}else{
|
||||
r.append(sdata[0]);
|
||||
if(sret.size()<4){
|
||||
sret.append(4-sret.size(),uint8_t(0));
|
||||
}
|
||||
r.append(sret.left(4));
|
||||
r.append(4,uint8_t(0));
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@@ -300,31 +351,73 @@ myarray cmd_coder_code::cmd_pc_to_slave(myarray data)
|
||||
myarray ret;
|
||||
const task_def *table=nullptr;
|
||||
uint16_t params[10]={0};
|
||||
chip_mode=elec_extract_chip(check_plan()->get_plan_id());
|
||||
char year[10]={0};
|
||||
memcpy(year,data.mid(1,4).data(),4);
|
||||
qDebug("tran pc data to slave");
|
||||
for (int i=0;i<addrs;i++){
|
||||
myarray d;
|
||||
|
||||
uid_code uid={{0},{0},{0},{0}};
|
||||
memcpy(uid.shell,data.mid(5+i*14+1,13).data(),13);
|
||||
if(check_shell_code(uid.shell)==1){
|
||||
// 只有管壳码验证通过时才计算uid和密码
|
||||
if(chip_mode!=0){
|
||||
coder_shell_to_uid(year,uid.shell,uid.uid);
|
||||
// 生成存储码
|
||||
coder_uid_to_save(uid.uid,(uint8_t *)uid.uid_psw);
|
||||
// 生成密码
|
||||
GetPasswordByUidCode((uint8_t *)uid.uid,(uint8_t *)&uid.uid_psw[8]);
|
||||
// 生成密码字符串
|
||||
sprintf(uid.psw,"%02X%02X%02X%02X",uid.uid_psw[8],
|
||||
uid.uid_psw[9],uid.uid_psw[10],uid.uid_psw[11]);
|
||||
}else{
|
||||
coder_shell_to_uid_jq(year,uid.shell,uid.uid);
|
||||
// 生成存储码
|
||||
UidCode_YM2JQ((PST_JQUID_TYPEDEF)uid.uid_psw,(PST_YMUID_TYPEDEF)uid.uid);
|
||||
// 生成密码
|
||||
JQ_GetPasswordByUidCode((uint8_t *)uid.uid,(uint8_t *)&uid.uid_psw[8]);
|
||||
// 生成密码字符串
|
||||
sprintf(uid.psw,"%02X%02X%02X%02X",uid.uid_psw[11],
|
||||
uid.uid_psw[10],uid.uid_psw[9],uid.uid_psw[8]);
|
||||
}
|
||||
}
|
||||
uid_codes.append(uid);
|
||||
params[0]=(8)|(4<<8);
|
||||
memcpy(¶ms[1],uid.uid_psw,12);
|
||||
coder_add_task(d,"配置三码数据到小板",1,1,params);
|
||||
coder_add_task(d,"写入三码数据",1,2,params);
|
||||
coder_add_task(d,"验证三码数据",2,3,params);
|
||||
// coder_add_task(d,"写入三码数据",1,2,params);
|
||||
// coder_add_task(d,"验证三码数据",2,3,params);
|
||||
coder_slave_pack(d,i+1);
|
||||
ret+=d;
|
||||
}
|
||||
// 检测模式1,返回异常代码和任务插槽数据
|
||||
d.insert(0,uint8_t(1));
|
||||
return d;
|
||||
ret.insert(0,uint8_t(1));
|
||||
qDebug("tran pc data to slave end");
|
||||
return ret;
|
||||
}
|
||||
|
||||
// 把从机回复的数据转化为上位机能理解的格式
|
||||
myarray cmd_coder_code::ret_slave_to_pc(QList<myarray> data)
|
||||
{
|
||||
myarray r;
|
||||
r.append(uint8_t(addrs&0xff));
|
||||
r.append(uint8_t((addrs>>8)&0xff));
|
||||
r.append(uint8_t((addrs>>16)&0xff));
|
||||
r.append(uint8_t(coder_chip_type()));
|
||||
r.append(uint8_t(addrs));
|
||||
for (int i=0;i<data.size();i++)
|
||||
{
|
||||
|
||||
myarray &sdata=data[i];
|
||||
int addr=i+syscfg()->slave_addr_start;
|
||||
r.append(uint8_t(addr));
|
||||
if(sdata.size()>0){
|
||||
r.append(sdata[0]);
|
||||
}else{
|
||||
r.append(uint8_t(0xd0));
|
||||
}
|
||||
r.append(uid_codes[i].shell,13);
|
||||
if(chip_mode==0){
|
||||
r.append(uid_codes[i].uid,15);
|
||||
}else{
|
||||
r.append(uid_codes[i].uid,16);
|
||||
}
|
||||
r.append(uid_codes[i].psw,8);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@@ -383,5 +476,50 @@ protpc_export(0x41, get_coder_setrtv);
|
||||
|
||||
|
||||
|
||||
// 批检仪检测并写入流水号
|
||||
myarray cmd_checker_check::cmd_pc_to_slave(myarray data)
|
||||
{
|
||||
myarray ret;
|
||||
const task_def *table=nullptr;
|
||||
uint16_t params[10]={0};
|
||||
int len=data.size();
|
||||
for(int i=0;i<len;i+=5){
|
||||
myarray d;
|
||||
params[0]=data[i+1]|(data[i+2]<<8);
|
||||
params[1]=data[i+3]|(data[i+4]<<8);
|
||||
coder_add_task(d,"写入流水号",1,1,params);
|
||||
coder_add_task(d,"读取流水号",2,2,params);
|
||||
coder_slave_pack(d,data[i]);
|
||||
ret+=d;
|
||||
}
|
||||
|
||||
// 检测模式0,返回原始检测结果
|
||||
ret.insert(0,uint8_t(0));
|
||||
return ret;
|
||||
}
|
||||
|
||||
// 把从机回复的数据转化为上位机能理解的格式
|
||||
myarray cmd_checker_check::ret_slave_to_pc(QList<myarray> data)
|
||||
{
|
||||
myarray r;
|
||||
r.append(char(0));
|
||||
for(int i=0;i<data.size();i++){
|
||||
r.append(tran_slave_to_selfdev_check(data[i]));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
static HandlePc *get_checker_check(){
|
||||
return new cmd_checker_check();
|
||||
}
|
||||
protpc_export(0x48, get_checker_check);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user