Re: [PATCH BlueZ] profiles/battery: Always update initial battery value

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

 



Hi Sonny,

On Tue, Mar 30, 2021 at 10:12 AM Sonny Sasaka <sonnysasaka@xxxxxxxxxxxx> wrote:
>
> Due to cache in gatt db, bluetoothd fails to update publish the battery
> value after reconnection when the battery value does not change compared
> to before reconnection. For initial battery value, we should update the
> value to D-Bus regardless of the cache value.
>
> ---
>  profiles/battery/battery.c | 9 +++++----
>  1 file changed, 5 insertions(+), 4 deletions(-)
>
> diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
> index 81f849d57..0f8d6ef18 100644
> --- a/profiles/battery/battery.c
> +++ b/profiles/battery/battery.c
> @@ -88,12 +88,13 @@ static void batt_reset(struct batt *batt)
>  }
>
>  static void parse_battery_level(struct batt *batt,
> -                               const uint8_t *value)
> +                               const uint8_t *value,
> +                               bool force_update)
>  {
>         uint8_t percentage;
>
>         percentage = value[0];
> -       if (batt->percentage != percentage) {
> +       if (force_update || batt->percentage != percentage) {
>                 batt->percentage = percentage;
>                 DBG("Battery Level updated: %d%%", percentage);
>                 if (!batt->battery) {
> @@ -110,7 +111,7 @@ static void batt_io_value_cb(uint16_t value_handle, const uint8_t *value,
>         struct batt *batt = user_data;
>
>         if (value_handle == batt->batt_level_io_handle) {
> -               parse_battery_level(batt, value);
> +               parse_battery_level(batt, value, false /* force_update */);
>         } else {
>                 g_assert_not_reached();
>         }
> @@ -134,7 +135,7 @@ static void batt_io_ccc_written_cb(uint16_t att_ecode, void *user_data)
>                 return;
>         }
>
> -       parse_battery_level(batt, batt->initial_value);
> +       parse_battery_level(batt, batt->initial_value, true /* force_update */);

I guess it would have been better to reset the initial_value on disconnect.

>         g_free (batt->initial_value);
>         batt->initial_value = NULL;
>
> --
> 2.29.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