zos.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/usr/bin/python3
  2. # -*- coding: UTF-8 -*-
  3. import os
  4. import sys
  5. import platform
  6. import multiprocessing
  7. import serial
  8. import time
  9. from tools.Download import build
  10. def usage():
  11. print('''
  12. ZeusOS版本SDK的编译命令如下:
  13. python zos.py [action]
  14. <-menu> 功能描述: 开启图形化代码裁剪功能
  15. <-dl> 功能描述: 往UE下载程序
  16. 参数: <PortNo.>: 串口号(例如com4)
  17. <-s> 功能描述: 拆分文件
  18. 示例1, 开启图形化代码裁剪功能
  19. python zos.py -menu
  20. 示例2, 下载固件到模组
  21. python zos.py -dl com3
  22. 示例3, 拆分固件
  23. python zos.py -s
  24. ''')
  25. def enter_download_mode(com):
  26. print(com)
  27. dev = serial.Serial(com, 9600,timeout=1, parity=serial.PARITY_NONE, stopbits=1)
  28. if dev.isOpen(): # 判断串口是否打开
  29. print("open success")
  30. else :
  31. dev.open()
  32. dev.write('AT\r\n'.encode("utf8"))
  33. data = dev.read(50)
  34. time.sleep(1)
  35. dev.write('AT\r\n'.encode("utf8"))
  36. data = dev.read(50)
  37. if ( "OK" in str(data)):
  38. print("当前是AT固件\r\n")
  39. dev.write('AT+NV=SET,STANDBY,0\r\n'.encode("utf8"))
  40. time.sleep(2)
  41. dev.write('AT+NV=SET,WDT,0\r\n'.encode("utf8"))
  42. time.sleep(2)
  43. dev.write('AT+FORCEDL\r\n'.encode("utf8"))
  44. time.sleep(2)
  45. data = dev.read(4)
  46. print(data)
  47. else :
  48. dev.baudrate = 115200
  49. dev.write('AT\r\n'.encode("utf8"))
  50. data = dev.read(50)
  51. dev.write('enter_download_mode\r\n'.encode("utf8"))
  52. data = dev.read(50)
  53. if ( "OK" in str(data)):
  54. print("当前已经进入二次开发模式,即将下载固件\r\n")
  55. else :
  56. print("设备连接失败\r\n")
  57. dev.close()
  58. time.sleep(3)
  59. def main():
  60. argc = 1
  61. test_list = ['-menu','-b','-c','-m','-mdl','-dl','-s','-h']
  62. os_ver = platform.system()
  63. while len(sys.argv) > argc:
  64. if sys.argv[argc] == "-menu" :
  65. menu_cmd = "python ./../../tools/config/menuconfig.py"
  66. if os_ver == "Windows":
  67. menu_cmd = "start cmd /c " + menu_cmd
  68. else :
  69. menu_cmd = "gnome-terminal -x " + menu_cmd
  70. os.system(menu_cmd)
  71. print("Zeusos menuconfig 配置已开启")
  72. if os_ver == "Windows":
  73. print("如果在windows下看不到图形化配置界面,请使用调用以下命令安装python包: \r\npip install windows-curses ")
  74. elif sys.argv[argc] == '-m':
  75. if len(sys.argv) > argc+1:
  76. if sys.argv[argc+1] in test_list:
  77. passward = ''
  78. else :
  79. passward = sys.argv[argc+1]
  80. argc +=1
  81. else :
  82. passward = ''
  83. print(passward)
  84. build.do_pack(passward)
  85. print('\r\n固件合并完成,现在可以执行以下命令进行下载固件了.')
  86. print('\r\n当前程序为AT固件或者shell命令可以正常运行,请使用 python zos.py -dl com3 进行下载')
  87. print('\r\n如果程序处于死机状态请按住boot按键后再上电,然后使用 python zos.py -mdl com3 进行下载')
  88. elif sys.argv[argc] == '-mdl':
  89. cmd_list = []
  90. if len(sys.argv) > argc+1:
  91. if sys.argv[argc+1] in test_list:
  92. print("执行下载命令,需要输入串口信息。")
  93. print("例如:python zos.py -dl com3")
  94. return
  95. else :
  96. cmd_list.append(sys.argv[argc+1])
  97. if len(sys.argv) > argc+2:
  98. if sys.argv[argc+2] not in test_list:
  99. cmd_list.append(sys.argv[argc+2])
  100. build.do_download(cmd_list)
  101. argc +=1
  102. else :
  103. print("执行下载命令,需要输入串口信息。")
  104. print("例如:python zos.py -dl com3")
  105. return
  106. elif sys.argv[argc] == '-dl':
  107. cmd_list = []
  108. if len(sys.argv) > argc+1:
  109. if sys.argv[argc+1] in test_list:
  110. print("执行下载命令,需要输入串口信息。")
  111. print("例如:python zos.py -dl com3")
  112. return
  113. else :
  114. cmd_list.append(sys.argv[argc+1])
  115. if len(sys.argv) > argc+2:
  116. if sys.argv[argc+2] not in test_list:
  117. cmd_list.append(sys.argv[argc+2])
  118. enter_download_mode(cmd_list[0])
  119. build.do_download(cmd_list)
  120. argc +=1
  121. else :
  122. print("执行下载命令,需要输入串口信息。")
  123. print("例如:python zos.py -dl com3")
  124. return
  125. elif sys.argv[argc] == '-s':
  126. if len(sys.argv) > argc+1:
  127. if sys.argv[argc+1] in test_list:
  128. passward = ''
  129. else :
  130. passward = sys.argv[argc+1]
  131. argc +=1
  132. else :
  133. passward = ''
  134. print(passward)
  135. build.do_unpack(passward)
  136. print('\r\n固件拆分完成')
  137. elif sys.argv[argc] == '-h':
  138. usage()
  139. else :
  140. usage()
  141. argc += 1
  142. print("***********************************************************************")
  143. print("操作已完成,再见")
  144. if len(sys.argv) == 1 :
  145. usage()
  146. else :
  147. main()