BaseClass.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import asyncio
  2. from sockets import ConnectionManager
  3. from utils.common import message_queue
  4. from mcu.capture.smart_shooter_class import SmartShooter
  5. class BaseClass:
  6. def __init__(
  7. self, websocket_manager: ConnectionManager, smart_shooter: SmartShooter = None
  8. ):
  9. self.websocket_manager = websocket_manager
  10. self.smart_shooter = smart_shooter
  11. self.msg_type = ""
  12. self.websocket = None
  13. # -1连接失败 0未连接 1连接中 2连接成功 3端口占用
  14. # self.device_status = 2
  15. def sendSocketMessage(self, code=0, msg="", data=None, device_status=2):
  16. data = {
  17. "code": code,
  18. "msg": msg,
  19. "status": device_status,
  20. "data": data,
  21. "msg_type": self.msg_type,
  22. }
  23. loop = asyncio.get_event_loop()
  24. if self.websocket == None:
  25. loop.create_task(message_queue.put(data))
  26. else:
  27. loop.create_task(
  28. self.websocket_manager.send_personal_message(data, self.websocket)
  29. )
  30. print("\033[1;32;40m 发送消息===>sendSocketMessage \033[0m", data)
  31. async def asyncSendSocketMessage(self, code=0, msg="", data=None, device_status=2):
  32. data = {
  33. "code": code,
  34. "msg": msg,
  35. "status": device_status,
  36. "data": data,
  37. "msg_type": self.msg_type,
  38. }
  39. if self.websocket == None:
  40. await asyncio.wait_for(message_queue.put(data), timeout=0.1)
  41. else:
  42. await self.websocket_manager.send_personal_message(data, self.websocket)
  43. def change_hex_to_int(self, _bytearray):
  44. return " ".join([hex(x) for x in _bytearray])
  45. def read_cmd(self, serial_handle, check=None):
  46. n = 0
  47. while 1:
  48. try:
  49. read_d = serial_handle.read_all() # 读取接收到的数据
  50. self.receive_data += read_d
  51. except BaseException as e:
  52. print("171串口接收报错", e)
  53. self.serial_handle = None
  54. return False
  55. if len(self.receive_data) < 4:
  56. break
  57. if self.receive_data[0] == 0x55 and self.receive_data[1] == 0x55:
  58. # print("read ori ", self.change_hex_to_int(self.receive_data))
  59. data_len = self.receive_data[2]
  60. if len(self.receive_data) < data_len + 4:
  61. # 此处需要超时机制
  62. # print("数据长度不够,等待下次读取")
  63. # 超时退出
  64. # if not self.serial_handle.txdone():
  65. # return None
  66. # n += 1
  67. # if n > out_time_n:
  68. # return None
  69. # time.sleep(0.01)
  70. continue
  71. _data = self.receive_data[3 : data_len + 4]
  72. # 更新缓存区
  73. self.receive_data = self.receive_data[data_len + 4 :]
  74. # 校验数据
  75. if 0xFF & ~sum(_data[:-1]) == _data[-1]:
  76. # print("receive_data:", self.change_hex_to_int(self.receive_data[:-1]))
  77. return _data[:-1]
  78. else:
  79. return None
  80. else:
  81. # print("起始位不是 55 55 进行移除", self.receive_data[0])
  82. # 起始位不是 55 55 进行移除
  83. while self.receive_data:
  84. if len(self.receive_data) == 1:
  85. if self.receive_data[0] == 0x55:
  86. break
  87. else:
  88. self.receive_data = b""
  89. else:
  90. if (
  91. self.receive_data[0] == 0x55
  92. and self.receive_data[1] == 0x55
  93. ):
  94. break
  95. else:
  96. self.receive_data = self.receive_data[1:]
  97. def write_cmd(self, serial_handle, data: list):
  98. if serial_handle:
  99. # data = [(0xff & par1), (0xff & (par1 >> 8))]
  100. # self.clearn_flush()
  101. buf = bytearray(b"")
  102. buf.extend([0x55, 0x55, (0xFF & len(data))])
  103. buf.extend(data)
  104. buf.extend([0xFF & ~sum(data)])
  105. # 55 55 02 5a 01 a4
  106. # print("send buf {}".format(self.change_hex_to_int(buf)))
  107. try:
  108. serial_handle.write(buf)
  109. return True
  110. except:
  111. serial_handle = None
  112. _recv_data = b""
  113. return False