串口控制台根据文件后缀自动识别文件类型,其中配置文件为cfg.json,

方案文件后缀为scheme.json
This commit is contained in:
andy
2023-09-20 23:24:29 +08:00
parent d8436b89eb
commit 4292478f67
2 changed files with 90 additions and 19 deletions

View File

@@ -50,5 +50,8 @@
2023.9.20 2023.9.20
updata添加dhcp功能cfg.json 视为配置文件 updata添加dhcp功能cfg.json 视为配置文件
updata添加串口控制台功能配合U盘自动把文件复制到设备中 updata添加串口控制台功能配合U盘自动把文件复制到设备中
2023.9.20
串口控制台根据文件后缀自动识别文件类型,其中配置文件为cfg.json,
方案文件后缀为scheme.json

View File

@@ -8,11 +8,13 @@ import threading
import serial import serial
import serial.tools.list_ports import serial.tools.list_ports
import time import time
import re
UPDATA_PATH="/run/media/sda/updata"
# UPDATA_PATH="/"
@@ -24,6 +26,8 @@ class console_dlg(QObject):
QObject.__init__(self) QObject.__init__(self)
self.ser=None self.ser=None
self.cmd_list=[] self.cmd_list=[]
self.ls_cmd=False
self.file_list=[]
self.w=QDialog(father) self.w=QDialog(father)
self.w.resize(1200,500) self.w.resize(1200,500)
self.w.setWindowTitle(title) self.w.setWindowTitle(title)
@@ -33,6 +37,14 @@ class console_dlg(QObject):
self.text_init() self.text_init()
self.com_but_init() self.com_but_init()
self.runcmd_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): def text_init(self):
self.console_text = QTextBrowser(self.w) self.console_text = QTextBrowser(self.w)
self.console_text.setObjectName(u"str_list") self.console_text.setObjectName(u"str_list")
@@ -81,7 +93,7 @@ class console_dlg(QObject):
bsp=int(115200) bsp=int(115200)
self.ser = serial.Serial(port=com, baudrate=bsp,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE, self.ser = serial.Serial(port=com, baudrate=bsp,bytesize=serial.EIGHTBITS,parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,timeout=None) stopbits=serial.STOPBITS_ONE,timeout=None)
print(str(self.ser)) # print(str(self.ser))
t = threading.Thread(target=self._recv, args=()) t = threading.Thread(target=self._recv, args=())
t.start() t.start()
except Exception as e: except Exception as e:
@@ -114,34 +126,68 @@ class console_dlg(QObject):
self.ser.write(text.encode("utf-8")+b"\r\n") self.ser.write(text.encode("utf-8")+b"\r\n")
except Exception as e: except Exception as e:
print(str(e)) print(str(e))
# 添加文字到显示区
def item_append(self,text:str): def item_append(self,text:str):
index,ack=self.type_of_str(text) index,ack=self.type_of_str(text)
if(index==0): if(index==0):
print("linux started.") print("linux started.")
self.start_send_cmds() # self.start_send_cmds()
elif(index==1): elif(index==1):
print("app started.") print("app started.")
if(index!=-1): if(index!=-1):
if(index==2):
# 文件列表
self.ls_cmd=True
txt="<font color=blue>" +text+ "</font> <font color=black> </font>" txt="<font color=blue>" +text+ "</font> <font color=black> </font>"
else: else:
txt=text if(self.ls_cmd==True):
txt=self.decode_file_list(text)
else:
txt=text
try: try:
self.console_text.append(txt) self.console_text.append(txt)
self.console_text.moveCursor(QTextCursor.MoveOperation.End) self.console_text.moveCursor(QTextCursor.MoveOperation.End)
except Exception as e: except Exception as e:
print(str(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() 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): 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"] # print("type",text)
for i in range(len(str_list)): for i in range(len(self.str_list)):
if(text.find(str_list[i])!=-1): if(text.find(self.str_list[i])!=-1):
if(str_list[i]==text): ack=('#'[0]==text[-1])
return i,True # print(text,ack,i)
else: return i,ack
return i,False
return -1,False return -1,False
def _item_append_green_str(self,text:str): def _item_append_green_str(self,text:str):
txt="<font color=green>" +text+ "</font> <font color=black> </font>" txt="<font color=green>" +text+ "</font> <font color=black> </font>"
@@ -150,23 +196,45 @@ class console_dlg(QObject):
self.console_text.moveCursor(QTextCursor.MoveOperation.End) self.console_text.moveCursor(QTextCursor.MoveOperation.End)
except Exception as e: except Exception as e:
print(str(e)) print(str(e))
def _item_append_red_str(self,text:str):
txt="<font color=red>" +text+ "</font> <font color=black> </font>"
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): def start_send_cmds(self):
self.cmd_list.clear()
self.file_list.clear()
self._item_append_green_str("开始发送命令行,请不要关闭窗口。") 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("systemctl stop atk-qtapp-start.service")
self.cmd_list.append("mkdir /home/root/config") 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("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 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 "+self.file_file_by_type(".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(".dtb")+" /boot/stm32mp157d-atk.dtb")
self.cmd_list.append("sync") self.cmd_list.append("sync")
self.cmd_list.append("systemctl restart atk-qtapp-start.service") self.cmd_list.append("systemctl restart atk-qtapp-start.service")
self.send_cmdlist()
def send_cmdlist(self): def send_cmdlist(self):
if(len(self.cmd_list)>0): if(len(self.cmd_list)>0):
self._item_append_green_str("发送下一个命令,还剩 "+str(len(self.cmd_list))) 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.send_str(self.cmd_list[0])
self.cmd_list.pop(0) self.cmd_list.pop(0)
else: else: