diff mbox series

[BlueZ,1/2] shared/bap: Update BAP Broadcast Source state machine

Message ID 20240520162757.78187-2-silviu.barbulescu@nxp.com (mailing list archive)
State Superseded
Headers show
Series Update BAP Broadcast Source state machine | 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/BuildEll success Build ELL PASS
tedd_an/BluezMake success Bluez Make PASS
tedd_an/MakeCheck success Bluez Make Check PASS
tedd_an/MakeDistcheck success Make Distcheck PASS
tedd_an/CheckValgrind success Check Valgrind PASS
tedd_an/CheckSmatch warning CheckSparse WARNING src/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structures
tedd_an/bluezmakeextell success Make External ELL PASS
tedd_an/IncrementalBuild success Incremental Build PASS
tedd_an/ScanBuild success Scan Build PASS

Commit Message

Silviu Florian Barbulescu May 20, 2024, 4:27 p.m. UTC
Update BAP Broadcast Source state machine states to use BAP define states
 for source Idle, Config, Streaming, and an intermediary state enabling.

Updated test-bap too.

---
 src/shared/bap.c | 39 ++++++++++++++++++++-------------------
 unit/test-bap.c  |  4 ++--
 2 files changed, 22 insertions(+), 21 deletions(-)

Comments

Luiz Augusto von Dentz May 20, 2024, 4:40 p.m. UTC | #1
Hi Silviu,

On Mon, May 20, 2024 at 12:28 PM Silviu Florian Barbulescu
<silviu.barbulescu@nxp.com> wrote:
>
> Update BAP Broadcast Source state machine states to use BAP define states
>  for source Idle, Config, Streaming, and an intermediary state enabling.

Not really following, what is an intermediary state? Or do you mean
internal state? And more importantly why would we need an internal
state like that?

> Updated test-bap too.
>
> ---
>  src/shared/bap.c | 39 ++++++++++++++++++++-------------------
>  unit/test-bap.c  |  4 ++--
>  2 files changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/src/shared/bap.c b/src/shared/bap.c
> index 6572ef1d1..639149520 100644
> --- a/src/shared/bap.c
> +++ b/src/shared/bap.c
> @@ -1361,14 +1361,6 @@ static void ep_config_cb(struct bt_bap_stream *stream, int err)
>         if (err)
>                 return;
>
> -       if (bt_bap_stream_get_type(stream) == BT_BAP_STREAM_TYPE_BCAST) {
> -               if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
> -                       stream_set_state(stream, BT_BAP_STREAM_STATE_QOS);
> -               else if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
> -                       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> -               return;
> -       }
> -
>         stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
>  }
>
> @@ -1759,6 +1751,15 @@ static unsigned int bap_stream_metadata(struct bt_bap_stream *stream,
>         return req->id;
>  }
>
> +static unsigned int bap_bcast_qos(struct bt_bap_stream *stream,
> +                                       struct bt_bap_qos *data,
> +                                       bt_bap_stream_func_t func,
> +                                       void *user_data)
> +{
> +       stream->qos = *data;
> +       return 1;
> +}
> +
>  static unsigned int bap_bcast_config(struct bt_bap_stream *stream,
>                                      struct bt_bap_qos *qos, struct iovec *data,
>                                      bt_bap_stream_func_t func, void *user_data)
> @@ -2071,7 +2072,7 @@ static unsigned int bap_bcast_get_state(struct bt_bap_stream *stream)
>         return stream->state;
>  }
>
> -static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
> +static unsigned int bap_bcast_sink_enable(struct bt_bap_stream *stream,
>                                         bool enable_links, struct iovec *data,
>                                         bt_bap_stream_func_t func,
>                                         void *user_data)
> @@ -2081,22 +2082,21 @@ static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
>         return 1;
>  }
>
> -static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
> +static unsigned int bap_bcast_src_enable(struct bt_bap_stream *stream,
> +                                       bool enable_links, struct iovec *data,
>                                         bt_bap_stream_func_t func,
>                                         void *user_data)
>  {
> -       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> +       stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
>
>         return 1;
>  }
>
> -static unsigned int bap_bcast_sink_disable(struct bt_bap_stream *stream,
> -                                       bool disable_links,
> +static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
>                                         bt_bap_stream_func_t func,
>                                         void *user_data)
>  {
> -       bap_stream_io_detach(stream);
> -       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> +       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
>
>         return 1;
>  }
> @@ -2106,7 +2106,8 @@ static unsigned int bap_bcast_disable(struct bt_bap_stream *stream,
>                                         bt_bap_stream_func_t func,
>                                         void *user_data)
>  {
> -       stream_set_state(stream, BT_BAP_STREAM_STATE_DISABLING);
> +       bap_stream_io_detach(stream);
> +       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
>
>         return 1;
>  }
> @@ -2205,14 +2206,14 @@ static const struct bt_bap_stream_ops stream_ops[] = {
>                         bap_ucast_release, bap_ucast_detach),
>         STREAM_OPS(BT_BAP_BCAST_SINK, bap_bcast_set_state,
>                         bap_bcast_get_state,
> -                       bap_bcast_config, NULL, bap_bcast_enable,
> -                       bap_bcast_start, bap_bcast_sink_disable, NULL,
> +                       bap_bcast_config, NULL, bap_bcast_sink_enable,
> +                       bap_bcast_start, bap_bcast_disable, NULL,
>                         bap_bcast_metadata, bap_bcast_sink_get_dir,
>                         bap_bcast_get_location,
>                         bap_bcast_release, bap_bcast_sink_detach),
>         STREAM_OPS(BT_BAP_BCAST_SOURCE, bap_bcast_set_state,
>                         bap_bcast_get_state,
> -                       bap_bcast_config, NULL, bap_bcast_enable,
> +                       bap_bcast_config, bap_bcast_qos, bap_bcast_src_enable,
>                         bap_bcast_start, bap_bcast_disable, NULL,
>                         bap_bcast_metadata, bap_bcast_src_get_dir,
>                         bap_bcast_get_location,
> diff --git a/unit/test-bap.c b/unit/test-bap.c
> index 46ee0e4e5..10f9e348c 100644
> --- a/unit/test-bap.c
> +++ b/unit/test-bap.c
> @@ -547,10 +547,10 @@ static void bsrc_state(struct bt_bap_stream *stream, uint8_t old_state,
>         struct test_data *data = user_data;
>
>         switch (new_state) {
> -       case BT_BAP_STREAM_STATE_QOS:
> +       case BT_BAP_STREAM_STATE_CONFIG:
>                 bt_bap_stream_enable(stream, true, NULL, NULL, NULL);
>                 break;
> -       case BT_BAP_STREAM_STATE_CONFIG:
> +       case BT_BAP_STREAM_STATE_ENABLING:
>                 data->base = bt_bap_stream_get_base(stream);
>
>                 g_assert(data->base);
> --
> 2.40.1
>
bluez.test.bot@gmail.com May 20, 2024, 6:31 p.m. UTC | #2
This is automated email and please do not reply to this email!

Dear submitter,

Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=854453

---Test result---

Test Summary:
CheckPatch                    PASS      0.97 seconds
GitLint                       PASS      0.67 seconds
BuildEll                      PASS      24.44 seconds
BluezMake                     PASS      1665.06 seconds
MakeCheck                     PASS      13.33 seconds
MakeDistcheck                 PASS      177.64 seconds
CheckValgrind                 PASS      249.99 seconds
CheckSmatch                   WARNING   353.75 seconds
bluezmakeextell               PASS      119.52 seconds
IncrementalBuild              PASS      3024.77 seconds
ScanBuild                     PASS      1002.02 seconds

Details
##############################
Test: CheckSmatch - WARNING
Desc: Run smatch tool with source
Output:
src/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structuressrc/shared/bap.c:286:25: warning: array of flexible structuressrc/shared/bap.c: note: in included file:./src/shared/ascs.h:88:25: warning: array of flexible structures


---
Regards,
Linux Bluetooth
Silviu Florian Barbulescu May 23, 2024, 10:46 a.m. UTC | #3
Hi Luiz,

> -----Original Message-----
> From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> Sent: Monday, May 20, 2024 7:40 PM
> To: Silviu Florian Barbulescu <silviu.barbulescu@nxp.com>
> Cc: linux-bluetooth@vger.kernel.org; Mihai-Octavian Urzica <mihai-
> octavian.urzica@nxp.com>; Vlad Pruteanu <vlad.pruteanu@nxp.com>; Andrei
> Istodorescu <andrei.istodorescu@nxp.com>; Iulia Tanasescu
> <iulia.tanasescu@nxp.com>
> Subject: [EXT] Re: [PATCH BlueZ 1/2] shared/bap: Update BAP Broadcast Source
> state machine
> 
> Caution: This is an external email. Please take care when clicking links or
> opening attachments. When in doubt, report the message using the 'Report this
> email' button
> 
> 
> Hi Silviu,
> 
> On Mon, May 20, 2024 at 12:28 PM Silviu Florian Barbulescu
> <silviu.barbulescu@nxp.com> wrote:
> >
> > Update BAP Broadcast Source state machine states to use BAP define
> > states  for source Idle, Config, Streaming, and an intermediary state enabling.
> 
> Not really following, what is an intermediary state? Or do you mean internal
> state? And more importantly why would we need an internal state like that?
> 

Hi Luiz we use the ENABLING state to know when a transport linked to a stream 
has been acquired by a process and in the case of a BIG with one BIS stream goes 
in the ENABLING state waiting for the response from the kernel that the BIG has 
been created so it can go to the streaming state.
For the case of a BIG with multiple BISes, the BIG is created when all BISes 
are acquired. So we use the ENABLING state to  verify that all transports 
attached to that streams form  BIG have been acquired so we can create the BIG.
If we don’t use this internal state we can use a flag in the stream structure 
to be informed that the transport attached to the stream is in the acquiring 
procedure, but this would not look good, as we will have a flag intercalated 
with the stream state machine.

> > Updated test-bap too.
> >
> > ---
> >  src/shared/bap.c | 39 ++++++++++++++++++++-------------------
> >  unit/test-bap.c  |  4 ++--
> >  2 files changed, 22 insertions(+), 21 deletions(-)
> >
> > diff --git a/src/shared/bap.c b/src/shared/bap.c index
> > 6572ef1d1..639149520 100644
> > --- a/src/shared/bap.c
> > +++ b/src/shared/bap.c
> > @@ -1361,14 +1361,6 @@ static void ep_config_cb(struct bt_bap_stream
> *stream, int err)
> >         if (err)
> >                 return;
> >
> > -       if (bt_bap_stream_get_type(stream) == BT_BAP_STREAM_TYPE_BCAST)
> {
> > -               if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
> > -                       stream_set_state(stream, BT_BAP_STREAM_STATE_QOS);
> > -               else if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
> > -                       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> > -               return;
> > -       }
> > -
> >         stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);  }
> >
> > @@ -1759,6 +1751,15 @@ static unsigned int bap_stream_metadata(struct
> bt_bap_stream *stream,
> >         return req->id;
> >  }
> >
> > +static unsigned int bap_bcast_qos(struct bt_bap_stream *stream,
> > +                                       struct bt_bap_qos *data,
> > +                                       bt_bap_stream_func_t func,
> > +                                       void *user_data) {
> > +       stream->qos = *data;
> > +       return 1;
> > +}
> > +
> >  static unsigned int bap_bcast_config(struct bt_bap_stream *stream,
> >                                      struct bt_bap_qos *qos, struct iovec *data,
> >                                      bt_bap_stream_func_t func, void
> > *user_data) @@ -2071,7 +2072,7 @@ static unsigned int
> bap_bcast_get_state(struct bt_bap_stream *stream)
> >         return stream->state;
> >  }
> >
> > -static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
> > +static unsigned int bap_bcast_sink_enable(struct bt_bap_stream
> > +*stream,
> >                                         bool enable_links, struct iovec *data,
> >                                         bt_bap_stream_func_t func,
> >                                         void *user_data) @@ -2081,22
> > +2082,21 @@ static unsigned int bap_bcast_enable(struct bt_bap_stream
> *stream,
> >         return 1;
> >  }
> >
> > -static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
> > +static unsigned int bap_bcast_src_enable(struct bt_bap_stream *stream,
> > +                                       bool enable_links, struct
> > +iovec *data,
> >                                         bt_bap_stream_func_t func,
> >                                         void *user_data)  {
> > -       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> > +       stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
> >
> >         return 1;
> >  }
> >
> > -static unsigned int bap_bcast_sink_disable(struct bt_bap_stream *stream,
> > -                                       bool disable_links,
> > +static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
> >                                         bt_bap_stream_func_t func,
> >                                         void *user_data)
> >  {
> > -       bap_stream_io_detach(stream);
> > -       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> > +       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> >
> >         return 1;
> >  }
> > @@ -2106,7 +2106,8 @@ static unsigned int bap_bcast_disable(struct
> bt_bap_stream *stream,
> >                                         bt_bap_stream_func_t func,
> >                                         void *user_data)
> >  {
> > -       stream_set_state(stream, BT_BAP_STREAM_STATE_DISABLING);
> > +       bap_stream_io_detach(stream);
> > +       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> >
> >         return 1;
> >  }
> > @@ -2205,14 +2206,14 @@ static const struct bt_bap_stream_ops
> stream_ops[] = {
> >                         bap_ucast_release, bap_ucast_detach),
> >         STREAM_OPS(BT_BAP_BCAST_SINK, bap_bcast_set_state,
> >                         bap_bcast_get_state,
> > -                       bap_bcast_config, NULL, bap_bcast_enable,
> > -                       bap_bcast_start, bap_bcast_sink_disable, NULL,
> > +                       bap_bcast_config, NULL, bap_bcast_sink_enable,
> > +                       bap_bcast_start, bap_bcast_disable, NULL,
> >                         bap_bcast_metadata, bap_bcast_sink_get_dir,
> >                         bap_bcast_get_location,
> >                         bap_bcast_release, bap_bcast_sink_detach),
> >         STREAM_OPS(BT_BAP_BCAST_SOURCE, bap_bcast_set_state,
> >                         bap_bcast_get_state,
> > -                       bap_bcast_config, NULL, bap_bcast_enable,
> > +                       bap_bcast_config, bap_bcast_qos, bap_bcast_src_enable,
> >                         bap_bcast_start, bap_bcast_disable, NULL,
> >                         bap_bcast_metadata, bap_bcast_src_get_dir,
> >                         bap_bcast_get_location,
> > diff --git a/unit/test-bap.c b/unit/test-bap.c
> > index 46ee0e4e5..10f9e348c 100644
> > --- a/unit/test-bap.c
> > +++ b/unit/test-bap.c
> > @@ -547,10 +547,10 @@ static void bsrc_state(struct bt_bap_stream
> *stream, uint8_t old_state,
> >         struct test_data *data = user_data;
> >
> >         switch (new_state) {
> > -       case BT_BAP_STREAM_STATE_QOS:
> > +       case BT_BAP_STREAM_STATE_CONFIG:
> >                 bt_bap_stream_enable(stream, true, NULL, NULL, NULL);
> >                 break;
> > -       case BT_BAP_STREAM_STATE_CONFIG:
> > +       case BT_BAP_STREAM_STATE_ENABLING:
> >                 data->base = bt_bap_stream_get_base(stream);
> >
> >                 g_assert(data->base);
> > --
> > 2.40.1
> >
> 
> 
> --
> Luiz Augusto von Dentz
Luiz Augusto von Dentz May 23, 2024, 2:15 p.m. UTC | #4
Hi Silviu,

On Thu, May 23, 2024 at 6:46 AM Silviu Florian Barbulescu
<silviu.barbulescu@nxp.com> wrote:
>
> Hi Luiz,
>
> > -----Original Message-----
> > From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> > Sent: Monday, May 20, 2024 7:40 PM
> > To: Silviu Florian Barbulescu <silviu.barbulescu@nxp.com>
> > Cc: linux-bluetooth@vger.kernel.org; Mihai-Octavian Urzica <mihai-
> > octavian.urzica@nxp.com>; Vlad Pruteanu <vlad.pruteanu@nxp.com>; Andrei
> > Istodorescu <andrei.istodorescu@nxp.com>; Iulia Tanasescu
> > <iulia.tanasescu@nxp.com>
> > Subject: [EXT] Re: [PATCH BlueZ 1/2] shared/bap: Update BAP Broadcast Source
> > state machine
> >
> > Caution: This is an external email. Please take care when clicking links or
> > opening attachments. When in doubt, report the message using the 'Report this
> > email' button
> >
> >
> > Hi Silviu,
> >
> > On Mon, May 20, 2024 at 12:28 PM Silviu Florian Barbulescu
> > <silviu.barbulescu@nxp.com> wrote:
> > >
> > > Update BAP Broadcast Source state machine states to use BAP define
> > > states  for source Idle, Config, Streaming, and an intermediary state enabling.
> >
> > Not really following, what is an intermediary state? Or do you mean internal
> > state? And more importantly why would we need an internal state like that?
> >
>
> Hi Luiz we use the ENABLING state to know when a transport linked to a stream
> has been acquired by a process and in the case of a BIG with one BIS stream goes
> in the ENABLING state waiting for the response from the kernel that the BIG has
> been created so it can go to the streaming state.
> For the case of a BIG with multiple BISes, the BIG is created when all BISes
> are acquired. So we use the ENABLING state to  verify that all transports
> attached to that streams form  BIG have been acquired so we can create the BIG.
> If we don’t use this internal state we can use a flag in the stream structure
> to be informed that the transport attached to the stream is in the acquiring
> procedure, but this would not look good, as we will have a flag intercalated
> with the stream state machine.

Fair enough, please add this information as a comment so in the future
we know why we are using enabling for broadcast.

> > > Updated test-bap too.
> > >
> > > ---
> > >  src/shared/bap.c | 39 ++++++++++++++++++++-------------------
> > >  unit/test-bap.c  |  4 ++--
> > >  2 files changed, 22 insertions(+), 21 deletions(-)
> > >
> > > diff --git a/src/shared/bap.c b/src/shared/bap.c index
> > > 6572ef1d1..639149520 100644
> > > --- a/src/shared/bap.c
> > > +++ b/src/shared/bap.c
> > > @@ -1361,14 +1361,6 @@ static void ep_config_cb(struct bt_bap_stream
> > *stream, int err)
> > >         if (err)
> > >                 return;
> > >
> > > -       if (bt_bap_stream_get_type(stream) == BT_BAP_STREAM_TYPE_BCAST)
> > {
> > > -               if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
> > > -                       stream_set_state(stream, BT_BAP_STREAM_STATE_QOS);
> > > -               else if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
> > > -                       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> > > -               return;
> > > -       }
> > > -
> > >         stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);  }
> > >
> > > @@ -1759,6 +1751,15 @@ static unsigned int bap_stream_metadata(struct
> > bt_bap_stream *stream,
> > >         return req->id;
> > >  }
> > >
> > > +static unsigned int bap_bcast_qos(struct bt_bap_stream *stream,
> > > +                                       struct bt_bap_qos *data,
> > > +                                       bt_bap_stream_func_t func,
> > > +                                       void *user_data) {
> > > +       stream->qos = *data;
> > > +       return 1;
> > > +}
> > > +
> > >  static unsigned int bap_bcast_config(struct bt_bap_stream *stream,
> > >                                      struct bt_bap_qos *qos, struct iovec *data,
> > >                                      bt_bap_stream_func_t func, void
> > > *user_data) @@ -2071,7 +2072,7 @@ static unsigned int
> > bap_bcast_get_state(struct bt_bap_stream *stream)
> > >         return stream->state;
> > >  }
> > >
> > > -static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
> > > +static unsigned int bap_bcast_sink_enable(struct bt_bap_stream
> > > +*stream,
> > >                                         bool enable_links, struct iovec *data,
> > >                                         bt_bap_stream_func_t func,
> > >                                         void *user_data) @@ -2081,22
> > > +2082,21 @@ static unsigned int bap_bcast_enable(struct bt_bap_stream
> > *stream,
> > >         return 1;
> > >  }
> > >
> > > -static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
> > > +static unsigned int bap_bcast_src_enable(struct bt_bap_stream *stream,
> > > +                                       bool enable_links, struct
> > > +iovec *data,
> > >                                         bt_bap_stream_func_t func,
> > >                                         void *user_data)  {
> > > -       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> > > +       stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
> > >
> > >         return 1;
> > >  }
> > >
> > > -static unsigned int bap_bcast_sink_disable(struct bt_bap_stream *stream,
> > > -                                       bool disable_links,
> > > +static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
> > >                                         bt_bap_stream_func_t func,
> > >                                         void *user_data)
> > >  {
> > > -       bap_stream_io_detach(stream);
> > > -       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> > > +       stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
> > >
> > >         return 1;
> > >  }
> > > @@ -2106,7 +2106,8 @@ static unsigned int bap_bcast_disable(struct
> > bt_bap_stream *stream,
> > >                                         bt_bap_stream_func_t func,
> > >                                         void *user_data)
> > >  {
> > > -       stream_set_state(stream, BT_BAP_STREAM_STATE_DISABLING);
> > > +       bap_stream_io_detach(stream);
> > > +       stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
> > >
> > >         return 1;
> > >  }
> > > @@ -2205,14 +2206,14 @@ static const struct bt_bap_stream_ops
> > stream_ops[] = {
> > >                         bap_ucast_release, bap_ucast_detach),
> > >         STREAM_OPS(BT_BAP_BCAST_SINK, bap_bcast_set_state,
> > >                         bap_bcast_get_state,
> > > -                       bap_bcast_config, NULL, bap_bcast_enable,
> > > -                       bap_bcast_start, bap_bcast_sink_disable, NULL,
> > > +                       bap_bcast_config, NULL, bap_bcast_sink_enable,
> > > +                       bap_bcast_start, bap_bcast_disable, NULL,
> > >                         bap_bcast_metadata, bap_bcast_sink_get_dir,
> > >                         bap_bcast_get_location,
> > >                         bap_bcast_release, bap_bcast_sink_detach),
> > >         STREAM_OPS(BT_BAP_BCAST_SOURCE, bap_bcast_set_state,
> > >                         bap_bcast_get_state,
> > > -                       bap_bcast_config, NULL, bap_bcast_enable,
> > > +                       bap_bcast_config, bap_bcast_qos, bap_bcast_src_enable,
> > >                         bap_bcast_start, bap_bcast_disable, NULL,
> > >                         bap_bcast_metadata, bap_bcast_src_get_dir,
> > >                         bap_bcast_get_location,
> > > diff --git a/unit/test-bap.c b/unit/test-bap.c
> > > index 46ee0e4e5..10f9e348c 100644
> > > --- a/unit/test-bap.c
> > > +++ b/unit/test-bap.c
> > > @@ -547,10 +547,10 @@ static void bsrc_state(struct bt_bap_stream
> > *stream, uint8_t old_state,
> > >         struct test_data *data = user_data;
> > >
> > >         switch (new_state) {
> > > -       case BT_BAP_STREAM_STATE_QOS:
> > > +       case BT_BAP_STREAM_STATE_CONFIG:
> > >                 bt_bap_stream_enable(stream, true, NULL, NULL, NULL);
> > >                 break;
> > > -       case BT_BAP_STREAM_STATE_CONFIG:
> > > +       case BT_BAP_STREAM_STATE_ENABLING:
> > >                 data->base = bt_bap_stream_get_base(stream);
> > >
> > >                 g_assert(data->base);
> > > --
> > > 2.40.1
> > >
> >
> >
> > --
> > Luiz Augusto von Dentz
>
diff mbox series

Patch

diff --git a/src/shared/bap.c b/src/shared/bap.c
index 6572ef1d1..639149520 100644
--- a/src/shared/bap.c
+++ b/src/shared/bap.c
@@ -1361,14 +1361,6 @@  static void ep_config_cb(struct bt_bap_stream *stream, int err)
 	if (err)
 		return;
 
-	if (bt_bap_stream_get_type(stream) == BT_BAP_STREAM_TYPE_BCAST) {
-		if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SINK)
-			stream_set_state(stream, BT_BAP_STREAM_STATE_QOS);
-		else if (bt_bap_stream_io_dir(stream) == BT_BAP_BCAST_SOURCE)
-			stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
-		return;
-	}
-
 	stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
 }
 
@@ -1759,6 +1751,15 @@  static unsigned int bap_stream_metadata(struct bt_bap_stream *stream,
 	return req->id;
 }
 
+static unsigned int bap_bcast_qos(struct bt_bap_stream *stream,
+					struct bt_bap_qos *data,
+					bt_bap_stream_func_t func,
+					void *user_data)
+{
+	stream->qos = *data;
+	return 1;
+}
+
 static unsigned int bap_bcast_config(struct bt_bap_stream *stream,
 				     struct bt_bap_qos *qos, struct iovec *data,
 				     bt_bap_stream_func_t func, void *user_data)
@@ -2071,7 +2072,7 @@  static unsigned int bap_bcast_get_state(struct bt_bap_stream *stream)
 	return stream->state;
 }
 
-static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
+static unsigned int bap_bcast_sink_enable(struct bt_bap_stream *stream,
 					bool enable_links, struct iovec *data,
 					bt_bap_stream_func_t func,
 					void *user_data)
@@ -2081,22 +2082,21 @@  static unsigned int bap_bcast_enable(struct bt_bap_stream *stream,
 	return 1;
 }
 
-static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
+static unsigned int bap_bcast_src_enable(struct bt_bap_stream *stream,
+					bool enable_links, struct iovec *data,
 					bt_bap_stream_func_t func,
 					void *user_data)
 {
-	stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
+	stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING);
 
 	return 1;
 }
 
-static unsigned int bap_bcast_sink_disable(struct bt_bap_stream *stream,
-					bool disable_links,
+static unsigned int bap_bcast_start(struct bt_bap_stream *stream,
 					bt_bap_stream_func_t func,
 					void *user_data)
 {
-	bap_stream_io_detach(stream);
-	stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
+	stream_set_state(stream, BT_BAP_STREAM_STATE_STREAMING);
 
 	return 1;
 }
@@ -2106,7 +2106,8 @@  static unsigned int bap_bcast_disable(struct bt_bap_stream *stream,
 					bt_bap_stream_func_t func,
 					void *user_data)
 {
-	stream_set_state(stream, BT_BAP_STREAM_STATE_DISABLING);
+	bap_stream_io_detach(stream);
+	stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG);
 
 	return 1;
 }
@@ -2205,14 +2206,14 @@  static const struct bt_bap_stream_ops stream_ops[] = {
 			bap_ucast_release, bap_ucast_detach),
 	STREAM_OPS(BT_BAP_BCAST_SINK, bap_bcast_set_state,
 			bap_bcast_get_state,
-			bap_bcast_config, NULL, bap_bcast_enable,
-			bap_bcast_start, bap_bcast_sink_disable, NULL,
+			bap_bcast_config, NULL, bap_bcast_sink_enable,
+			bap_bcast_start, bap_bcast_disable, NULL,
 			bap_bcast_metadata, bap_bcast_sink_get_dir,
 			bap_bcast_get_location,
 			bap_bcast_release, bap_bcast_sink_detach),
 	STREAM_OPS(BT_BAP_BCAST_SOURCE, bap_bcast_set_state,
 			bap_bcast_get_state,
-			bap_bcast_config, NULL, bap_bcast_enable,
+			bap_bcast_config, bap_bcast_qos, bap_bcast_src_enable,
 			bap_bcast_start, bap_bcast_disable, NULL,
 			bap_bcast_metadata, bap_bcast_src_get_dir,
 			bap_bcast_get_location,
diff --git a/unit/test-bap.c b/unit/test-bap.c
index 46ee0e4e5..10f9e348c 100644
--- a/unit/test-bap.c
+++ b/unit/test-bap.c
@@ -547,10 +547,10 @@  static void bsrc_state(struct bt_bap_stream *stream, uint8_t old_state,
 	struct test_data *data = user_data;
 
 	switch (new_state) {
-	case BT_BAP_STREAM_STATE_QOS:
+	case BT_BAP_STREAM_STATE_CONFIG:
 		bt_bap_stream_enable(stream, true, NULL, NULL, NULL);
 		break;
-	case BT_BAP_STREAM_STATE_CONFIG:
+	case BT_BAP_STREAM_STATE_ENABLING:
 		data->base = bt_bap_stream_get_base(stream);
 
 		g_assert(data->base);