From 935af9e9996083c2b7e82f67072899e87c7f45ab Mon Sep 17 00:00:00 2001 From: Allen Choi <37539914+Thunderbird2086@users.noreply.github.com> Date: Wed, 13 Apr 2022 16:03:01 +0900 Subject: [Keymap] fixed oled turn-off issue for crkbd:gotham (#16748) --- keyboards/crkbd/keymaps/gotham/README.md | 1 - keyboards/crkbd/keymaps/gotham/config.h | 11 ++++++++++- keyboards/crkbd/keymaps/gotham/keymap.c | 1 + keyboards/crkbd/keymaps/gotham/oled.c | 18 +++++++----------- 4 files changed, 18 insertions(+), 13 deletions(-) (limited to 'keyboards/crkbd') diff --git a/keyboards/crkbd/keymaps/gotham/README.md b/keyboards/crkbd/keymaps/gotham/README.md index 23c1d4fdd8..88120ae888 100644 --- a/keyboards/crkbd/keymaps/gotham/README.md +++ b/keyboards/crkbd/keymaps/gotham/README.md @@ -10,7 +10,6 @@ My take on the 40% layout with programming in mind. Do read about the layers, it ## Custom OLED This keymap includes custom OLED font and code. The font contains some logos and status indidcators for some of the features I use (RGB and Audio). Enable OLED in rukes.mk to check it out. Feel free to reuse the font or parts of it. -__KNOWN BUG:__ When the computer sleeps, one of the OLEDs is always on (they don't turn off on their own, and the timeout doesn't work). I haven't been able to figure out what's going on there and am open to suggestions/PRs. ## Flashing Flash using `make crkbd:gotham:avrdude` for Pro Micro and `make crkbd:gotham:dfu` for Elite-C. diff --git a/keyboards/crkbd/keymaps/gotham/config.h b/keyboards/crkbd/keymaps/gotham/config.h index 1ff008b2de..45fe8c37a8 100644 --- a/keyboards/crkbd/keymaps/gotham/config.h +++ b/keyboards/crkbd/keymaps/gotham/config.h @@ -20,7 +20,16 @@ # define AUDIO_CLICKY #endif -#define OLED_FONT_H "keyboards/crkbd/keymaps/gotham/glcdfont.c" +#ifdef OLED_ENABLE +# define OLED_FONT_H "keyboards/crkbd/keymaps/gotham/glcdfont.c" +# define SPLIT_LAYER_STATE_ENABLE +# define SPLIT_LED_STATE_ENABLE +# define SPLIT_MODS_ENABLE +# define SPLIT_OLED_ENABLE +# undef OLED_TIMEOUT + // due to timer_read() for render_prompt(), we have own implementation of oled time out +# define OLED_KEY_TIMEOUT 30000 +#endif #define RGBLIGHT_SLEEP diff --git a/keyboards/crkbd/keymaps/gotham/keymap.c b/keyboards/crkbd/keymaps/gotham/keymap.c index 7cf4b7fd50..a258794049 100644 --- a/keyboards/crkbd/keymaps/gotham/keymap.c +++ b/keyboards/crkbd/keymaps/gotham/keymap.c @@ -81,6 +81,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { #ifdef OLED_ENABLE if (record->event.pressed) { oled_timer = timer_read(); + is_key_processed = true; add_keylog(keycode); } #endif diff --git a/keyboards/crkbd/keymaps/gotham/oled.c b/keyboards/crkbd/keymaps/gotham/oled.c index baacc86b18..6bf1233659 100644 --- a/keyboards/crkbd/keymaps/gotham/oled.c +++ b/keyboards/crkbd/keymaps/gotham/oled.c @@ -144,6 +144,7 @@ void render_feature_status(void) { // Keylogger #define KEYLOGGER_LENGTH 5 static uint16_t oled_timer = 0; +static bool is_key_processed = true; static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"}; // clang-format off static const char PROGMEM code_to_name[0xFF] = { @@ -247,18 +248,13 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { } bool oled_task_user(void) { - if (timer_elapsed(oled_timer) > 10000) { - oled_off(); - return; - } - #ifndef SPLIT_KEYBOARD - else { - oled_on(); - } - #endif - if (is_keyboard_master()) { - render_status_main(); + if (is_key_processed && (timer_elapsed(oled_timer) < OLED_KEY_TIMEOUT)) { + render_status_main(); + } else { + is_key_processed = false; + oled_off(); + } } else { render_status_secondary(); } -- cgit v1.2.3