自动检测指令0x44不读取流水号

解决新赋码指令回复指令不对的问题
  解决tcp不上报心跳的问题
This commit is contained in:
ranchuan
2024-01-13 11:48:21 +08:00
parent 84bbe6ed3e
commit f00a2b79f0
8 changed files with 124 additions and 22 deletions

View File

@@ -71,7 +71,7 @@ static const task_def g_jq_task_table[]={
{"读取芯片代码",6,5,0,1},
{"OTP检测",7,5,3,0},
{"工厂测试检测",8,5,0,0},
{"读取状态",9,5,1,0},
{"读取状态",9,5,1,1},
{"写工厂信息",10,5,2,0},
{"充能统计",11,5,5,4},
{"充电电压检测",12,5,2,1},
@@ -169,11 +169,12 @@ const task_def *coder_find_task(const char *str)
// 返回芯片类型
char coder_chip_type()
char coder_chip_type(uint8_t states=0xff)
{
int chip=elec_extract_chip(check_plan()->get_plan_id());
const char table[]="JXW";
if(chip>=0&&chip<=2){
const char table[]="JXWQ";
if(states&&((states&0x04)==0)) chip=3;
if(chip>=0&&chip<=3){
return table[chip];
}
return 0;
@@ -207,6 +208,35 @@ int coder_add_task(myarray &d,const char *name,int slot_index,int task_index,uin
}
// 添加一个任务失败不报错,返回0添加成功
int coder_add_task_noerr(myarray &d,const char *name,int slot_index,int task_index,uint16_t params[10])
{
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));
d.append(uint8_t(task->task_id));
d.append(uint8_t(task->par_count));
d.append(uint8_t(task->ret_count));
d.append(uint8_t(0));
d.append(uint8_t(task_index));
if(task->par_count*2>0){
d.append(par,task->par_count*2);
}
return 0;
}
// 包装为一个小板的数据,返回0成功
// 包装前需要先添加任务
int coder_slave_pack(myarray &d,int addr)
@@ -238,7 +268,7 @@ myarray coder_slave_find_ret_data(myarray data,int task_index,int size)
}else{
int len=size-r.size();
r.append(len,uint8_t(0));
qWarning("can not find data,append by 0.");
qWarning("can not find data,task_index=%d.",task_index);
}
return r;
}
@@ -307,6 +337,8 @@ myarray cmd_coder_check2::cmd_pc_to_slave(myarray data)
if(chip==0){
uint16_t params[10]={20,4};
coder_add_task(d,"读OTP",1,1,params);
params[0]=0;
coder_add_task(d,"读取状态",1,2,params);
}else if(chip==2){
uint16_t params[10]={9,4};
coder_add_task(d,"读MTP",1,1,params);
@@ -324,19 +356,20 @@ myarray cmd_coder_check2::ret_slave_to_pc(QList<myarray> data)
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()));
for (int i=0;i<data.size();i++)
{
myarray &sdata=data[i];
int addr=sdata[0]-1+syscfg()->slave_addr_start;
sdata.remove(0,1);
myarray sret=coder_slave_find_ret_data(sdata.mid(1),1,4);
myarray state=coder_slave_find_ret_data(sdata.mid(1),2,1);
r.append(uint8_t(addr));
if(sdata.size()==0){
r.append(uint8_t(0xd0));
r.append(8,uint8_t(0));
r.append(9,uint8_t(0));
}else{
r.append(sdata[0]);
r.append(uint8_t(coder_chip_type(state[0])));
r.append(sret);
r.append(4,uint8_t(0));
}
@@ -495,6 +528,8 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data)
if(chip_mode==0){
uint16_t params[10]={20,4};
coder_add_task(d,"读OTP",2,4,params);
params[0]=0;
coder_add_task(d,"读取状态",2,5,params);
}else if(chip_mode==2){
uint16_t params[10]={9,4};
coder_add_task(d,"读MTP",2,4,params);
@@ -505,7 +540,7 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data)
// 检测模式1,返回异常代码和任务插槽数据
ret.insert(0,uint8_t(1));
qDebug("tran pc data to slave end");
qDebug()<<"slave_data:"<<ret.toHex(' ');
// qDebug()<<"slave_data:"<<ret.toHex(' ');
return ret;
}
@@ -516,7 +551,6 @@ myarray cmd_coder_code2::ret_slave_to_pc(QList<myarray> data)
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()));
// coder_return_mode 1是完整模式,协议0是完整模式
if(syscfg()->coder_return_mode){
r.append(uint8_t(0));
@@ -554,6 +588,8 @@ myarray cmd_coder_code2::ret_slave_to_pc(QList<myarray> data)
r.append(err);
// 添加工厂信息
sret=coder_slave_find_ret_data(sdata,4,4);
myarray state=coder_slave_find_ret_data(sdata,5,1);
r.append(uint8_t(coder_chip_type(state[0])));
r.append(sret);
// 完整模式
if(syscfg()->coder_return_mode){
@@ -765,14 +801,37 @@ protpc_export(0x30, get_checker_check2);
int cmd_checker_check3::key_press(){
return 1;
// 0x49 检测不读取流水号
myarray cmd_checker_check3::cmd_pc_to_slave(myarray data)
{
myarray ret;
const task_def *table=nullptr;
// 检测模式0,返回原始检测结果
ret.insert(0,uint8_t(0));
return ret;
}
static HandlePc *get_checker_check3(){
return new cmd_checker_check3();
}
protpc_export(0x44, get_checker_check3);
protpc_export(0x49, get_checker_check3);
// 0x44 自动检测不读取流水号
int cmd_checker_check4::key_press(){
return 1;
}
static HandlePc *get_checker_check4(){
return new cmd_checker_check4();
}
protpc_export(0x44, get_checker_check4);