Re: [PATCH] [BlueZ] adapter: Fix airpod device pair fail

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

 



Hi,

On Wed, Jan 3, 2024 at 5:14 AM <clancy_shang@xxxxxxx> wrote:
>
> From: Clancy Shang <clancy.shang@xxxxxxxxxxx>
>
> Airpod is performing inquiry scans in BR/EDR and advertising in an
> unconnectable mode with the same public address at the same time.
> with this feature, when found airpod device, set the bredr support,
> fix it pairs fail bug.
>
> Signed-off-by: Clancy Shang <clancy.shang@xxxxxxxxxxx>
> ---
>  src/adapter.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/src/adapter.c b/src/adapter.c
> index 022390f0d..71f7ed86d 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -7066,6 +7066,24 @@ static void adapter_msd_notify(struct btd_adapter *adapter,
>         }
>  }
>
> +#define APPLE_INC_VENDOR_ID 0x004c
> +
> +static bool eir_msd_is_apple_inc(GSList *msd_list)
> +{
> +       GSList *msd_l, *msd_next;
> +
> +       for (msd_l = msd_list; msd_l != NULL; msd_l = msd_next) {
> +               const struct eir_msd *msd = msd_l->data;
> +
> +               msd_next = g_slist_next(msd_l);
> +
> +               if (msd->company == APPLE_INC_VENDOR_ID)
> +                       return true;
> +       }
> +
> +       return false;
> +}
> +
>  static bool is_filter_match(GSList *discovery_filter, struct eir_data *eir_data,
>                                                                 int8_t rssi)
>  {
> @@ -7281,6 +7299,13 @@ void btd_adapter_device_found(struct btd_adapter *adapter,
>                 device_update_last_seen(dev, BDADDR_BREDR, !not_connectable);
>         }
>
> +       if (eir_msd_is_apple_inc(eir_data.msd_list) &&
> +                                       (not_connectable == true) &&
> +                                       (bdaddr_type == BDADDR_LE_PUBLIC)) {
> +               device_set_bredr_support(dev);
> +               device_update_last_seen(dev, BDADDR_BREDR, true);
> +       }

NAK, we are not going to introduce device specific policy hardcoded in
the code like this, if you really want to update last seen then you
either need a dedicated driver that handles Apple UUID on its own
plugin, or make the policy plugin register a driver for it, that said
there is a flag for that indicates BR/EDR is supported not sure why
apple it no advertising using it?

>         if (eir_data.name != NULL && eir_data.name_complete)
>                 device_store_cached_name(dev, eir_data.name);
>
> --
> 2.25.1
>
>


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