diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2015-10-09 14:12:34 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-10-09 14:12:34 -0700 |
commit | 91c01e0ae971a70b3351bb62abdd9eb37fb16858 (patch) | |
tree | a15da07a5b0afea3e48912b70eceaa2487f0c47e /monitor/intel.c | |
parent | cba48786c0940fd6a5438d8436346a5e0bb5d49b (diff) | |
download | bluez-91c01e0ae971a70b3351bb62abdd9eb37fb16858.tar.gz |
monitor: Decode additional Intel trace information
Diffstat (limited to 'monitor/intel.c')
-rw-r--r-- | monitor/intel.c | 80 |
1 files 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; |