From af967667b0e139a963178e63028c7be341cade9e Mon Sep 17 00:00:00 2001 From: Genteure Date: Fri, 1 Aug 2025 05:51:21 +0800 Subject: [PATCH] fix(core): Correctly sync BAS battery level (#2977) Fix BAS battery level showing 100% if controller boots up with 0% battery charge. Closes zmkfirmware/zmk#2972 --- app/src/battery.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/app/src/battery.c b/app/src/battery.c index ae79d5f79..811baf8e9 100644 --- a/app/src/battery.c +++ b/app/src/battery.c @@ -93,7 +93,18 @@ static int zmk_battery_update(const struct device *battery) { if (last_state_of_charge != state_of_charge.val1) { last_state_of_charge = state_of_charge.val1; + + rc = raise_zmk_battery_state_changed( + (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge}); + + if (rc != 0) { + LOG_ERR("Failed to raise battery state changed event: %d", rc); + return rc; + } + } + #if IS_ENABLED(CONFIG_BT_BAS) + if (bt_bas_get_battery_level() != last_state_of_charge) { LOG_DBG("Setting BAS GATT battery level to %d.", last_state_of_charge); rc = bt_bas_set_battery_level(last_state_of_charge); @@ -102,10 +113,8 @@ static int zmk_battery_update(const struct device *battery) { LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc); return rc; } -#endif - rc = raise_zmk_battery_state_changed( - (struct zmk_battery_state_changed){.state_of_charge = last_state_of_charge}); } +#endif return rc; }