BaseClass.py 3.7 KB

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