diff mbox series

[BlueZ,3/5] shared/bap: Update stream management to avoid PACs

Message ID 20240419180752.96699-4-andrei.istodorescu@nxp.com (mailing list archive)
State Superseded
Headers show
Series Create transports for matching BISes | expand

Checks

Context Check Description
tedd_an/pre-ci_am success Success
tedd_an/CheckPatch success CheckPatch PASS
tedd_an/GitLint success Gitlint PASS
tedd_an/IncrementalBuild success Incremental Build PASS

Commit Message

Andrei Istodorescu April 19, 2024, 6:07 p.m. UTC
Set the stream to enabling for BAP Broadcast Sink, when the transport is
acquired.
Remove PAC logic for BAP Broadcast Sink stream creation.
---
 src/shared/bap.c | 60 +++++-------------------------------------------
 1 file changed, 6 insertions(+), 54 deletions(-)

Comments

Luiz Augusto von Dentz April 19, 2024, 7:31 p.m. UTC | #1
Hi Andrei,

On Fri, Apr 19, 2024 at 2:08 PM Andrei Istodorescu
<andrei.istodorescu@nxp.com> wrote:
>
> Set the stream to enabling for BAP Broadcast Sink, when the transport is
> acquired.
> Remove PAC logic for BAP Broadcast Sink stream creation.
> ---
>  src/shared/bap.c | 60 +++++-------------------------------------------
>  1 file changed, 6 insertions(+), 54 deletions(-)
>
> diff --git a/src/shared/bap.c b/src/shared/bap.c
> index 36f0b0a3b50a..d7a2f9381c53 100644
> --- a/src/shared/bap.c
> +++ b/src/shared/bap.c
> @@ -2006,7 +2006,7 @@ static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
>                                         void *user_data)
>  {
>         if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
> -               stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> +               stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);

There is no Enabling state for Broadcast Stream in BAP:

https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/16212-BAP-html5/out/en/index-en.html#UUID-4a295bf2-6e50-be11-e827-c23e63569087_figure-idm4631863059107233170457600297

>         else
>                 stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
>
> @@ -5287,7 +5287,6 @@ void bt_bap_cancel_select(struct bt_bap_pac *lpac, bt_bap_pac_select_t func,
>
>  static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
>                                         struct bt_bap_pac *lpac,
> -                                       struct bt_bap_pac *rpac,
>                                         struct bt_bap_qos *pqos,
>                                         struct iovec *data)
>  {
> @@ -5298,71 +5297,24 @@ static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
>         if (!bap)
>                 return NULL;
>
> -       if (!rpac && (lpac->type != BT_BAP_BCAST_SOURCE)
> -               && queue_isempty(bap->remote_eps))
> -               return NULL;
> -
> -       if (lpac && rpac) {
> -               if ((rpac->type != BT_BAP_BCAST_SOURCE)
> -                       && (!bap_codec_equal(&lpac->codec, &rpac->codec)))
> -                       return NULL;
> -       } else {
> -               uint8_t type;
> -
> +       if (lpac->type == BT_BAP_BCAST_SOURCE) {
>                 match.lpac = lpac;
> -               match.rpac = rpac;
> +               match.rpac = NULL;
>                 memset(&match.codec, 0, sizeof(match.codec));
>
> -               if (rpac)
> -                       type = rpac->type;
> -               else if (lpac) {
> -                       switch (lpac->type) {
> -                       case BT_BAP_BCAST_SOURCE:
> -                               type = BT_BAP_BCAST_SINK;
> -                               break;
> -                       case BT_BAP_BCAST_SINK:
> -                               type = BT_BAP_BCAST_SOURCE;
> -                               break;
> -                       default:
> -                               return NULL;
> -                       }
> -               } else
> -                       return NULL;
> -
> -               bt_bap_foreach_pac(bap, type, match_pac, &match);
> +               bt_bap_foreach_pac(bap, BT_BAP_BCAST_SINK, match_pac, &match);
>                 if ((!match.lpac) || (!lpac))
>                         return NULL;
> -               if (!match.rpac && (lpac->type != BT_BAP_BCAST_SOURCE))
> -                       return NULL;
>
>                 lpac = match.lpac;
> -               rpac = match.rpac;
> -       }
> -
> -       match.lpac = lpac;
> -       match.rpac = rpac;
>
> -       if (lpac->type != BT_BAP_BCAST_SOURCE) {
> -               /* Check for existing stream */
> -               ep = queue_find(bap->remote_eps, find_ep_pacs, &match);
> -               if (!ep) {
> -                       /* Check for unused ASE */
> -                       ep = queue_find(bap->remote_eps, find_ep_unused,
> -                                       &match);
> -                       if (!ep) {
> -                               DBG(bap, "Unable to find unused ASE");
> -                               return NULL;
> -                       }
> -               }
> -               stream = ep->stream;
> -       } else {
>                 ep = queue_find(bap->remote_eps, find_ep_source, NULL);
>                 if (!ep)
>                         return NULL;
>         }
>
>         if (!stream)
> -               stream = bap_stream_new(bap, ep, lpac, rpac, data, true);
> +               stream = bap_stream_new(bap, ep, lpac, NULL, data, true);
>
>         return stream;
>  }
> @@ -5415,7 +5367,7 @@ struct bt_bap_stream *bt_bap_stream_new(struct bt_bap *bap,
>         if (bt_bap_get_att(bap))
>                 return bap_ucast_stream_new(bap, lpac, rpac, pqos, data);
>
> -       return bap_bcast_stream_new(bap, lpac, rpac, pqos, data);
> +       return bap_bcast_stream_new(bap, lpac, pqos, data);
>  }
>
>  struct bt_bap *bt_bap_stream_get_session(struct bt_bap_stream *stream)
> --
> 2.40.1
>
diff mbox series

Patch

diff --git a/src/shared/bap.c b/src/shared/bap.c
index 36f0b0a3b50a..d7a2f9381c53 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -2006,7 +2006,7 @@  static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
 					void *user_data)
 {
 	if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
-		stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
+		stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
 	else
 		stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
 
@@ -5287,7 +5287,6 @@  void bt_bap_cancel_select(struct bt_bap_pac *lpac, bt_bap_pac_select_t func,
 
 static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
 					struct bt_bap_pac *lpac,
-					struct bt_bap_pac *rpac,
 					struct bt_bap_qos *pqos,
 					struct iovec *data)
 {
@@ -5298,71 +5297,24 @@  static struct bt_bap_stream *bap_bcast_stream_new(struct bt_bap *bap,
 	if (!bap)
 		return NULL;
 
-	if (!rpac && (lpac->type != BT_BAP_BCAST_SOURCE)
-		&& queue_isempty(bap->remote_eps))
-		return NULL;
-
-	if (lpac && rpac) {
-		if ((rpac->type != BT_BAP_BCAST_SOURCE)
-			&& (!bap_codec_equal(&lpac->codec, &rpac->codec)))
-			return NULL;
-	} else {
-		uint8_t type;
-
+	if (lpac->type == BT_BAP_BCAST_SOURCE) {
 		match.lpac = lpac;
-		match.rpac = rpac;
+		match.rpac = NULL;
 		memset(&match.codec, 0, sizeof(match.codec));
 
-		if (rpac)
-			type = rpac->type;
-		else if (lpac) {
-			switch (lpac->type) {
-			case BT_BAP_BCAST_SOURCE:
-				type = BT_BAP_BCAST_SINK;
-				break;
-			case BT_BAP_BCAST_SINK:
-				type = BT_BAP_BCAST_SOURCE;
-				break;
-			default:
-				return NULL;
-			}
-		} else
-			return NULL;
-
-		bt_bap_foreach_pac(bap, type, match_pac, &match);
+		bt_bap_foreach_pac(bap, BT_BAP_BCAST_SINK, match_pac, &match);
 		if ((!match.lpac) || (!lpac))
 			return NULL;
-		if (!match.rpac && (lpac->type != BT_BAP_BCAST_SOURCE))
-			return NULL;
 
 		lpac = match.lpac;
-		rpac = match.rpac;
-	}
-
-	match.lpac = lpac;
-	match.rpac = rpac;
 
-	if (lpac->type != BT_BAP_BCAST_SOURCE) {
-		/* Check for existing stream */
-		ep = queue_find(bap->remote_eps, find_ep_pacs, &match);
-		if (!ep) {
-			/* Check for unused ASE */
-			ep = queue_find(bap->remote_eps, find_ep_unused,
-					&match);
-			if (!ep) {
-				DBG(bap, "Unable to find unused ASE");
-				return NULL;
-			}
-		}
-		stream = ep->stream;
-	} else {
 		ep = queue_find(bap->remote_eps, find_ep_source, NULL);
 		if (!ep)
 			return NULL;
 	}
 
 	if (!stream)
-		stream = bap_stream_new(bap, ep, lpac, rpac, data, true);
+		stream = bap_stream_new(bap, ep, lpac, NULL, data, true);
 
 	return stream;
 }
@@ -5415,7 +5367,7 @@  struct bt_bap_stream *bt_bap_stream_new(struct bt_bap *bap,
 	if (bt_bap_get_att(bap))
 		return bap_ucast_stream_new(bap, lpac, rpac, pqos, data);
 
-	return bap_bcast_stream_new(bap, lpac, rpac, pqos, data);
+	return bap_bcast_stream_new(bap, lpac, pqos, data);
 }
 
 struct bt_bap *bt_bap_stream_get_session(struct bt_bap_stream *stream)