diff --git a/monitor/intel.c b/monitor/intel.c
index 1013246..10a4a1b 100644
--- a/monitor/intel.c
+++ b/monitor/intel.c
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);
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;