diff --git a/ReadMe.txt b/ReadMe.txt
index d3a3dbf..a702fe9 100644
--- a/ReadMe.txt
+++ b/ReadMe.txt
@@ -50,5 +50,8 @@
2023.9.20
updata添加dhcp功能,cfg.json 视为配置文件
updata添加串口控制台功能,配合U盘,自动把文件复制到设备中
+2023.9.20
+ 串口控制台根据文件后缀自动识别文件类型,其中配置文件为cfg.json,
+ 方案文件后缀为scheme.json
diff --git a/updata/console_uart.py b/updata/console_uart.py
index 857b763..1af85c0 100644
--- a/updata/console_uart.py
+++ b/updata/console_uart.py
@@ -8,11 +8,13 @@ import threading
import serial
import serial.tools.list_ports
import time
+import re
-
+UPDATA_PATH="/run/media/sda/updata"
+# UPDATA_PATH="/"
@@ -24,6 +26,8 @@ class console_dlg(QObject):
QObject.__init__(self)
self.ser=None
self.cmd_list=[]
+ self.ls_cmd=False
+ self.file_list=[]
self.w=QDialog(father)
self.w.resize(1200,500)
self.w.setWindowTitle(title)
@@ -33,6 +37,14 @@ class console_dlg(QObject):
self.text_init()
self.com_but_init()
self.runcmd_but_init()
+ self.str_list=["ATK-MP157 login: root",
+ "Booting fw image checker_m4.axf",
+ "# ls",
+ "root@ATK-MP157:",
+ "removable disk",
+ "cd: can't cd to "+UPDATA_PATH,
+ "No such file or directory"
+ ]
def text_init(self):
self.console_text = QTextBrowser(self.w)
self.console_text.setObjectName(u"str_list")
@@ -81,7 +93,7 @@ class console_dlg(QObject):
bsp=int(115200)
self.ser = serial.Serial(port=com, baudrate=bsp,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,timeout=None)
- print(str(self.ser))
+ # print(str(self.ser))
t = threading.Thread(target=self._recv, args=())
t.start()
except Exception as e:
@@ -114,34 +126,68 @@ class console_dlg(QObject):
self.ser.write(text.encode("utf-8")+b"\r\n")
except Exception as e:
print(str(e))
+ # 添加文字到显示区
def item_append(self,text:str):
index,ack=self.type_of_str(text)
if(index==0):
print("linux started.")
- self.start_send_cmds()
+ # self.start_send_cmds()
elif(index==1):
print("app started.")
if(index!=-1):
+ if(index==2):
+ # 文件列表
+ self.ls_cmd=True
txt="" +text+ " "
else:
- txt=text
+ if(self.ls_cmd==True):
+ txt=self.decode_file_list(text)
+ else:
+ txt=text
try:
self.console_text.append(txt)
self.console_text.moveCursor(QTextCursor.MoveOperation.End)
except Exception as e:
print(str(e))
- if((index==2) or (index==3))and (ack==True):
+ if(index==3) and (ack==True):
# 准备好接收下一个指令
+ if(self.ls_cmd==True):
+ self.ls_cmd=False
+ self._pack_cmd_list()
self.send_cmdlist()
- # 查找字幕类型,如果完全相等则返回True
+ if(index==4):
+ # 已识别到U盘
+ self._item_append_green_str("已识别到U盘.")
+ if(index==5):
+ # 打开目录失败
+ self._item_append_red_str("打开目录失败,其插入U盘并且在根目录建立 'updata' 文件夹.")
+ self.cmd_list.clear()
+ if(index==6):
+ # 找不到相应文件
+ self._item_append_red_str("找不到需要的文件,请把相应文件复制到U盘中.")
+ self.cmd_list.clear()
+
+
+ def _clear_irc_color(self, string):
+ pattern = r'\x1b(\[.*?[@-~]|\].*?(\x07|\x1b\\))'
+ return re.sub(pattern, '', string)
+
+ def decode_file_list(self,file_list:str):
+ s=self._clear_irc_color(file_list)
+ s_list=s.split()
+ for i in s_list:
+ self._item_append_green_str('|----|'+i)
+ self.file_list.append(i)
+ # print(self.file_list)
+ return ""
+ # 查找字幕类型,如果末尾是'#'则返回True
def type_of_str(self,text:str):
- str_list=["ATK-MP157 login: root","Booting fw image checker_m4.axf","root@ATK-MP157:~#","root@ATK-MP157:/run/media/sda1/updata#","sda: sda1"]
- for i in range(len(str_list)):
- if(text.find(str_list[i])!=-1):
- if(str_list[i]==text):
- return i,True
- else:
- return i,False
+ # print("type",text)
+ for i in range(len(self.str_list)):
+ if(text.find(self.str_list[i])!=-1):
+ ack=('#'[0]==text[-1])
+ # print(text,ack,i)
+ return i,ack
return -1,False
def _item_append_green_str(self,text:str):
txt="" +text+ " "
@@ -150,23 +196,45 @@ class console_dlg(QObject):
self.console_text.moveCursor(QTextCursor.MoveOperation.End)
except Exception as e:
print(str(e))
+ def _item_append_red_str(self,text:str):
+ txt="" +text+ " "
+ try:
+ self.console_text.append(txt)
+ self.console_text.moveCursor(QTextCursor.MoveOperation.End)
+ except Exception as e:
+ print(str(e))
+ def file_file_by_type(self,type:str):
+ for i in self.file_list:
+ if(i[-len(type):]==type):
+ return i
+ print("diff:",self.file_list,type)
+ return "unknown"
def start_send_cmds(self):
+ self.cmd_list.clear()
+ self.file_list.clear()
self._item_append_green_str("开始发送命令行,请不要关闭窗口。")
- self.cmd_list.append("cd /run/media/sda1/updata")
+ self.cmd_list.append("cd "+UPDATA_PATH)
+ self.cmd_list.append("ls")
+ self.send_cmdlist()
+
+ # 组装命令列表
+ def _pack_cmd_list(self):
self.cmd_list.append("systemctl stop atk-qtapp-start.service")
self.cmd_list.append("mkdir /home/root/config")
- self.cmd_list.append("cp checker_host.elf /usr/local/QDesktop-fb")
+ self.cmd_list.append("cp "+self.file_file_by_type(".elf")+" /usr/local/QDesktop-fb")
self.cmd_list.append("chmod 777 /usr/local/QDesktop-fb")
- self.cmd_list.append("cp checker_slave_app_can.bin /home/root/config/checker_slave.bin")
+ self.cmd_list.append("cp "+self.file_file_by_type(".bin")+" /home/root/config/checker_slave.bin")
+ self.cmd_list.append("cp "+self.file_file_by_type("scheme.json")+" /home/root/config/checker_ye_cfg.json")
self.cmd_list.append("cp cfg.json /home/root/config/cfg.json")
- self.cmd_list.append("cp checker_m4.axf /lib/firmware/checker_m4.axf")
- self.cmd_list.append("cp stm32mp157d-atk.dtb /boot/stm32mp157d-atk.dtb")
+ self.cmd_list.append("cp "+self.file_file_by_type(".axf")+" /lib/firmware/checker_m4.axf")
+ self.cmd_list.append("cp "+self.file_file_by_type(".dtb")+" /boot/stm32mp157d-atk.dtb")
self.cmd_list.append("sync")
self.cmd_list.append("systemctl restart atk-qtapp-start.service")
- self.send_cmdlist()
+
def send_cmdlist(self):
if(len(self.cmd_list)>0):
self._item_append_green_str("发送下一个命令,还剩 "+str(len(self.cmd_list)))
+ print("send cmd:",self.cmd_list[0])
self.send_str(self.cmd_list[0])
self.cmd_list.pop(0)
else: