static uint8_t input_mode;
+__attribute__((weak))
uint16_t hex_to_keycode(uint8_t hex)
{
if (hex == 0x0) {
input_mode = os_target;
}
+uint8_t get_unicode_input_mode(void) {
+ return input_mode;
+}
+
+__attribute__((weak))
void unicode_input_start (void) {
switch(input_mode) {
case UC_OSX:
unregister_code(KC_PPLS);
break;
}
+ wait_ms(UNICODE_TYPE_DELAY);
}
+__attribute__((weak))
void unicode_input_finish (void) {
switch(input_mode) {
case UC_OSX:
}
#ifdef UCIS_ENABLE
+qk_ucis_state_t qk_ucis_state;
+
void qk_ucis_start(void) {
qk_ucis_state.count = 0;
qk_ucis_state.in_progress = true;
+ qk_ucis_start_user();
+}
+
+__attribute__((weak))
+void qk_ucis_start_user(void) {
unicode_input_start();
register_hex(0x2328);
unicode_input_finish();
uint8_t code = qk_ucis_state.codes[i];
register_code(code);
unregister_code(code);
+ wait_ms(UNICODE_TYPE_DELAY);
+ }
+}
+
+void register_ucis(const char *hex) {
+ for(int i = 0; hex[i]; i++) {
+ uint8_t kc = 0;
+ char c = hex[i];
+
+ switch (c) {
+ case '0':
+ kc = KC_0;
+ break;
+ case '1' ... '9':
+ kc = c - '1' + KC_1;
+ break;
+ case 'a' ... 'f':
+ kc = c - 'a' + KC_A;
+ break;
+ case 'A' ... 'F':
+ kc = c - 'A' + KC_A;
+ break;
+ }
+
+ if (kc) {
+ register_code (kc);
+ unregister_code (kc);
+ wait_ms (UNICODE_TYPE_DELAY);
+ }
}
}
-bool process_record_ucis (uint16_t keycode, keyrecord_t *record) {
+bool process_ucis (uint16_t keycode, keyrecord_t *record) {
uint8_t i;
- if (!qk_ucis_state.in_progress || !record->event.pressed)
+ if (!qk_ucis_state.in_progress)
+ return true;
+
+ if (qk_ucis_state.count >= UCIS_MAX_SYMBOL_LENGTH &&
+ !(keycode == KC_BSPC || keycode == KC_ESC || keycode == KC_SPC || keycode == KC_ENT)) {
+ return false;
+ }
+
+ if (!record->event.pressed)
return true;
qk_ucis_state.codes[qk_ucis_state.count] = keycode;
for (i = qk_ucis_state.count; i > 0; i--) {
register_code (KC_BSPC);
unregister_code (KC_BSPC);
+ wait_ms(UNICODE_TYPE_DELAY);
}
if (keycode == KC_ESC) {
for (i = 0; ucis_symbol_table[i].symbol; i++) {
if (is_uni_seq (ucis_symbol_table[i].symbol)) {
symbol_found = true;
- for (uint8_t j = 0; ucis_symbol_table[i].codes[j]; j++) {
- register_hex(ucis_symbol_table[i].codes[j]);
- }
+ register_ucis(ucis_symbol_table[i].code + 2);
break;
}
}