This updates BASS to register Broadcast Code request callback with shared/bap instead of having a public API, to avoid making direct calls between plugins. The registered handler will be called from the transport plugin via shared/bap. --- profiles/audio/bass.c | 29 +++++++++++++++++++---------- profiles/audio/bass.h | 5 ----- profiles/audio/transport.c | 4 ++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c index f5fe60652..ec5b88ff3 100644 --- a/profiles/audio/bass.c +++ b/profiles/audio/bass.c @@ -108,6 +108,7 @@ struct bass_delegator { struct bt_bcast_src *src; struct bt_bap *bap; unsigned int state_id; + unsigned int bcode_id; uint8_t *bcode; unsigned int timeout; struct queue *bcode_reqs; @@ -128,7 +129,7 @@ struct bass_setup { struct bass_bcode_req { struct bass_setup *setup; - bt_bass_bcode_func_t cb; + bt_bap_bcode_reply_t cb; void *user_data; }; @@ -180,7 +181,7 @@ static bool delegator_match_bap(const void *data, const void *match_data) } static void setup_set_bcode(uint8_t *bcode, struct bass_setup *setup, - bt_bass_bcode_func_t cb, void *user_data) + bt_bap_bcode_reply_t cb, void *user_data) { struct bt_bap_qos *qos = bt_bap_stream_get_qos(setup->stream); @@ -203,9 +204,9 @@ static bool match_setup_stream(const void *data, const void *user_data) return setup->stream == stream; } -void bass_req_bcode(struct bt_bap_stream *stream, - bt_bass_bcode_func_t cb, - void *user_data) +static void bass_req_bcode(struct bt_bap_stream *stream, + bt_bap_bcode_reply_t reply, void *reply_data, + void *user_data) { struct bt_bap *bap = bt_bap_stream_get_session(stream); struct bass_delegator *dg; @@ -214,19 +215,19 @@ void bass_req_bcode(struct bt_bap_stream *stream, dg = queue_find(delegators, delegator_match_bap, bap); if (!dg) { - cb(user_data, -EINVAL); + reply(reply_data, -EINVAL); return; } setup = queue_find(dg->setups, match_setup_stream, stream); if (!setup) { - cb(user_data, -EINVAL); + reply(reply_data, -EINVAL); return; } if (dg->bcode) { /* Broadcast Code has already been received before. */ - setup_set_bcode(dg->bcode, setup, cb, user_data); + setup_set_bcode(dg->bcode, setup, reply, reply_data); return; } @@ -239,8 +240,8 @@ void bass_req_bcode(struct bt_bap_stream *stream, return; req->setup = setup; - req->cb = cb; - req->user_data = user_data; + req->cb = reply; + req->user_data = reply_data; queue_push_tail(dg->bcode_reqs, req); @@ -564,6 +565,12 @@ static void confirm_cb(GIOChannel *io, void *user_data) dg->state_id = bt_bap_state_register(dg->bap, bap_state_changed, NULL, dg, NULL); + /* Register callback to handle Broadcast Code requests from + * upper layers. + */ + dg->bcode_id = bt_bap_bcode_cb_register(dg->bap, bass_req_bcode, + NULL, NULL); + dg->io_id = g_io_add_watch(io, G_IO_OUT, big_info_cb, dg); } @@ -716,6 +723,8 @@ static void bap_detached(struct bt_bap *bap, void *user_data) /* Unregister BAP stream state changed callback. */ bt_bap_state_unregister(dg->bap, dg->state_id); + bt_bap_bcode_cb_unregister(dg->bap, dg->bcode_id); + if (dg->timeout) g_source_remove(dg->timeout); diff --git a/profiles/audio/bass.h b/profiles/audio/bass.h index 42a2c047f..32c7e4def 100644 --- a/profiles/audio/bass.h +++ b/profiles/audio/bass.h @@ -7,8 +7,3 @@ * */ -typedef void (*bt_bass_bcode_func_t)(void *user_data, int err); - -void bass_req_bcode(struct bt_bap_stream *stream, - bt_bass_bcode_func_t cb, - void *user_data); diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index f3ac1a251..bc7ee6e45 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -5,7 +5,7 @@ * * Copyright (C) 2006-2007 Nokia Corporation * Copyright (C) 2004-2009 Marcel Holtmann <marcel@xxxxxxxxxxxx> - * Copyright 2023-2024 NXP + * Copyright 2023-2025 NXP * * */ @@ -1537,7 +1537,7 @@ static void set_bcast_qos(const GDBusPropertyTable *property, * for the encrypted stream, request the code from * Broadcast Assistants, if any are available. */ - bass_req_bcode(bap->stream, bcast_qos_set, + bt_bap_req_bcode(bap->stream, bcast_qos_set, GUINT_TO_POINTER(id)); return; } -- 2.43.0