summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllen Choi <37539914+Thunderbird2086@users.noreply.github.com>2022-04-13 16:03:01 +0900
committerGitHub <noreply@github.com>2022-04-13 00:03:01 -0700
commit935af9e9996083c2b7e82f67072899e87c7f45ab (patch)
tree1cfb4041286c784aec89a9492d76a57ca211dfc9
parent6d816d94f7bf132a71cadbd08118469ac28c6480 (diff)
[Keymap] fixed oled turn-off issue for crkbd:gotham (#16748)
-rw-r--r--keyboards/crkbd/keymaps/gotham/README.md1
-rw-r--r--keyboards/crkbd/keymaps/gotham/config.h11
-rw-r--r--keyboards/crkbd/keymaps/gotham/keymap.c1
-rw-r--r--keyboards/crkbd/keymaps/gotham/oled.c18
4 files changed, 18 insertions, 13 deletions
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();
}