diff --git a/quantum/quantum.c b/quantum/quantum.c index 2053a1a5f479..f04df5aafdbe 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -114,6 +114,39 @@ void tap_code16(uint16_t code) { unregister_code16(code); } +void register_magic_code(uint8_t code) { + register_code(keycode_config(code)); +} + +void register_magic_code16(uint16_t keycode) { + if (keycode >= QK_MODS && keycode <= QK_MODS_MAX) { + keycode = (mod_config((keycode >> 8) & 0x1F) << 8|keycode_config(keycode & 0xFF)); + } + register_code16(keycode_config(keycode)); +} + +void unregister_magic_code(uint8_t code) { + unregister_code(keycode_config(code)); +} + +void unregister_magic_code16(uint16_t keycode) { + if (keycode >= QK_MODS && keycode <= QK_MODS_MAX) { + keycode = (mod_config((keycode >> 8) & 0x1F) << 8|keycode_config(keycode & 0xFF)); + } + unregister_code16(keycode_config(keycode)); +} + +void tap_magic_code(uint8_t keycode) { + tap_code(keycode_config(keycode)); +} + +void tap_magic_code16(uint16_t keycode) { + if (keycode >= QK_MODS && keycode <= QK_MODS_MAX) { + keycode = (mod_config((keycode >> 8) & 0x1F) << 8|keycode_config(keycode & 0xFF)); + } + tap_code16(keycode_config(keycode)); +} + __attribute__((weak)) bool process_action_kb(keyrecord_t *record) { return true; } __attribute__((weak)) bool process_record_kb(uint16_t keycode, keyrecord_t *record) { return process_record_user(keycode, record); } diff --git a/quantum/quantum.h b/quantum/quantum.h index 17d1d41cc9a2..090171d1a2f4 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -281,6 +281,12 @@ void shutdown_user(void); void register_code16(uint16_t code); void unregister_code16(uint16_t code); void tap_code16(uint16_t code); +void register_magic_code(uint8_t code); +void register_magic_code16(uint16_t keycode); +void unregister_magic_code(uint8_t code); +void unregister_magic_code16(uint16_t keycode); +void tap_magic_code(uint8_t keycode); +void tap_magic_code16(uint16_t keycode); void send_dword(uint32_t number); void send_word(uint16_t number);