diff options
author | Pete Johanson <peter@peterjohanson.com> | 2020-06-30 00:31:09 -0400 |
---|---|---|
committer | Pete Johanson <peter@peterjohanson.com> | 2020-06-30 00:31:09 -0400 |
commit | 9a991bf019d6f723bc4230822852efa78a05be49 (patch) | |
tree | 5c6604f146502a9f4886231bb0c3b39d7646888f /app/src/behaviors/behavior_hid.c | |
parent | 22238d24de3a25cb9242330eba568294c7937c63 (diff) |
Initial event manager work, and two first events.
* Add initial event manager implementation,
roughly mimicking Nordic's API.
* Add `position_state_changed` and
`keycode_state_changed` events.
* Hook up HID and keymap to new events
instead of using behaviour global event
crazy.
Diffstat (limited to 'app/src/behaviors/behavior_hid.c')
-rw-r--r-- | app/src/behaviors/behavior_hid.c | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/app/src/behaviors/behavior_hid.c b/app/src/behaviors/behavior_hid.c index 1ac7404..b901450 100644 --- a/app/src/behaviors/behavior_hid.c +++ b/app/src/behaviors/behavior_hid.c @@ -13,18 +13,16 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); +#include <zmk/event-manager.h> +#include <zmk/events/keycode-state-changed.h> #include <zmk/hid.h> #include <zmk/endpoints.h> struct behavior_hid_config { }; struct behavior_hid_data { }; -static int behavior_hid_init(struct device *dev) -{ - return 0; -}; -static int on_keycode_pressed(struct device *dev, u8_t usage_page, u32_t keycode) +static int behaviour_hid_keycode_pressed(u8_t usage_page, u32_t keycode) { int err; LOG_DBG("keycode %d", keycode); @@ -49,7 +47,7 @@ static int on_keycode_pressed(struct device *dev, u8_t usage_page, u32_t keycode return zmk_endpoints_send_report(usage_page); } -static int on_keycode_released(struct device *dev, u8_t usage_page, u32_t keycode) +static int behaviour_hid_keycode_released(u8_t usage_page, u32_t keycode) { int err; LOG_DBG("keycode %d", keycode); @@ -73,6 +71,28 @@ static int on_keycode_released(struct device *dev, u8_t usage_page, u32_t keycod return zmk_endpoints_send_report(usage_page); } + +int behavior_hid_listener(const struct zmk_event_header *eh) +{ + if (is_keycode_state_changed(eh)) { + const struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + if (ev->state) { + behaviour_hid_keycode_pressed(ev->usage_page, ev->keycode); + } else { + behaviour_hid_keycode_released(ev->usage_page, ev->keycode); + } + } + return 0; +} + +ZMK_LISTENER(behavior_hid, behavior_hid_listener); +ZMK_SUBSCRIPTION(behavior_hid, keycode_state_changed); + +static int behavior_hid_init(struct device *dev) +{ + return 0; +}; + static int on_modifiers_pressed(struct device *dev, zmk_mod_flags modifiers) { LOG_DBG("modifiers %d", modifiers); @@ -90,13 +110,10 @@ static int on_modifiers_released(struct device *dev, zmk_mod_flags modifiers) } static const struct behavior_driver_api behavior_hid_driver_api = { - .keycode_pressed = on_keycode_pressed, - .keycode_released = on_keycode_released, .modifiers_pressed = on_modifiers_pressed, .modifiers_released = on_modifiers_released }; - static const struct behavior_hid_config behavior_hid_config = {}; static struct behavior_hid_data behavior_hid_data; |