From 33d568e29b454e5ead83b9e7216bd807549cc9b6 Mon Sep 17 00:00:00 2001 From: Takeshi ISHII <2170248+mtei@users.noreply.github.com> Date: Thu, 19 May 2022 02:33:17 +0900 Subject: Update mtei's keymap (helix/rev2:five_rows, helix/pico:mtei, helix/rev3_5rows:five_rows) (#16966) * add users/mtei/key_blocks.h This change does not alter the binary of the build result. Moved common macro definitions in the following files to users/mtei/key_blocks.h. * keyboards/helix/rev2/keymaps/five_rows/keymap.c * keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c * remove INIT_HELIX_OLED() in helix:five_rows This change does not alter the binary of the build result. * update helix/pico/keymaps/mtei/keymap.c Changed helix/pico/keymaps/mtei/keymap.c to use users/mtei/key_blocks.h. This change does not alter the binary of the build result. * Remove old SSD1306OLED code from users/mtei/oled_display.c This change does not alter the binary of the build result. * add options ENABLE_COLEMAK, ENABLE_DVORAK and ENABLE_EUCALYN into five_rows/keymap.c * add users/mtei/{config.h,rules.mk,user_featues.mk,user_options.mk} * move layer_names[] from users/mtei/oled_display.c to keymaps/five_rows/keymap.c * Update keyboards/helix/pico/keymaps/mtei/config.h Co-authored-by: Ryan * Update keyboards/helix/pico/keymaps/mtei/config.h Co-authored-by: Ryan * Update keyboards/helix/pico/keymaps/mtei/keymap.c Co-authored-by: Ryan * Update keyboards/helix/rev2/keymaps/five_rows/config.h Co-authored-by: Ryan * Update keyboards/helix/rev2/keymaps/five_rows/config.h Co-authored-by: Ryan * Update keyboards/helix/rev2/keymaps/five_rows/keymap.c Co-authored-by: Ryan * Update keyboards/helix/rev3_5rows/keymaps/five_rows/config.h Co-authored-by: Ryan * Update keyboards/helix/rev3_5rows/keymaps/five_rows/config.h Co-authored-by: Ryan * Update keyboards/helix/rev3_5rows/keymaps/five_rows/keymap.c Co-authored-by: Ryan * Update users/mtei/config.h Co-authored-by: Ryan * Update users/mtei/config.h Co-authored-by: Ryan * Update users/mtei/cpp_map.h Co-authored-by: Ryan * Update users/mtei/cpp_map.h Co-authored-by: Ryan * Update users/mtei/debug_config.h Co-authored-by: Ryan * Update users/mtei/debug_config.h Co-authored-by: Ryan * Update users/mtei/layer_number_util.h Co-authored-by: Ryan Co-authored-by: Ryan --- users/mtei/oled_display.c | 141 ++++++++-------------------------------------- 1 file changed, 25 insertions(+), 116 deletions(-) (limited to 'users/mtei/oled_display.c') diff --git a/users/mtei/oled_display.c b/users/mtei/oled_display.c index 6a16b23b0e..878dd29e6f 100644 --- a/users/mtei/oled_display.c +++ b/users/mtei/oled_display.c @@ -14,32 +14,17 @@ * along with this program. If not, see . */ -#include QMK_KEYBOARD_H #include -#ifdef CONSOLE_ENABLE - #include "print.h" -#endif -#ifdef SSD1306OLED - #include "ssd1306.h" -#endif #include -#include "layer_number.h" +#include QMK_KEYBOARD_H #include "pseudo_sprintf.h" extern int current_default_layer; -void init_helix_oled(void) { -#ifdef SSD1306OLED - //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h - iota_gfx_init(!has_usb()); // turns on the display -#endif -} - -//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h -#if defined(SSD1306OLED) || defined(OLED_ENABLE) +//OLED update loop +#if defined(OLED_ENABLE) -# if defined(OLED_ENABLE) oled_rotation_t oled_init_user(oled_rotation_t rotation) { if (is_keyboard_master()) { return OLED_ROTATION_0; @@ -47,35 +32,12 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; } } -# else -# define oled_write(data,flag) matrix_write(matrix, data) -# define oled_write_P(data,flag) matrix_write_P(matrix, data) -# endif - -# ifdef SSD1306OLED -void matrix_scan_user(void) { - iota_gfx_task(); // this is what updates the display continuously -} - -void matrix_update(struct CharacterMatrix *dest, - const struct CharacterMatrix *source) { - if (memcmp(dest->display, source->display, sizeof(dest->display))) { - memcpy(dest->display, source->display, sizeof(dest->display)); - dest->dirty = true; - } -} -# endif #ifndef PSEUDO_SPRINTF_DEFINED #include "pseudo_sprintf.c" #endif -# ifdef SSD1306OLED -static void render_logo(struct CharacterMatrix *matrix) { -# else static void render_logo(void) { -# endif - static const char helix_logo[] PROGMEM = { 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94, 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4, @@ -98,57 +60,26 @@ static void render_logo(void) { bufp = sprints(bufp, " "); # endif oled_write(buf, false); -# ifndef SSD1306OLED } else { # ifdef DEBUG_MATRIX_SCAN_RATE bufp = sprintd(buf, " scan:", get_matrix_scan_rate()); oled_write(buf, false); -# endif +# endif // DEBUG_MATRIX_SCAN_RATE oled_write_P( PSTR("\n"), false); -# endif } -# else +# else // ifndef RGBLIGHT_ENABLE # ifdef DEBUG_MATRIX_SCAN_RATE bufp = sprintd(buf, " scan:", get_matrix_scan_rate()); bufp = sprints(bufp, " "); oled_write(buf, false); # endif -# endif +# endif // RGBLIGHT_ENABLE } -static const char Qwerty_name[] PROGMEM = " Qwerty"; -static const char Colemak_name[] PROGMEM = " Colemak"; -static const char Dvorak_name[] PROGMEM = " Dvorak"; -static const char Eucalyn_name[] PROGMEM = " Eucalyn"; -static const char Keypad_name[] PROGMEM = " Keypad"; - -static const char AUX_name[] PROGMEM = ":AUX"; -static const char KAUX_name[] PROGMEM = ":00"; -static const char Padfunc_name[] PROGMEM = ":PadFunc"; -static const char Lower_name[] PROGMEM = ":Func"; -static const char Raise_name[] PROGMEM = ":Extra"; -static const char Adjust_name[] PROGMEM = ":Adjust"; - -static const char *layer_names[] = { - [_QWERTY] = Qwerty_name, - [_COLEMAK] = Colemak_name, - [_DVORAK] = Dvorak_name, - [_EUCALYN]= Eucalyn_name, - [_KEYPAD] = Keypad_name, - [_AUX] = AUX_name, - [_KAUX] = KAUX_name, - [_LOWER] = Lower_name, - [_RAISE] = Raise_name, - [_PADFUNC]= Padfunc_name, - [_ADJUST] = Adjust_name -}; +/* weak reference */ __attribute__((weak)) extern const char *layer_names[]; +/* weak reference */ __attribute__((weak)) extern const size_t num_of_layer_names; -# ifdef SSD1306OLED -void render_status(struct CharacterMatrix *matrix) { -# else void render_status(void) { -# endif - // Render to mode icon static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}}; if(keymap_config.swap_lalt_lgui==false){ @@ -162,21 +93,29 @@ void render_status(void) { } // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below - int name_num; + int name_num, max_name_num; uint32_t lstate; - oled_write_P(layer_names[current_default_layer], false); -# ifdef DEBUG_MATRIX_SCAN_RATE char buf[16]; + max_name_num = 0; + if (layer_names != NULL) { + max_name_num = num_of_layer_names; + oled_write_P(layer_names[current_default_layer], false); + } else { + sprintd(buf, " layer:", current_default_layer); + oled_write(buf, false); + } +# ifdef DEBUG_MATRIX_SCAN_RATE sprintd(buf, " scan:", get_matrix_scan_rate()); oled_write(buf, false); # endif oled_write_P(PSTR("\n"), false); - for (lstate = layer_state, name_num = 0; - lstate && name_num < sizeof(layer_names)/sizeof(char *); - lstate >>=1, name_num++) { + for (lstate = layer_state, name_num = 0; lstate; lstate >>=1, name_num++) { if ((lstate & 1) != 0) { - if (layer_names[name_num]) { + if (name_num < max_name_num && layer_names[name_num]) { oled_write_P(layer_names[name_num], false); + } else { + sprintd(buf, ":", name_num); + oled_write(buf, false); } } } @@ -189,42 +128,13 @@ void render_status(void) { oled_write_P(led_state.scroll_lock ? PSTR("SCLK ") : PSTR(" "), false); } -# ifdef SSD1306OLED -# if OLED_UPDATE_INTERVAL > 0 -uint16_t oled_update_timeout; -# endif - -void iota_gfx_task_user(void) { - struct CharacterMatrix matrix; - -# if DEBUG_TO_SCREEN - if (debug_enable) { - return; - } -# endif - -#if OLED_UPDATE_INTERVAL > 0 - if (timer_elapsed(oled_update_timeout) < OLED_UPDATE_INTERVAL) { - return; - } - oled_update_timeout = timer_read(); -#endif - matrix_clear(&matrix); - if (is_keyboard_master()) { - render_status(&matrix); - } else { - render_logo(&matrix); - } - matrix_update(&display, &matrix); -} -# else bool oled_task_user(void) { -# if DEBUG_TO_SCREEN +# if DEBUG_TO_SCREEN if (debug_enable) { return; } -# endif +# endif if(is_keyboard_master()){ render_status(); @@ -233,6 +143,5 @@ bool oled_task_user(void) { } return false; } -# endif #endif -- cgit v1.2.3