#!/usr/bin/python3 # -*- coding: UTF-8 -*- import os import sys import platform import multiprocessing import serial import time from tools.Download import build def usage(): print(''' ZeusOS版本SDK的编译命令如下: python zos.py [action] <-menu> 功能描述: 开启图形化代码裁剪功能 <-dl> 功能描述: 往UE下载程序 参数: : 串口号(例如com4) <-s> 功能描述: 拆分文件 示例1, 开启图形化代码裁剪功能 python zos.py -menu 示例2, 下载固件到模组 python zos.py -dl com3 示例3, 拆分固件 python zos.py -s ''') def enter_download_mode(com): print(com) dev = serial.Serial(com, 9600,timeout=1, parity=serial.PARITY_NONE, stopbits=1) if dev.isOpen(): # 判断串口是否打开 print("open success") else : dev.open() dev.write('AT\r\n'.encode("utf8")) data = dev.read(50) time.sleep(1) dev.write('AT\r\n'.encode("utf8")) data = dev.read(50) if ( "OK" in str(data)): print("当前是AT固件\r\n") dev.write('AT+NV=SET,STANDBY,0\r\n'.encode("utf8")) time.sleep(2) dev.write('AT+NV=SET,WDT,0\r\n'.encode("utf8")) time.sleep(2) dev.write('AT+FORCEDL\r\n'.encode("utf8")) time.sleep(2) data = dev.read(4) print(data) else : dev.baudrate = 115200 dev.write('AT\r\n'.encode("utf8")) data = dev.read(50) dev.write('enter_download_mode\r\n'.encode("utf8")) data = dev.read(50) if ( "OK" in str(data)): print("当前已经进入二次开发模式,即将下载固件\r\n") else : print("设备连接失败\r\n") dev.close() time.sleep(3) def main(): argc = 1 test_list = ['-menu','-b','-c','-m','-mdl','-dl','-s','-h'] os_ver = platform.system() while len(sys.argv) > argc: if sys.argv[argc] == "-menu" : menu_cmd = "python ./../../tools/config/menuconfig.py" if os_ver == "Windows": menu_cmd = "start cmd /c " + menu_cmd else : menu_cmd = "gnome-terminal -x " + menu_cmd os.system(menu_cmd) print("Zeusos menuconfig 配置已开启") if os_ver == "Windows": print("如果在windows下看不到图形化配置界面,请使用调用以下命令安装python包: \r\npip install windows-curses ") elif sys.argv[argc] == '-m': if len(sys.argv) > argc+1: if sys.argv[argc+1] in test_list: passward = '' else : passward = sys.argv[argc+1] argc +=1 else : passward = '' print(passward) build.do_pack(passward) print('\r\n固件合并完成,现在可以执行以下命令进行下载固件了.') print('\r\n当前程序为AT固件或者shell命令可以正常运行,请使用 python zos.py -dl com3 进行下载') print('\r\n如果程序处于死机状态请按住boot按键后再上电,然后使用 python zos.py -mdl com3 进行下载') elif sys.argv[argc] == '-mdl': cmd_list = [] if len(sys.argv) > argc+1: if sys.argv[argc+1] in test_list: print("执行下载命令,需要输入串口信息。") print("例如:python zos.py -dl com3") return else : cmd_list.append(sys.argv[argc+1]) if len(sys.argv) > argc+2: if sys.argv[argc+2] not in test_list: cmd_list.append(sys.argv[argc+2]) build.do_download(cmd_list) argc +=1 else : print("执行下载命令,需要输入串口信息。") print("例如:python zos.py -dl com3") return elif sys.argv[argc] == '-dl': cmd_list = [] if len(sys.argv) > argc+1: if sys.argv[argc+1] in test_list: print("执行下载命令,需要输入串口信息。") print("例如:python zos.py -dl com3") return else : cmd_list.append(sys.argv[argc+1]) if len(sys.argv) > argc+2: if sys.argv[argc+2] not in test_list: cmd_list.append(sys.argv[argc+2]) enter_download_mode(cmd_list[0]) build.do_download(cmd_list) argc +=1 else : print("执行下载命令,需要输入串口信息。") print("例如:python zos.py -dl com3") return elif sys.argv[argc] == '-s': if len(sys.argv) > argc+1: if sys.argv[argc+1] in test_list: passward = '' else : passward = sys.argv[argc+1] argc +=1 else : passward = '' print(passward) build.do_unpack(passward) print('\r\n固件拆分完成') elif sys.argv[argc] == '-h': usage() else : usage() argc += 1 print("***********************************************************************") print("操作已完成,再见") if len(sys.argv) == 1 : usage() else : main()