diff --git a/monitor/main.c b/monitor/main.c
index c4204f4..5fa87ea 100644
--- a/monitor/main.c
+++ b/monitor/main.c
"\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"
{ "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' },
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;
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
#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
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,
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);
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;
if (index_current < MAX_INDEX)
manufacturer = index_list[index_current].manufacturer;
else
- manufacturer = UNKNOWN_MANUFACTURER;
+ manufacturer = fallback_manufacturer;
switch (manufacturer) {
case 2:
if (index_current < MAX_INDEX)
manufacturer = index_list[index_current].manufacturer;
else
- manufacturer = UNKNOWN_MANUFACTURER;
+ manufacturer = fallback_manufacturer;
switch (manufacturer) {
case 2:
if (index_current < MAX_INDEX)
manufacturer = index_list[index_current].manufacturer;
else
- manufacturer = UNKNOWN_MANUFACTURER;
+ manufacturer = fallback_manufacturer;
switch (manufacturer) {
case 2:
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
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);