"""Message parsing for SIMtrace2 USB sniffing protocol.""" import struct from collections import namedtuple MSG_HDR_FMT = ' 65535: consumed = MSG_HDR_SIZE else: consumed = msg_len return None, consumed payload_size = msg_len - MSG_HDR_SIZE if payload_size < 0: return None, MSG_HDR_SIZE if len(buf) < msg_len: return None, 0 payload = buf[MSG_HDR_SIZE:msg_len] type_name = _TYPE_NAMES.get(msg_type, f'unknown(0x{msg_type:02x})') data = b'' flags = 0 parser = _PAYLOAD_PARSERS.get(msg_type) if parser is not None: result = parser(payload) if result is None: return None, msg_len consumed_payload, flags, data = result else: data = payload consumed_payload = payload_size if consumed_payload != payload_size: return None, msg_len return SniffMessage( type=type_name, type_hex=f'0x{msg_type:02x}', data=data, flags=flags, slot_nr=slot_nr, seq_nr=seq_nr, timestamp=timestamp, ), msg_len