Skip to content

Commit

Permalink
[Keymap] fixed oled turn-off issue for crkbd:gotham (#16748)
Browse files Browse the repository at this point in the history
  • Loading branch information
Thunderbird2086 authored Apr 13, 2022
1 parent 6d816d9 commit 935af9e
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 13 deletions.
1 change: 0 additions & 1 deletion keyboards/crkbd/keymaps/gotham/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
11 changes: 10 additions & 1 deletion keyboards/crkbd/keymaps/gotham/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
1 change: 1 addition & 0 deletions keyboards/crkbd/keymaps/gotham/keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 7 additions & 11 deletions keyboards/crkbd/keymaps/gotham/oled.c
Original file line number Diff line number Diff line change
Expand Up @@ -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] = {
Expand Down Expand Up @@ -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();
}
Expand Down

0 comments on commit 935af9e

Please sign in to comment.