summaryrefslogtreecommitdiff
path: root/app/src/behaviors/behavior_ext_power.c
diff options
context:
space:
mode:
authorPete Johanson <peter@peterjohanson.com>2021-01-20 11:00:38 -0500
committerPete Johanson <peter@peterjohanson.com>2021-02-09 01:27:50 -0500
commite6f168d6dfe0a27407a7229a549f2dbab37b0f2d (patch)
treed3a8a7c27e52f9a91f583cd34d4a81fca2f85160 /app/src/behaviors/behavior_ext_power.c
parentbb2c478af915616640d78ae9ba984fbf1f817185 (diff)
refactor(behaviors): Convert state dependent params.
* Allow each behavior to map a relative binding, e.g. "toggle", to an absolute one, e.g. "on", before being invoked.
Diffstat (limited to 'app/src/behaviors/behavior_ext_power.c')
-rw-r--r--app/src/behaviors/behavior_ext_power.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/app/src/behaviors/behavior_ext_power.c b/app/src/behaviors/behavior_ext_power.c
index 659cde5..3ce1e74 100644
--- a/app/src/behaviors/behavior_ext_power.c
+++ b/app/src/behaviors/behavior_ext_power.c
@@ -18,6 +18,22 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
+static int
+on_keymap_binding_convert_central_state_dependent_params(struct zmk_behavior_binding *binding,
+ struct zmk_behavior_binding_event event) {
+ const struct device *ext_power = device_get_binding("EXT_POWER");
+ if (ext_power == NULL) {
+ LOG_ERR("Unable to retrieve ext_power device: %d", binding->param1);
+ return -EIO;
+ }
+
+ if (binding->param1 == EXT_POWER_TOGGLE_CMD) {
+ binding->param1 = ext_power_get(ext_power) > 0 ? EXT_POWER_OFF_CMD : EXT_POWER_ON_CMD;
+ }
+
+ return 0;
+}
+
static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding,
struct zmk_behavior_binding_event event) {
const struct device *ext_power = device_get_binding("EXT_POWER");
@@ -51,6 +67,8 @@ static int on_keymap_binding_released(struct zmk_behavior_binding *binding,
static int behavior_ext_power_init(const struct device *dev) { return 0; };
static const struct behavior_driver_api behavior_ext_power_driver_api = {
+ .binding_convert_central_state_dependent_params =
+ on_keymap_binding_convert_central_state_dependent_params,
.binding_pressed = on_keymap_binding_pressed,
.binding_released = on_keymap_binding_released,
};