From 76a433fc392be31e56df256b630a21e61775d0af Mon Sep 17 00:00:00 2001 From: Pete Johanson Date: Sun, 24 May 2020 23:13:33 -0400 Subject: [PATCH] Clean up and implement MT release w/o mod press. --- boards/native_posix.overlay | 5 +++-- include/dt-bindings/zmk/keys.h | 1 + src/endpoints.c | 3 --- src/handlers.c | 12 ++++++++++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/boards/native_posix.overlay b/boards/native_posix.overlay index cd71191c..1d692d4e 100644 --- a/boards/native_posix.overlay +++ b/boards/native_posix.overlay @@ -13,7 +13,8 @@ rows = <2>; columns = <2>; - events = ; + events = ; + // events = ; }; keymap0: keymap { @@ -29,7 +30,7 @@ label = "DEFAULT"; keys = < - KC_A KC_B + KC_A MT(MOD_LSFT, KC_B) KC_C KC_D >; }; diff --git a/include/dt-bindings/zmk/keys.h b/include/dt-bindings/zmk/keys.h index 93b5ba3a..c266de00 100644 --- a/include/dt-bindings/zmk/keys.h +++ b/include/dt-bindings/zmk/keys.h @@ -86,6 +86,7 @@ #define ZK_ACTION(k) (k >> 24) #define _ACTION(a) (a << 24) #define _ACTION_MODS(m) (m << 16) +#define ZK_KEY(a) (a & 0xFFFF) #define ZK_MODS(a) ((a >> 16) & 0xFF) #define ZMK_ACTION_KEY 0x01 diff --git a/src/endpoints.c b/src/endpoints.c index 3f2d5760..668380ad 100644 --- a/src/endpoints.c +++ b/src/endpoints.c @@ -56,9 +56,6 @@ int zmk_endpoints_send_report() int zmk_endpoints_send_key_event(struct zmk_key_event key_event) { - struct zmk_hid_report *report; - int err; - LOG_DBG("key %d, state %d\n", key_event.key, key_event.pressed); if (key_event.pressed) diff --git a/src/handlers.c b/src/handlers.c index 8c463a95..ff969b18 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -32,8 +32,16 @@ bool zmk_handle_action(zmk_action action, struct zmk_key_event *key_event) zmk_hid_unregister_mods(mods); if (action_effect_pending & BIT(flattened_index)) { - // Allow baseline keycode to flow to the endpoints! - return true; + struct zmk_key_event non_mod_event = + { + .row = key_event->row, + .column = key_event->column, + .key = ZK_KEY(key_event->key), + .pressed = true}; + + zmk_handle_key(non_mod_event); + non_mod_event.pressed = false; + zmk_handle_key(non_mod_event); } else {