2020-04-23 21:55:57

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: [PATCH v2 6/6] emulator: Add support for LE Remove ISO Data Path

From: Luiz Augusto von Dentz <[email protected]>

This implements support for LE Remove ISO Data Path command.
---
emulator/btdev.c | 25 +++++++++++++++++++++++++
monitor/bt.h | 2 +-
monitor/packet.c | 2 +-
3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/emulator/btdev.c b/emulator/btdev.c
index 1b3ad6442..46d71d77e 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
@@ -2508,6 +2508,7 @@ static void default_cmd(struct btdev *btdev, uint16_t opcode,
const struct bt_hci_le_scan_phy *lsp;
const struct bt_hci_cmd_le_set_ext_scan_enable *lsese;
const struct bt_hci_cmd_le_reject_cis *lrcis;
+ const struct bt_hci_cmd_le_remove_iso_path *lerip;
struct bt_hci_rsp_read_default_link_policy rdlp;
struct bt_hci_rsp_read_stored_link_key rslk;
struct bt_hci_rsp_write_stored_link_key wslk;
@@ -3907,6 +3908,30 @@ static void default_cmd(struct btdev *btdev, uint16_t opcode,

break;

+ case BT_HCI_CMD_LE_REMOVE_ISO_PATH:
+ if (btdev->type != BTDEV_TYPE_BREDRLE52)
+ goto unsupported;
+
+ lerip = data;
+ status = BT_HCI_ERR_SUCCESS;
+
+ if (!btdev->conn || le16_to_cpu(lerip->handle) != ISO_HANDLE)
+ status = BT_HCI_ERR_UNKNOWN_CONN_ID;
+
+ switch (lerip->direction) {
+ case 0x00:
+ btdev->le_iso_path[0] = 0x00;
+ break;
+ case 0x01:
+ btdev->le_iso_path[1] = 0x00;
+ break;
+ default:
+ status = BT_HCI_ERR_INVALID_PARAMETERS;
+ }
+
+ cmd_complete(btdev, opcode, &status, sizeof(status));
+ break;
+
case BT_HCI_CMD_LE_SET_HOST_FEATURE:
if (btdev->type != BTDEV_TYPE_BREDRLE52)
goto unsupported;
diff --git a/monitor/bt.h b/monitor/bt.h
index 39ca1e39a..32ea10ca4 100644
--- a/monitor/bt.h
+++ b/monitor/bt.h
@@ -2780,7 +2780,7 @@ struct bt_hci_cmd_le_setup_iso_path {
#define BT_HCI_BIT_LE_REMOVE_ISO_PATH BT_HCI_CMD_BIT(43, 4)
struct bt_hci_cmd_le_remove_iso_path {
uint16_t handle;
- uint8_t path_dir;
+ uint8_t direction;
} __attribute__ ((packed));

#define BT_HCI_CMD_LE_ISO_TX_TEST 0x2070
diff --git a/monitor/packet.c b/monitor/packet.c
index 777a52205..5d8709c42 100644
--- a/monitor/packet.c
+++ b/monitor/packet.c
@@ -8118,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("Data Path Direction", cmd->path_dir);
+ print_iso_dir("Data Path Direction", cmd->direction);
}

static void le_req_peer_sca_cmd(const void *data, uint8_t size)
--
2.25.3