Beispiel #1
0
    def _validate(cls, message: bytes, header: bytes,
                  length: int) -> base.Message:

        # consistency check: bug in message singnature
        assert len(header) == 5, f"wrong header length {len(header)}"
        assert header[:2] == b"\x7E\x00", f"wrong header start {header!r}"
        assert length in [7, 47], f"wrong payload length {length} != 4||47"
        len_payload = header[-1]
        assert length == len_payload + 7, f"wrong payload length {length} != {len_payload+7}"

        # validate message: recoverable errors (throw away observation)
        msg = cls(message)
        if msg.header != header:
            raise WrongMessageFormat(f"message header: {msg.header!r}")
        if msg.tail != 0x7E:
            raise WrongMessageFormat(f"message tail: {msg.tail:#x}")
        if len(message) != length:
            raise WrongMessageFormat(
                f"message length: {len(message)} != {length}")
        checksum = 0xFF - (sum(msg.header[1:]) + sum(msg.payload)) % 0x100
        if msg.checksum != checksum:
            raise WrongMessageChecksum(
                f"message checksum {msg.checksum} != {checksum}")
        if sum(msg.payload) == 0:
            raise SensorWarmingUp(f"message empty: warming up sensor")
        return msg
Beispiel #2
0
 def decode(cls, message: bytes, command: base.Cmd) -> Tuple[float, ...]:
     # decode ACK message
     if command.answer_header == b"\xA5\xA5" and command.answer_length == 2:
         if not message.endswith(command.answer_header):
             raise WrongMessageFormat("message does not end in ACK")
         return tuple()
     return super().decode(message, command)
Beispiel #3
0
    def _validate(cls, message: bytes, header: bytes, length: int) -> base.Message:
        # consistency check: bug in message singnature
        assert len(header) == 3, f"wrong header length {len(header)}"
        assert header[:1] == b"\x40", f"wrong header start {header!r}"
        assert length in [8, 16], f"wrong payload length {length}"

        # validate message: recoverable errors (throw away observation)
        msg = cls(message)
        if msg.header != header:
            raise WrongMessageFormat(f"message header: {msg.header!r}")
        if len(message) != length:
            raise WrongMessageFormat(f"message length: {len(message)} != {length}")
        checksum = (0x10000 - sum(msg.header) - sum(msg.payload)) % 0x100
        if msg.checksum != checksum:
            raise WrongMessageChecksum(f"message checksum {msg.checksum} != {checksum}")
        if sum(msg.payload) == 0:
            raise SensorWarmingUp(f"message empty: warming up sensor")
        return msg
Beispiel #4
0
    def _validate(cls, message: bytes, header: bytes,
                  length: int) -> base.Message:

        # consistency check: bug in message singnature
        assert len(header) == 2, f"wrong header length {len(header)}"

        # validate message: recoverable errors (throw away observation)
        msg = cls(message)
        if msg.header != header:
            raise WrongMessageFormat(f"message header: {msg.header!r}")
        if len(message) != length:
            raise WrongMessageFormat(f"message length: {len(message)}")
        checksum = message[-1]
        if msg.checksum != checksum:
            raise WrongMessageChecksum(
                f"message checksum 0x{msg.checksum:02X} != 0x{checksum:02X}")
        if sum(msg.payload) == 0:
            raise SensorWarmingUp(f"message empty: warming up sensor")
        return msg
Beispiel #5
0
    def _validate(cls, message: bytes, header: bytes, length: int) -> base.Message:

        # consistency check: bug in message singnature
        assert len(header) == 4, f"wrong header length {len(header)}"
        assert header[:2] == b"BM", f"wrong header start {header!r}"
        len_payload = cls._unpack(header[-2:])[0]
        assert length == 4 + len_payload, f"wrong payload length {length} != {4+len_payload}"

        # validate message: recoverable errors (throw away observation)
        msg = cls(message)
        if msg.header != header:
            raise WrongMessageFormat(f"message header: {msg.header!r}")
        if len(message) != length:
            raise WrongMessageFormat(f"message length: {len(message)}")
        checksum = sum(msg.header) + sum(msg.payload)
        if msg.checksum != checksum:
            raise WrongMessageChecksum(f"message checksum {msg.checksum} != {checksum}")
        if sum(msg.payload) == 0:
            raise SensorWarmingUp(f"message empty: warming up sensor")
        return msg