fix(pm): Fixes for dedicated on/off on peripherals.

* Add new flag to differentiate soft off on peripherals that
  is invoked by split GATT svc and dedicated additional ones
  tied to GPIO pin.
This commit is contained in:
Peter Johanson
2024-03-25 02:39:54 -07:00
committed by Pete Johanson
parent 41d81801ed
commit 7e7110d85f
4 changed files with 19 additions and 9 deletions

View File

@@ -16,6 +16,7 @@
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
struct behavior_soft_off_config {
bool split_peripheral_turn_off_on_press;
uint32_t hold_time_ms;
};
@@ -23,18 +24,22 @@ struct behavior_soft_off_data {
uint32_t press_start;
};
#define IS_SPLIT_PERIPHERAL \
(IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL))
static int behavior_soft_off_init(const struct device *dev) { return 0; };
static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding,
struct zmk_behavior_binding_event event) {
const struct device *dev = zmk_behavior_get_binding(binding->behavior_dev);
struct behavior_soft_off_data *data = dev->data;
const struct behavior_soft_off_config *config = dev->config;
#if IS_ENABLED(CONFIG_ZMK_SPLIT) && !IS_ENABLED(CONFIG_ZMK_SPLIT_ROLE_CENTRAL)
zmk_pm_soft_off();
#else
data->press_start = k_uptime_get();
#endif
if (IS_SPLIT_PERIPHERAL && config->split_peripheral_turn_off_on_press) {
zmk_pm_soft_off();
} else {
data->press_start = k_uptime_get();
}
return ZMK_BEHAVIOR_OPAQUE;
}
@@ -71,6 +76,8 @@ static const struct behavior_driver_api behavior_soft_off_driver_api = {
#define BSO_INST(n) \
static const struct behavior_soft_off_config bso_config_##n = { \
.hold_time_ms = DT_INST_PROP_OR(n, hold_time_ms, 0), \
.split_peripheral_turn_off_on_press = \
DT_INST_PROP_OR(n, split_peripheral_off_on_press, false), \
}; \
static struct behavior_soft_off_data bso_data_##n = {}; \
BEHAVIOR_DT_INST_DEFINE(0, behavior_soft_off_init, NULL, &bso_data_##n, &bso_config_##n, \