aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build_keyboard.mk5
-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
-rw-r--r--readme.md6
6 files changed, 51 insertions, 0 deletions
diff --git a/build_keyboard.mk b/build_keyboard.mk
index 03a69b146..282adcb11 100644
--- a/build_keyboard.mk
+++ b/build_keyboard.mk
@@ -153,6 +153,11 @@ ifeq ($(strip $(UCIS_ENABLE)), yes)
153 UNICODE_ENABLE = yes 153 UNICODE_ENABLE = yes
154endif 154endif
155 155
156ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
157 OPT_DEFS += -DUNICODEMAP_ENABLE
158 UNICODE_ENABLE = yes
159endif
160
156ifeq ($(strip $(UNICODE_ENABLE)), yes) 161ifeq ($(strip $(UNICODE_ENABLE)), yes)
157 OPT_DEFS += -DUNICODE_ENABLE 162 OPT_DEFS += -DUNICODE_ENABLE
158 SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c 163 SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
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 }
diff --git a/readme.md b/readme.md
index a7320202b..2653ab2ea 100644
--- a/readme.md
+++ b/readme.md
@@ -320,6 +320,12 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m
320 320
321This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported. 321This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
322 322
323`UNICODEMAP_ENABLE`
324
325This allows sending unicode symbols using `X(<unicode>)` in your keymap. Codes
326up to 0xFFFFF are supported, including emojis. But you need to maintain a
327separate mapping table in your keymap file.
328
323`BLUETOOTH_ENABLE` 329`BLUETOOTH_ENABLE`
324 330
325This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins. 331This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins.