from .BxDataPack import dpParse from .BxCmdCode import CMD_ACK, CMD_SYSTEM_STATE from .bxError import bxErrors class BxResp: def __init__(self): self.group = 0 self.cmd = 0 self.Err = 0 self.r0 = 0 self.r1 = 0 self.Data = bytearray() def Parse(self, src, length): """解析响应数据""" dp = dpParse(src, length) if dp is None: return None else: return self._parse(dp) def _parse(self, pack): """解析数据打包""" offset = 0 resp = BxResp() resp.group = pack.data[offset] offset += 1 resp.cmd = pack.data[offset] offset += 1 resp.Err = pack.data[offset] offset += 1 resp.r0 = pack.data[offset] offset += 1 resp.r1 = pack.data[offset] offset += 1 resp.Data = pack.data[offset:(offset + len(pack.data) - 5)] return resp def IsAck(self): """是否是确认响应""" return self.group == CMD_ACK.group and self.cmd == CMD_ACK.code def NoError(self): """是否无错误""" return self.Err == 0 def Error(self): """获取错误信息""" return bxErrors.get(self.Err, "未知错误") def IsInfo(self): """是否是返回"控制器状态"信息""" return self.group == CMD_SYSTEM_STATE.group and self.cmd == CMD_SYSTEM_STATE.code