Diff between cba48786c0940fd6a5438d8436346a5e0bb5d49b and 91c01e0ae971a70b3351bb62abdd9eb37fb16858

Changed Files

File Additions Deletions Status
monitor/intel.c +67 -13 modified

Full Patch

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