Diff between f086b3d27c4141d45017342f3450a3d078cc4d27 and 2c0c323d08357a4ff3065fcd49fee0c83b5835cd

Changed Files

File Additions Deletions Status
profiles/battery/battery.c +12 -7 modified

Full Patch

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
@@ -91,16 +91,19 @@ static void batt_reset(struct batt *batt)
 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);
 	}
 }
@@ -111,6 +114,8 @@ 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) {
+		if (!length)
+			return;
 		parse_battery_level(batt, value);
 	} else {
 		g_assert_not_reached();