BaseClass.py 3.5 KB

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