aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/keymap.h7
-rw-r--r--quantum/process_keycode/process_unicode.c26
-rw-r--r--quantum/process_keycode/process_unicode.h4
-rw-r--r--quantum/quantum.c3
4 files changed, 40 insertions, 0 deletions
diff --git a/quantum/keymap.h b/quantum/keymap.h
index 98ddfd0c5..0daa00120 100644
--- a/quantum/keymap.h
+++ b/quantum/keymap.h
@@ -84,6 +84,10 @@ enum quantum_keycodes {
84 QK_MOD_TAP_MAX = 0x6FFF, 84 QK_MOD_TAP_MAX = 0x6FFF,
85 QK_TAP_DANCE = 0x7100, 85 QK_TAP_DANCE = 0x7100,
86 QK_TAP_DANCE_MAX = 0x71FF, 86 QK_TAP_DANCE_MAX = 0x71FF,
87#ifdef UNICODEMAP_ENABLE
88 QK_UNICODE_MAP = 0x7800,
89 QK_UNICODE_MAP_MAX = 0x7FFF,
90#endif
87#ifdef UNICODE_ENABLE 91#ifdef UNICODE_ENABLE
88 QK_UNICODE = 0x8000, 92 QK_UNICODE = 0x8000,
89 QK_UNICODE_MAX = 0xFFFF, 93 QK_UNICODE_MAX = 0xFFFF,
@@ -335,5 +339,8 @@ enum quantum_keycodes {
335 #define UC(n) UNICODE(n) 339 #define UC(n) UNICODE(n)
336#endif 340#endif
337 341
342#ifdef UNICODEMAP_ENABLE
343 #define X(n) (n | QK_UNICODE_MAP)
344#endif
338 345
339#endif 346#endif
diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c
index 6a30afe29..37dd471ff 100644
--- a/quantum/process_keycode/process_unicode.c
+++ b/quantum/process_keycode/process_unicode.c
@@ -78,6 +78,32 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) {
78 return true; 78 return true;
79} 79}
80 80
81#ifdef UNICODEMAP_ENABLE
82__attribute__((weak))
83const uint32_t PROGMEM unicode_map[] = {
84};
85
86// 5 digit max because of linux limitation
87void register_hex32(uint32_t hex) {
88 for(int i = 4; i >= 0; i--) {
89 uint8_t digit = ((hex >> (i*4)) & 0xF);
90 register_code(hex_to_keycode(digit));
91 unregister_code(hex_to_keycode(digit));
92 }
93}
94
95bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
96 if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
97 const uint32_t* map = unicode_map;
98 uint16_t index = keycode & 0x7FF;
99 unicode_input_start();
100 register_hex32(pgm_read_dword_far(&map[index]));
101 unicode_input_finish();
102 }
103 return true;
104}
105#endif
106
81#ifdef UCIS_ENABLE 107#ifdef UCIS_ENABLE
82qk_ucis_state_t qk_ucis_state; 108qk_ucis_state_t qk_ucis_state;
83 109
diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h
index 27f8072ee..a6c7e4584 100644
--- a/quantum/process_keycode/process_unicode.h
+++ b/quantum/process_keycode/process_unicode.h
@@ -20,6 +20,10 @@ void register_hex(uint16_t hex);
20 20
21bool process_unicode(uint16_t keycode, keyrecord_t *record); 21bool process_unicode(uint16_t keycode, keyrecord_t *record);
22 22
23#ifdef UNICODEMAP_ENABLE
24bool process_unicode_map(uint16_t keycode, keyrecord_t *record);
25#endif
26
23#ifdef UCIS_ENABLE 27#ifdef UCIS_ENABLE
24#ifndef UCIS_MAX_SYMBOL_LENGTH 28#ifndef UCIS_MAX_SYMBOL_LENGTH
25#define UCIS_MAX_SYMBOL_LENGTH 32 29#define UCIS_MAX_SYMBOL_LENGTH 32
diff --git a/quantum/quantum.c b/quantum/quantum.c
index a16bd5443..098312e6e 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -129,6 +129,9 @@ bool process_record_quantum(keyrecord_t *record) {
129 #ifdef UCIS_ENABLE 129 #ifdef UCIS_ENABLE
130 process_ucis(keycode, record) && 130 process_ucis(keycode, record) &&
131 #endif 131 #endif
132 #ifdef UNICODEMAP_ENABLE
133 process_unicode_map(keycode, record) &&
134 #endif
132 true)) { 135 true)) {
133 return false; 136 return false;
134 } 137 }