与上位机测试通过
This commit is contained in:
@@ -120,7 +120,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>;</Name>
|
||||
<Name>,</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@@ -145,7 +145,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>JL2CM3</Key>
|
||||
<Name>-U69656177 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
<Name>-U69656177 -O78 -S6 -ZTIFSpeedSel500 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@@ -153,29 +153,12 @@
|
||||
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM))</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>99</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134395490</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>.\source\rt_thread\board.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\checker_gen1_app\source/rt_thread/board.c\99</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<Breakpoint/>
|
||||
<MemoryWindow1>
|
||||
<Mm>
|
||||
<WinNumber>1</WinNumber>
|
||||
<SubType>1</SubType>
|
||||
<ItemText>0x20001748</ItemText>
|
||||
<SubType>0</SubType>
|
||||
<ItemText>str</ItemText>
|
||||
<AccSizeX>0</AccSizeX>
|
||||
</Mm>
|
||||
</MemoryWindow1>
|
||||
|
@@ -86,7 +86,7 @@ class utcp:
|
||||
|
||||
|
||||
|
||||
|
||||
# 生成一个任务的参数
|
||||
def scheme_task_to_byte(j:json):
|
||||
data=bytearray()
|
||||
data.append(j["TaskID"])
|
||||
@@ -99,6 +99,7 @@ def scheme_task_to_byte(j:json):
|
||||
data.append(i>>8)
|
||||
return data
|
||||
|
||||
# 生成任务参数序列
|
||||
def scheme_tasks_to_byte(j:json):
|
||||
data=bytearray()
|
||||
for i in j["TaskArray"]:
|
||||
@@ -109,7 +110,7 @@ def scheme_tasks_to_byte(j:json):
|
||||
data.append(0xff)
|
||||
return data
|
||||
|
||||
|
||||
# 生成任务id序列
|
||||
def scheme_taskids_to_byte(j:json):
|
||||
t=bytearray()
|
||||
t.append(j["PlanID"]&0xff)
|
||||
@@ -124,7 +125,7 @@ def scheme_taskids_to_byte(j:json):
|
||||
t.append(0xff)
|
||||
return t
|
||||
|
||||
|
||||
# 根据方案生成小板用的字节数据
|
||||
def scheme_to_byte(j:json):
|
||||
t=bytearray()
|
||||
t+=scheme_taskids_to_byte(j)
|
||||
@@ -142,7 +143,7 @@ def arr_from_int(num:int):
|
||||
return bytearray([num&0xff,(num>>8)&0xff,(num>>16)&0xff,(num>>24)&0xff])
|
||||
|
||||
|
||||
# 先max后min
|
||||
# 提取方案中的范围数据, 先max后min
|
||||
def scheme_get_task_range(j:json):
|
||||
t=bytearray()
|
||||
return_count=j["ReturnCount"]
|
||||
@@ -155,7 +156,7 @@ def scheme_get_task_range(j:json):
|
||||
t+=arr_from_int(0)
|
||||
return t
|
||||
|
||||
|
||||
# 根据方案生成主板用的字节数据
|
||||
def scheme_to_host(j:json):
|
||||
t=bytearray()
|
||||
t+=arr_from_int(j["PlanID"])
|
||||
@@ -212,6 +213,7 @@ class handle:
|
||||
print("send done.")
|
||||
return bytearray()
|
||||
|
||||
# 设置要发送的文件
|
||||
def set_file(self,name:str):
|
||||
self.data=bytearray()
|
||||
with open(name,"rb") as f:
|
||||
@@ -222,6 +224,8 @@ class handle:
|
||||
self.sent_bytes=0
|
||||
self.packet_now=0
|
||||
self.packet_bytes=200
|
||||
|
||||
# 设置要发送的方案
|
||||
def set_json(self,name:str):
|
||||
self.data=bytearray()
|
||||
with open(name,"rb") as f:
|
||||
@@ -355,17 +359,17 @@ class protu(QObject):
|
||||
t=self.decode(data)
|
||||
|
||||
self.recv_data+=t
|
||||
print("recv",t.hex(","))
|
||||
# print("recv",t.hex(","))
|
||||
self.recv_signal.emit(self.cmd,t,self.str_err)
|
||||
# self.send_file_next(self.cmd,t,self.str_err)
|
||||
print("sent signal---")
|
||||
# print("sent signal---")
|
||||
data.clear()
|
||||
# else:
|
||||
# print("len(data)={d1},num_ro_recv={d2}".format(d1=len(data),d2=self.num_to_recv))
|
||||
def send(self,cmd:int,data:bytearray):
|
||||
self.cmd=cmd
|
||||
self.cmd_no+=1
|
||||
print("send:",data.hex(","))
|
||||
# print("send:",data.hex(","))
|
||||
self.ser.write(self.encode(data))
|
||||
def start_recv(self):
|
||||
self.thread_ = threading.Thread(target=self.recv, args=())
|
||||
|
@@ -355,7 +355,7 @@ class updata_dlg(QObject):
|
||||
except Exception as e:
|
||||
pass
|
||||
def recv_slot(self,cmd:int,data:bytearray,err:str):
|
||||
print("recv:",cmd,data)
|
||||
# print("recv:",cmd,data)
|
||||
if(self.cmd!=cmd):
|
||||
return
|
||||
try:
|
||||
|
@@ -90,4 +90,11 @@
|
||||
注码指令自动回读结果
|
||||
2023.6.13
|
||||
适配3码互转算法
|
||||
|
||||
2023.6.14
|
||||
与上位机联测检测和赋码指令通过
|
||||
串口在任何情况下都可以运行命令行
|
||||
需求:
|
||||
赋码无论成功失败都返回3码数据
|
||||
流水号相同的命令直接返回上次的返回结果
|
||||
命令不存在,命令参数错误,设备忙,返回错误码
|
||||
波特率、命令返回格式、小板起始地址可配置
|
@@ -71,9 +71,9 @@ static int coder_calc_year(const char *year,const char shell_year,char *uid_year
|
||||
// 此时year-1来保证与uid码上的相同
|
||||
if(year[3]!=shell_year)
|
||||
y--;
|
||||
uid_year[1]=y%100/10+'0';
|
||||
uid_year[0]=y%10+'0';
|
||||
if(uid_year[0]==shell_year)
|
||||
uid_year[0]=y%100/10+'0';
|
||||
uid_year[1]=y%10+'0';
|
||||
if(uid_year[1]==shell_year)
|
||||
return 0;
|
||||
else
|
||||
return -1;
|
||||
@@ -131,7 +131,7 @@ int coder_uid_to_save(const char *uid_code,uint8_t *save_code)
|
||||
save_code[3]=ymd&0xff;
|
||||
feature=uid_code[10]*10000;
|
||||
feature+=coder_strint_to_byte(&uid_code[11],3)*100;
|
||||
feature+=coder_strint_to_byte(&uid_code[13],2);
|
||||
feature+=coder_strint_to_byte(&uid_code[14],2);
|
||||
save_code[4]=feature>>16;
|
||||
save_code[5]=feature>>8;
|
||||
save_code[6]=feature&0xff;
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
|
||||
#define BUILD_DATE "2023-06-13 17:34:13"
|
||||
#define BUILD_DATE "2023-06-14 15:49:07"
|
||||
|
||||
|
||||
|
||||
|
@@ -42,6 +42,7 @@ int main()
|
||||
app_init();
|
||||
|
||||
protu_def *protu=app_variable("protu",0,0);
|
||||
protu_def *protu2=app_variable("protu2",0,0);
|
||||
tran_def *tran=app_variable("tran",0,0);
|
||||
void *cmd=app_variable("cmd",0,0);
|
||||
void *udp=app_variable("udp",0,0);
|
||||
@@ -52,8 +53,8 @@ int main()
|
||||
|
||||
connect(udp,udp_recv_signal,0,cmd,cmd_recv_slot);
|
||||
connect(cmd,cmd_reply_signal,0,udp,udp_reply_call);
|
||||
connect(protu,protu_recv_signal,0,cmd,cmd_recv_slot);
|
||||
connect(cmd,cmd_reply_signal,0,protu,protu_send_call);
|
||||
connect(protu2,protu_recv_signal,0,cmd,cmd_recv_slot);
|
||||
connect(cmd,cmd_reply_signal,0,protu2,protu_send_call);
|
||||
|
||||
//DBG_LOG("询预压");
|
||||
//DBG_LOG("我知道");
|
||||
|
@@ -8,7 +8,8 @@ import prebuild as time
|
||||
# 定义app和boot文件路径(没有尾缀)
|
||||
APP_FILE_SRC = "./Objects/app/checker_gen1_app"
|
||||
BOOT_FILE_SRC = "./Objects/app/checker_gen1_boot"
|
||||
APP_FILE_DST = "./Objects/checker_gen1_app"
|
||||
# APP_FILE_DST = "./Objects/checker_gen1_app"
|
||||
APP_FILE_DST = "./python/file/checker_gen1_app"
|
||||
BOOT_FILE_DST = "./Objects/checker_gen1_boot"
|
||||
|
||||
|
||||
|
@@ -77,4 +77,3 @@ void debug_log(const char *file,const char *fun,int line,int level,const char *f
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -250,9 +250,8 @@ static inline int str_is_empty_char(char c)
|
||||
* 判断字符串是否是可打印,是返回1,不是返回0
|
||||
*
|
||||
*/
|
||||
int str_is_print_str(const char *str)
|
||||
int str_is_print_str(const char *str,int len)
|
||||
{
|
||||
int len=str_len(str);
|
||||
for(int i=0;i<len;i++)
|
||||
{
|
||||
// 既不是空白字符也不是可打印字符
|
||||
|
@@ -20,7 +20,7 @@ list_def *str_split(const char *s,char c);/*temp_ptr*/
|
||||
list_def *str_atod_list(const char *s, char c);/*temp_ptr*/
|
||||
char *str_simplified(const char *str);/*temp_ptr*/
|
||||
char *str_duplicate(char *p);
|
||||
int str_is_print_str(const char *str);
|
||||
int str_is_print_str(const char *str,int len);
|
||||
|
||||
|
||||
|
||||
|
@@ -41,7 +41,7 @@ static commend_def *cmd_find(char *name)
|
||||
|
||||
|
||||
|
||||
void cmd_recv_slot(void *obj,uint8_t cmd,array_def *data,char *err_str)
|
||||
void cmd_recv_slot(void *obj,const char *coder,uint8_t cmd,array_def *data,char *err_str)
|
||||
{
|
||||
self_def *s=&g_self;
|
||||
commend_def *commd;
|
||||
|
@@ -41,7 +41,7 @@ int cmd_print(const char *fmt,...);
|
||||
|
||||
signal cmd_reply_signal(void *obj,uint8_t cmd,array_def *data);
|
||||
|
||||
void cmd_recv_slot(void *obj,uint8_t cmd,array_def *data,char *err_str);
|
||||
void cmd_recv_slot(void *obj,const char *codec_name,uint8_t cmd,array_def *data,char *err_str);
|
||||
|
||||
|
||||
|
||||
|
@@ -151,7 +151,7 @@ static int code(list_def *argv)
|
||||
}
|
||||
|
||||
|
||||
commend_export(code,code,"write uidcode to slave,uid_len=10,pw_len=4")
|
||||
commend_export(code,code,"write uidcode to slave,uid_len=8,pw_len=4")
|
||||
|
||||
|
||||
|
||||
|
@@ -154,13 +154,14 @@ signal_export(coder2_live_send_signal);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void tran_send_signal(tran_def *p,uint8_t cmd,array_def *data)
|
||||
{
|
||||
uint32_t param[2];
|
||||
param[0]=(uint32_t)cmd;
|
||||
|
||||
void tran_send_signal(tran_def *p,uint8_t cmd,array_def *data)
|
||||
{
|
||||
uint32_t param[2];
|
||||
param[0]=(uint32_t)cmd;
|
||||
param[1]=(uint32_t)data;
|
||||
_signal_emit(p,tran_send_signal,param,2);
|
||||
}
|
||||
signal_export(tran_send_signal);
|
||||
|
@@ -201,6 +201,16 @@ static int protu_init(void)
|
||||
const sys_param_def *par=sys_param();
|
||||
protu_def *protu=protu_creat(dev_get(par->host_if));
|
||||
app_variable("protu",protu,0);
|
||||
|
||||
// 如果通信接口不是用的串口,则增加一个串口的通信
|
||||
if(strcmp(par->host_if,"uart4")==0)
|
||||
{
|
||||
app_variable("protu2",protu,0);
|
||||
}else
|
||||
{
|
||||
protu_def *protu2=protu_creat(dev_get("uart4"));
|
||||
app_variable("protu2",protu2,0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
app_init_export(protu_init)
|
||||
@@ -237,7 +247,7 @@ protu_def *protu_creat(uart_def *uart)
|
||||
|
||||
int protu_send(protu_def *p,array_def *data)
|
||||
{
|
||||
//DBG_LOG("send:%s",str_temp(arr_string(data)));
|
||||
DBG_LOG("send:%s",str_temp(arr_string(data)));
|
||||
return p->uart->write(p->uart,arr_data(data),arr_length(data));
|
||||
}
|
||||
|
||||
@@ -297,13 +307,14 @@ array_def *protu_decode_str(protu_def *p,array_def *data)
|
||||
DBG_LOG("decode for command");
|
||||
str_set(p->str_err,"ok");
|
||||
p->cmd=0;
|
||||
arr_append(data,0);
|
||||
if(str_is_print_str((const char *)arr_data(data))==1)
|
||||
if(str_is_print_str((const char *)arr_data(data),arr_length(data))==1)
|
||||
{
|
||||
arr_append(data,0);
|
||||
arr_appends_from(r,data);
|
||||
}else{
|
||||
DBG_WARN("data not a string");
|
||||
str_set(p->str_err,"not string");
|
||||
//arr_remove(data,arr_length(data)-1,1);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
@@ -320,6 +331,7 @@ array_def *protu_encode_str(protu_def *p,array_def *data)
|
||||
}
|
||||
|
||||
|
||||
protuc_codec_export(string,protu_decode_str,protu_encode_str);
|
||||
|
||||
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -46,7 +46,7 @@ static void udp_thread(void *arg)
|
||||
arr_appends(arr,data,len);
|
||||
arr_append(arr,0);
|
||||
// 字符数据命令字为0
|
||||
emit udp_recv_signal(s,0,arr_temp(arr),"ok");
|
||||
emit udp_recv_signal(s,"string",0,arr_temp(arr),"ok");
|
||||
} while (netbuf_next(s->buf) >= 0);
|
||||
netbuf_delete(s->buf);
|
||||
}
|
||||
|
@@ -9,7 +9,7 @@
|
||||
|
||||
|
||||
|
||||
signal udp_recv_signal(void *obj,uint8_t cmd,array_def *data,char *err_str);
|
||||
signal udp_recv_signal(void *obj,const char *codec_name,uint8_t cmd,array_def *data,char *err_str);
|
||||
|
||||
void udp_reply_call(void *obj,uint8_t cmd,array_def *data);
|
||||
|
||||
|
Reference in New Issue
Block a user