summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/include/zmk/events/battery_state_changed.h2
-rw-r--r--app/src/battery.c24
2 files changed, 19 insertions, 7 deletions
diff --git a/app/include/zmk/events/battery_state_changed.h b/app/include/zmk/events/battery_state_changed.h
index 6a003d8..c03f647 100644
--- a/app/include/zmk/events/battery_state_changed.h
+++ b/app/include/zmk/events/battery_state_changed.h
@@ -14,4 +14,6 @@ struct zmk_battery_state_changed {
uint8_t state_of_charge;
};
+int32_t zmk_battery_state_of_charge();
+
ZMK_EVENT_DECLARE(zmk_battery_state_changed); \ No newline at end of file
diff --git a/app/src/battery.c b/app/src/battery.c
index 5a7c57b..8caa024 100644
--- a/app/src/battery.c
+++ b/app/src/battery.c
@@ -19,6 +19,10 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
const struct device *battery;
+static int32_t last_state_of_charge = 0;
+
+int32_t zmk_battery_state_of_charge() { return last_state_of_charge; }
+
static int zmk_battery_update(const struct device *battery) {
struct sensor_value state_of_charge;
@@ -36,17 +40,23 @@ static int zmk_battery_update(const struct device *battery) {
return rc;
}
- LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1);
+ if (last_state_of_charge != state_of_charge.val1) {
+ LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1);
- rc = bt_bas_set_battery_level(state_of_charge.val1);
+ rc = bt_bas_set_battery_level(state_of_charge.val1);
- if (rc != 0) {
- LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc);
- return rc;
+ if (rc != 0) {
+ LOG_WRN("Failed to set BAS GATT battery level (err %d)", rc);
+ return rc;
+ }
+
+ rc = ZMK_EVENT_RAISE(new_zmk_battery_state_changed(
+ (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1}));
+
+ last_state_of_charge = state_of_charge.val1;
}
- return ZMK_EVENT_RAISE(new_zmk_battery_state_changed(
- (struct zmk_battery_state_changed){.state_of_charge = state_of_charge.val1}));
+ return rc;
}
static void zmk_battery_work(struct k_work *work) {