BaseClass.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. # -1连接失败 0未连接 1连接中 2连接成功 3端口占用
  13. # self.device_status = 2
  14. def sendSocketMessage(self, code=0, msg="", data=None,device_status=2):
  15. data = {
  16. "code": code,
  17. "msg": msg,
  18. "status": device_status,
  19. "data": data,
  20. "msg_type": self.msg_type,
  21. }
  22. loop = asyncio.get_event_loop()
  23. loop.create_task(message_queue.put(data))
  24. def change_hex_to_int(self,_bytearray):
  25. return ' '.join([hex(x) for x in _bytearray])
  26. def read_cmd(self, serial_handle, check=None):
  27. n = 0
  28. while 1:
  29. try:
  30. read_d = serial_handle.read_all() # 读取接收到的数据
  31. self.receive_data += read_d
  32. except BaseException as e:
  33. print("171串口接收报错", e)
  34. self.serial_handle = None
  35. return False
  36. if len(self.receive_data) < 4:
  37. break
  38. if self.receive_data[0] == 0x55 and self.receive_data[1] == 0x55:
  39. # print("read ori ", self.change_hex_to_int(self.receive_data))
  40. data_len = self.receive_data[2]
  41. if len(self.receive_data) < data_len + 4:
  42. # 此处需要超时机制
  43. # print("数据长度不够,等待下次读取")
  44. # 超时退出
  45. # if not self.serial_handle.txdone():
  46. # return None
  47. # n += 1
  48. # if n > out_time_n:
  49. # return None
  50. # time.sleep(0.01)
  51. continue
  52. _data = self.receive_data[3 : data_len + 4]
  53. # 更新缓存区
  54. self.receive_data = self.receive_data[data_len + 4 :]
  55. # 校验数据
  56. if 0xFF & ~sum(_data[:-1]) == _data[-1]:
  57. # print("receive_data:", self.change_hex_to_int(self.receive_data[:-1]))
  58. return _data[:-1]
  59. else:
  60. return None
  61. else:
  62. # print("起始位不是 55 55 进行移除", self.receive_data[0])
  63. # 起始位不是 55 55 进行移除
  64. while self.receive_data:
  65. if len(self.receive_data) == 1:
  66. if self.receive_data[0] == 0x55:
  67. break
  68. else:
  69. self.receive_data = b""
  70. else:
  71. if (
  72. self.receive_data[0] == 0x55
  73. and self.receive_data[1] == 0x55
  74. ):
  75. break
  76. else:
  77. self.receive_data = self.receive_data[1:]
  78. def write_cmd(self, serial_handle,data: list):
  79. if serial_handle:
  80. # data = [(0xff & par1), (0xff & (par1 >> 8))]
  81. # self.clearn_flush()
  82. buf = bytearray(b"")
  83. buf.extend([0x55, 0x55, (0xFF & len(data))])
  84. buf.extend(data)
  85. buf.extend([0xFF & ~sum(data)])
  86. # 55 55 02 5a 01 a4
  87. # print("send buf {}".format(self.change_hex_to_int(buf)))
  88. try:
  89. serial_handle.write(buf)
  90. return True
  91. except:
  92. serial_handle = None
  93. _recv_data = b""
  94. return False