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