diff --git a/monitor/packet.c b/monitor/packet.c
index 3404b75..d40b69d 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
#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
#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];
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;
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,
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
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
#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)
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);