From 1d0b4c8d38794dc019ecb224f2992b4ddfa70839 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 10 Feb 2023 21:10:14 +0000 Subject: [PATCH] Tidy up use of keycode range helpers (#19756) --- keyboards/converter/usb_usb/custom_matrix.cpp | 4 ++-- .../idobao/id75/keymaps/gkbd_orthon/keymap.c | 2 +- keyboards/sirius/unigo66/custom_matrix.cpp | 4 ++-- keyboards/xiudi/xd75/keymaps/xo/keymap.c | 2 +- lib/python/qmk/cli/generate/keycodes.py | 10 +++++++++- quantum/action.c | 18 +++++++++--------- quantum/action_tapping.c | 4 ++-- quantum/keycode.h | 2 -- quantum/keycodes.h | 2 +- quantum/process_keycode/process_combo.h | 2 +- quantum/process_keycode/process_key_override.c | 2 +- quantum/process_keycode/process_space_cadet.c | 10 +++++----- quantum/quantum.c | 4 ++-- tests/test_common/keyboard_report_util.cpp | 2 +- users/twschum/xtonhasvim.c | 2 +- users/xtonhasvim/xtonhasvim.c | 2 +- 16 files changed, 39 insertions(+), 33 deletions(-) diff --git a/keyboards/converter/usb_usb/custom_matrix.cpp b/keyboards/converter/usb_usb/custom_matrix.cpp index e94b6b07fbe..8b5fd4451a7 100644 --- a/keyboards/converter/usb_usb/custom_matrix.cpp +++ b/keyboards/converter/usb_usb/custom_matrix.cpp @@ -189,7 +189,7 @@ extern "C" { bool matrix_is_on(uint8_t row, uint8_t col) { uint8_t code = CODE(row, col); - if (IS_MOD(code)) { + if (IS_MODIFIER_KEYCODE(code)) { if (local_keyboard_report.mods & ROW_BITS(code)) { return true; } @@ -205,7 +205,7 @@ extern "C" { matrix_row_t matrix_get_row(uint8_t row) { uint16_t row_bits = 0; - if (IS_MOD(CODE(row, 0)) && local_keyboard_report.mods) { + if (IS_MODIFIER_KEYCODE(CODE(row, 0)) && local_keyboard_report.mods) { row_bits |= local_keyboard_report.mods; } diff --git a/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c b/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c index 4e448191253..462bb3feee2 100644 --- a/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c +++ b/keyboards/idobao/id75/keymaps/gkbd_orthon/keymap.c @@ -47,7 +47,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } } - if (!IS_MOD(keycode) && record->event.pressed) { + if (!IS_MODIFIER_KEYCODE(keycode) && record->event.pressed) { if(keycode == KC_E || keycode == KC_A || keycode == KC_O || keycode == KC_I || keycode == KC_U) { predecessor_key = KC_O; vowel_proximity = timer_read(); diff --git a/keyboards/sirius/unigo66/custom_matrix.cpp b/keyboards/sirius/unigo66/custom_matrix.cpp index 15b30c8177f..07c6df29819 100644 --- a/keyboards/sirius/unigo66/custom_matrix.cpp +++ b/keyboards/sirius/unigo66/custom_matrix.cpp @@ -175,7 +175,7 @@ extern "C" bool matrix_is_on(uint8_t row, uint8_t col) { uint8_t code = CODE(row, col); - if (IS_MOD(code)) { + if (IS_MODIFIER_KEYCODE(code)) { if (local_keyboard_report.mods & ROW_BITS(code)) { return true; } @@ -191,7 +191,7 @@ extern "C" matrix_row_t matrix_get_row(uint8_t row) { uint16_t row_bits = 0; - if (IS_MOD(CODE(row, 0)) && local_keyboard_report.mods) { + if (IS_MODIFIER_KEYCODE(CODE(row, 0)) && local_keyboard_report.mods) { row_bits |= local_keyboard_report.mods; } diff --git a/keyboards/xiudi/xd75/keymaps/xo/keymap.c b/keyboards/xiudi/xd75/keymaps/xo/keymap.c index ca3d4cff54c..8fa1f9feaa3 100644 --- a/keyboards/xiudi/xd75/keymaps/xo/keymap.c +++ b/keyboards/xiudi/xd75/keymaps/xo/keymap.c @@ -45,7 +45,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { backlight_level(6); } - if (IS_MOD(keycode)) { + if (IS_MODIFIER_KEYCODE(keycode)) { if (record->event.pressed) { rgblight_setrgb(RGB_RED); } else { diff --git a/lib/python/qmk/cli/generate/keycodes.py b/lib/python/qmk/cli/generate/keycodes.py index 2ed84cd5895..f5c646e0ea9 100644 --- a/lib/python/qmk/cli/generate/keycodes.py +++ b/lib/python/qmk/cli/generate/keycodes.py @@ -8,6 +8,14 @@ from qmk.path import normpath from qmk.keycodes import load_spec +def _translate_group(group): + """Fix up any issues with badly chosen values + """ + if group == 'modifiers': + return 'modifier' + return group + + def _render_key(key): width = 7 if 'S(' in key: @@ -82,7 +90,7 @@ def _generate_helpers(lines, keycodes): for group, codes in temp.items(): lo = keycodes["keycodes"][f'0x{codes[0]:04X}']['key'] hi = keycodes["keycodes"][f'0x{codes[1]:04X}']['key'] - lines.append(f'#define IS_{ group.upper() }_KEYCODE(code) ((code) >= {lo} && (code) <= {hi})') + lines.append(f'#define IS_{ _translate_group(group).upper() }_KEYCODE(code) ((code) >= {lo} && (code) <= {hi})') def _generate_aliases(lines, keycodes): diff --git a/quantum/action.c b/quantum/action.c index 6b5660af8b2..72f132eaa8b 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -351,7 +351,7 @@ void process_action(keyrecord_t *record, action_t action) { bool do_release_oneshot = false; // notice we only clear the one shot layer if the pressed key is not a modifier. if (is_oneshot_layer_active() && event.pressed && - (action.kind.id == ACT_USAGE || !(IS_MOD(action.key.code) + (action.kind.id == ACT_USAGE || !(IS_MODIFIER_KEYCODE(action.key.code) # ifndef NO_ACTION_TAPPING || (tap_count == 0 && (action.kind.id == ACT_LMODS_TAP || action.kind.id == ACT_RMODS_TAP)) # endif @@ -372,7 +372,7 @@ void process_action(keyrecord_t *record, action_t action) { uint8_t mods = (action.kind.id == ACT_LMODS) ? action.key.mods : action.key.mods << 4; if (event.pressed) { if (mods) { - if (IS_MOD(action.key.code) || action.key.code == KC_NO) { + if (IS_MODIFIER_KEYCODE(action.key.code) || action.key.code == KC_NO) { // e.g. LSFT(KC_LEFT_GUI): we don't want the LSFT to be weak as it would make it useless. // This also makes LSFT(KC_LEFT_GUI) behave exactly the same as LGUI(KC_LEFT_SHIFT). // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO). @@ -386,7 +386,7 @@ void process_action(keyrecord_t *record, action_t action) { } else { unregister_code(action.key.code); if (mods) { - if (IS_MOD(action.key.code) || action.key.code == KC_NO) { + if (IS_MODIFIER_KEYCODE(action.key.code) || action.key.code == KC_NO) { del_mods(mods); } else { del_weak_mods(mods); @@ -406,7 +406,7 @@ void process_action(keyrecord_t *record, action_t action) { if (!keymap_config.oneshot_enable) { if (event.pressed) { if (mods) { - if (IS_MOD(action.key.code) || action.key.code == KC_NO) { + if (IS_MODIFIER_KEYCODE(action.key.code) || action.key.code == KC_NO) { // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless. // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT). // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO). @@ -420,7 +420,7 @@ void process_action(keyrecord_t *record, action_t action) { } else { unregister_code(action.key.code); if (mods) { - if (IS_MOD(action.key.code) || action.key.code == KC_NO) { + if (IS_MODIFIER_KEYCODE(action.key.code) || action.key.code == KC_NO) { del_mods(mods); } else { del_weak_mods(mods); @@ -877,7 +877,7 @@ __attribute__((weak)) void register_code(uint8_t code) { send_keyboard_report(); #endif - } else if IS_KEY (code) { + } else if IS_BASIC_KEYCODE (code) { // TODO: should push command_proc out of this block? if (command_proc(code)) return; @@ -890,7 +890,7 @@ __attribute__((weak)) void register_code(uint8_t code) { } add_key(code); send_keyboard_report(); - } else if IS_MOD (code) { + } else if IS_MODIFIER_KEYCODE (code) { add_mods(MOD_BIT(code)); send_keyboard_report(); @@ -944,10 +944,10 @@ __attribute__((weak)) void unregister_code(uint8_t code) { send_keyboard_report(); #endif - } else if IS_KEY (code) { + } else if IS_BASIC_KEYCODE (code) { del_key(code); send_keyboard_report(); - } else if IS_MOD (code) { + } else if IS_MODIFIER_KEYCODE (code) { del_mods(MOD_BIT(code)); send_keyboard_report(); diff --git a/quantum/action_tapping.c b/quantum/action_tapping.c index 821265d3992..60c7ed49731 100644 --- a/quantum/action_tapping.c +++ b/quantum/action_tapping.c @@ -247,12 +247,12 @@ bool process_tapping(keyrecord_t *keyp) { case ACT_LMODS: case ACT_RMODS: if (action.key.mods && !action.key.code) return false; - if (IS_MOD(action.key.code)) return false; + if (IS_MODIFIER_KEYCODE(action.key.code)) return false; break; case ACT_LMODS_TAP: case ACT_RMODS_TAP: if (action.key.mods && keyp->tap.count == 0) return false; - if (IS_MOD(action.key.code)) return false; + if (IS_MODIFIER_KEYCODE(action.key.code)) return false; break; case ACT_LAYER_TAP: case ACT_LAYER_TAP_EXT: diff --git a/quantum/keycode.h b/quantum/keycode.h index 45736e92f14..03989ed8f60 100644 --- a/quantum/keycode.h +++ b/quantum/keycode.h @@ -27,8 +27,6 @@ along with this program. If not, see . /* FIXME: Add doxygen comments here */ #define IS_ANY(code) (KC_A <= (code) && (code) <= 0xFF) -#define IS_KEY(code) IS_BASIC_KEYCODE(code) -#define IS_MOD(code) IS_MODIFIERS_KEYCODE(code) #define IS_SYSTEM(code) IS_SYSTEM_KEYCODE(code) #define IS_CONSUMER(code) IS_MEDIA_KEYCODE(code) diff --git a/quantum/keycodes.h b/quantum/keycodes.h index 96f352a2c15..f24ccf01b8f 100644 --- a/quantum/keycodes.h +++ b/quantum/keycodes.h @@ -1321,7 +1321,7 @@ enum qk_keycode_defines { #define IS_SYSTEM_KEYCODE(code) ((code) >= KC_SYSTEM_POWER && (code) <= KC_SYSTEM_WAKE) #define IS_MEDIA_KEYCODE(code) ((code) >= KC_AUDIO_MUTE && (code) <= KC_ASSISTANT) #define IS_MOUSE_KEYCODE(code) ((code) >= KC_MS_UP && (code) <= KC_MS_ACCEL2) -#define IS_MODIFIERS_KEYCODE(code) ((code) >= KC_LEFT_CTRL && (code) <= KC_RIGHT_GUI) +#define IS_MODIFIER_KEYCODE(code) ((code) >= KC_LEFT_CTRL && (code) <= KC_RIGHT_GUI) #define IS_SWAP_HANDS_KEYCODE(code) ((code) >= QK_SWAP_HANDS_TOGGLE && (code) <= QK_SWAP_HANDS_ONE_SHOT) #define IS_MAGIC_KEYCODE(code) ((code) >= MAGIC_SWAP_CONTROL_CAPSLOCK && (code) <= MAGIC_TOGGLE_ESCAPE_CAPSLOCK) #define IS_MIDI_KEYCODE(code) ((code) >= QK_MIDI_ON && (code) <= QK_MIDI_PITCH_BEND_UP) diff --git a/quantum/process_keycode/process_combo.h b/quantum/process_keycode/process_combo.h index 4c4e574e34f..e430c4a5f72 100644 --- a/quantum/process_keycode/process_combo.h +++ b/quantum/process_keycode/process_combo.h @@ -69,7 +69,7 @@ typedef struct { #endif /* check if keycode is only modifiers */ -#define KEYCODE_IS_MOD(code) (IS_MOD(code) || (code >= QK_MODS && code <= QK_MODS_MAX && !(code & QK_BASIC_MAX))) +#define KEYCODE_IS_MOD(code) (IS_MODIFIER_KEYCODE(code) || (IS_QK_MODS(code) && !QK_MODS_GET_BASIC_KEYCODE(code))) bool process_combo(uint16_t keycode, keyrecord_t *record); void combo_task(void); diff --git a/quantum/process_keycode/process_key_override.c b/quantum/process_keycode/process_key_override.c index 9c5abccd4f2..9b91ae2223f 100644 --- a/quantum/process_keycode/process_key_override.c +++ b/quantum/process_keycode/process_key_override.c @@ -402,7 +402,7 @@ bool process_key_override(const uint16_t keycode, const keyrecord_t *const recor #endif const bool key_down = record->event.pressed; - const bool is_mod = IS_MOD(keycode); + const bool is_mod = IS_MODIFIER_KEYCODE(keycode); if (key_down) { switch (keycode) { diff --git a/quantum/process_keycode/process_space_cadet.c b/quantum/process_keycode/process_space_cadet.c index a62cd60a702..3109ea17114 100644 --- a/quantum/process_keycode/process_space_cadet.c +++ b/quantum/process_keycode/process_space_cadet.c @@ -89,16 +89,16 @@ void perform_space_cadet(keyrecord_t *record, uint16_t sc_keycode, uint8_t holdM #ifdef SPACE_CADET_MODIFIER_CARRYOVER sc_mods = get_mods(); #endif - if (IS_MOD(holdMod)) { + if (IS_MODIFIER_KEYCODE(holdMod)) { register_mods(MOD_BIT(holdMod)); } } else { if (sc_last == holdMod && timer_elapsed(sc_timer) < GET_TAPPING_TERM(sc_keycode, record)) { if (holdMod != tapMod) { - if (IS_MOD(holdMod)) { + if (IS_MODIFIER_KEYCODE(holdMod)) { unregister_mods(MOD_BIT(holdMod)); } - if (IS_MOD(tapMod)) { + if (IS_MODIFIER_KEYCODE(tapMod)) { register_mods(MOD_BIT(tapMod)); } } @@ -109,11 +109,11 @@ void perform_space_cadet(keyrecord_t *record, uint16_t sc_keycode, uint8_t holdM #ifdef SPACE_CADET_MODIFIER_CARRYOVER clear_weak_mods(); #endif - if (IS_MOD(tapMod)) { + if (IS_MODIFIER_KEYCODE(tapMod)) { unregister_mods(MOD_BIT(tapMod)); } } else { - if (IS_MOD(holdMod)) { + if (IS_MODIFIER_KEYCODE(holdMod)) { unregister_mods(MOD_BIT(holdMod)); } } diff --git a/quantum/quantum.c b/quantum/quantum.c index 0e69246f41f..653f553f600 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -76,7 +76,7 @@ void do_code16(uint16_t code, void (*f)(uint8_t)) { } __attribute__((weak)) void register_code16(uint16_t code) { - if (IS_MOD(code) || code == KC_NO) { + if (IS_MODIFIER_KEYCODE(code) || code == KC_NO) { do_code16(code, register_mods); } else { do_code16(code, register_weak_mods); @@ -86,7 +86,7 @@ __attribute__((weak)) void register_code16(uint16_t code) { __attribute__((weak)) void unregister_code16(uint16_t code) { unregister_code(code); - if (IS_MOD(code) || code == KC_NO) { + if (IS_MODIFIER_KEYCODE(code) || code == KC_NO) { do_code16(code, unregister_mods); } else { do_code16(code, unregister_weak_mods); diff --git a/tests/test_common/keyboard_report_util.cpp b/tests/test_common/keyboard_report_util.cpp index 2de1af2301e..cb7f7ae7350 100644 --- a/tests/test_common/keyboard_report_util.cpp +++ b/tests/test_common/keyboard_report_util.cpp @@ -97,7 +97,7 @@ std::ostream& operator<<(std::ostream& os, const report_keyboard_t& report) { KeyboardReportMatcher::KeyboardReportMatcher(const std::vector& keys) { memset(m_report.raw, 0, sizeof(m_report.raw)); for (auto k : keys) { - if (IS_MOD(k)) { + if (IS_MODIFIER_KEYCODE(k)) { m_report.mods |= MOD_BIT(k); } else { add_key_to_report(&m_report, k); diff --git a/users/twschum/xtonhasvim.c b/users/twschum/xtonhasvim.c index b3f410bc26f..60f6fa1377f 100644 --- a/users/twschum/xtonhasvim.c +++ b/users/twschum/xtonhasvim.c @@ -89,7 +89,7 @@ static void comma_period(uint16_t keycode) { bool process_record_vimlayer(uint16_t keycode, keyrecord_t *record) { /****** mod passthru *****/ - if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MOD(keycode) || keycode == LSFT(KC_LALT))) { + if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MODIFIER_KEYCODE(keycode) || keycode == LSFT(KC_LALT))) { mod_override_layer_state = layer_state; mod_override_triggering_key = keycode; // TODO: change this to track key location instead diff --git a/users/xtonhasvim/xtonhasvim.c b/users/xtonhasvim/xtonhasvim.c index 2d59cf2c62c..a33dc68cad1 100644 --- a/users/xtonhasvim/xtonhasvim.c +++ b/users/xtonhasvim/xtonhasvim.c @@ -139,7 +139,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } /****** mod passthru *****/ - if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MOD(keycode) || keycode == LSFT(KC_LALT))) { + if(record->event.pressed && layer_state_is(vim_cmd_layer()) && (IS_MODIFIER_KEYCODE(keycode) || keycode == LSFT(KC_LALT))) { mod_override_layer_state = layer_state; mod_override_triggering_key = keycode; // TODO: change this to track key location instead