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

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

 



Hi Silviu,

On Thu, May 23, 2024 at 6:46 AM Silviu Florian Barbulescu
<silviu.barbulescu@xxxxxxx> wrote:
>
> Hi Luiz,
>
> > -----Original Message-----
> > From: Luiz Augusto von Dentz <luiz.dentz@xxxxxxxxx>
> > Sent: Monday, May 20, 2024 7:40 PM
> > To: Silviu Florian Barbulescu <silviu.barbulescu@xxxxxxx>
> > Cc: linux-bluetooth@xxxxxxxxxxxxxxx; Mihai-Octavian Urzica <mihai-
> > octavian.urzica@xxxxxxx>; Vlad Pruteanu <vlad.pruteanu@xxxxxxx>; Andrei
> > Istodorescu <andrei.istodorescu@xxxxxxx>; Iulia Tanasescu
> > <iulia.tanasescu@xxxxxxx>
> > 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@xxxxxxx> 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
>


-- 
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