添加赋码设备注码命令,实现ew检测时注码

This commit is contained in:
ranchuan
2023-12-19 18:21:28 +08:00
parent 58c902a94f
commit ddf40324f7
14 changed files with 269 additions and 384 deletions

View File

@@ -299,7 +299,7 @@
<OPTFL> <OPTFL>
<tvExp>1</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget> <IsCurrentTarget>0</IsCurrentTarget>
</OPTFL> </OPTFL>
<CpuCode>18</CpuCode> <CpuCode>18</CpuCode>
<DebugOpt> <DebugOpt>
@@ -382,14 +382,14 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>g_tempptr</ItemText> <ItemText>checker_runcfg</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>1</SubType> <SubType>10</SubType>
<ItemText>0x20001800</ItemText> <ItemText>0x20006924</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
@@ -459,16 +459,6 @@
<pszMrulep></pszMrulep> <pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp> <pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp> <pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\TIM4</Name>
<WinId>35905</WinId>
</Entry>
<Entry>
<Name>System Viewer\TIM5</Name>
<WinId>35904</WinId>
</Entry>
</SystemViewers>
<DebugDescription> <DebugDescription>
<Enable>1</Enable> <Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq> <EnableFlashSeq>1</EnableFlashSeq>
@@ -533,7 +523,7 @@
<OPTFL> <OPTFL>
<tvExp>1</tvExp> <tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget> <IsCurrentTarget>1</IsCurrentTarget>
</OPTFL> </OPTFL>
<CpuCode>18</CpuCode> <CpuCode>18</CpuCode>
<DebugOpt> <DebugOpt>
@@ -616,14 +606,24 @@
<Ww> <Ww>
<count>0</count> <count>0</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>g_tempptr</ItemText> <ItemText>runcfg</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>EW_RunBuf</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>state</ItemText>
</Ww> </Ww>
</WatchWindow1> </WatchWindow1>
<MemoryWindow1> <MemoryWindow1>
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>1</SubType> <SubType>0</SubType>
<ItemText>0x20003af4</ItemText> <ItemText>0x20007958</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
@@ -1565,7 +1565,7 @@
<Group> <Group>
<GroupName>rt_thread</GroupName> <GroupName>rt_thread</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
@@ -2017,6 +2017,30 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<bShared>0</bShared> <bShared>0</bShared>
</File> </File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>104</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\task\tran_for_broadcast.c</PathWithFileName>
<FilenameWithoutPath>tran_for_broadcast.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>105</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\source\task\tran_for_coder.c</PathWithFileName>
<FilenameWithoutPath>tran_for_coder.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group> </Group>
<Group> <Group>
@@ -2027,7 +2051,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>11</GroupNumber> <GroupNumber>11</GroupNumber>
<FileNumber>104</FileNumber> <FileNumber>106</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2047,7 +2071,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>105</FileNumber> <FileNumber>107</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2059,7 +2083,7 @@
</File> </File>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>106</FileNumber> <FileNumber>108</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2071,7 +2095,7 @@
</File> </File>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>107</FileNumber> <FileNumber>109</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2083,7 +2107,7 @@
</File> </File>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>108</FileNumber> <FileNumber>110</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2095,7 +2119,7 @@
</File> </File>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>109</FileNumber> <FileNumber>111</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2107,7 +2131,7 @@
</File> </File>
<File> <File>
<GroupNumber>12</GroupNumber> <GroupNumber>12</GroupNumber>
<FileNumber>110</FileNumber> <FileNumber>112</FileNumber>
<FileType>1</FileType> <FileType>1</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2127,7 +2151,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>13</GroupNumber> <GroupNumber>13</GroupNumber>
<FileNumber>111</FileNumber> <FileNumber>113</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2147,7 +2171,7 @@
<RteFlg>0</RteFlg> <RteFlg>0</RteFlg>
<File> <File>
<GroupNumber>14</GroupNumber> <GroupNumber>14</GroupNumber>
<FileNumber>112</FileNumber> <FileNumber>114</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
@@ -2159,7 +2183,7 @@
</File> </File>
<File> <File>
<GroupNumber>14</GroupNumber> <GroupNumber>14</GroupNumber>
<FileNumber>113</FileNumber> <FileNumber>115</FileNumber>
<FileType>5</FileType> <FileType>5</FileType>
<tvExp>0</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>

View File

@@ -2444,6 +2444,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\source\task\tran_for_slave.c</FilePath> <FilePath>.\source\task\tran_for_slave.c</FilePath>
</File> </File>
<File>
<FileName>tran_for_broadcast.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_broadcast.c</FilePath>
</File>
<File>
<FileName>tran_for_coder.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_coder.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@@ -4051,6 +4061,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\source\task\tran_for_slave.c</FilePath> <FilePath>.\source\task\tran_for_slave.c</FilePath>
</File> </File>
<File>
<FileName>tran_for_broadcast.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_broadcast.c</FilePath>
</File>
<File>
<FileName>tran_for_coder.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_coder.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@@ -5316,6 +5336,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\source\task\tran_for_slave.c</FilePath> <FilePath>.\source\task\tran_for_slave.c</FilePath>
</File> </File>
<File>
<FileName>tran_for_broadcast.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_broadcast.c</FilePath>
</File>
<File>
<FileName>tran_for_coder.c</FileName>
<FileType>1</FileType>
<FilePath>.\source\task\tran_for_coder.c</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>

View File

@@ -296,6 +296,8 @@
2023.12.18 2023.12.18
添加写三码验三码任务实现0x20任务完成任务插槽机制 添加写三码验三码任务实现0x20任务完成任务插槽机制
添加文件 tran_for_broadcast.c 添加文件 tran_for_broadcast.c
2023.12.19
添加赋码设备注码命令实现ew检测时注码
添加文件 tran_for_coder.c

View File

@@ -69,8 +69,12 @@ static int coder_calc_year(const char *year,const char shell_year,char *uid_year
} }
// year是实时数据鉴于12月31生产的雷管year可能不同 // year是实时数据鉴于12月31生产的雷管year可能不同
// 此时year-1来保证与uid码上的相同 // 此时year-1来保证与uid码上的相同
if(year[3]!=shell_year) for(int i=0;i<10;i++){
y--; if((y%10)!=(shell_year-'0'))
y--;
else
break;
}
uid_year[0]=y%100/10+'0'; uid_year[0]=y%100/10+'0';
uid_year[1]=y%10+'0'; uid_year[1]=y%10+'0';
if(uid_year[1]==shell_year) if(uid_year[1]==shell_year)

View File

@@ -555,7 +555,7 @@ array_def *elec_check_with_scheme(array_def *uid_psw)
array_def *r=arr_creat(); array_def *r=arr_creat();
if(s->scheme_inited==0){ if(s->scheme_inited==0){
DBG_WARN("scheme not init."); DBG_WARN("scheme not init.");
arr_append(r,1); arr_append(r,20);
return arr_temp(r); return arr_temp(r);
} }
res=checker_runcfg.power_prapare_exe; 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)){ if(s->chip_type>=LENGTH(s->tasks_fun_table)){
DBG_WARN("unknown chip type."); DBG_WARN("unknown chip type.");
arr_append(r,2); arr_append(r,20);
return arr_temp(r); return arr_temp(r);
} }
elec_check_result_clear(); 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_def *e=malloc(sizeof(elec_judge_def));
elec_judge(e,s->task_num,checker_runcfg.Task_Result, elec_judge(e,s->task_num,checker_runcfg.Task_Result,
checker_runcfg.Task_Excute, checker_runcfg.Task_Excute,
(uint8_t *)checker_runcfg.Test_Rtv,0,0); (uint8_t *)checker_runcfg.Test_Rtv,&res,0);
free(e); free(e);
arr_append(r,0); arr_append(r,res);
arr_appends(r,checker_runcfg.Task_Result,8); arr_appends(r,checker_runcfg.Task_Result,8);
arr_appends(r,checker_runcfg.Task_Excute,8); arr_appends(r,checker_runcfg.Task_Excute,8);
arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2); arr_appends(r,checker_runcfg.Test_Rtv,checker_runcfg.rtv_index*2);

View File

@@ -218,5 +218,7 @@ void CheckerExt_Slot(void)
CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={ CheckerTask exttaskArray[CHECKER_EXTID_COUNT]={
CheckerExt_CalcErr, CheckerExt_CalcErr,
CheckerExt_Repeat, CheckerExt_Repeat,
CheckerExt_SetUID,
CheckerExt_Slot,
}; };

View File

@@ -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 = Power_ConvCur(EW_FreeBack_MaxCur,EWDriver_Sample_R);
ul_temp = (ul_temp + 500)/1000; ul_temp = (ul_temp + 500)/1000;
@@ -857,6 +857,11 @@ void EW_Test_VerifyUID(void)
{ {
uint8_t uc_rtv = 0; uint8_t uc_rtv = 0;
System_State_un state; System_State_un state;
if(JQXT_Test_IsNeedBind() == 0)
{
Checker_MaskResult(0,checker_runcfg.task_info.runindex);
return;
}
//读UID MTP //读UID MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf)); memset(EW_RunBuf,0,sizeof(EW_RunBuf));
EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1); EW_ReadMTP(checker_runcfg.netid,0x00,EW_RunBuf,checker_runcfg.uid_len+1);
@@ -874,6 +879,7 @@ void EW_Test_VerifyUID(void)
return; return;
} }
memset(EW_RunBuf,0,sizeof(EW_RunBuf)); memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x20,EW_RunBuf,checker_runcfg.uid_len+1); 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)) 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 //读PWD MTP
memset(EW_RunBuf,0,sizeof(EW_RunBuf)); memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x04,EW_RunBuf,checker_runcfg.pwd_len+1); 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)) 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; return;
} }
memset(EW_RunBuf,0,sizeof(EW_RunBuf)); memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
EW_ReadMTP(checker_runcfg.netid,0x24,EW_RunBuf,checker_runcfg.pwd_len+1); 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)) 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 //读UID
memset(EW_RunBuf,0,sizeof(EW_RunBuf)); memset(EW_RunBuf,0,sizeof(EW_RunBuf));
delay_ms(50);
uc_rtv = EW_ReadUID(checker_runcfg.netid,EW_RunBuf,checker_runcfg.uid_len); 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)) if(0 != memcmp(EW_RunBuf,checker_runcfg.writeuid,checker_runcfg.uid_len))
{ {

View File

@@ -1260,6 +1260,10 @@ JQ_Test_WriteFacBuff ,//35 写缓存数据
JQ_Test_VerifyFacBuff ,//36 验证缓存数据 JQ_Test_VerifyFacBuff ,//36 验证缓存数据
JQ_Test_VerifyDelay ,//37 读取延时值和otp数据相比 JQ_Test_VerifyDelay ,//37 读取延时值和otp数据相比
JQ_Test_Toggle ,//38 切换总线极性 JQ_Test_Toggle ,//38 切换总线极性
CheckerExt_CalcErr ,//39 计算异常
CheckerExt_Repeat ,//40 重新执行任务
CheckerExt_SetUID ,//41 设置uid数据到小板
CheckerExt_Slot ,//42 任务插槽
(void*)0 //数组结束 (void*)0 //数组结束
}; };

View File

@@ -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" #define SOFT_VERSION "2.08"

View File

@@ -5,7 +5,7 @@
#include "prot_uc.h" #include "prot_uc.h"
#include "transmit.h" #include "transmit.h"
#include "tran_for_broadcast.h" #include "tran_for_broadcast.h"
#include "tran_for_coder2ch.h" #include "tran_for_coder.h"
#include "tran_for_slave.h" #include "tran_for_slave.h"

View File

@@ -22,8 +22,8 @@
/* /*
执行任务命令格式 执行任务命令格式
[0]=总数,[1]=当前包数(1开始) [0...1]=总字节数,[2]=当前包数(0开始),[3]=当前包字节数
[2...n]=数据 [4...n]=数据
数据域格式 数据域格式
[0]=小板地址,[1]=数据长度,[2...n]=数据 [0]=小板地址,[1]=数据长度,[2...n]=数据
@@ -47,8 +47,6 @@ typedef struct{
ucport_def u; ucport_def u;
rt_timer_t timer; rt_timer_t timer;
array_def *data; array_def *data;
int pack_all;
int pack_curr;
}slave_def; }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) static int run_task_dolater(ucport_def *u,uint8_t cmd,array_def *data,char *err_str)
{ {
slave_def *s=(slave_def *)u; 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 *r=0;
array_def *check=0; array_def *check=0;
uint8_t *d; uint8_t *d;
pack_all=arr_get(data,0); pack_all=arr_get(data,0)|(arr_get(data,1)<<8);
pack_curr=arr_get(data,1); pack_curr=arr_get(data,2);
s->pack_all=pack_all; pack_size=arr_get(data,3);
if(pack_curr==1){ if(pack_curr==0){
// 第一个数据包重置接收 // 第一个数据包重置接收
CHECK_DO(s->data,arr_delete); CHECK_DO(s->data,arr_delete);
s->data=arr_creat(); s->data=arr_creat();
} }
if(pack_curr==s->pack_curr+1){ if(arr_length(s->data)<pack_all){
s->pack_curr++; d=arr_data(data)+4;
d=arr_data(data)+2; arr_appends(s->data,d,arr_length(data)-4);
arr_appends(s->data,d,arr_length(data)-2); }
if(s->pack_curr<s->pack_all){ if(arr_length(s->data)<pack_all){
r=arr_creat(); r=arr_creat();
arr_append(r,0); arr_append(r,0);
emit tran_reply_signal(u->p,arr_temp(r)); emit tran_reply_signal(u->p,arr_temp(r));
}else{ }
// 接收完成后执行命令 else if(arr_length(s->data)==pack_all){
r=arr_creat(); // 接收完成后执行命令
slave_get_self(s); r=arr_creat();
slave_adds(s); slave_get_self(s);
check=elec_check_with_scheme(0); slave_adds(s);
arr_append(r,arr_get(check,0)); check=elec_check_with_scheme(0);
slave_creat_retdata(s,r); arr_append(r,arr_get(check,0));
emit tran_reply_signal(u->p,arr_temp(r)); slave_creat_retdata(s,r);
} emit tran_reply_signal(u->p,arr_temp(r));
} }
return 0; return 0;
} }

View 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)

View File

@@ -1,5 +1,5 @@
#ifndef tran_for_coder2ch_h__ #ifndef tran_for_coder_h__
#define tran_for_coder2ch_h__ #define tran_for_coder_h__

View File

@@ -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)