From 1dc6a8cec85ac3563f1d996ba7d96be86becd93b Mon Sep 17 00:00:00 2001 From: Drashna Jael're Date: Mon, 18 May 2020 05:45:28 -0700 Subject: [PATCH] Add magic capable (un)register functions --- quantum/quantum.c | 28 ++++++++++++++++++++++++++++ quantum/quantum.h | 7 +++++++ 2 files changed, 35 insertions(+) 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);