summaryrefslogtreecommitdiff
path: root/emulator
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-03-04 17:22:26 -0800
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2022-03-07 17:18:39 -0800
commit9cbc6fc1b20d7180921cfd9d7344746fde0e84ba (patch)
tree8eb9ba3ba186a7535875f359190f199b20a2a03e /emulator
parent40bacfff0c24017c06a50e980149564e94ad05ea (diff)
downloadbluez-9cbc6fc1b20d7180921cfd9d7344746fde0e84ba.tar.gz
btdev: Implements BT_HCI_CMD_LE_BIG_TERM_SYNC
This sends BT_HCI_EVT_DISCONNECT_COMPLETE when handling BT_HCI_CMD_LE_BIG_TERM_SYNC.
Diffstat (limited to 'emulator')
-rw-r--r--emulator/btdev.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/emulator/btdev.c b/emulator/btdev.c
index 567377caa..6834ec1c2 100644
--- a/emulator/btdev.c
+++ b/emulator/btdev.c
@@ -6055,8 +6055,43 @@ static int cmd_big_create_sync_complete(struct btdev *dev, const void *data,
static int cmd_big_term_sync(struct btdev *dev, const void *data, uint8_t len)
{
- /* TODO */
- return -ENOTSUP;
+ const struct bt_hci_cmd_le_big_term_sync *cmd = data;
+ struct bt_hci_rsp_le_big_term_sync rsp;
+ const struct queue_entry *entry;
+
+ memset(&rsp, 0, sizeof(rsp));
+
+ /* If the Host issues this command with a BIG_Handle that does not
+ * exist, the Controller shall return the error code Unknown
+ * Advertising Identifier (0x42).
+ */
+ if (dev->big_handle != cmd->handle) {
+ rsp.status = BT_HCI_ERR_UNKNOWN_ADVERTISING_ID;
+ goto done;
+ }
+
+ rsp.status = BT_HCI_ERR_COMMAND_DISALLOWED;
+ rsp.handle = cmd->handle;
+
+ /* Cleanup existing connections */
+ for (entry = queue_get_entries(dev->conns); entry;
+ entry = entry->next) {
+ struct btdev_conn *conn = entry->data;
+
+ if (!conn->data)
+ continue;
+
+ rsp.status = BT_HCI_ERR_SUCCESS;
+ disconnect_complete(dev, conn->handle, BT_HCI_ERR_SUCCESS,
+ 0x16);
+
+ conn_remove(conn);
+ }
+
+done:
+ cmd_complete(dev, BT_HCI_CMD_LE_BIG_TERM_SYNC, &rsp, sizeof(rsp));
+
+ return 0;
}
static int cmd_req_peer_sca(struct btdev *dev, const void *data, uint8_t len)