Re: [PATCH BlueZ 4/4] gatt: Fix assuming service changed has been subscribed

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

 



Hi Luiz

On Sat, Jan 9, 2021 at 2:48 AM Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
>
> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>
> Unfortunately assuming service changed has been subscribed may cause
> indication to time out in some peripherals (Logitech M720 Triathlon, Mx
> Anywhere 2, Lenovo Mice N700, RAPOO BleMouse and Microsoft Designer
> Mouse) even though the expect actually mandates that the client responds
> with confirmation these peripherals just ignores it completely which
> leads them to be disconnected whenever bluetoothd is restarted or the
> system reboots.
> ---
>  src/device.c        | 11 ++---------
>  src/gatt-database.c |  2 +-
>  2 files changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/src/device.c b/src/device.c
> index fe885aa64..af13badfc 100644
> --- a/src/device.c
> +++ b/src/device.c
> @@ -5831,18 +5831,11 @@ void device_load_svc_chng_ccc(struct btd_device *device, uint16_t *ccc_le,
>         key_file = g_key_file_new();
>         g_key_file_load_from_file(key_file, filename, 0, NULL);
>
> -       /*
> -        * If there is no "ServiceChanged" section we may be loading data from
> -        * old version which did not persist Service Changed CCC values. Let's
> -        * check if we are bonded and assume indications were enabled by peer
> -        * in such case - it should have done this anyway.
> -        */
>         if (!g_key_file_has_group(key_file, "ServiceChanged")) {
>                 if (ccc_le)
> -                       *ccc_le = device->le_state.bonded ? 0x0002 : 0x0000;
> +                       *ccc_le = 0x0000;
>                 if (ccc_bredr)
> -                       *ccc_bredr = device->bredr_state.bonded ?
> -                                                       0x0002 : 0x0000;
> +                       *ccc_bredr = 0x0000;
>                 g_key_file_free(key_file);
>                 return;
>         }
> diff --git a/src/gatt-database.c b/src/gatt-database.c
> index b7d2bea1d..d99604826 100644
> --- a/src/gatt-database.c
> +++ b/src/gatt-database.c
> @@ -333,7 +333,7 @@ static void att_disconnected(int err, void *user_data)
>                 handle = gatt_db_attribute_get_handle(state->db->svc_chngd_ccc);
>
>                 ccc = find_ccc_state(state, handle);
> -               if (ccc)
> +               if (ccc && ccc->value)
>                         device_store_svc_chng_ccc(device, state->bdaddr_type,
>                                                                 ccc->value);
>
> --
> 2.26.2
>

Was this patch is merged?

Regards
Sathish N



[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