diff options
author | Sergey Vlasov <sigprof@gmail.com> | 2022-11-07 00:39:05 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-06 21:39:05 +0000 |
commit | a7b2f4233ca2062037303e783ced30d9376c9443 (patch) | |
tree | cdfbb9a82f695376c41a211b186f51552b3fcb73 /quantum/keymap_common.c | |
parent | 5f9b7c035bdbbbfccfcf2bbfed7d153f5043fdce (diff) |
Fix keycode parameter extraction to match the new DD keycodes (#18977)
* Add macros to extract parameters from keycode values
Implement both encoding and decoding for keycodes like TO(layer) or
LM(layer, mod) in one place, so that the decoding won't get out of sync
with the encoding.
While at it, fix some macros for creating keycode values that did not
apply the appropriate masks to parameters (and therefore could allow the
result to be out of range if a wrong parameter was passed).
* keymap_common: Use extraction macros for keycodes
* pointing_device_auto_mouse: Use extraction macros for keycodes
Fixes #18970.
* process_autocorrect: Use extraction macros for keycodes
* process_caps_word: Use extraction macros for keycodes
(Also fix a minor bug - SH_TG was not handled properly)
* process_leader: Use extraction macros for keycodes
(Technically the code is not 100% correct, because it always assumes
that the LT() or MT() action was a tap, but it's a separate issue that
already existed before the keycode changes.)
* process_unicode: Use extraction macros for keycodes
* process_unicodemap: Use extraction macros for keycodes
Diffstat (limited to 'quantum/keymap_common.c')
-rw-r--r-- | quantum/keymap_common.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index a5997711f2..c4336440f9 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -74,64 +74,64 @@ action_t action_for_keycode(uint16_t keycode) { case QK_MODS ... QK_MODS_MAX:; // Has a modifier // Split it up - action.code = ACTION_MODS_KEY(keycode >> 8, keycode & 0xFF); // adds modifier to key + action.code = ACTION_MODS_KEY(QK_MODS_GET_MODS(keycode), QK_MODS_GET_BASIC_KEYCODE(keycode)); // adds modifier to key break; #ifndef NO_ACTION_LAYER case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: - action.code = ACTION_LAYER_TAP_KEY((keycode >> 0x8) & 0xF, keycode & 0xFF); + action.code = ACTION_LAYER_TAP_KEY(QK_LAYER_TAP_GET_LAYER(keycode), QK_LAYER_TAP_GET_TAP_KEYCODE(keycode)); break; case QK_TO ... QK_TO_MAX:; // Layer set "GOTO" - action_layer = keycode & 0xFF; + action_layer = QK_TO_GET_LAYER(keycode); action.code = ACTION_LAYER_GOTO(action_layer); break; case QK_MOMENTARY ... QK_MOMENTARY_MAX:; // Momentary action_layer - action_layer = keycode & 0xFF; + action_layer = QK_MOMENTARY_GET_LAYER(keycode); action.code = ACTION_LAYER_MOMENTARY(action_layer); break; case QK_DEF_LAYER ... QK_DEF_LAYER_MAX:; // Set default action_layer - action_layer = keycode & 0xFF; + action_layer = QK_DEF_LAYER_GET_LAYER(keycode); action.code = ACTION_DEFAULT_LAYER_SET(action_layer); break; case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX:; // Set toggle - action_layer = keycode & 0xFF; + action_layer = QK_TOGGLE_LAYER_GET_LAYER(keycode); action.code = ACTION_LAYER_TOGGLE(action_layer); break; #endif #ifndef NO_ACTION_ONESHOT case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:; // OSL(action_layer) - One-shot action_layer - action_layer = keycode & 0xFF; + action_layer = QK_ONE_SHOT_LAYER_GET_LAYER(keycode); action.code = ACTION_LAYER_ONESHOT(action_layer); break; case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX:; // OSM(mod) - One-shot mod - mod = mod_config(keycode & 0x1F); + mod = mod_config(QK_ONE_SHOT_MOD_GET_MODS(keycode)); action.code = ACTION_MODS_ONESHOT(mod); break; #endif #ifndef NO_ACTION_LAYER case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: - action.code = ACTION_LAYER_TAP_TOGGLE(keycode & 0xFF); + action.code = ACTION_LAYER_TAP_TOGGLE(QK_LAYER_TAP_TOGGLE_GET_LAYER(keycode)); break; case QK_LAYER_MOD ... QK_LAYER_MOD_MAX: - mod = mod_config(keycode & 0x1F); - action_layer = (keycode >> 5) & 0xF; + mod = mod_config(QK_LAYER_MOD_GET_MODS(keycode)); + action_layer = QK_LAYER_MOD_GET_LAYER(keycode); action.code = ACTION_LAYER_MODS(action_layer, mod); break; #endif #ifndef NO_ACTION_TAPPING case QK_MOD_TAP ... QK_MOD_TAP_MAX: - mod = mod_config((keycode >> 0x8) & 0x1F); - action.code = ACTION_MODS_TAP_KEY(mod, keycode & 0xFF); + mod = mod_config(QK_MOD_TAP_GET_MODS(keycode)); + action.code = ACTION_MODS_TAP_KEY(mod, QK_MOD_TAP_GET_TAP_KEYCODE(keycode)); break; #endif #ifdef SWAP_HANDS_ENABLE case QK_SWAP_HANDS ... QK_SWAP_HANDS_MAX: - action.code = ACTION(ACT_SWAP_HANDS, keycode & 0xff); + action.code = ACTION(ACT_SWAP_HANDS, QK_SWAP_HANDS_GET_TAP_KEYCODE(keycode)); break; #endif |