BaseClass.py 3.5 KB

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