From 5d920b6877d24251cbaffc54ab4af2e279ae0447 Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Wed, 7 Oct 2015 15:35:31 +0200 Subject: [PATCH] monitor: Add support for showing index information updates --- monitor/packet.c | 31 +++++++++++++++++++++++++++++-- monitor/packet.h | 2 ++ src/shared/btsnoop.h | 6 ++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/monitor/packet.c b/monitor/packet.c index 3404b7548..d40b69db1 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 e1427725d..43fabc07d 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 552337be0..91b592247 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); -- 2.47.3