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

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

 



Hi Bastien,

That's a good idea. I updated it in v2.


On Tue, Mar 30, 2021 at 10:16 AM Bastien Nocera <hadess@xxxxxxxxxx> wrote:
>
> On Tue, 2021-03-30 at 10:09 -0700, Sonny Sasaka 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 */);
>
> If you need to do this, that means that you should probably declare an
> enum instead.
>
> This is old, but still relevant:
> https://blog.ometer.com/2011/01/20/boolean-parameters-are-wrong/
>
> >         g_free (batt->initial_value);
> >         batt->initial_value = NULL;
> >
>
>



[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