~ruther/qmk_firmware

935af9e9996083c2b7e82f67072899e87c7f45ab — Allen Choi 3 years ago 6d816d9
[Keymap] fixed oled turn-off issue for crkbd:gotham (#16748)

M keyboards/crkbd/keymaps/gotham/README.md => keyboards/crkbd/keymaps/gotham/README.md +0 -1
@@ 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.

M keyboards/crkbd/keymaps/gotham/config.h => keyboards/crkbd/keymaps/gotham/config.h +10 -1
@@ 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


M keyboards/crkbd/keymaps/gotham/keymap.c => keyboards/crkbd/keymaps/gotham/keymap.c +1 -0
@@ 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

M keyboards/crkbd/keymaps/gotham/oled.c => keyboards/crkbd/keymaps/gotham/oled.c +7 -11
@@ 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();
    }