feat(ble): Only update BAS when active
Subscribes to the activity changing event, will stop the battery work timer when in idle or deep sleep, restart when board goes active
This commit is contained in:
parent
84b93350b8
commit
6276e973d5
1 changed files with 29 additions and 2 deletions
|
@ -18,6 +18,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
#include <zmk/event_manager.h>
|
#include <zmk/event_manager.h>
|
||||||
#include <zmk/battery.h>
|
#include <zmk/battery.h>
|
||||||
#include <zmk/events/battery_state_changed.h>
|
#include <zmk/events/battery_state_changed.h>
|
||||||
|
#include <zmk/events/activity_state_changed.h>
|
||||||
|
#include <zmk/activity.h>
|
||||||
#include <zmk/workqueue.h>
|
#include <zmk/workqueue.h>
|
||||||
|
|
||||||
static uint8_t last_state_of_charge = 0;
|
static uint8_t last_state_of_charge = 0;
|
||||||
|
@ -84,6 +86,10 @@ static void zmk_battery_timer(struct k_timer *timer) {
|
||||||
|
|
||||||
K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL);
|
K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL);
|
||||||
|
|
||||||
|
static void zmk_battery_start_reporting() {
|
||||||
|
k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL));
|
||||||
|
}
|
||||||
|
|
||||||
static int zmk_battery_init(const struct device *_arg) {
|
static int zmk_battery_init(const struct device *_arg) {
|
||||||
#if !DT_HAS_CHOSEN(zmk_battery)
|
#if !DT_HAS_CHOSEN(zmk_battery)
|
||||||
battery = device_get_binding("BATTERY");
|
battery = device_get_binding("BATTERY");
|
||||||
|
@ -100,9 +106,30 @@ static int zmk_battery_init(const struct device *_arg) {
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
k_timer_start(&battery_timer, K_NO_WAIT, K_SECONDS(CONFIG_ZMK_BATTERY_REPORT_INTERVAL));
|
zmk_battery_start_reporting();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int battery_event_listener(const zmk_event_t *eh) {
|
||||||
|
|
||||||
|
if (as_zmk_activity_state_changed(eh)) {
|
||||||
|
switch (zmk_activity_get_state()) {
|
||||||
|
case ZMK_ACTIVITY_ACTIVE:
|
||||||
|
zmk_battery_start_reporting();
|
||||||
|
return 0;
|
||||||
|
case ZMK_ACTIVITY_IDLE:
|
||||||
|
case ZMK_ACTIVITY_SLEEP:
|
||||||
|
k_timer_stop(&battery_timer);
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZMK_LISTENER(battery, battery_event_listener);
|
||||||
|
|
||||||
|
ZMK_SUBSCRIPTION(battery, zmk_activity_state_changed);
|
||||||
|
|
||||||
SYS_INIT(zmk_battery_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);
|
SYS_INIT(zmk_battery_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);
|
||||||
|
|
Loading…
Add table
Reference in a new issue