Diff between 2ca6e5215830919b699deadb6e64ebbd37a22bb7 and 518d2a7aa566f6826367a3a5330cc6344f81e7cb

Changed Files

File Additions Deletions Status
profiles/audio/bass.c +19 -10 modified
profiles/audio/bass.h +0 -5 modified
profiles/audio/transport.c +2 -2 modified

Full Patch

diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c
index f5fe606..ec5b88f 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 42a2c04..32c7e4d 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 f3ac1a2..bc7ee6e 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@holtmann.org>
- *  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;
 		}