diff options
author | Okke Formsma <okke@formsma.nl> | 2020-09-02 22:30:09 +0200 |
---|---|---|
committer | Pete Johanson <peter@peterjohanson.com> | 2020-11-03 00:19:37 -0500 |
commit | 4f258efbf1602e212a808cc10915050a1b46e140 (patch) | |
tree | ed7601514e31895139ab91314610b2d570b1d326 /app/include | |
parent | a9e729b427800fab230fc1fcdacd3cbdb6bedc19 (diff) |
initial implementation for modifiers
https://github.com/zmkfirmware/zmk/issues/86
Diffstat (limited to 'app/include')
-rw-r--r-- | app/include/dt-bindings/zmk/keys.h | 30 | ||||
-rw-r--r-- | app/include/zmk/events/keycode-state-changed.h | 10 | ||||
-rw-r--r-- | app/include/zmk/hid.h | 4 |
3 files changed, 29 insertions, 15 deletions
diff --git a/app/include/dt-bindings/zmk/keys.h b/app/include/dt-bindings/zmk/keys.h index a3b2229..5f59055 100644 --- a/app/include/dt-bindings/zmk/keys.h +++ b/app/include/dt-bindings/zmk/keys.h @@ -3,7 +3,6 @@ * * SPDX-License-Identifier: MIT */ - #pragma once #define USAGE_KEYPAD 0x07 @@ -144,11 +143,24 @@ #define M_VOLU 0xE9 #define M_VOLD 0xEA -#define MOD_LCTL (1 << 0x00) -#define MOD_LSFT (1 << 0x01) -#define MOD_LALT (1 << 0x02) -#define MOD_LGUI (1 << 0x03) -#define MOD_RCTL (1 << 0x04) -#define MOD_RSFT (1 << 0x05) -#define MOD_RALT (1 << 0x06) -#define MOD_RGUI (1 << 0x07)
\ No newline at end of file +#define MOD_LCTL 0x01 +#define MOD_LSFT 0x02 +#define MOD_LALT 0x04 +#define MOD_LGUI 0x08 +#define MOD_RCTL 0x10 +#define MOD_RSFT 0x20 +#define MOD_RALT 0x40 +#define MOD_RGUI 0x80 + +#define SELECT_MODS(keycode) (keycode >> 24) +#define STRIP_MODS(keycode) (keycode & ~(0xFF << 24)) +#define APPLY_MODS(mods, keycode) (mods << 24 | keycode) + +#define LC(keycode) APPLY_MODS(MOD_LCTL, keycode) +#define LS(keycode) APPLY_MODS(MOD_LSFT, keycode) +#define LA(keycode) APPLY_MODS(MOD_LALT, keycode) +#define LG(keycode) APPLY_MODS(MOD_LGUI, keycode) +#define RC(keycode) APPLY_MODS(MOD_RCTL, keycode) +#define RS(keycode) APPLY_MODS(MOD_RSFT, keycode) +#define RA(keycode) APPLY_MODS(MOD_RALT, keycode) +#define RG(keycode) APPLY_MODS(MOD_RGUI, keycode) diff --git a/app/include/zmk/events/keycode-state-changed.h b/app/include/zmk/events/keycode-state-changed.h index 1e2c24e..493f075 100644 --- a/app/include/zmk/events/keycode-state-changed.h +++ b/app/include/zmk/events/keycode-state-changed.h @@ -7,22 +7,24 @@ #pragma once #include <zephyr.h> +#include <dt-bindings/zmk/keys.h> #include <zmk/event-manager.h> struct keycode_state_changed { struct zmk_event_header header; u8_t usage_page; u32_t keycode; + u8_t implicit_modifiers; bool state; }; ZMK_EVENT_DECLARE(keycode_state_changed); -inline struct keycode_state_changed *create_keycode_state_changed(u8_t usage_page, u32_t keycode, - bool state) { +static 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->keycode = STRIP_MODS(keycode); + ev->implicit_modifiers = SELECT_MODS(keycode); ev->state = state; return ev; -}
\ No newline at end of file +} diff --git a/app/include/zmk/hid.h b/app/include/zmk/hid.h index fd09a6f..2426c2d 100644 --- a/app/include/zmk/hid.h +++ b/app/include/zmk/hid.h @@ -164,8 +164,8 @@ struct zmk_hid_consumer_report { int zmk_hid_register_mod(zmk_mod modifier); int zmk_hid_unregister_mod(zmk_mod modifier); -int zmk_hid_register_mods(zmk_mod_flags modifiers); -int zmk_hid_unregister_mods(zmk_mod_flags modifiers); +int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers); +int zmk_hid_implicit_modifiers_release(); int zmk_hid_keypad_press(zmk_key key); int zmk_hid_keypad_release(zmk_key key); void zmk_hid_keypad_clear(); |