Diff between 086dc1f315832125303f947b60b2fa9c7464e4ad and 6df6a611ec5e040a0bfc72f3592de79c5cd3fcf6

Changed Files

File Additions Deletions Status
monitor/main.c +7 -1 modified
monitor/packet.c +19 -8 modified
monitor/packet.h +1 -0 modified

Full Patch

diff --git a/monitor/main.c b/monitor/main.c
index c4204f4..5fa87ea 100644
--- a/monitor/main.c
+++ b/monitor/main.c
@@ -67,6 +67,7 @@ static void usage(void)
 		"\t-i, --index <num>      Show only specified controller\n"
 		"\t-d, --tty <tty>        Read data from TTY\n"
 		"\t-B, --tty-speed <rate> Set TTY speed (default 115200)\n"
+		"\t-V, --vendor <compid>  Set default company identifier\n"
 		"\t-t, --time             Show time instead of time offset\n"
 		"\t-T, --date             Show time and date information\n"
 		"\t-S, --sco              Dump SCO traffic\n"
@@ -85,6 +86,7 @@ static const struct option main_options[] = {
 	{ "index",     required_argument, NULL, 'i' },
 	{ "tty",       required_argument, NULL, 'd' },
 	{ "tty-speed", required_argument, NULL, 'B' },
+	{ "vendor",    required_argument, NULL, 'V' },
 	{ "time",      no_argument,       NULL, 't' },
 	{ "date",      no_argument,       NULL, 'T' },
 	{ "sco",       no_argument,       NULL, 'S' },
@@ -120,7 +122,7 @@ int main(int argc, char *argv[])
 		int opt;
 		struct sockaddr_un addr;
 
-		opt = getopt_long(argc, argv, "r:w:a:s:p:i:d:B:tTSAEPvh",
+		opt = getopt_long(argc, argv, "r:w:a:s:p:i:d:B:V:tTSAEPvh",
 							main_options, NULL);
 		if (opt < 0)
 			break;
@@ -166,6 +168,10 @@ int main(int argc, char *argv[])
 				return EXIT_FAILURE;
 			}
 			break;
+		case 'V':
+			str = optarg;
+			packet_set_fallback_manufacturer(atoi(str));
+			break;
 		case 't':
 			filter_mask &= ~PACKET_FILTER_SHOW_TIME_OFFSET;
 			filter_mask |= PACKET_FILTER_SHOW_TIME;
diff --git a/monitor/packet.c b/monitor/packet.c
index 2cc8762..cba7407 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -100,14 +100,15 @@
 
 #define COLOR_PHY_PACKET		COLOR_BLUE
 
+#define UNKNOWN_MANUFACTURER 0xffff
+
 static time_t time_offset = ((time_t) -1);
 static int priority_level = BTSNOOP_PRIORITY_INFO;
 static unsigned long filter_mask = 0;
 static bool index_filter = false;
 static uint16_t index_number = 0;
 static uint16_t index_current = 0;
-
-#define UNKNOWN_MANUFACTURER 0xffff
+static uint16_t fallback_manufacturer = UNKNOWN_MANUFACTURER;
 
 #define CTRL_RAW  0x0000
 #define CTRL_USER 0x0001
@@ -276,6 +277,16 @@ struct index_data {
 
 static struct index_data index_list[MAX_INDEX];
 
+void packet_set_fallback_manufacturer(uint16_t manufacturer)
+{
+	int i;
+
+	for (i = 0; i < MAX_INDEX; i++)
+		index_list[i].manufacturer = manufacturer;
+
+	fallback_manufacturer = manufacturer;
+}
+
 static void print_packet(struct timeval *tv, struct ucred *cred, char ident,
 					uint16_t index, const char *channel,
 					const char *color, const char *label,
@@ -3994,7 +4005,7 @@ void packet_monitor(struct timeval *tv, struct ucred *cred,
 		if (index < MAX_INDEX) {
 			index_list[index].type = ni->type;
 			memcpy(index_list[index].bdaddr, ni->bdaddr, 6);
-			index_list[index].manufacturer = UNKNOWN_MANUFACTURER;
+			index_list[index].manufacturer = fallback_manufacturer;
 		}
 
 		addr2str(ni->bdaddr, str);
@@ -4058,7 +4069,7 @@ void packet_monitor(struct timeval *tv, struct ucred *cred,
 		if (index < MAX_INDEX)
 			manufacturer = index_list[index].manufacturer;
 		else
-			manufacturer = UNKNOWN_MANUFACTURER;
+			manufacturer = fallback_manufacturer;
 
 		packet_vendor_diag(tv, index, manufacturer, data, size);
 		break;
@@ -8370,7 +8381,7 @@ static const char *current_vendor_str(void)
 	if (index_current < MAX_INDEX)
 		manufacturer = index_list[index_current].manufacturer;
 	else
-		manufacturer = UNKNOWN_MANUFACTURER;
+		manufacturer = fallback_manufacturer;
 
 	switch (manufacturer) {
 	case 2:
@@ -8389,7 +8400,7 @@ static const struct vendor_ocf *current_vendor_ocf(uint16_t ocf)
 	if (index_current < MAX_INDEX)
 		manufacturer = index_list[index_current].manufacturer;
 	else
-		manufacturer = UNKNOWN_MANUFACTURER;
+		manufacturer = fallback_manufacturer;
 
 	switch (manufacturer) {
 	case 2:
@@ -8408,7 +8419,7 @@ static const struct vendor_evt *current_vendor_evt(uint8_t evt)
 	if (index_current < MAX_INDEX)
 		manufacturer = index_list[index_current].manufacturer;
 	else
-		manufacturer = UNKNOWN_MANUFACTURER;
+		manufacturer = fallback_manufacturer;
 
 	switch (manufacturer) {
 	case 2:
@@ -9805,7 +9816,7 @@ static void vendor_evt(const void *data, uint8_t size)
 		if (index_current < MAX_INDEX)
 			manufacturer = index_list[index_current].manufacturer;
 		else
-			manufacturer = UNKNOWN_MANUFACTURER;
+			manufacturer = fallback_manufacturer;
 
 		vendor_event(manufacturer, data, size);
 	}
diff --git a/monitor/packet.h b/monitor/packet.h
index a4fdcc6..79733de 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
@@ -42,6 +42,7 @@ void packet_del_filter(unsigned long filter);
 
 void packet_set_priority(const char *priority);
 void packet_select_index(uint16_t index);
+void packet_set_fallback_manufacturer(uint16_t manufacturer);
 
 void packet_hexdump(const unsigned char *buf, uint16_t len);
 void packet_print_error(const char *label, uint8_t error);