This adds a BASS API to send a GATT write command for the Broadcast Audio Scan Control Point characteristic. --- src/shared/bass.c | 38 +++++++++++++++++++++++++++++++++++++- src/shared/bass.h | 5 ++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/shared/bass.c b/src/shared/bass.c index 268e3bd86..d9ab210b7 100644 --- a/src/shared/bass.c +++ b/src/shared/bass.c @@ -3,7 +3,7 @@ * * BlueZ - Bluetooth protocol stack for Linux * - * Copyright 2023 NXP + * Copyright 2023-2024 NXP * */ @@ -1754,3 +1754,39 @@ void bt_bass_add_db(struct gatt_db *db, const bdaddr_t *adapter_bdaddr) { bass_db_new(db, adapter_bdaddr); } + +int bt_bass_send(struct bt_bass *bass, + struct bt_bass_bcast_audio_scan_cp_hdr *hdr, + struct iovec *params) +{ + struct iovec req = {0}; + uint16_t handle; + int err = 0; + + if (!bass || !bass->client || !bass->rdb) + return -EINVAL; + + DBG(bass, "bass %p", bass); + + req.iov_base = malloc0(sizeof(*hdr) + params->iov_len); + if (!req.iov_base) + return -EINVAL; + + util_iov_push_mem(&req, sizeof(*hdr), hdr); + util_iov_push_mem(&req, params->iov_len, params->iov_base); + + if (!gatt_db_attribute_get_char_data(bass->rdb->bcast_audio_scan_cp, + NULL, &handle, NULL, NULL, NULL)) { + err = -EINVAL; + goto done; + } + + if (!bt_gatt_client_write_without_response(bass->client, handle, + false, req.iov_base, req.iov_len)) + err = -EINVAL; + +done: + free(req.iov_base); + + return err; +} diff --git a/src/shared/bass.h b/src/shared/bass.h index 1674146bc..864b01637 100644 --- a/src/shared/bass.h +++ b/src/shared/bass.h @@ -3,7 +3,7 @@ * * BlueZ - Bluetooth protocol stack for Linux * - * Copyright 2023 NXP + * Copyright 2023-2024 NXP * */ @@ -135,3 +135,6 @@ bool bt_bass_attach(struct bt_bass *bass, struct bt_gatt_client *client); bool bt_bass_set_att(struct bt_bass *bass, struct bt_att *att); void bt_bass_detach(struct bt_bass *bass); void bt_bass_add_db(struct gatt_db *db, const bdaddr_t *adapter_bdaddr); +int bt_bass_send(struct bt_bass *bass, + struct bt_bass_bcast_audio_scan_cp_hdr *hdr, + struct iovec *params); -- 2.39.2