Re: [PATCH BlueZ bluez] bap: Add idle notification for ASE State

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Yang,

On Mon, Apr 7, 2025 at 6:34 AM Yang Li via B4 Relay
<devnull+yang.li.amlogic.com@xxxxxxxxxx> wrote:
>
> From: Yang Li <yang.li@xxxxxxxxxxx>
>
> When the ASE state changes from releasing(6) -> idle(0),
> the idle state needs to be notified to the Client.
>
> ---
> Signed-off-by: Yang Li <yang.li@xxxxxxxxxxx>
> ---
>  src/shared/bap.c | 13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
>
> diff --git a/src/shared/bap.c b/src/shared/bap.c
> index 650bea2f4..c40d6e051 100644
> --- a/src/shared/bap.c
> +++ b/src/shared/bap.c
> @@ -1123,17 +1123,12 @@ static void stream_notify_metadata(struct bt_bap_stream *stream)
>         free(status);
>  }
>
> -static void stream_notify_release(struct bt_bap_stream *stream)
> +static void stream_notify_ase_state(struct bt_bap_stream *stream)
>  {
>         struct bt_bap_endpoint *ep = stream->ep;
>         struct bt_ascs_ase_status status;
>
> -       DBG(stream->bap, "stream %p", stream);
> -
> -
> -       memset(&status, 0, sizeof(status));
>         status.id = ep->id;
> -       ep->state = BT_BAP_STREAM_STATE_RELEASING;

Not really sure why you are taking away releasing state, we actually
depend on it for the new tests:

https://patchwork.kernel.org/project/bluetooth/list/?series=950067

>         status.state = ep->state;
>
>         gatt_db_attribute_notify(ep->attr, (void *)&status, sizeof(status),
> @@ -1713,6 +1708,7 @@ static void stream_notify(struct bt_bap_stream *stream, uint8_t state)
>
>         switch (state) {
>         case BT_ASCS_ASE_STATE_IDLE:
> +               stream_notify_ase_state(stream);

We need something like stream_notify_idle.

>                 break;
>         case BT_ASCS_ASE_STATE_CONFIG:
>                 stream_notify_config(stream);
> @@ -1726,7 +1722,7 @@ static void stream_notify(struct bt_bap_stream *stream, uint8_t state)
>                 stream_notify_metadata(stream);
>                 break;
>         case BT_ASCS_ASE_STATE_RELEASING:
> -               stream_notify_release(stream);
> +               stream_notify_ase_state(stream);

This is actually wrong, we need to notify the releasing state.

>                 break;
>         }
>  }
> @@ -6397,9 +6393,8 @@ static bool stream_io_disconnected(struct io *io, void *user_data)
>         DBG(stream->bap, "stream %p io disconnected", stream);
>
>         if (stream->ep->state == BT_ASCS_ASE_STATE_RELEASING)
> -               stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> +               stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE);

Ok, so this is sort of reverting from  bap: Fix not generating
releasing state? I was wondering how much testing you guys did to
confirm this is the right behavior, I don't think it is and Im trying
to figure out if there are any tests for the testing spec that do
properly verify this behavior.

> -       bt_bap_stream_set_io(stream, -1);
>         return false;
>  }
>
>
> ---
> base-commit: 0efa20cbf3fb5693c7c2f14ba8cf67053ca029e5
> change-id: 20250407-bap_aes_state-9306798ff95a
>
> Best regards,
> --
> Yang Li <yang.li@xxxxxxxxxxx>
>
>
>


-- 
Luiz Augusto von Dentz





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux