BaseClass.py 4.5 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. async def asyncSendSocketMessage(self, code=0, msg="", data=None, device_status=2):
  31. data = {
  32. "code": code,
  33. "msg": msg,
  34. "status": device_status,
  35. "data": data,
  36. "msg_type": self.msg_type,
  37. }
  38. if self.websocket == None:
  39. await asyncio.wait_for(message_queue.put(data), timeout=0.1)
  40. else:
  41. await self.websocket_manager.send_personal_message(data, self.websocket)
  42. def change_hex_to_int(self, _bytearray):
  43. return " ".join([hex(x) for x in _bytearray])
  44. def read_cmd(self, serial_handle, check=None):
  45. n = 0
  46. while 1:
  47. try:
  48. read_d = serial_handle.read_all() # 读取接收到的数据
  49. self.receive_data += read_d
  50. except BaseException as e:
  51. print("171串口接收报错", e)
  52. self.serial_handle = None
  53. return False
  54. if len(self.receive_data) < 4:
  55. break
  56. if self.receive_data[0] == 0x55 and self.receive_data[1] == 0x55:
  57. # print("read ori ", self.change_hex_to_int(self.receive_data))
  58. data_len = self.receive_data[2]
  59. if len(self.receive_data) < data_len + 4:
  60. # 此处需要超时机制
  61. # print("数据长度不够,等待下次读取")
  62. # 超时退出
  63. # if not self.serial_handle.txdone():
  64. # return None
  65. # n += 1
  66. # if n > out_time_n:
  67. # return None
  68. # time.sleep(0.01)
  69. continue
  70. _data = self.receive_data[3 : data_len + 4]
  71. # 更新缓存区
  72. self.receive_data = self.receive_data[data_len + 4 :]
  73. # 校验数据
  74. if 0xFF & ~sum(_data[:-1]) == _data[-1]:
  75. # print("receive_data:", self.change_hex_to_int(self.receive_data[:-1]))
  76. return _data[:-1]
  77. else:
  78. return None
  79. else:
  80. # print("起始位不是 55 55 进行移除", self.receive_data[0])
  81. # 起始位不是 55 55 进行移除
  82. while self.receive_data:
  83. if len(self.receive_data) == 1:
  84. if self.receive_data[0] == 0x55:
  85. break
  86. else:
  87. self.receive_data = b""
  88. else:
  89. if (
  90. self.receive_data[0] == 0x55
  91. and self.receive_data[1] == 0x55
  92. ):
  93. break
  94. else:
  95. self.receive_data = self.receive_data[1:]
  96. def write_cmd(self, serial_handle, data: list):
  97. if serial_handle:
  98. # data = [(0xff & par1), (0xff & (par1 >> 8))]
  99. # self.clearn_flush()
  100. buf = bytearray(b"")
  101. buf.extend([0x55, 0x55, (0xFF & len(data))])
  102. buf.extend(data)
  103. buf.extend([0xFF & ~sum(data)])
  104. # 55 55 02 5a 01 a4
  105. # print("send buf {}".format(self.change_hex_to_int(buf)))
  106. try:
  107. serial_handle.write(buf)
  108. return True
  109. except:
  110. serial_handle = None
  111. _recv_data = b""
  112. return False