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