From 9a991bf019d6f723bc4230822852efa78a05be49 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 00:31:09 -0400 Subject: [PATCH 1/7] 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. --- app/CMakeLists.txt | 8 ++- app/Kconfig | 3 + app/dts/behaviors.dtsi | 1 - app/dts/behaviors/keymap.dtsi | 9 --- .../behaviors/zmk,behavior-keymap.yaml | 8 --- app/include/linker/zmk-events.ld | 16 +++++ app/include/linker/zmk-linker-defs.h | 6 ++ app/include/zmk/event-manager.h | 65 +++++++++++++++++++ .../zmk/events/keycode-state-changed.h | 13 ++++ .../zmk/events/position-state-changed.h | 12 ++++ app/src/behaviors/behavior_hid.c | 35 +++++++--- app/src/behaviors/behavior_key_press.c | 19 +++++- app/src/behaviors/behavior_keymap.c | 50 -------------- app/src/behaviors/behavior_mod_tap.c | 43 ++++++------ app/src/event_manager.c | 32 +++++++++ app/src/events/keycode_state_changed.c | 6 ++ app/src/events/position_state_changed.c | 6 ++ app/src/keymap.c | 16 +++++ app/src/kscan.c | 13 ++-- 19 files changed, 249 insertions(+), 112 deletions(-) delete mode 100644 app/dts/behaviors/keymap.dtsi delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-keymap.yaml create mode 100644 app/include/linker/zmk-events.ld create mode 100644 app/include/linker/zmk-linker-defs.h create mode 100644 app/include/zmk/event-manager.h create mode 100644 app/include/zmk/events/keycode-state-changed.h create mode 100644 app/include/zmk/events/position-state-changed.h delete mode 100644 app/src/behaviors/behavior_keymap.c create mode 100644 app/src/event_manager.c create mode 100644 app/src/events/keycode_state_changed.c create mode 100644 app/src/events/position_state_changed.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 4dcd2f6a..a3c20df0 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -18,11 +18,11 @@ include(cmake/zmk_config.cmake) find_package(Zephyr REQUIRED HINTS ../zephyr) project(zmk) - if(EXISTS ${KEYMAP_DIR}/keymap.c) - target_sources(app PRIVATE ${KEYMAP_DIR}/keymap.c) + target_sources(app PRIVATE ${KEYMAP_DIR}/keymap.c) endif() +zephyr_linker_sources(RODATA include/linker/zmk-events.ld) # Add your source file to the "app" target. This must come after # find_package(Zephyr) which defines the target. @@ -32,7 +32,9 @@ target_sources(app PRIVATE src/matrix_transform.c) target_sources(app PRIVATE src/events.c) target_sources(app PRIVATE src/keymap.c) target_sources(app PRIVATE src/hid.c) -target_sources(app PRIVATE src/behaviors/behavior_keymap.c) +target_sources(app PRIVATE src/event_manager.c) +target_sources(app PRIVATE src/events/keycode_state_changed.c) +target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/behaviors/behavior_hid.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) diff --git a/app/Kconfig b/app/Kconfig index 7871b919..45481b15 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -73,6 +73,9 @@ config ZMK_ACTION_MOD_TAP endmenu +config HEAP_MEM_POOL_SIZE + default 200 + module = ZMK module-str = zmk source "subsys/logging/Kconfig.template.log_config" diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index cd5a3ab0..7a4f8fbc 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -3,5 +3,4 @@ #include #include #include -#include #include \ No newline at end of file diff --git a/app/dts/behaviors/keymap.dtsi b/app/dts/behaviors/keymap.dtsi deleted file mode 100644 index ec434d5f..00000000 --- a/app/dts/behaviors/keymap.dtsi +++ /dev/null @@ -1,9 +0,0 @@ -/ { - behaviors { - keymap_behavior: behavior_keymap { - compatible = "zmk,behavior-keymap", "zmk,behavior-global"; - label = "KEYMAP"; - #binding-cells = <0>; - }; - }; -}; diff --git a/app/dts/bindings/behaviors/zmk,behavior-keymap.yaml b/app/dts/bindings/behaviors/zmk,behavior-keymap.yaml deleted file mode 100644 index 1d8a51fc..00000000 --- a/app/dts/bindings/behaviors/zmk,behavior-keymap.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2020, Pete Johanson -# SPDX-License-Identifier: MIT - -description: Keymap Behavior - -compatible: "zmk,behavior-keymap" - -include: zero_param.yaml diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld new file mode 100644 index 00000000..f1ee9f76 --- /dev/null +++ b/app/include/linker/zmk-events.ld @@ -0,0 +1,16 @@ +#include + + SECTION_PROLOGUE(event_types,,) + { + __event_type_start = .; \ + KEEP(*(".event_type")); \ + __event_type_end = .; \ + } GROUP_LINK_IN(ROMABLE_REGION) + + SECTION_PROLOGUE(event_subscriptions,,) + { + __event_subscriptions_start = .; \ + KEEP(*(".event_subscription")); \ + __event_subscriptions_end = .; \ + } GROUP_LINK_IN(ROMABLE_REGION) + diff --git a/app/include/linker/zmk-linker-defs.h b/app/include/linker/zmk-linker-defs.h new file mode 100644 index 00000000..61b67414 --- /dev/null +++ b/app/include/linker/zmk-linker-defs.h @@ -0,0 +1,6 @@ + + +#define→EVENT_TYPE_SECTIONS()→ → → → \ +→ → __event_type_start = .;→ → \ +→ → KEEP(*(".event_type_*"));→ → \ +→ → __event_type_end = .;→→ → \ diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h new file mode 100644 index 00000000..8c05a1bc --- /dev/null +++ b/app/include/zmk/event-manager.h @@ -0,0 +1,65 @@ +#pragma once + +#include +#include +#include + +struct zmk_event_type +{ + const char *name; +}; + +struct zmk_event_header { + const struct zmk_event_type* event; +}; + +typedef int (*zmk_listener_callback_t)(const struct zmk_event_header *eh); +struct zmk_listener +{ + zmk_listener_callback_t callback; +}; + +struct zmk_event_subscription { + const struct zmk_event_type *event_type; + const struct zmk_listener *listener; +}; + +#define ZMK_EVENT_DECLARE(event_type) \ + struct event_type* new_##event_type(); \ + bool is_##event_type(const struct zmk_event_header *eh); \ + const struct event_type* cast_##event_type(const struct zmk_event_header *eh); \ + extern const struct zmk_event_type zmk_event_##event_type; + +#define ZMK_EVENT_IMPL(event_type) \ + const struct zmk_event_type zmk_event_##event_type = { \ + .name = STRINGIFY(event_type) \ + }; \ + const struct zmk_event_type* zmk_event_ref_##event_type __used __attribute__((__section__(".event_type"))) = &zmk_event_##event_type; \ + struct event_type* new_##event_type() { \ + struct event_type* ev = (struct event_type *) k_malloc(sizeof(struct event_type)); \ + ev->header.event = &zmk_event_##event_type; \ + return ev; \ + }; \ + bool is_##event_type(const struct zmk_event_header *eh) { \ + return eh->event == &zmk_event_##event_type; \ + }; \ + const struct event_type* cast_##event_type(const struct zmk_event_header *eh) {\ + return (const struct event_type*)eh; \ + }; + + +#define ZMK_LISTENER(mod, cb) \ + const struct zmk_listener zmk_listener_##mod = { \ + .callback = cb \ + }; + +#define ZMK_SUBSCRIPTION(mod, ev_type) \ + const Z_DECL_ALIGN(struct zmk_event_subscription) _CONCAT(_CONCAT(zmk_event_sub_,mod),ev_type) __used __attribute__((__section__(".event_subscription"))) = { \ + .event_type = &zmk_event_##ev_type, \ + .listener = &zmk_listener_##mod, \ + }; + +#define ZMK_EVENT_RAISE(ev) \ + zmk_event_manager_raise((struct zmk_event_header *)ev); + +int zmk_event_manager_raise(struct zmk_event_header *event); diff --git a/app/include/zmk/events/keycode-state-changed.h b/app/include/zmk/events/keycode-state-changed.h new file mode 100644 index 00000000..48cdddc1 --- /dev/null +++ b/app/include/zmk/events/keycode-state-changed.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include + +struct keycode_state_changed { + struct zmk_event_header header; + u8_t usage_page; + u32_t keycode; + bool state; +}; + +ZMK_EVENT_DECLARE(keycode_state_changed); \ No newline at end of file diff --git a/app/include/zmk/events/position-state-changed.h b/app/include/zmk/events/position-state-changed.h new file mode 100644 index 00000000..190b59db --- /dev/null +++ b/app/include/zmk/events/position-state-changed.h @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +struct position_state_changed { + struct zmk_event_header header; + u32_t position; + bool state; +}; + +ZMK_EVENT_DECLARE(position_state_changed); \ No newline at end of file diff --git a/app/src/behaviors/behavior_hid.c b/app/src/behaviors/behavior_hid.c index 1ac7404a..b9014502 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 +#include #include #include 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; diff --git a/app/src/behaviors/behavior_key_press.c b/app/src/behaviors/behavior_key_press.c index 7213b3c2..34df1c0b 100644 --- a/app/src/behaviors/behavior_key_press.c +++ b/app/src/behaviors/behavior_key_press.c @@ -10,7 +10,8 @@ #include #include -#include +#include +#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -27,15 +28,27 @@ static int behavior_key_press_init(struct device *dev) static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t keycode, u32_t _) { const struct behavior_key_press_config *cfg = dev->config_info; + struct keycode_state_changed *ev; LOG_DBG("position %d usage_page 0x%02X keycode 0x%02X", position, cfg->usage_page, keycode); - return zmk_events_keycode_pressed(cfg->usage_page, keycode); + + ev = new_keycode_state_changed(); + ev->usage_page = cfg->usage_page; + ev->keycode = keycode; + ev->state = true; + return ZMK_EVENT_RAISE(ev); } static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t keycode, u32_t _) { const struct behavior_key_press_config *cfg = dev->config_info; + struct keycode_state_changed *ev; LOG_DBG("position %d usage_page 0x%02X keycode 0x%02X", position, cfg->usage_page, keycode); - return zmk_events_keycode_released(cfg->usage_page, keycode); + + ev = new_keycode_state_changed(); + ev->usage_page = cfg->usage_page; + ev->keycode = keycode; + ev->state = false; + return ZMK_EVENT_RAISE(ev); } static const struct behavior_driver_api behavior_key_press_driver_api = { diff --git a/app/src/behaviors/behavior_keymap.c b/app/src/behaviors/behavior_keymap.c deleted file mode 100644 index 7a06b2fd..00000000 --- a/app/src/behaviors/behavior_keymap.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2020 Peter Johanson - * - * SPDX-License-Identifier: MIT - */ - -#define DT_DRV_COMPAT zmk_behavior_keymap - -#include -#include -#include -#include - -LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); - -#include - -struct behavior_keymap_config { }; -struct behavior_keymap_data { }; - -static int behavior_keymap_init(struct device *dev) -{ - return 0; -}; - -static int on_position_pressed(struct device *dev, u32_t position) -{ - return zmk_keymap_position_state_changed(position, true); -} - -static int on_position_released(struct device *dev, u32_t position) -{ - return zmk_keymap_position_state_changed(position, false); -} - -static const struct behavior_driver_api behavior_keymap_driver_api = { - .position_pressed = on_position_pressed, - .position_released = on_position_released, -}; - - -static const struct behavior_keymap_config behavior_keymap_config = {}; - -static struct behavior_keymap_data behavior_keymap_data; - -DEVICE_AND_API_INIT(behavior_keymap, DT_INST_LABEL(0), behavior_keymap_init, - &behavior_keymap_data, - &behavior_keymap_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_keymap_driver_api); diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index 2e6e3391..c9baff4e 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -10,6 +10,8 @@ #include #include +#include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -19,6 +21,22 @@ struct behavior_mod_tap_data { u16_t pending_press_positions; }; +int behavior_mod_tap_listener(const struct zmk_event_header *eh) +{ + if (is_keycode_state_changed(eh)) { + struct device *dev = device_get_binding(DT_INST_LABEL(0)); + const struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + if (ev->state) { + struct behavior_mod_tap_data *data = dev->driver_data; + data->pending_press_positions = 0; + } + } + return 0; +} + +ZMK_LISTENER(behavior_mod_tap, behavior_mod_tap_listener); +ZMK_SUBSCRIPTION(behavior_mod_tap, keycode_state_changed); + static int behavior_mod_tap_init(struct device *dev) { return 0; @@ -40,7 +58,7 @@ static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t struct behavior_mod_tap_data *data = dev->driver_data; LOG_DBG("mods: %d, keycode: %d", mods, keycode); -zmk_events_modifiers_released(mods); + zmk_events_modifiers_released(mods); if (data->pending_press_positions & BIT(position)) { zmk_events_keycode_pressed(USAGE_KEYPAD, keycode); k_msleep(10); @@ -50,30 +68,9 @@ zmk_events_modifiers_released(mods); return 0; } -static int on_keycode_pressed(struct device *dev, u8_t usage_page, u32_t keycode) -{ - struct behavior_mod_tap_data *data = dev->driver_data; - data->pending_press_positions = 0; - LOG_DBG("pressing: %d", keycode); - return 0; -} - -static int on_keycode_released(struct device *dev, u8_t usage_page, u32_t keycode) -{ - LOG_DBG("releasing: %d", keycode); - return 0; -} - static const struct behavior_driver_api behavior_mod_tap_driver_api = { - // These callbacks are all optional, and define which kinds of events the behavior can handle. - // They can reference local functions defined here, or shared event handlers. .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released, - .keycode_pressed = on_keycode_pressed, - .keycode_released = on_keycode_released - // Other optional callbacks a behavior can implement - // .on_mouse_moved - // .on_sensor_data - Any behaviour that wants to be linked to a censor can implement this behavior }; @@ -81,7 +78,7 @@ static const struct behavior_mod_tap_config behavior_mod_tap_config = {}; static struct behavior_mod_tap_data behavior_mod_tap_data; -DEVICE_AND_API_INIT(behavior_key_press, DT_INST_LABEL(0), behavior_mod_tap_init, +DEVICE_AND_API_INIT(behavior_mod_tap, DT_INST_LABEL(0), behavior_mod_tap_init, &behavior_mod_tap_data, &behavior_mod_tap_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, diff --git a/app/src/event_manager.c b/app/src/event_manager.c new file mode 100644 index 00000000..012d285f --- /dev/null +++ b/app/src/event_manager.c @@ -0,0 +1,32 @@ + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include + +extern struct zmk_event_type* __event_type_start[]; +extern struct zmk_event_type* __event_type_end[]; + +extern struct zmk_event_subscription __event_subscriptions_start[]; +extern struct zmk_event_subscription __event_subscriptions_end[]; + +int zmk_event_manager_raise(struct zmk_event_header *event) +{ + int ret; + struct zmk_event_subscription *ev_sub; + for (ev_sub = __event_subscriptions_start; ev_sub != __event_subscriptions_end; ev_sub++) { + if (ev_sub->event_type == event->event) { + ret = ev_sub->listener->callback(event); + if (ret) { + LOG_DBG("Listener returned an error: %d", ret); + goto release; + } + } + } + +release: + k_free(event); + return ret; +} \ No newline at end of file diff --git a/app/src/events/keycode_state_changed.c b/app/src/events/keycode_state_changed.c new file mode 100644 index 00000000..ae1b4c90 --- /dev/null +++ b/app/src/events/keycode_state_changed.c @@ -0,0 +1,6 @@ + + +#include +#include + +ZMK_EVENT_IMPL(keycode_state_changed); \ No newline at end of file diff --git a/app/src/events/position_state_changed.c b/app/src/events/position_state_changed.c new file mode 100644 index 00000000..d67eedd4 --- /dev/null +++ b/app/src/events/position_state_changed.c @@ -0,0 +1,6 @@ + + +#include +#include + +ZMK_EVENT_IMPL(position_state_changed); \ No newline at end of file diff --git a/app/src/keymap.c b/app/src/keymap.c index f951dd7f..25bcf80e 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -9,6 +9,9 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include +#include + static u32_t zmk_keymap_layer_state = 0; static u8_t zmk_keymap_layer_default = 0; @@ -116,3 +119,16 @@ int zmk_keymap_position_state_changed(u32_t position, bool pressed) return -ENOTSUP; } + +int keymap_listener(const struct zmk_event_header *eh) +{ + if (is_position_state_changed(eh)) { + const struct position_state_changed *ev = cast_position_state_changed(eh); + zmk_keymap_position_state_changed(ev->position, ev->state); + } + return 0; +} + +ZMK_LISTENER(keymap, keymap_listener); +ZMK_SUBSCRIPTION(keymap, position_state_changed); + diff --git a/app/src/kscan.c b/app/src/kscan.c index 29a60199..63713f1f 100644 --- a/app/src/kscan.c +++ b/app/src/kscan.c @@ -12,7 +12,8 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include -#include +#include +#include #define ZMK_KSCAN_EVENT_STATE_PRESSED 0 #define ZMK_KSCAN_EVENT_STATE_RELEASED 1 @@ -50,12 +51,12 @@ void zmk_kscan_process_msgq(struct k_work *item) { bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); u32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); + struct position_state_changed *pos_ev; LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s\n", ev.row, ev.column, position, (pressed ? "true" : "false")); - if (pressed) { - zmk_events_position_pressed(position); - } else { - zmk_events_position_released(position); - } + pos_ev = new_position_state_changed(); + pos_ev->state = pressed; + pos_ev->position = position; + ZMK_EVENT_RAISE(pos_ev); } } From 96ec16da9246c3c7c07986a0c6a2900d3bbfddaa Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 10:43:09 -0400 Subject: [PATCH 2/7] Modifier event, tweaks for linker script. --- app/CMakeLists.txt | 3 +- app/include/linker/zmk-events.ld | 6 --- app/include/zmk/events.h | 6 --- .../zmk/events/keycode-state-changed.h | 12 ++++- .../zmk/events/modifiers-state-changed.h | 22 +++++++++ app/src/behaviors/behavior_hid.c | 46 +++++++++++-------- app/src/behaviors/behavior_mod_tap.c | 13 +++--- app/src/events/modifiers_state_changed.c | 6 +++ 8 files changed, 73 insertions(+), 41 deletions(-) create mode 100644 app/include/zmk/events/modifiers-state-changed.h create mode 100644 app/src/events/modifiers_state_changed.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index a3c20df0..9bfc8d6a 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -33,8 +33,9 @@ target_sources(app PRIVATE src/events.c) target_sources(app PRIVATE src/keymap.c) target_sources(app PRIVATE src/hid.c) target_sources(app PRIVATE src/event_manager.c) -target_sources(app PRIVATE src/events/keycode_state_changed.c) target_sources(app PRIVATE src/events/position_state_changed.c) +target_sources(app PRIVATE src/events/keycode_state_changed.c) +target_sources(app PRIVATE src/events/modifiers_state_changed.c) target_sources(app PRIVATE src/behaviors/behavior_hid.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld index f1ee9f76..f2bf8334 100644 --- a/app/include/linker/zmk-events.ld +++ b/app/include/linker/zmk-events.ld @@ -1,16 +1,10 @@ #include - SECTION_PROLOGUE(event_types,,) - { __event_type_start = .; \ KEEP(*(".event_type")); \ __event_type_end = .; \ - } GROUP_LINK_IN(ROMABLE_REGION) - SECTION_PROLOGUE(event_subscriptions,,) - { __event_subscriptions_start = .; \ KEEP(*(".event_subscription")); \ __event_subscriptions_end = .; \ - } GROUP_LINK_IN(ROMABLE_REGION) diff --git a/app/include/zmk/events.h b/app/include/zmk/events.h index 5be2bebd..178686c4 100644 --- a/app/include/zmk/events.h +++ b/app/include/zmk/events.h @@ -2,14 +2,8 @@ #include -int zmk_events_position_pressed(u32_t position); -int zmk_events_position_released(u32_t position); -int zmk_events_keycode_pressed(u8_t usage_page, u32_t keycode); -int zmk_events_keycode_released(u8_t usage_page, u32_t keycode); int zmk_events_modifiers_pressed(zmk_mod_flags modifiers); int zmk_events_modifiers_released(zmk_mod_flags modifiers); -int zmk_events_consumer_key_pressed(u32_t usage); -int zmk_events_consumer_key_released(u32_t usage); // TODO: Encoders? // TODO: Sensors? \ No newline at end of file diff --git a/app/include/zmk/events/keycode-state-changed.h b/app/include/zmk/events/keycode-state-changed.h index 48cdddc1..dc6e37ee 100644 --- a/app/include/zmk/events/keycode-state-changed.h +++ b/app/include/zmk/events/keycode-state-changed.h @@ -10,4 +10,14 @@ struct keycode_state_changed { bool state; }; -ZMK_EVENT_DECLARE(keycode_state_changed); \ No newline at end of file +ZMK_EVENT_DECLARE(keycode_state_changed); + +inline struct keycode_state_changed* create_keycode_state_changed(u8_t usage_page, u32_t keycode, bool state) +{ + struct keycode_state_changed* ev = new_keycode_state_changed(); + ev->usage_page = usage_page; + ev->keycode = keycode; + ev->state = state; + + return ev; +} \ No newline at end of file diff --git a/app/include/zmk/events/modifiers-state-changed.h b/app/include/zmk/events/modifiers-state-changed.h new file mode 100644 index 00000000..57596b28 --- /dev/null +++ b/app/include/zmk/events/modifiers-state-changed.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +struct modifiers_state_changed { + struct zmk_event_header header; + zmk_mod_flags modifiers; + bool state; +}; + +ZMK_EVENT_DECLARE(modifiers_state_changed); + +inline struct modifiers_state_changed* create_modifiers_state_changed(zmk_mod_flags modifiers, bool state) +{ + struct modifiers_state_changed* ev = new_modifiers_state_changed(); + ev->modifiers = modifiers; + ev->state = state; + + return ev; +} \ No newline at end of file diff --git a/app/src/behaviors/behavior_hid.c b/app/src/behaviors/behavior_hid.c index b9014502..9e1fb6bf 100644 --- a/app/src/behaviors/behavior_hid.c +++ b/app/src/behaviors/behavior_hid.c @@ -15,6 +15,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include +#include #include #include @@ -56,14 +57,14 @@ static int behaviour_hid_keycode_released(u8_t usage_page, u32_t keycode) case USAGE_KEYPAD: err = zmk_hid_keypad_release(keycode); if (err) { - LOG_ERR("Unable to press keycode"); + LOG_ERR("Unable to release keycode"); return err; } break; case USAGE_CONSUMER: err = zmk_hid_consumer_release(keycode); if (err) { - LOG_ERR("Unable to press keycode"); + LOG_ERR("Unable to release keycode"); return err; } break; @@ -71,6 +72,21 @@ static int behaviour_hid_keycode_released(u8_t usage_page, u32_t keycode) return zmk_endpoints_send_report(usage_page); } +static int behavior_hid_modifiers_pressed(zmk_mod_flags modifiers) +{ + LOG_DBG("modifiers %d", modifiers); + + zmk_hid_register_mods(modifiers); + return zmk_endpoints_send_report(USAGE_KEYPAD); +} + +static int behavior_hid_modifiers_released(zmk_mod_flags modifiers) +{ + LOG_DBG("modifiers %d", modifiers); + + zmk_hid_unregister_mods(modifiers); + return zmk_endpoints_send_report(USAGE_KEYPAD); +} int behavior_hid_listener(const struct zmk_event_header *eh) { @@ -81,37 +97,27 @@ int behavior_hid_listener(const struct zmk_event_header *eh) } else { behaviour_hid_keycode_released(ev->usage_page, ev->keycode); } + } else if (is_modifiers_state_changed(eh)) { + const struct modifiers_state_changed *ev = cast_modifiers_state_changed(eh); + if (ev->state) { + behavior_hid_modifiers_pressed(ev->modifiers); + } else { + behavior_hid_modifiers_released(ev->modifiers); + } } return 0; } ZMK_LISTENER(behavior_hid, behavior_hid_listener); ZMK_SUBSCRIPTION(behavior_hid, keycode_state_changed); +ZMK_SUBSCRIPTION(behavior_hid, modifiers_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); - - zmk_hid_register_mods(modifiers); - return zmk_endpoints_send_report(USAGE_KEYPAD); -} - -static int on_modifiers_released(struct device *dev, zmk_mod_flags modifiers) -{ - LOG_DBG("modifiers %d", modifiers); - - zmk_hid_unregister_mods(modifiers); - return zmk_endpoints_send_report(USAGE_KEYPAD); -} - static const struct behavior_driver_api behavior_hid_driver_api = { - .modifiers_pressed = on_modifiers_pressed, - .modifiers_released = on_modifiers_released }; static const struct behavior_hid_config behavior_hid_config = {}; diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index c9baff4e..37461834 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -12,6 +12,7 @@ #include #include +#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); @@ -48,21 +49,20 @@ static int on_keymap_binding_pressed(struct device *dev, u32_t position, u32_t m struct behavior_mod_tap_data *data = dev->driver_data; LOG_DBG("mods: %d, keycode: %d", mods, keycode); WRITE_BIT(data->pending_press_positions, position, true); - return zmk_events_modifiers_pressed(mods); + return ZMK_EVENT_RAISE(create_modifiers_state_changed(mods, true)); } - -// They keycode is passed by the "keymap" based on the parameter created as part of the assignment. static int on_keymap_binding_released(struct device *dev, u32_t position, u32_t mods, u32_t keycode) { struct behavior_mod_tap_data *data = dev->driver_data; LOG_DBG("mods: %d, keycode: %d", mods, keycode); - zmk_events_modifiers_released(mods); + ZMK_EVENT_RAISE(create_modifiers_state_changed(mods, false)); + k_msleep(10); // TODO: Better approach than k_msleep to avoid USB send failures? Retries in the USB endpoint layer? if (data->pending_press_positions & BIT(position)) { - zmk_events_keycode_pressed(USAGE_KEYPAD, keycode); + ZMK_EVENT_RAISE(create_keycode_state_changed(USAGE_KEYPAD, keycode, true)); k_msleep(10); - zmk_events_keycode_released(USAGE_KEYPAD, keycode); + ZMK_EVENT_RAISE(create_keycode_state_changed(USAGE_KEYPAD, keycode, false)); } return 0; @@ -73,7 +73,6 @@ static const struct behavior_driver_api behavior_mod_tap_driver_api = { .binding_released = on_keymap_binding_released, }; - static const struct behavior_mod_tap_config behavior_mod_tap_config = {}; static struct behavior_mod_tap_data behavior_mod_tap_data; diff --git a/app/src/events/modifiers_state_changed.c b/app/src/events/modifiers_state_changed.c new file mode 100644 index 00000000..b7ae02dd --- /dev/null +++ b/app/src/events/modifiers_state_changed.c @@ -0,0 +1,6 @@ + + +#include +#include + +ZMK_EVENT_IMPL(modifiers_state_changed); \ No newline at end of file From 57e061ac91ba95fb333139cbb3b0df97d1b22c98 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 15:21:42 -0400 Subject: [PATCH 3/7] Lots of cleanup of old events/behavior mash. --- app/CMakeLists.txt | 3 +- app/dts/behaviors.dtsi | 3 +- app/dts/behaviors/hid.dtsi | 9 -- app/include/zmk/events.h | 9 -- app/src/behaviors/behavior_mod_tap.c | 1 - app/src/behaviors/behavior_momentary_layer.c | 1 - app/src/events.c | 83 ------------------- .../behavior_hid.c => hid_listener.c} | 53 ++++-------- 8 files changed, 16 insertions(+), 146 deletions(-) delete mode 100644 app/dts/behaviors/hid.dtsi delete mode 100644 app/include/zmk/events.h delete mode 100644 app/src/events.c rename app/src/{behaviors/behavior_hid.c => hid_listener.c} (55%) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 9bfc8d6a..5be628b7 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -29,14 +29,13 @@ zephyr_linker_sources(RODATA include/linker/zmk-events.ld) target_include_directories(app PRIVATE include) target_sources(app PRIVATE src/kscan.c) target_sources(app PRIVATE src/matrix_transform.c) -target_sources(app PRIVATE src/events.c) target_sources(app PRIVATE src/keymap.c) +target_sources(app PRIVATE src/hid_listener.c) target_sources(app PRIVATE src/hid.c) target_sources(app PRIVATE src/event_manager.c) target_sources(app PRIVATE src/events/position_state_changed.c) target_sources(app PRIVATE src/events/keycode_state_changed.c) target_sources(app PRIVATE src/events/modifiers_state_changed.c) -target_sources(app PRIVATE src/behaviors/behavior_hid.c) target_sources(app PRIVATE src/behaviors/behavior_key_press.c) target_sources(app PRIVATE src/behaviors/behavior_reset.c) target_sources(app PRIVATE src/behaviors/behavior_mod_tap.c) diff --git a/app/dts/behaviors.dtsi b/app/dts/behaviors.dtsi index 7a4f8fbc..86cd7b72 100644 --- a/app/dts/behaviors.dtsi +++ b/app/dts/behaviors.dtsi @@ -2,5 +2,4 @@ #include #include #include -#include -#include \ No newline at end of file +#include \ No newline at end of file diff --git a/app/dts/behaviors/hid.dtsi b/app/dts/behaviors/hid.dtsi deleted file mode 100644 index 30ebb090..00000000 --- a/app/dts/behaviors/hid.dtsi +++ /dev/null @@ -1,9 +0,0 @@ -/ { - behaviors { - hid_behavior: behavior_hid { - compatible = "zmk,behavior-hid", "zmk,behavior-global"; - label = "HID"; - #binding-cells = <0>; - }; - }; -}; diff --git a/app/include/zmk/events.h b/app/include/zmk/events.h deleted file mode 100644 index 178686c4..00000000 --- a/app/include/zmk/events.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include - -int zmk_events_modifiers_pressed(zmk_mod_flags modifiers); -int zmk_events_modifiers_released(zmk_mod_flags modifiers); - -// TODO: Encoders? -// TODO: Sensors? \ No newline at end of file diff --git a/app/src/behaviors/behavior_mod_tap.c b/app/src/behaviors/behavior_mod_tap.c index 37461834..62604eba 100644 --- a/app/src/behaviors/behavior_mod_tap.c +++ b/app/src/behaviors/behavior_mod_tap.c @@ -13,7 +13,6 @@ #include #include #include -#include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/behaviors/behavior_momentary_layer.c b/app/src/behaviors/behavior_momentary_layer.c index 904051e4..8a8584a9 100644 --- a/app/src/behaviors/behavior_momentary_layer.c +++ b/app/src/behaviors/behavior_momentary_layer.c @@ -10,7 +10,6 @@ #include #include -#include #include LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); diff --git a/app/src/events.c b/app/src/events.c deleted file mode 100644 index fabb93e1..00000000 --- a/app/src/events.c +++ /dev/null @@ -1,83 +0,0 @@ - -#include -#include -#include -#include -#include - -#define DT_DRV_COMPAT zmk_behavior_global -#define GLOBAL_BEHAVIOR_LEN DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) - -#define LABEL_ENTRY(i) DT_INST_LABEL(i), -static const char *global_behaviors[] = { - DT_INST_FOREACH_STATUS_OKAY(LABEL_ENTRY) -}; - -int zmk_events_position_pressed(u32_t position) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_position_pressed(dev, position); - } - return 0; -}; - -int zmk_events_position_released(u32_t position) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_position_released(dev, position); - } - return 0; -}; - -int zmk_events_keycode_pressed(u8_t usage_page, u32_t keycode) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_keycode_pressed(dev, usage_page, keycode); - } - return 0; -}; - -int zmk_events_keycode_released(u8_t usage_page, u32_t keycode) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_keycode_released(dev, usage_page, keycode); - } - return 0; -}; - -int zmk_events_modifiers_pressed(zmk_mod_flags modifiers) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_modifiers_pressed(dev, modifiers); - } - return 0; -}; - -int zmk_events_modifiers_released(zmk_mod_flags modifiers) -{ - for (int i = 0; i < GLOBAL_BEHAVIOR_LEN; i++) { - const char* label = global_behaviors[i]; - struct device *dev = device_get_binding(label); - behavior_modifiers_released(dev, modifiers); - } - return 0; -}; - -int zmk_events_consumer_key_pressed(u32_t usage) -{ - return 0; -}; -int zmk_events_consumer_key_released(u32_t usage) -{ - return 0; -}; diff --git a/app/src/behaviors/behavior_hid.c b/app/src/hid_listener.c similarity index 55% rename from app/src/behaviors/behavior_hid.c rename to app/src/hid_listener.c index 9e1fb6bf..69aa23e7 100644 --- a/app/src/behaviors/behavior_hid.c +++ b/app/src/hid_listener.c @@ -4,10 +4,6 @@ * SPDX-License-Identifier: MIT */ -#define DT_DRV_COMPAT zmk_behavior_hid - -#include -#include #include #include @@ -19,14 +15,11 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #include #include -struct behavior_hid_config { }; -struct behavior_hid_data { }; - -static int behaviour_hid_keycode_pressed(u8_t usage_page, u32_t keycode) +static int hid_listener_keycode_pressed(u8_t usage_page, u32_t keycode) { int err; - LOG_DBG("keycode %d", keycode); + LOG_DBG("usage_page 0x%02X keycode 0x%02X", usage_page, keycode); switch (usage_page) { case USAGE_KEYPAD: @@ -48,10 +41,10 @@ static int behaviour_hid_keycode_pressed(u8_t usage_page, u32_t keycode) return zmk_endpoints_send_report(usage_page); } -static int behaviour_hid_keycode_released(u8_t usage_page, u32_t keycode) +static int hid_listener_keycode_released(u8_t usage_page, u32_t keycode) { int err; - LOG_DBG("keycode %d", keycode); + LOG_DBG("usage_page 0x%02X keycode 0x%02X", usage_page, keycode); switch (usage_page) { case USAGE_KEYPAD: @@ -72,7 +65,7 @@ static int behaviour_hid_keycode_released(u8_t usage_page, u32_t keycode) return zmk_endpoints_send_report(usage_page); } -static int behavior_hid_modifiers_pressed(zmk_mod_flags modifiers) +static int hid_listener_modifiers_pressed(zmk_mod_flags modifiers) { LOG_DBG("modifiers %d", modifiers); @@ -80,7 +73,7 @@ static int behavior_hid_modifiers_pressed(zmk_mod_flags modifiers) return zmk_endpoints_send_report(USAGE_KEYPAD); } -static int behavior_hid_modifiers_released(zmk_mod_flags modifiers) +static int hid_listener_modifiers_released(zmk_mod_flags modifiers) { LOG_DBG("modifiers %d", modifiers); @@ -88,44 +81,26 @@ static int behavior_hid_modifiers_released(zmk_mod_flags modifiers) return zmk_endpoints_send_report(USAGE_KEYPAD); } -int behavior_hid_listener(const struct zmk_event_header *eh) +int 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); + hid_listener_keycode_pressed(ev->usage_page, ev->keycode); } else { - behaviour_hid_keycode_released(ev->usage_page, ev->keycode); + hid_listener_keycode_released(ev->usage_page, ev->keycode); } } else if (is_modifiers_state_changed(eh)) { const struct modifiers_state_changed *ev = cast_modifiers_state_changed(eh); if (ev->state) { - behavior_hid_modifiers_pressed(ev->modifiers); + hid_listener_modifiers_pressed(ev->modifiers); } else { - behavior_hid_modifiers_released(ev->modifiers); + hid_listener_modifiers_released(ev->modifiers); } } return 0; } -ZMK_LISTENER(behavior_hid, behavior_hid_listener); -ZMK_SUBSCRIPTION(behavior_hid, keycode_state_changed); -ZMK_SUBSCRIPTION(behavior_hid, modifiers_state_changed); - -static int behavior_hid_init(struct device *dev) -{ - return 0; -}; - -static const struct behavior_driver_api behavior_hid_driver_api = { -}; - -static const struct behavior_hid_config behavior_hid_config = {}; - -static struct behavior_hid_data behavior_hid_data; - -DEVICE_AND_API_INIT(behavior_hid, DT_INST_LABEL(0), behavior_hid_init, - &behavior_hid_data, - &behavior_hid_config, - APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, - &behavior_hid_driver_api); \ No newline at end of file +ZMK_LISTENER(hid_listener, hid_listener); +ZMK_SUBSCRIPTION(hid_listener, keycode_state_changed); +ZMK_SUBSCRIPTION(hid_listener, modifiers_state_changed); \ No newline at end of file From c52beb78d4947a73570df6854e9e8ab5299db113 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 15:23:21 -0400 Subject: [PATCH 4/7] LIngering "global behavior" bit. --- app/dts/behaviors/mod_tap.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/dts/behaviors/mod_tap.dtsi b/app/dts/behaviors/mod_tap.dtsi index 1be7db6f..8e3b4e91 100644 --- a/app/dts/behaviors/mod_tap.dtsi +++ b/app/dts/behaviors/mod_tap.dtsi @@ -1,7 +1,7 @@ / { behaviors { mt: behavior_mod_tap { - compatible = "zmk,behavior-mod-tap", "zmk,behavior-global"; + compatible = "zmk,behavior-mod-tap"; label = "MOD_TAP"; #binding-cells = <2>; }; From cb087b54e57202756c8faaa7d32e017340b3b8de Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 15:31:49 -0400 Subject: [PATCH 5/7] One more lingering global behavior bit. --- app/dts/bindings/behaviors/zmk,behavior-hid.yaml | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 app/dts/bindings/behaviors/zmk,behavior-hid.yaml diff --git a/app/dts/bindings/behaviors/zmk,behavior-hid.yaml b/app/dts/bindings/behaviors/zmk,behavior-hid.yaml deleted file mode 100644 index f3e06032..00000000 --- a/app/dts/bindings/behaviors/zmk,behavior-hid.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2020, Pete Johanson -# SPDX-License-Identifier: MIT - -description: HID Report Behavior - -compatible: "zmk,behavior-hid" - -include: zero_param.yaml From a62a2f8c5c9f505865a4f9cde8d0479b3e2219e5 Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 16:13:03 -0400 Subject: [PATCH 6/7] Cleanup, license headers. --- app/include/linker/zmk-events.ld | 6 ++++++ app/include/linker/zmk-linker-defs.h | 6 ------ app/include/zmk/event-manager.h | 6 ++++++ app/include/zmk/events/keycode-state-changed.h | 6 ++++++ app/include/zmk/events/modifiers-state-changed.h | 6 ++++++ app/include/zmk/events/position-state-changed.h | 6 ++++++ app/src/event_manager.c | 7 ++++++- app/src/events/keycode_state_changed.c | 6 +++++- app/src/events/modifiers_state_changed.c | 6 +++++- app/src/events/position_state_changed.c | 6 +++++- 10 files changed, 51 insertions(+), 10 deletions(-) delete mode 100644 app/include/linker/zmk-linker-defs.h diff --git a/app/include/linker/zmk-events.ld b/app/include/linker/zmk-events.ld index f2bf8334..44063be0 100644 --- a/app/include/linker/zmk-events.ld +++ b/app/include/linker/zmk-events.ld @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #include __event_type_start = .; \ diff --git a/app/include/linker/zmk-linker-defs.h b/app/include/linker/zmk-linker-defs.h deleted file mode 100644 index 61b67414..00000000 --- a/app/include/linker/zmk-linker-defs.h +++ /dev/null @@ -1,6 +0,0 @@ - - -#define→EVENT_TYPE_SECTIONS()→ → → → \ -→ → __event_type_start = .;→ → \ -→ → KEEP(*(".event_type_*"));→ → \ -→ → __event_type_end = .;→→ → \ diff --git a/app/include/zmk/event-manager.h b/app/include/zmk/event-manager.h index 8c05a1bc..2ef55e93 100644 --- a/app/include/zmk/event-manager.h +++ b/app/include/zmk/event-manager.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #pragma once #include diff --git a/app/include/zmk/events/keycode-state-changed.h b/app/include/zmk/events/keycode-state-changed.h index dc6e37ee..1663f9b0 100644 --- a/app/include/zmk/events/keycode-state-changed.h +++ b/app/include/zmk/events/keycode-state-changed.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #pragma once #include diff --git a/app/include/zmk/events/modifiers-state-changed.h b/app/include/zmk/events/modifiers-state-changed.h index 57596b28..a17a0931 100644 --- a/app/include/zmk/events/modifiers-state-changed.h +++ b/app/include/zmk/events/modifiers-state-changed.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #pragma once #include diff --git a/app/include/zmk/events/position-state-changed.h b/app/include/zmk/events/position-state-changed.h index 190b59db..c91688ee 100644 --- a/app/include/zmk/events/position-state-changed.h +++ b/app/include/zmk/events/position-state-changed.h @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #pragma once #include diff --git a/app/src/event_manager.c b/app/src/event_manager.c index 012d285f..567cdf08 100644 --- a/app/src/event_manager.c +++ b/app/src/event_manager.c @@ -1,4 +1,9 @@ - +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ + #include #include diff --git a/app/src/events/keycode_state_changed.c b/app/src/events/keycode_state_changed.c index ae1b4c90..964b24aa 100644 --- a/app/src/events/keycode_state_changed.c +++ b/app/src/events/keycode_state_changed.c @@ -1,4 +1,8 @@ - +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ #include #include diff --git a/app/src/events/modifiers_state_changed.c b/app/src/events/modifiers_state_changed.c index b7ae02dd..71ec015b 100644 --- a/app/src/events/modifiers_state_changed.c +++ b/app/src/events/modifiers_state_changed.c @@ -1,4 +1,8 @@ - +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ #include #include diff --git a/app/src/events/position_state_changed.c b/app/src/events/position_state_changed.c index d67eedd4..69cba03c 100644 --- a/app/src/events/position_state_changed.c +++ b/app/src/events/position_state_changed.c @@ -1,4 +1,8 @@ - +/* + * Copyright (c) 2020 Peter Johanson + * + * SPDX-License-Identifier: MIT + */ #include #include From 7bf8621d5bea45c57dbbf0fac927d3332177b81b Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Tue, 30 Jun 2020 16:39:29 -0400 Subject: [PATCH 7/7] Whitespace fix. --- app/src/keymap.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/keymap.c b/app/src/keymap.c index 25bcf80e..dcfd0f1d 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -122,11 +122,11 @@ int zmk_keymap_position_state_changed(u32_t position, bool pressed) int keymap_listener(const struct zmk_event_header *eh) { - if (is_position_state_changed(eh)) { - const struct position_state_changed *ev = cast_position_state_changed(eh); + if (is_position_state_changed(eh)) { + const struct position_state_changed *ev = cast_position_state_changed(eh); zmk_keymap_position_state_changed(ev->position, ev->state); - } - return 0; + } + return 0; } ZMK_LISTENER(keymap, keymap_listener);