summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorTedd Ho-Jeong An <tedd.an@intel.com>2022-10-14 11:57:20 -0700
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-10-14 13:27:37 -0700
commit1096a99cadfa995ad22311a3c53620a2d9a9008f (patch)
tree74c24c245cd786370de826702dc250fe694f2ec4 /monitor
parent5f06473908d9e477574c59cb0854eacc38cfcf68 (diff)
downloadbluez-1096a99cadfa995ad22311a3c53620a2d9a9008f.tar.gz
monitor: Fix incorrect vendor name for vendor cmd and evt
This patch fixes the issue that the vendor name for all vendor HCI command and event are display as Microsoft.
Diffstat (limited to 'monitor')
-rw-r--r--monitor/packet.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/monitor/packet.c b/monitor/packet.c
index 692012029..c4e5182f0 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) {
@@ -9877,22 +9878,16 @@ static const struct vendor_ocf *current_vendor_ocf(uint16_t ocf)
static const struct vendor_evt *current_vendor_evt(const void *data,
int *consumed_size)
{
- uint16_t manufacturer, msft_opcode;
+ uint16_t manufacturer;
uint8_t evt = *((const uint8_t *) data);
/* A regular vendor event consumes 1 byte. */
*consumed_size = 1;
- if (index_current < MAX_INDEX) {
+ if (index_current < MAX_INDEX)
manufacturer = index_list[index_current].manufacturer;
- msft_opcode = index_list[index_current].msft_opcode;
- } else {
+ else
manufacturer = fallback_manufacturer;
- msft_opcode = BT_HCI_CMD_NOP;
- }
-
- if (msft_opcode != BT_HCI_CMD_NOP)
- return NULL;
switch (manufacturer) {
case 2:
@@ -9904,6 +9899,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 +10100,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 +10192,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 +11634,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 +12036,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),