diff --git a/quantum/quantum.c b/quantum/quantum.c index 326c8370b11..1a78164587e 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -108,6 +108,34 @@ 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_code_delay(uint8_t keycode, uint16_t delay) { tap_code_delay(keycode_config(keycode), delay); } + +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 5cbe84d0c90..3b34a2ecee1 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -232,6 +232,13 @@ 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_code_delay(uint8_t keycode, uint16_t delay); +void tap_magic_code16(uint16_t keycode); void led_set_user(uint8_t usb_led); void led_set_kb(uint8_t usb_led);