main.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import os
  2. import subprocess
  3. import sys
  4. import serial
  5. import serial.tools.list_ports
  6. import time
  7. import traceback
  8. import _thread
  9. SPOOL = {}
  10. def burn_dev(device):
  11. ser = None
  12. linelen = len("I/main auth ok 680845463968338A185E air101")+1
  13. try:
  14. ser = serial.Serial(device, 115200, timeout=1)
  15. ser.rts = False
  16. data = ser.read(linelen)
  17. ser.close()
  18. #print(data)
  19. if data and b'CCC' in data :
  20. # {} -ds {} -ws 115200 -c {} -rs rts -dl {}
  21. print("***********刷机开始**************", device)
  22. subprocess.check_call(["air101_flash.exe", "-ds", "2M", "-c", str(device), "-ws", "115200", "-rs", "rts", "-dl", "air10x.fls"])
  23. print("***********刷机完成**************", device)
  24. # TODO 读取授权信息,联网授权
  25. ser = serial.Serial(device, 921600, timeout=1)
  26. ser.rts = False
  27. data = ser.read(linelen)
  28. #ser.close()
  29. if data and b'auth ok' in data:
  30. print("============设备已刷机且已激活===", device)
  31. time.sleep(3)
  32. else :
  33. ser.close()
  34. ser = None
  35. print("===非刷机模式的COM===========", device)
  36. time.sleep(3)
  37. SPOOL.pop(str(device))
  38. except Exception:
  39. traceback.print_exc()
  40. if ser :
  41. ser.close()
  42. time.sleep(1)
  43. def serial_lpop():
  44. for item in serial.tools.list_ports.comports():
  45. if "CH340" in str(item.description) :
  46. if str(item.device) in SPOOL :
  47. continue
  48. SPOOL[str(item.device)] = True
  49. _thread.start_new_thread(burn_dev, (item.device,))
  50. print("===等待新的设备==========================")
  51. def main():
  52. while 1:
  53. try :
  54. serial_lpop()
  55. except Exception:
  56. traceback.print_exc()
  57. time.sleep(1)
  58. if __name__ == "__main__" :
  59. main()