aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/drivers/battery.md22
-rw-r--r--drivers/battery/battery.c10
-rw-r--r--drivers/battery/battery.h12
3 files changed, 44 insertions, 0 deletions
diff --git a/docs/drivers/battery.md b/docs/drivers/battery.md
index b1f75c1156..0bc8e5aec9 100644
--- a/docs/drivers/battery.md
+++ b/docs/drivers/battery.md
@@ -49,3 +49,25 @@ Sample battery level.
#### Return Value {#api-battery-get-percent-return}
The battery percentage, in the range 0-100.
+
+## Callbacks
+
+### `void battery_percent_changed_user(uint8_t level)` {#api-battery-percent-changed-user}
+
+User hook called when battery level changed.
+
+### Arguments {#api-battery-percent-changed-user-arguments}
+
+ - `uint8_t level`
+ The battery percentage, in the range 0-100.
+
+---
+
+### `void battery_percent_changed_kb(uint8_t level)` {#api-battery-percent-changed-kb}
+
+Keyboard hook called when battery level changed.
+
+### Arguments {#api-battery-percent-changed-kb-arguments}
+
+ - `uint8_t level`
+ The battery percentage, in the range 0-100.
diff --git a/drivers/battery/battery.c b/drivers/battery/battery.c
index 65497399e8..faf3c5a214 100644
--- a/drivers/battery/battery.c
+++ b/drivers/battery/battery.c
@@ -17,11 +17,21 @@ void battery_init(void) {
last_bat_level = battery_driver_sample_percent();
}
+__attribute__((weak)) void battery_percent_changed_user(uint8_t level) {}
+__attribute__((weak)) void battery_percent_changed_kb(uint8_t level) {}
+
+static void handle_percent_changed(void) {
+ battery_percent_changed_user(last_bat_level);
+ battery_percent_changed_kb(last_bat_level);
+}
+
void battery_task(void) {
static uint32_t bat_timer = 0;
if (timer_elapsed32(bat_timer) > BATTERY_SAMPLE_INTERVAL) {
last_bat_level = battery_driver_sample_percent();
+ handle_percent_changed();
+
bat_timer = timer_read32();
}
}
diff --git a/drivers/battery/battery.h b/drivers/battery/battery.h
index 831b1f07e5..0985723eaa 100644
--- a/drivers/battery/battery.h
+++ b/drivers/battery/battery.h
@@ -31,4 +31,16 @@ void battery_task(void);
*/
uint8_t battery_get_percent(void);
+/**
+ * \brief user hook called when battery level changed.
+ *
+ */
+void battery_percent_changed_user(uint8_t level);
+
+/**
+ * \brief keyboard hook called when battery level changed.
+ *
+ */
+void battery_percent_changed_kb(uint8_t level);
+
/** \} */