BxCmdSendDynamicArea.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import struct
  2. from .BxCmd import baseBxCmd
  3. from .BxCmdCode import CMD_SEND_DYNAMIC_AREA
  4. class CmdSendDynamicArea(baseBxCmd):
  5. def __init__(self, areas):
  6. super().__init__(CMD_SEND_DYNAMIC_AREA.group, CMD_SEND_DYNAMIC_AREA.code)
  7. self.processMode = 0
  8. self.r2 = 0
  9. self.delAreaIds = []
  10. self.areas = areas if areas else []
  11. def ProcessMode(self):
  12. """获取处理模式"""
  13. return self.processMode
  14. def SetProcessMode(self, processMode):
  15. """设置处理模式"""
  16. self.processMode = processMode
  17. def R2(self):
  18. """获取保留字r2"""
  19. return self.r2
  20. def SetR2(self, r2):
  21. """设置保留字r2"""
  22. self.r2 = r2
  23. def DelAreaIds(self):
  24. """获取删除区域ID列表"""
  25. return self.delAreaIds
  26. def SetDelAreaIds(self, delAreaIds):
  27. """设置删除区域ID列表"""
  28. self.delAreaIds = delAreaIds
  29. def Areas(self):
  30. """获取区域列表"""
  31. return self.areas
  32. def SetAreas(self, areas):
  33. """设置区域列表"""
  34. self.areas = areas
  35. def Build(self):
  36. """构建命令数据"""
  37. result = bytearray()
  38. # 写入命令组
  39. result.append(self.Group())
  40. # 写入命令
  41. result.append(self.Cmd())
  42. # 写入响应标志
  43. result.append(self.ReqResp())
  44. # 写入处理模式
  45. result.append(self.processMode)
  46. # 写入r2
  47. result.append(self.r2)
  48. # 写入删除区域ID
  49. if self.delAreaIds is None:
  50. result.append(0x00)
  51. else:
  52. result.append(len(self.delAreaIds))
  53. result.extend(self.delAreaIds)
  54. # 写入区域数量
  55. if self.areas is None or len(self.areas) == 0:
  56. result.append(0x00)
  57. else:
  58. result.append(len(self.areas))
  59. # 写入每个区域
  60. for v in self.areas:
  61. b = v.Build()
  62. result.extend(struct.pack('<h', len(b)))
  63. result.extend(b)
  64. return bytes(result)
  65. # 创建CmdSendDynamicArea实例的函数
  66. def NewBxCmdSendDynamicArea(areas):
  67. return CmdSendDynamicArea(areas)