diff --git a/checker_gen1.uvoptx b/checker_gen1.uvoptx index 2c8e293..9be9586 100644 --- a/checker_gen1.uvoptx +++ b/checker_gen1.uvoptx @@ -120,7 +120,7 @@ 0 DLGUARM - ; + , 0 @@ -145,7 +145,7 @@ 0 JL2CM3 - -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) + -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) 0 @@ -153,29 +153,12 @@ UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32F407VGTx$CMSIS\Flash\STM32F4xx_1024.FLM)) - - - 0 - 0 - 99 - 1 -
134395490
- 0 - 0 - 0 - 0 - 0 - 1 - .\source\rt_thread\board.c - - \\checker_gen1_app\source/rt_thread/board.c\99 -
-
+ 1 - 1 - 0x20001748 + 0 + str 0 diff --git a/python/prottcp.py b/python/prottcp.py index 5acf55f..da6079b 100644 --- a/python/prottcp.py +++ b/python/prottcp.py @@ -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=()) diff --git a/python/updata.py b/python/updata.py index eb3f0a1..07bcee3 100644 --- a/python/updata.py +++ b/python/updata.py @@ -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: diff --git a/source/ReadMe.txt b/source/ReadMe.txt index 5894cec..29bdb8e 100644 --- a/source/ReadMe.txt +++ b/source/ReadMe.txt @@ -90,4 +90,11 @@ 注码指令自动回读结果 2023.6.13 适配3码互转算法 - \ No newline at end of file +2023.6.14 + 与上位机联测检测和赋码指令通过 + 串口在任何情况下都可以运行命令行 + 需求: + 赋码无论成功失败都返回3码数据 + 流水号相同的命令直接返回上次的返回结果 + 命令不存在,命令参数错误,设备忙,返回错误码 + 波特率、命令返回格式、小板起始地址可配置 \ No newline at end of file diff --git a/source/coder/coder_lib.c b/source/coder/coder_lib.c index c04cb58..393b691 100644 --- a/source/coder/coder_lib.c +++ b/source/coder/coder_lib.c @@ -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; diff --git a/source/main/compiler_info.h b/source/main/compiler_info.h index a6097a8..1fa91e7 100644 --- a/source/main/compiler_info.h +++ b/source/main/compiler_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-06-13 17:34:13" +#define BUILD_DATE "2023-06-14 15:49:07" diff --git a/source/main/main.c b/source/main/main.c index 249178b..4fec6ae 100644 --- a/source/main/main.c +++ b/source/main/main.c @@ -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("我知道"); diff --git a/source/mycopy.py b/source/mycopy.py index 14fed59..ed8c063 100644 --- a/source/mycopy.py +++ b/source/mycopy.py @@ -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" diff --git a/source/soft/debug.c b/source/soft/debug.c index 9d9a091..14c35ad 100644 --- a/source/soft/debug.c +++ b/source/soft/debug.c @@ -77,4 +77,3 @@ void debug_log(const char *file,const char *fun,int line,int level,const char *f - diff --git a/source/soft/mystring.c b/source/soft/mystring.c index 9e41bb5..da63f8b 100644 --- a/source/soft/mystring.c +++ b/source/soft/mystring.c @@ -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;ihost_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); diff --git a/source/task/tran_for_coder2.c b/source/task/tran_for_coder2.c index 1b69c03..ff36ab3 100644 --- a/source/task/tran_for_coder2.c +++ b/source/task/tran_for_coder2.c @@ -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; } diff --git a/source/task/udp.c b/source/task/udp.c index a876a01..b548504 100644 --- a/source/task/udp.c +++ b/source/task/udp.c @@ -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); } diff --git a/source/task/udp.h b/source/task/udp.h index 78fab05..890adf9 100644 --- a/source/task/udp.h +++ b/source/task/udp.h @@ -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);