diff options
author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-03-04 17:22:26 -0800 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2022-03-07 17:18:39 -0800 |
commit | 9cbc6fc1b20d7180921cfd9d7344746fde0e84ba (patch) | |
tree | 8eb9ba3ba186a7535875f359190f199b20a2a03e /emulator | |
parent | 40bacfff0c24017c06a50e980149564e94ad05ea (diff) | |
download | bluez-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.c | 39 |
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) |