[Keymap] Drashna updates for 0.19 (#19175)

* Fix up bastardkb boards since blackpill support is officially added.
  * Check for blackpill version, not elite c.
  * Add checks in chibiOS config since multiple ARM controllers supported.
  * Rework rules.mk for keymaps to better handle arm vs avr support
* Start moving away from `matrix_*_*` functions.
  * `housekeeping_task_*` instead of `matrix_scan_*`
  * `keyboard_(pre|post)_init_*` instead of `matrix_init_*` 
* Add ℂℴmⅈℂ unicode input method.
* Clean up unicode code to be more compact and flexible.
* Remove/move Pro Micro LED commands to userspace and better filter them
* Fixup OLED code
  * Use newer quantum keycode functions/preprocessors rather than manual bit manipulation
  * Make unicode mode render much more compact/simple.
* Make qmk secrets more self contained
* Remove custom implementation of split watchdog
This commit is contained in:
Drashna Jaelre
2022-11-29 11:43:42 -08:00
committed by GitHub
parent 8a8000b4ec
commit 4a87af0e9a
49 changed files with 622 additions and 560 deletions

View File

@ -7,7 +7,18 @@
#include "unicode.h"
#include "process_unicode_common.h"
uint8_t typing_mode = UCTM_NO_MODE;
uint8_t unicode_typing_mode = UCTM_NO_MODE;
const char unicode_mode_str[UNCODES_MODE_END][13] PROGMEM = {
" Normal\0",
" Wide\0",
" Script\0",
" Blocks\0",
" Regional\0",
" Aussie\0",
" Zalgo\0",
"Super Script\0",
" Comic\0",
};
/**
* @brief Registers the unicode keystrokes based on desired unicode
@ -91,6 +102,45 @@ DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_script, 0x1D4EA, 0x1D4D
DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_boxes, 0x1F170, 0x1F170, '0', '1', 0x2002);
DEFINE_UNICODE_RANGE_TRANSLATOR(unicode_range_translator_regional, 0x1F1E6, 0x1F1E6, '0', '1', 0x2003);
// DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_normal,
// 'a', // a
// 'b', // b
// 'c', // c
// 'd', // d
// 'e', // e
// 'f', // f
// 'g', // g
// 'h', // h
// 'i', // i
// 'j', // j
// 'k', // k
// 'l', // l
// 'm', // m
// 'n', // n
// 'o', // o
// 'p', // p
// 'q', // q
// 'r', // r
// 's', // s
// 't', // t
// 'u', // u
// 'v', // v
// 'w', // w
// 'x', // x
// 'y', // y
// 'z', // z
// '1', // 1
// '2', // 2
// '3', // 3
// '4', // 4
// '5', // 5
// '6', // 6
// '7', // 7
// '8', // 8
// '9', // 9
// '0' // 0
// );
DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_aussie,
0x0250, // a
'q', // b
@ -169,6 +219,45 @@ DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_super,
0x2070 // 0
);
DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_comic,
0x212B, // a
0x212C, // b
0x2102, // c
0x2145, // d
0x2107, // e
0x2132, // f
0x2141, // g
0x210D, // h
0x2148, // i
0x2111, // j
'k', // k
0x2143, // l
'm', // m
0x2115, // n
0x2134, // o
0x2119, // p
0x211A, // q
0x211B, // r
0x20B7, // s
0x20B8, // t
0x2127, // u
'v', // v
0x20A9, // w
'x', // x
0x213D, // y
'z', // z
'1', // 1
'2', // 2
'3', // 3
'4', // 4
'5', // 5
'6', // 6
'7', // 7
'8', // 8
'9', // 9
'0' // 0
);
bool process_record_aussie(uint16_t keycode, keyrecord_t *record) {
bool is_shifted = (get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
if ((KC_A <= keycode) && (keycode <= KC_0)) {
@ -280,12 +369,12 @@ bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
register_unicode(0x203D);
}
break;
case KC_NOMODE ... KC_SUPER:
case KC_NOMODE ... KC_COMIC:
if (record->event.pressed) {
if (typing_mode != keycode - KC_NOMODE) {
typing_mode = keycode - KC_NOMODE;
if (unicode_typing_mode != keycode - KC_NOMODE) {
unicode_typing_mode = keycode - KC_NOMODE;
} else {
typing_mode = UCTM_NO_MODE;
unicode_typing_mode = UCTM_NO_MODE;
}
}
break;
@ -295,23 +384,26 @@ bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
return true;
}
if (((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) && record->tap.count) {
keycode &= 0xFF;
if (IS_QK_MOD_TAP(keycode) && record->tap.count) {
keycode = QK_MOD_TAP_GET_TAP_KEYCODE(keycode);
}
if (IS_QK_LAYER_TAP(keycode) && record->tap.count) {
keycode = QK_LAYER_TAP_GET_TAP_KEYCODE(keycode);
}
if (typing_mode == UCTM_WIDE) {
if (unicode_typing_mode == UCTM_WIDE) {
if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
return process_record_glyph_replacement(keycode, record, unicode_range_translator_wide);
}
} else if (typing_mode == UCTM_SCRIPT) {
} else if (unicode_typing_mode == UCTM_SCRIPT) {
if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
return process_record_glyph_replacement(keycode, record, unicode_range_translator_script);
}
} else if (typing_mode == UCTM_BLOCKS) {
} else if (unicode_typing_mode == UCTM_BLOCKS) {
if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
return process_record_glyph_replacement(keycode, record, unicode_range_translator_boxes);
}
} else if (typing_mode == UCTM_REGIONAL) {
} else if (unicode_typing_mode == UCTM_REGIONAL) {
if (((KC_A <= keycode) && (keycode <= KC_0)) || keycode == KC_SPACE) {
if (!process_record_glyph_replacement(keycode, record, unicode_range_translator_regional)) {
wait_us(500);
@ -319,22 +411,26 @@ bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
return false;
}
}
} else if (typing_mode == UCTM_SUPER) {
} else if (unicode_typing_mode == UCTM_SUPER) {
if (((KC_A <= keycode) && (keycode <= KC_0))) {
return process_record_glyph_replacement(keycode, record, unicode_lut_translator_super);
}
} else if (typing_mode == UCTM_AUSSIE) {
} else if (unicode_typing_mode == UCTM_COMIC) {
if (((KC_A <= keycode) && (keycode <= KC_0))) {
return process_record_glyph_replacement(keycode, record, unicode_lut_translator_comic);
}
} else if (unicode_typing_mode == UCTM_AUSSIE) {
return process_record_aussie(keycode, record);
} else if (typing_mode == UCTM_ZALGO) {
} else if (unicode_typing_mode == UCTM_ZALGO) {
return process_record_zalgo(keycode, record);
}
return true;
}
/**
* @brief Initialize the default unicode mode on firmware startu
* @brief Initialize the default unicode mode on firmware startup
*
*/
void matrix_init_unicode(void) {
void keyboard_post_init_unicode(void) {
unicode_input_mode_init();
}