[Keymap] Updates to drashna Keymaps and Userspace (#17543)

This commit is contained in:
Drashna Jaelre 2022-07-02 19:55:46 -07:00 committed by GitHub
parent a3119385a4
commit 1c43410e26
Failed to generate hash of commit
26 changed files with 759 additions and 522 deletions

View file

@ -34,7 +34,7 @@ uint32_t oled_timer = 0;
char keylog_str[OLED_KEYLOGGER_LENGTH] = {0};
static uint16_t log_timer = 0;
#ifdef OLED_DISPLAY_VERBOSE
static const char PROGMEM display_border[3] = {0x0, 0xFF, 0x0};
const char PROGMEM display_border[3] = {0x0, 0xFF, 0x0};
#endif
deferred_token kittoken;
@ -117,9 +117,9 @@ void oled_timer_reset(void) {
* @brief Renders keylogger buffer to oled
*
*/
void render_keylogger_status(void) {
void render_keylogger_status(uint8_t col, uint8_t line) {
#ifdef OLED_DISPLAY_VERBOSE
oled_set_cursor(1, 6);
oled_set_cursor(col, line);
#endif
oled_write_P(PSTR(OLED_RENDER_KEYLOGGER), false);
oled_write(keylog_str, false);
@ -132,9 +132,9 @@ void render_keylogger_status(void) {
* @brief Renders default layer state (aka layout) to oled
*
*/
void render_default_layer_state(void) {
void render_default_layer_state(uint8_t col, uint8_t line) {
#ifdef OLED_DISPLAY_VERBOSE
oled_set_cursor(1, 1);
oled_set_cursor(col, line);
#endif
oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
switch (get_highest_layer(default_layer_state)) {
@ -160,7 +160,7 @@ void render_default_layer_state(void) {
* @brief Renders the active layers to the OLED
*
*/
void render_layer_state(void) {
void render_layer_state(uint8_t col, uint8_t line) {
#ifdef OLED_DISPLAY_VERBOSE
// clang-format off
static const char PROGMEM tri_layer_image[][3][24] = {
@ -286,33 +286,33 @@ void render_layer_state(void) {
layer_is[2] = 5;
}
oled_set_cursor(1, 2);
oled_set_cursor(col, line);
oled_write_raw_P(tri_layer_image[layer_is[0]][0], sizeof(tri_layer_image[0][0]));
oled_set_cursor(5, 2);
oled_set_cursor(col + 4, line);
oled_write_raw_P(tri_layer_image[layer_is[1]][0], sizeof(tri_layer_image[0][0]));
oled_set_cursor(9, 2);
oled_set_cursor(col + 8, line);
oled_write_raw_P(tri_layer_image[layer_is[2]][0], sizeof(tri_layer_image[0][0]));
oled_set_cursor(14, 2);
oled_set_cursor(col + 13, line);
oled_write_P(PSTR("Diablo2"), layer_state_is(_DIABLOII));
oled_advance_page(true);
oled_set_cursor(1, 3);
oled_set_cursor(col, line + 1);
oled_write_raw_P(tri_layer_image[layer_is[0]][1], sizeof(tri_layer_image[0][0]));
oled_set_cursor(5, 3);
oled_set_cursor(col + 4, line + 1);
oled_write_raw_P(tri_layer_image[layer_is[1]][1], sizeof(tri_layer_image[0][0]));
oled_set_cursor(9, 3);
oled_set_cursor(col + 8, line + 1);
oled_write_raw_P(tri_layer_image[layer_is[2]][1], sizeof(tri_layer_image[0][0]));
oled_set_cursor(14, 3);
oled_set_cursor(col + 13, line + 1);
oled_write_P(PSTR("Diablo3"), layer_state_is(_DIABLO));
oled_advance_page(true);
oled_set_cursor(1, 4);
oled_set_cursor(col, line + 2);
oled_write_raw_P(tri_layer_image[layer_is[0]][2], sizeof(tri_layer_image[0][0]));
oled_set_cursor(5, 4);
oled_set_cursor(col + 4, line + 2);
oled_write_raw_P(tri_layer_image[layer_is[1]][2], sizeof(tri_layer_image[0][0]));
oled_set_cursor(9, 4);
oled_set_cursor(col + 8, line + 2);
oled_write_raw_P(tri_layer_image[layer_is[2]][2], sizeof(tri_layer_image[0][0]));
oled_set_cursor(14, 4);
oled_set_cursor(col + 13, line + 2);
oled_write_P(PSTR("Media"), layer_state_is(_MEDIA));
#else
oled_write_P(PSTR(OLED_RENDER_LAYER_NAME), false);
@ -327,9 +327,12 @@ void render_layer_state(void) {
*
* @param led_usb_state Current keyboard led state
*/
void render_keylock_status(led_t led_usb_state) {
void render_keylock_status(led_t led_usb_state, uint8_t col, uint8_t line) {
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(1, 6);
oled_set_cursor(col, line);
#endif
#ifdef CAPS_WORD_ENABLE
led_usb_state.caps_lock |= is_caps_word_on();
#endif
oled_write_P(PSTR(OLED_RENDER_LOCK_NAME), false);
#if !defined(OLED_DISPLAY_VERBOSE)
@ -348,8 +351,9 @@ void render_keylock_status(led_t led_usb_state) {
* @brief Renders the matrix scan rate to the host system
*
*/
void render_matrix_scan_rate(uint8_t padding) {
void render_matrix_scan_rate(uint8_t padding, uint8_t col, uint8_t line) {
#ifdef DEBUG_MATRIX_SCAN_RATE
oled_set_cursor(col, line);
oled_write_P(PSTR("MS:"), false);
if (padding) {
for (uint8_t n = padding; n > 0; n--) {
@ -365,10 +369,10 @@ void render_matrix_scan_rate(uint8_t padding) {
*
* @param modifiers Modifiers to check against (real, weak, onesheot, etc;)
*/
void render_mod_status(uint8_t modifiers) {
void render_mod_status(uint8_t modifiers, uint8_t col, uint8_t line) {
static const char PROGMEM mod_status[5][3] = {{0xE8, 0xE9, 0}, {0xE4, 0xE5, 0}, {0xE6, 0xE7, 0}, {0xEA, 0xEB, 0}, {0xEC, 0xED, 0}};
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(1, 5);
oled_set_cursor(col, line);
#endif
oled_write_P(PSTR(OLED_RENDER_MODS_NAME), false);
#if defined(OLED_DISPLAY_VERBOSE)
@ -393,7 +397,7 @@ void render_mod_status(uint8_t modifiers) {
extern bool swap_hands;
#endif
void render_bootmagic_status(void) {
void render_bootmagic_status(uint8_t col, uint8_t line) {
/* Show Ctrl-Gui Swap options */
static const char PROGMEM logo[][2][3] = {
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
@ -402,7 +406,8 @@ void render_bootmagic_status(void) {
bool is_bootmagic_on;
#ifdef OLED_DISPLAY_VERBOSE
oled_set_cursor(7, 3);
oled_set_cursor(col, line);
// oled_set_cursor(7, 3);
is_bootmagic_on = !keymap_config.swap_lctl_lgui;
#else
is_bootmagic_on = keymap_config.swap_lctl_lgui;
@ -435,7 +440,7 @@ void render_bootmagic_status(void) {
oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), keymap_config.no_gui);
#endif
#ifdef OLED_DISPLAY_VERBOSE
oled_set_cursor(7, 4);
oled_set_cursor(col, line + 1);
if (keymap_config.swap_lctl_lgui) {
oled_write_P(logo[1][1], is_bootmagic_on);
} else {
@ -455,7 +460,7 @@ void render_bootmagic_status(void) {
extern bool tap_toggling;
#endif
void render_user_status(void) {
void render_user_status(uint8_t col, uint8_t line) {
#ifdef AUDIO_ENABLE
bool is_audio_on = false, l_is_clicky_on = false;
# ifdef SPLIT_KEYBOARD
@ -472,7 +477,7 @@ void render_user_status(void) {
# endif
#endif
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(1, 5);
oled_set_cursor(col, line);
#endif
oled_write_P(PSTR(OLED_RENDER_USER_NAME), false);
#if !defined(OLED_DISPLAY_VERBOSE)
@ -523,9 +528,27 @@ void render_user_status(void) {
#endif
}
void render_wpm(uint8_t padding) {
#ifdef WPM_ENABLE
void render_rgb_hsv(uint8_t col, uint8_t line) {
oled_set_cursor(col, line);
oled_write_P(PSTR("HSV: "), false);
#ifdef RGB_MATRIX_ENABLE
oled_write(get_u8_str(rgb_matrix_get_hue(), ' '), false);
oled_write_P(PSTR(", "), false);
oled_write(get_u8_str(rgb_matrix_get_sat(), ' '), false);
oled_write_P(PSTR(", "), false);
oled_write(get_u8_str(rgb_matrix_get_val(), ' '), false);
#elif RGBLIGHT_ENABLE
oled_write(get_u8_str(rgblight_get_hue(), ' '), false);
oled_write_P(PSTR(", "), false);
oled_write(get_u8_str(rgblight_get_sat(), ' '), false);
oled_write_P(PSTR(", "), false);
oled_write(get_u8_str(rgblight_get_val(), ' '), false);
#endif
}
void render_wpm(uint8_t padding, uint8_t col, uint8_t line) {
#ifdef WPM_ENABLE
oled_set_cursor(col, line);
oled_write_P(PSTR(OLED_RENDER_WPM_COUNTER), false);
if (padding) {
for (uint8_t n = padding; n > 0; n--) {
@ -591,7 +614,8 @@ void render_wpm_graph(uint8_t max_lines_graph, uint8_t vertical_offset) {
}
#if defined(POINTING_DEVICE_ENABLE)
void render_pointing_dpi_status(uint16_t cpi, uint8_t padding) {
void render_pointing_dpi_status(uint16_t cpi, uint8_t padding, uint8_t col, uint8_t line) {
oled_set_cursor(col, line);
oled_write_P(PSTR("CPI:"), false);
if (padding) {
for (uint8_t n = padding - 1; n > 0; n--) {
@ -603,13 +627,6 @@ void render_pointing_dpi_status(uint16_t cpi, uint8_t padding) {
}
#endif
__attribute__((weak)) void oled_driver_render_logo_right(void) {
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(0, 1);
#endif
render_default_layer_state();
}
// WPM-responsive animation stuff here
#define OLED_SLEEP_FRAMES 2
#define OLED_SLEEP_SPEED 10 // below this wpm value your animation will idle
@ -635,7 +652,7 @@ __attribute__((weak)) void oled_driver_render_logo_right(void) {
static uint8_t animation_frame = 0;
static uint8_t animation_type = 0;
void render_kitty(void) {
void render_kitty(uint8_t col, uint8_t line) {
// Images credit j-inc(/James Incandenza) and pixelbenny.
// Credit to obosob for initial animation approach.
// heavily modified by drashna because he's a glutton for punishment
@ -712,11 +729,44 @@ void render_kitty(void) {
// clang-format on
for (uint8_t i = 0; i < 4; i++) {
oled_set_cursor(1, i + 1);
oled_set_cursor(col, line + i);
oled_write_raw_P(animation[animation_type][animation_frame][i], OLED_ANIM_SIZE);
}
}
void render_unicode_mode(uint8_t col, uint8_t line) {
#ifdef CUSTOM_UNICODE_ENABLE
oled_set_cursor(col, line);
oled_write_ln_P(PSTR("Unicode:"), false);
switch (typing_mode) {
case UCTM_WIDE:
oled_write_P(PSTR(" Wide"), false);
break;
case UCTM_SCRIPT:
oled_write_P(PSTR(" Script"), false);
break;
case UCTM_BLOCKS:
oled_write_P(PSTR(" Blocks"), false);
break;
case UCTM_REGIONAL:
oled_write_P(PSTR(" Regional"), false);
break;
case UCTM_AUSSIE:
oled_write_P(PSTR(" Aussie"), false);
break;
case UCTM_ZALGO:
oled_write_P(PSTR(" Zalgo"), false);
break;
case UCTM_NO_MODE:
oled_write_P(PSTR(" Normal"), false);
break;
default:
oled_write_P(PSTR(" Unknown"), false);
break;
}
#endif
}
uint32_t kitty_animation_phases(uint32_t triger_time, void *cb_arg) {
static uint32_t anim_frame_duration = 500;
#ifdef CUSTOM_POINTING_DEVICE
@ -748,34 +798,8 @@ uint32_t kitty_animation_phases(uint32_t triger_time, void *cb_arg) {
return anim_frame_duration;
}
void oled_driver_render_logo_left(void) {
#if defined(OLED_DISPLAY_VERBOSE)
oled_set_cursor(0, 1);
render_kitty();
# if defined(KEYBOARD_handwired_tractyl_manuform)
oled_set_cursor(7, 0);
oled_write_P(PSTR("Tractyl"), true);
# elif defined(KEYBOARD_bastardkb_charybdis)
oled_set_cursor(6, 0);
oled_write_P(PSTR("Charybdis"), true);
# elif defined(KEYBOARD_splitkb_kyria)
oled_set_cursor(7, 0);
oled_write_P(PSTR("SplitKB"), true);
# else
oled_set_cursor(8, 0);
oled_write_P(PSTR("Left"), true);
# endif
oled_set_cursor(7, 1);
# if defined(WPM_ENABLE)
render_wpm(1);
# elif defined(DEBUG_MATRIX_SCAN_RATE)
render_matrix_scan_rate(2);
# endif
oled_set_cursor(7, 2);
# if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
render_pointing_dpi_status(charybdis_get_pointer_sniping_enabled() ? charybdis_get_pointer_sniping_dpi() : charybdis_get_pointer_default_dpi(), 1);
void render_mouse_mode(uint8_t col, uint8_t line) {
#if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
// credit and thanks to jaspertandy on discord for these images
static const char PROGMEM mouse_logo[3][2][16] = {// mouse icon
{{0, 0, 0, 252, 2, 2, 2, 58, 2, 2, 2, 252, 0, 0, 0, 0}, {0, 0, 63, 96, 64, 64, 64, 64, 64, 64, 64, 96, 63, 0, 0, 0}},
@ -785,27 +809,20 @@ void oled_driver_render_logo_left(void) {
{{0, 0, 112, 136, 156, 2, 15, 1, 15, 2, 140, 68, 56, 0, 0, 0}, {0, 0, 2, 6, 15, 28, 60, 124, 60, 28, 15, 6, 2, 0, 0, 0}}};
uint8_t image_index = 0;
# ifdef OLED_DISPLAY_TEST
# ifdef OLED_DISPLAY_TEST
image_index = animation_frame;
# else
# else
if (charybdis_get_pointer_sniping_enabled()) {
image_index = 1;
} else if (charybdis_get_pointer_dragscroll_enabled()) {
image_index = 2;
}
# endif
oled_set_cursor(17, 1);
oled_write_raw_P(mouse_logo[image_index][0], 16);
oled_set_cursor(17, 2);
oled_write_raw_P(mouse_logo[image_index][1], 16);
# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
render_matrix_scan_rate(2);
# endif
oled_set_cursor(0, 5);
#else
render_default_layer_state();
oled_set_cursor(col, line);
oled_write_raw_P(mouse_logo[image_index][0], 16);
oled_set_cursor(col, line + 1);
oled_write_raw_P(mouse_logo[image_index][1], 16);
#endif
}
@ -823,27 +840,73 @@ void render_status_right(void) {
oled_set_cursor(8, 0);
oled_write_P(PSTR("Right"), true);
#endif
oled_driver_render_logo_right();
#if defined(OLED_DISPLAY_VERBOSE)
render_default_layer_state(1, 1);
#else
render_default_layer_state(0, 0);
#endif
/* Show Keyboard Layout */
render_layer_state();
render_mod_status(get_mods() | get_oneshot_mods());
#if !defined(OLED_DISPLAY_VERBOSE) && defined(WPM_ENABLE) && !defined(CONVERT_TO_PROTON_C)
render_layer_state(1, 2);
render_mod_status(get_mods() | get_oneshot_mods(), 1, 5);
#if !defined(OLED_DISPLAY_VERBOSE) && defined(WPM_ENABLE) && !defined(STM32F303xC)
render_wpm(2);
#endif
render_keylock_status(host_keyboard_led_state());
render_keylock_status(host_keyboard_led_state(), 1, 6);
}
void render_status_left(void) {
oled_driver_render_logo_left();
#if defined(OLED_DISPLAY_VERBOSE)
render_kitty(0, 1);
# if defined(KEYBOARD_handwired_tractyl_manuform)
oled_set_cursor(7, 0);
oled_write_P(PSTR("Tractyl"), true);
# elif defined(KEYBOARD_bastardkb_charybdis)
oled_set_cursor(6, 0);
oled_write_P(PSTR("Charybdis"), true);
# elif defined(KEYBOARD_splitkb_kyria)
oled_set_cursor(7, 0);
oled_write_P(PSTR("SplitKB"), true);
# elif defined(KEYBOARD_handwired_fingerpunch_rockon)
oled_set_cursor(7, 0);
oled_write_P(PSTR("Rock On"), true);
# else
oled_set_cursor(8, 0);
oled_write_P(PSTR("Left"), true);
# endif
# if defined(WPM_ENABLE)
render_wpm(1, 7, 1);
# elif defined(DEBUG_MATRIX_SCAN_RATE)
render_matrix_scan_rate(1, 7, 1);
# endif
# if (defined(KEYBOARD_bastardkb_charybdis) || defined(KEYBOARD_handwired_tractyl_manuform)) && defined(POINTING_DEVICE_ENABLE)
render_pointing_dpi_status(charybdis_get_pointer_sniping_enabled() ? charybdis_get_pointer_sniping_dpi() : charybdis_get_pointer_default_dpi(), 1, 7, 2);
render_mouse_mode(17, 1);
# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
render_matrix_scan_rate(1, 7, 2);
# endif
/* Show Keyboard Layout */
render_bootmagic_status();
render_user_status();
render_bootmagic_status(7, 3);
render_user_status(1, 5);
render_keylogger_status();
render_keylogger_status(1, 6);
#else
render_default_layer_state(0, 0);
/* Show Keyboard Layout */
render_bootmagic_status(7, 3);
render_user_status(1, 5);
render_keylogger_status(1, 6);
#endif
}
__attribute__((weak)) void oled_render_large_display(bool side) {}
__attribute__((weak)) void oled_render_large_display(bool side) {
if (!side) {
render_unicode_mode(1, 14);
}
}
__attribute__((weak)) oled_rotation_t oled_init_keymap(oled_rotation_t rotation) {
return rotation;
@ -895,14 +958,12 @@ bool oled_task_user(void) {
#endif
render_status_left();
#if defined(OLED_DISPLAY_128X128)
oled_set_cursor(0, 7);
oled_render_large_display(true);
#endif
#ifndef OLED_DISPLAY_TEST
} else {
render_status_right();
# if defined(OLED_DISPLAY_128X128)
oled_set_cursor(0, 7);
oled_render_large_display(false);
# endif
}