diff --git a/monitor/packet.c b/monitor/packet.c
index d40b69d..687fcbd 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
#define COLOR_OPEN_INDEX COLOR_GREEN
#define COLOR_CLOSE_INDEX COLOR_RED
#define COLOR_INDEX_INFO COLOR_GREEN
+#define COLOR_VENDOR_DIAG COLOR_YELLOW
#define COLOR_HCI_COMMAND COLOR_BLUE
#define COLOR_HCI_COMMAND_UNKNOWN COLOR_WHITE_BG
if (index < MAX_INDEX) {
index_list[index].type = ni->type;
memcpy(index_list[index].bdaddr, ni->bdaddr, 6);
+ index_list[index].manufacturer = 0xffff;
}
addr2str(ni->bdaddr, str);
addr2str(ii->bdaddr, str);
packet_index_info(tv, index, str, manufacturer);
break;
+ case BTSNOOP_OPCODE_VENDOR_DIAG:
+ if (index < MAX_INDEX)
+ manufacturer = index_list[index].manufacturer;
+ else
+ manufacturer = 0xffff;
+
+ packet_vendor_diag(tv, index, manufacturer, data, size);
+ break;
default:
sprintf(extra_str, "(code %d len %d)", opcode, size);
print_packet(tv, index, '*', COLOR_ERROR,
label, details);
}
+void packet_vendor_diag(struct timeval *tv, uint16_t index,
+ uint16_t manufacturer,
+ const void *data, uint16_t size)
+{
+ char extra_str[16];
+
+ sprintf(extra_str, "(len %d)", size);
+
+ print_packet(tv, index, '=', COLOR_VENDOR_DIAG, "Vendor Diagnostic",
+ NULL, extra_str);
+ packet_hexdump(data, size);
+}
+
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 43fabc0..fb64cc6 100644
--- a/monitor/packet.h
+++ b/monitor/packet.h
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_vendor_diag(struct timeval *tv, uint16_t index,
+ uint16_t manufacturer,
+ const void *data, uint16_t size);
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 91b5922..a0157ff 100644
--- a/src/shared/btsnoop.h
+++ b/src/shared/btsnoop.h
#define BTSNOOP_OPCODE_OPEN_INDEX 8
#define BTSNOOP_OPCODE_CLOSE_INDEX 9
#define BTSNOOP_OPCODE_INDEX_INFO 10
+#define BTSNOOP_OPCODE_VENDOR_DIAG 11
#define BTSNOOP_MAX_PACKET_SIZE (1486 + 4)