summaryrefslogtreecommitdiff
path: root/monitor/intel.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2015-10-09 14:12:34 -0700
committerMarcel Holtmann <marcel@holtmann.org>2015-10-09 14:12:34 -0700
commit91c01e0ae971a70b3351bb62abdd9eb37fb16858 (patch)
treea15da07a5b0afea3e48912b70eceaa2487f0c47e /monitor/intel.c
parentcba48786c0940fd6a5438d8436346a5e0bb5d49b (diff)
downloadbluez-91c01e0ae971a70b3351bb62abdd9eb37fb16858.tar.gz
monitor: Decode additional Intel trace information
Diffstat (limited to 'monitor/intel.c')
-rw-r--r--monitor/intel.c80
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;