diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c
index 5be78ab..2f5be48 100644
--- a/profiles/battery/battery.c
+++ b/profiles/battery/battery.c
static void parse_battery_level(struct batt *batt,
const uint8_t *value)
{
- uint8_t percentage;
+ uint8_t percentage = value[0];
+
+ DBG("Battery Level updated: %d%%", percentage);
+
+ if (!batt->battery) {
+ free(batt->initial_value);
+ batt->initial_value = util_memdup(value, 1);
+ DBG("Battery not yet registered");
+ return;
+ }
- percentage = value[0];
if (batt->percentage != percentage) {
batt->percentage = percentage;
- DBG("Battery Level updated: %d%%", percentage);
- if (!batt->battery) {
- warn("Trying to update an unregistered battery");
- return;
- }
btd_battery_update(batt->battery, batt->percentage);
}
}
struct batt *batt = user_data;
if (value_handle == batt->batt_level_io_handle) {
+ if (!length)
+ return;
parse_battery_level(batt, value);
} else {
g_assert_not_reached();