Unicode map framework. Allow unicode up to 0xFFFFF using separate
mapping table
This commit is contained in:
		
							parent
							
								
									a9df99b81c
								
							
						
					
					
						commit
						5b2e455d3b
					
				| @ -153,6 +153,11 @@ ifeq ($(strip $(UCIS_ENABLE)), yes) | ||||
| 	UNICODE_ENABLE = yes | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(strip $(UNICODEMAP_ENABLE)), yes) | ||||
| 	OPT_DEFS += -DUNICODEMAP_ENABLE | ||||
| 	UNICODE_ENABLE = yes | ||||
| endif | ||||
| 
 | ||||
| ifeq ($(strip $(UNICODE_ENABLE)), yes) | ||||
|     OPT_DEFS += -DUNICODE_ENABLE | ||||
| 	SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c | ||||
|  | ||||
| @ -84,6 +84,10 @@ enum quantum_keycodes { | ||||
|     QK_MOD_TAP_MAX        = 0x6FFF, | ||||
|     QK_TAP_DANCE          = 0x7100, | ||||
|     QK_TAP_DANCE_MAX      = 0x71FF, | ||||
| #ifdef UNICODEMAP_ENABLE | ||||
|     QK_UNICODE_MAP        = 0x7800, | ||||
|     QK_UNICODE_MAP_MAX    = 0x7FFF, | ||||
| #endif | ||||
| #ifdef UNICODE_ENABLE | ||||
|     QK_UNICODE            = 0x8000, | ||||
|     QK_UNICODE_MAX        = 0xFFFF, | ||||
| @ -335,5 +339,8 @@ enum quantum_keycodes { | ||||
|     #define UC(n) UNICODE(n) | ||||
| #endif | ||||
| 
 | ||||
| #ifdef UNICODEMAP_ENABLE | ||||
|     #define X(n) (n | QK_UNICODE_MAP) | ||||
| #endif | ||||
| 
 | ||||
| #endif | ||||
|  | ||||
| @ -78,6 +78,32 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record) { | ||||
|   return true; | ||||
| } | ||||
| 
 | ||||
| #ifdef UNICODEMAP_ENABLE | ||||
| __attribute__((weak)) | ||||
| const uint32_t PROGMEM unicode_map[] = { | ||||
| }; | ||||
| 
 | ||||
| // 5 digit max because of linux limitation
 | ||||
| void register_hex32(uint32_t hex) { | ||||
|   for(int i = 4; i >= 0; i--) { | ||||
|     uint8_t digit = ((hex >> (i*4)) & 0xF); | ||||
|     register_code(hex_to_keycode(digit)); | ||||
|     unregister_code(hex_to_keycode(digit)); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| bool process_unicode_map(uint16_t keycode, keyrecord_t *record) { | ||||
|   if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) { | ||||
|     const uint32_t* map = unicode_map; | ||||
|     uint16_t index = keycode & 0x7FF; | ||||
|     unicode_input_start(); | ||||
|     register_hex32(pgm_read_dword_far(&map[index])); | ||||
|     unicode_input_finish(); | ||||
|   } | ||||
|   return true; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #ifdef UCIS_ENABLE | ||||
| qk_ucis_state_t qk_ucis_state; | ||||
| 
 | ||||
|  | ||||
| @ -20,6 +20,10 @@ void register_hex(uint16_t hex); | ||||
| 
 | ||||
| bool process_unicode(uint16_t keycode, keyrecord_t *record); | ||||
| 
 | ||||
| #ifdef UNICODEMAP_ENABLE | ||||
| bool process_unicode_map(uint16_t keycode, keyrecord_t *record); | ||||
| #endif | ||||
| 
 | ||||
| #ifdef UCIS_ENABLE | ||||
| #ifndef UCIS_MAX_SYMBOL_LENGTH | ||||
| #define UCIS_MAX_SYMBOL_LENGTH 32 | ||||
|  | ||||
| @ -128,6 +128,9 @@ bool process_record_quantum(keyrecord_t *record) { | ||||
|   #endif | ||||
|   #ifdef UCIS_ENABLE | ||||
|     process_ucis(keycode, record) && | ||||
|   #endif | ||||
|   #ifdef UNICODEMAP_ENABLE | ||||
|     process_unicode_map(keycode, record) && | ||||
|   #endif | ||||
|       true)) { | ||||
|     return false; | ||||
|  | ||||
| @ -320,6 +320,12 @@ This enables MIDI sending and receiving with your keyboard. To enter MIDI send m | ||||
| 
 | ||||
| This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported. | ||||
| 
 | ||||
| `UNICODEMAP_ENABLE` | ||||
| 
 | ||||
| This allows sending unicode symbols using `X(<unicode>)` in your keymap. Codes | ||||
| up to 0xFFFFF are supported, including emojis. But you need to maintain a | ||||
| separate mapping table in your keymap file. | ||||
| 
 | ||||
| `BLUETOOTH_ENABLE` | ||||
| 
 | ||||
| This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins. | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user