From ac2878cdd10278f6851c77944d4e78c47a6507a1 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Mon, 30 Mar 2020 14:43:12 -0700 Subject: [PATCH] monitor: Fix decoding of LE Setup ISO Data Path command LE Setup ISO Data Path command contains not only the transport but also the codec along with its configuration. --- monitor/bt.h | 10 +++++++-- monitor/packet.c | 54 ++++++++++++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/monitor/bt.h b/monitor/bt.h index 60939650e..f9ac6b180 100644 --- a/monitor/bt.h +++ b/monitor/bt.h @@ -2770,8 +2770,14 @@ struct bt_hci_cmd_le_req_peer_sca { #define BT_HCI_BIT_LE_SETUP_ISO_PATH BT_HCI_BIT_5_2 + 14 struct bt_hci_cmd_le_setup_iso_path { uint16_t handle; - uint8_t input_path; - uint8_t output_path; + uint8_t direction; + uint8_t path; + uint8_t codec; + uint16_t codec_cid; + uint16_t codec_vid; + uint8_t delay[3]; + uint8_t codec_cfg_len; + uint8_t codec_cfg[0]; } __attribute__ ((packed)); #define BT_HCI_CMD_LE_REMOVE_ISO_PATH BT_HCI_CMD_5_2 + 15 diff --git a/monitor/packet.c b/monitor/packet.c index 97ae58e69..45dbe4997 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -8067,21 +8067,33 @@ static void le_big_term_sync_cmd(const void *data, uint8_t size) print_field("BIG ID: 0x%2.2x", cmd->big_id); } -static void print_iso_path(const char *prefix, uint8_t path) +static void print_iso_dir(const char *prefix, uint8_t dir) { - switch (path) { + switch (dir) { case 0x00: - print_field("%s Data Path: Disabled (0x%2.2x)", prefix, path); + print_field("%s: Input (Host to Controller) (0x%2.2x)", + prefix, dir); return; case 0x01: - print_field("%s Data Path: HCI (0x%2.2x)", prefix, path); + print_field("%s: Output (Controller to Host) (0x%2.2x)", + prefix, dir); + return; + default: + print_field("%s: Unknown (0x%2.2x)", prefix, dir); + } +} + +static void print_iso_path(const char *prefix, uint8_t path) +{ + switch (path) { + case 0x00: + print_field("%s: HCI (0x%2.2x)", prefix, path); return; case 0xff: - print_field("%s Data Path: Test Mode (0x%2.2x)", prefix, path); + print_field("%s: Disabled (0x%2.2x)", prefix, path); return; default: - print_field("%s Data Path: Logical Channel Number (0x%2.2x)", - prefix, path); + print_field("%s: Logical Channel Number %u", prefix, path); } } @@ -8090,23 +8102,15 @@ static void le_setup_iso_path_cmd(const void *data, uint8_t size) const struct bt_hci_cmd_le_setup_iso_path *cmd = data; print_field("Handle: %d", le16_to_cpu(cmd->handle)); - print_iso_path("Input", cmd->input_path); - print_iso_path("Output", cmd->output_path); -} - -static void print_iso_dir(uint8_t path_dir) -{ - switch (path_dir) { - case 0x00: - print_field("Data Path Direction: Input (0x%2.2x)", path_dir); - return; - case 0x01: - print_field("Data Path Direction: Output (0x%2.2x)", path_dir); - return; - default: - print_field("Data Path Direction: Reserved (0x%2.2x)", - path_dir); - } + print_iso_dir("Data Path Direction", cmd->direction); + print_iso_path("Data Path", cmd->path); + print_codec("Coding Format", cmd->codec); + packet_print_company("Company Codec ID", le16_to_cpu(cmd->codec_cid)); + print_field("Vendor Codec ID: %d", le16_to_cpu(cmd->codec_vid)); + print_usec_interval("Controller Delay", cmd->delay); + print_field("Codec Configuration Length: %d", cmd->codec_cfg_len); + print_hex_field("Codec Configuration", cmd->codec_cfg, + cmd->codec_cfg_len); } static void le_remove_iso_path_cmd(const void *data, uint8_t size) @@ -8114,7 +8118,7 @@ static void le_remove_iso_path_cmd(const void *data, uint8_t size) const struct bt_hci_cmd_le_remove_iso_path *cmd = data; print_field("Connection Handle: %d", le16_to_cpu(cmd->handle)); - print_iso_dir(cmd->path_dir); + print_iso_dir("Data Path Direction", cmd->path_dir); } static void le_req_peer_sca_cmd(const void *data, uint8_t size) -- 2.47.3