From 91c01e0ae971a70b3351bb62abdd9eb37fb16858 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Fri, 9 Oct 2015 14:12:34 -0700 Subject: [PATCH] monitor: Decode additional Intel trace information --- monitor/intel.c | 80 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 67 insertions(+), 13 deletions(-) diff --git a/monitor/intel.c b/monitor/intel.c index 1013246ed..10a4a1bb3 100644 --- a/monitor/intel.c +++ b/monitor/intel.c @@ -37,7 +37,10 @@ void intel_vendor_event(const void *data, uint8_t size) { - uint8_t evt, type, len; + uint8_t evt, type, len, id; + uint16_t handle, count; + uint32_t clock; + const char *str; evt = *((uint8_t *) data); @@ -46,37 +49,88 @@ void intel_vendor_event(const void *data, uint8_t size) switch (evt) { case 0x17: type = *((uint8_t *) (data + 1)); + handle = get_le16(data + 2); + + switch (type) { + case 0x00: + str = "RX LMP"; + break; + case 0x01: + str = "TX LMP"; + break; + case 0x02: + str = "ACK LMP"; + break; + case 0x03: + str = "RX LL"; + break; + case 0x04: + str = "TX LL"; + break; + case 0x05: + str = "ACK LL"; + break; + default: + str = "Unknown"; + break; + } + + print_field("Type: %s (0x%2.2x)", str, type); + print_field("Handle: %u", handle); switch (type) { case 0x00: len = size - 9; - print_field("Type: RX LMP (0x%2.2x)", type); - packet_hexdump(data + 2, 3); + clock = get_le32(data + 5 + len); + + packet_hexdump(data + 4, 1); lmp_packet(data + 5, len, false); - packet_hexdump(data + 5 + len, size - 5 - len); + print_field("Clock: 0x%8.8x", clock); break; case 0x01: len = size - 10; - print_field("Type: TX LMP (0x%2.2x)", type); - packet_hexdump(data + 2, 3); + clock = get_le32(data + 5 + len); + id = *((uint8_t *) (data + 5 + len + 4)); + + packet_hexdump(data + 4, 1); lmp_packet(data + 5, len, false); - packet_hexdump(data + 5 + len, size - 5 - len); + print_field("Clock: 0x%8.8x", clock); + print_field("ID: 0x%2.2x", id); + break; + case 0x02: + clock = get_le32(data + 4); + id = *((uint8_t *) (data + 4 + 4)); + + print_field("Clock: 0x%8.8x", clock); + print_field("ID: 0x%2.2x", id); break; case 0x03: len = size - 9; - print_field("Type: RX LL (0x%2.2x)", type); - packet_hexdump(data + 2, 7); + count = get_le16(data + 4); + + print_field("Count: 0x%4.4x", count); + packet_hexdump(data + 4 + 2 + 1, 2); llcp_packet(data + 9, len, false); break; case 0x04: len = size - 9; - print_field("Type: TX LL (0x%2.2x)", type); - packet_hexdump(data + 2, 7); + count = get_le16(data + 4); + id = *((uint8_t *) (data + 4 + 2)); + + print_field("Count: 0x%4.4x", count); + print_field("ID: 0x%2.2x", id); + packet_hexdump(data + 4 + 2 + 1, 2); llcp_packet(data + 9, len, false); break; + case 0x05: + count = get_le16(data + 4); + id = *((uint8_t *) (data + 4 + 2)); + + print_field("Count: 0x%4.4x", count); + print_field("ID: 0x%2.2x", id); + break; default: - print_field("Type: 0x%2.2x", type); - packet_hexdump(data + 2, size - 2); + packet_hexdump(data + 4, size - 4); break; } break; -- 2.47.3