Re: [PATCH v3 2/5] bap: Fix source+sink endpoint registration

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

 



Hi Silviu,

On Thu, Nov 2, 2023 at 11:58 AM Silviu Florian Barbulescu
<silviu.barbulescu@xxxxxxx> wrote:
>
> From: Claudia Draghicescu <claudia.rosu@xxxxxxx>
>
> When registering both sink and source endpoints,
> the register endpoint method call results in 2 remote endpoints for each
> scanned broadcast source

There seems to be 2 patches with the same subject?

> ---
>  profiles/audio/bap.c | 27 +++++++++++++++------------
>  1 file changed, 15 insertions(+), 12 deletions(-)
>
> diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c
> index b74498c4c..a84181e1a 100644
> --- a/profiles/audio/bap.c
> +++ b/profiles/audio/bap.c
> @@ -1050,7 +1050,7 @@ static struct bap_ep *ep_register_bcast(struct bap_data *data,
>         const char *suffix;
>         struct match_ep match = { lpac, rpac };
>
> -       switch (bt_bap_pac_get_type(rpac)) {
> +       switch (bt_bap_pac_get_type(lpac)) {
>         case BT_BAP_BCAST_SOURCE:
>         case BT_BAP_BCAST_SINK:
>                 queue = data->bcast;
> @@ -1073,13 +1073,13 @@ static struct bap_ep *ep_register_bcast(struct bap_data *data,
>         if (device)
>                 ep->data->device = device;
>
> -       switch (bt_bap_pac_get_type(rpac)) {
> -       case BT_BAP_BCAST_SINK:
> +       switch (bt_bap_pac_get_type(lpac)) {
> +       case BT_BAP_BCAST_SOURCE:
>                 err = asprintf(&ep->path, "%s/pac_%s%d",
>                                 adapter_get_path(adapter), suffix, i);
>                 ep->base = new0(struct iovec, 1);
>                 break;
> -       case BT_BAP_BCAST_SOURCE:
> +       case BT_BAP_BCAST_SINK:
>                 err = asprintf(&ep->path, "%s/pac_%s%d",
>                                 device_get_path(device), suffix, i);
>                 ep->base = new0(struct iovec, 1);
> @@ -1101,7 +1101,10 @@ static struct bap_ep *ep_register_bcast(struct bap_data *data,
>                 ep_free(ep);
>                 return NULL;
>         }
> -       bt_bap_pac_set_user_data(rpac, ep->path);
> +       if (rpac)
> +               bt_bap_pac_set_user_data(rpac, ep->path);
> +       else
> +               bt_bap_pac_set_user_data(lpac, ep->path);

It is probably a good idea to add comment here why it is necessary to
check if rpac is set.

>         DBG("ep %p lpac %p rpac %p path %s", ep, ep->lpac, ep->rpac, ep->path);
>
> @@ -1792,7 +1795,7 @@ static void bap_listen_io_broadcast(struct bap_data *data, struct bap_ep *ep,
>                 error("%s", err->message);
>                 g_error_free(err);
>         }
> -
> +       ep->io = io;
>         ep->data->listen_io = io;
>
>  }
> @@ -1958,12 +1961,12 @@ static void pac_added_broadcast(struct bt_bap_pac *pac, void *user_data)
>  {
>         struct bap_data *data = user_data;
>
> -       if (bt_bap_pac_get_type(pac) == BT_BAP_BCAST_SOURCE)
> -               bt_bap_foreach_pac(data->bap, BT_BAP_BCAST_SOURCE,
> -                                               pac_found_bcast, data);
> -       else if (bt_bap_pac_get_type(pac) == BT_BAP_BCAST_SINK)
> -               bt_bap_foreach_pac(data->bap, BT_BAP_BCAST_SINK,
> -                                               pac_found_bcast, data);
> +       if (bt_bap_pac_bcast_is_local(data->bap, pac) &&
> +               (bt_bap_pac_get_type(pac) == BT_BAP_BCAST_SOURCE))
> +               pac_found_bcast(pac, NULL, user_data);

Im not really sure we need bt_bap_pac_bcast_is_local, can't we just
assume it based on BT_BAP_BCAST_SOURCE?

> +       else
> +               bt_bap_foreach_pac(data->bap, bt_bap_pac_get_type(pac),
> +                                       pac_found_bcast, data);
>  }
>
>  static bool ep_match_pac(const void *data, const void *match_data)
> --
> 2.39.2
>


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