From: Tedd Ho-Jeong An <tedd.an@xxxxxxxxx> This patch fixes the issue that the vendor name for all vendor HCI command and event are display as Microsoft. --- monitor/packet.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/monitor/packet.c b/monitor/packet.c index 692012029..d11d8808d 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -9821,7 +9821,7 @@ static const char *get_supported_command(int bit) return NULL; } -static const char *current_vendor_str(void) +static const char *current_vendor_str(uint16_t ocf) { uint16_t manufacturer, msft_opcode; @@ -9833,7 +9833,8 @@ static const char *current_vendor_str(void) msft_opcode = BT_HCI_CMD_NOP; } - if (msft_opcode != BT_HCI_CMD_NOP) + if (msft_opcode != BT_HCI_CMD_NOP && + cmd_opcode_ocf(msft_opcode) == ocf) return "Microsoft"; switch (manufacturer) { @@ -9891,9 +9892,6 @@ static const struct vendor_evt *current_vendor_evt(const void *data, msft_opcode = BT_HCI_CMD_NOP; } - if (msft_opcode != BT_HCI_CMD_NOP) - return NULL; - switch (manufacturer) { case 2: return intel_vendor_evt(data, consumed_size); @@ -9904,6 +9902,27 @@ static const struct vendor_evt *current_vendor_evt(const void *data, return NULL; } +static const char *current_vendor_evt_str(void) +{ + uint16_t manufacturer; + + if (index_current < MAX_INDEX) + manufacturer = index_list[index_current].manufacturer; + else + manufacturer = fallback_manufacturer; + + switch (manufacturer) { + case 2: + return "Intel"; + case 15: + return "Broadcom"; + case 93: + return "Realtek"; + } + + return NULL; +} + static void inquiry_complete_evt(uint16_t index, const void *data, uint8_t size) { const struct bt_hci_evt_inquiry_complete *evt = data; @@ -10084,7 +10103,7 @@ static void cmd_complete_evt(uint16_t index, const void *data, uint8_t size) const struct vendor_ocf *vnd = current_vendor_ocf(ocf); if (vnd) { - const char *str = current_vendor_str(); + const char *str = current_vendor_str(ocf); if (str) { snprintf(vendor_str, sizeof(vendor_str), @@ -10176,7 +10195,7 @@ static void cmd_status_evt(uint16_t index, const void *data, uint8_t size) const struct vendor_ocf *vnd = current_vendor_ocf(ocf); if (vnd) { - const char *str = current_vendor_str(); + const char *str = current_vendor_str(ocf); if (str) { snprintf(vendor_str, sizeof(vendor_str), @@ -11618,7 +11637,7 @@ static void vendor_evt(uint16_t index, const void *data, uint8_t size) const struct vendor_evt *vnd = current_vendor_evt(data, &consumed_size); if (vnd) { - const char *str = current_vendor_str(); + const char *str = current_vendor_evt_str(); if (str) { snprintf(vendor_str, sizeof(vendor_str), @@ -12020,7 +12039,7 @@ void packet_hci_command(struct timeval *tv, struct ucred *cred, uint16_t index, const struct vendor_ocf *vnd = current_vendor_ocf(ocf); if (vnd) { - const char *str = current_vendor_str(); + const char *str = current_vendor_str(ocf); if (str) { snprintf(vendor_str, sizeof(vendor_str), -- 2.34.1