Diff between ddd83295ad239ecbc95103148ed06d54d571b40d and 5d920b6877d24251cbaffc54ab4af2e279ae0447

Changed Files

File Additions Deletions Status
monitor/packet.c +29 -2 modified
monitor/packet.h +2 -0 modified
src/shared/btsnoop.h +6 -0 modified

Full Patch

diff --git a/monitor/packet.c b/monitor/packet.c
index 3404b75..d40b69d 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -61,6 +61,7 @@
 #define COLOR_DEL_INDEX			COLOR_RED
 #define COLOR_OPEN_INDEX		COLOR_GREEN
 #define COLOR_CLOSE_INDEX		COLOR_RED
+#define COLOR_INDEX_INFO		COLOR_GREEN
 
 #define COLOR_HCI_COMMAND		COLOR_BLUE
 #define COLOR_HCI_COMMAND_UNKNOWN	COLOR_WHITE_BG
@@ -3666,8 +3667,9 @@ static int addr2str(const uint8_t *addr, char *str)
 #define MAX_INDEX 16
 
 struct index_data {
-	uint8_t type;
-	uint8_t bdaddr[6];
+	uint8_t  type;
+	uint8_t  bdaddr[6];
+	uint16_t manufacturer;
 };
 
 static struct index_data index_list[MAX_INDEX];
@@ -3676,7 +3678,9 @@ void packet_monitor(struct timeval *tv, uint16_t index, uint16_t opcode,
 					const void *data, uint16_t size)
 {
 	const struct btsnoop_opcode_new_index *ni;
+	const struct btsnoop_opcode_index_info *ii;
 	char str[18], extra_str[24];
+	uint16_t manufacturer;
 
 	if (index_filter && index_number != index)
 		return;
@@ -3740,6 +3744,18 @@ void packet_monitor(struct timeval *tv, uint16_t index, uint16_t opcode,
 
 		packet_close_index(tv, index, str);
 		break;
+	case BTSNOOP_OPCODE_INDEX_INFO:
+		ii = data;
+		manufacturer = le16_to_cpu(ii->manufacturer);
+
+		if (index < MAX_INDEX) {
+			memcpy(index_list[index].bdaddr, ii->bdaddr, 6);
+			index_list[index].manufacturer = manufacturer;
+		}
+
+		addr2str(ii->bdaddr, str);
+		packet_index_info(tv, index, str, manufacturer);
+		break;
 	default:
 		sprintf(extra_str, "(code %d len %d)", opcode, size);
 		print_packet(tv, index, '*', COLOR_ERROR,
@@ -8477,6 +8493,17 @@ void packet_close_index(struct timeval *tv, uint16_t index, const char *label)
 							label, NULL);
 }
 
+void packet_index_info(struct timeval *tv, uint16_t index, const char *label,
+							uint16_t manufacturer)
+{
+	char details[128];
+
+	sprintf(details, "(%s)", bt_compidtostr(manufacturer));
+
+	print_packet(tv, index, '=', COLOR_INDEX_INFO, "Index Info",
+							label, details);
+}
+
 void packet_hci_command(struct timeval *tv, uint16_t index,
 					const void *data, uint16_t size)
 {
diff --git a/monitor/packet.h b/monitor/packet.h
index e142772..43fabc0 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -65,6 +65,8 @@ void packet_new_index(struct timeval *tv, uint16_t index, const char *label,
 void packet_del_index(struct timeval *tv, uint16_t index, const char *label);
 void packet_open_index(struct timeval *tv, uint16_t index, const char *label);
 void packet_close_index(struct timeval *tv, uint16_t index, const char *label);
+void packet_index_info(struct timeval *tv, uint16_t index, const char *label,
+							uint16_t manufacturer);
 
 void packet_hci_command(struct timeval *tv, uint16_t index,
 					const void *data, uint16_t size);
diff --git a/src/shared/btsnoop.h b/src/shared/btsnoop.h
index 552337b..91b5922 100644
--- a/src/shared/btsnoop.h
+++ b/src/shared/btsnoop.h
@@ -45,6 +45,7 @@
 #define BTSNOOP_OPCODE_SCO_RX_PKT	7
 #define BTSNOOP_OPCODE_OPEN_INDEX	8
 #define BTSNOOP_OPCODE_CLOSE_INDEX	9
+#define BTSNOOP_OPCODE_INDEX_INFO	10
 
 #define BTSNOOP_MAX_PACKET_SIZE		(1486 + 4)
 
@@ -55,6 +56,11 @@ struct btsnoop_opcode_new_index {
 	char     name[8];
 } __attribute__((packed));
 
+struct btsnoop_opcode_index_info {
+	uint8_t  bdaddr[6];
+	uint16_t manufacturer;
+} __attribute__((packed));
+
 struct btsnoop;
 
 struct btsnoop *btsnoop_open(const char *path, unsigned long flags);