From 8bd73d44555ecb50d0da9bb0e1e48c07b9764e35 Mon Sep 17 00:00:00 2001 From: Jouke Witteveen Date: Fri, 30 Sep 2022 22:24:43 +0200 Subject: Fix keyboard pet OLED timeout logic (#17189) The animation itself turns the screen on, preventing the normal timeout from ever triggering. --- keyboards/crkbd/keymaps/bermeo/keymap.c | 11 +++---- .../kikoslab/ellora65/keymaps/default/keymap.c | 29 ++++++++--------- keyboards/kikoslab/ellora65/keymaps/via/keymap.c | 30 +++++++++--------- keyboards/sofle/keymaps/flare576/graphics.c | 8 ++--- keyboards/sofle/keymaps/helltm/keymap.c | 29 ++++++++--------- keyboards/sofle/keymaps/noqmk/keymap.c | 36 ++++++++++------------ 6 files changed, 71 insertions(+), 72 deletions(-) (limited to 'keyboards') diff --git a/keyboards/crkbd/keymaps/bermeo/keymap.c b/keyboards/crkbd/keymaps/bermeo/keymap.c index 8c3d368ca0..d204fd9f3f 100644 --- a/keyboards/crkbd/keymaps/bermeo/keymap.c +++ b/keyboards/crkbd/keymaps/bermeo/keymap.c @@ -273,7 +273,6 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { # define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024 /* timers */ uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; /* current frame */ uint8_t current_frame = 0; /* status variables */ @@ -351,19 +350,19 @@ static void render_luna(int LUNA_X, int LUNA_Y) { current_frame = (current_frame + 1) % 2; /* draw */ if (isBarking) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(bark[current_frame], ANIM_SIZE); } else if (isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } /* animation timer */ diff --git a/keyboards/kikoslab/ellora65/keymaps/default/keymap.c b/keyboards/kikoslab/ellora65/keymaps/default/keymap.c index 625305c557..df0b5b046c 100644 --- a/keyboards/kikoslab/ellora65/keymaps/default/keymap.c +++ b/keyboards/kikoslab/ellora65/keymaps/default/keymap.c @@ -68,7 +68,6 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { /* timers */ uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; /* current frame */ uint8_t current_frame = 0; @@ -160,35 +159,37 @@ static void render_luna(int LUNA_X, int LUNA_Y) { /* current status */ if (led_usb_state.caps_lock) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(bark[current_frame], ANIM_SIZE); } else if (isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } +# if OLED_TIMEOUT > 0 + /* the animation prevents the normal timeout from occuring */ + if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) { + oled_off(); + return; + } else { + oled_on(); + } +# endif + /* animation timer */ if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { anim_timer = timer_read32(); animate_luna(); } - - /* this fixes the screen on and off bug */ - if (current_wpm > 0) { - oled_on(); - anim_sleep = timer_read32(); - } else if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } } diff --git a/keyboards/kikoslab/ellora65/keymaps/via/keymap.c b/keyboards/kikoslab/ellora65/keymaps/via/keymap.c index 8275718bcb..aff4a92089 100644 --- a/keyboards/kikoslab/ellora65/keymaps/via/keymap.c +++ b/keyboards/kikoslab/ellora65/keymaps/via/keymap.c @@ -78,7 +78,6 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) { /* timers */ uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; /* current frame */ uint8_t current_frame = 0; @@ -170,38 +169,39 @@ static void render_luna(int LUNA_X, int LUNA_Y) { /* current status */ if (led_usb_state.caps_lock) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(bark[current_frame], ANIM_SIZE); } else if (isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } +# if OLED_TIMEOUT > 0 + /* the animation prevents the normal timeout from occuring */ + if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) { + oled_off(); + return; + } else { + oled_on(); + } +# endif + /* animation timer */ if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { anim_timer = timer_read32(); animate_luna(); } - - /* this fixes the screen on and off bug */ - if (current_wpm > 0) { - oled_on(); - anim_sleep = timer_read32(); - } else if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } } - /* KEYBOARD PET END */ static void print_status_narrow(void) { diff --git a/keyboards/sofle/keymaps/flare576/graphics.c b/keyboards/sofle/keymaps/flare576/graphics.c index 918334a508..8cade61668 100644 --- a/keyboards/sofle/keymaps/flare576/graphics.c +++ b/keyboards/sofle/keymaps/flare576/graphics.c @@ -156,16 +156,16 @@ static void render_luna(int LUNA_X, int LUNA_Y) { current_frame = (current_frame + 1) % 2; if(isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if(current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if(current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } diff --git a/keyboards/sofle/keymaps/helltm/keymap.c b/keyboards/sofle/keymaps/helltm/keymap.c index c0fd5edb5e..4624bc4700 100644 --- a/keyboards/sofle/keymaps/helltm/keymap.c +++ b/keyboards/sofle/keymaps/helltm/keymap.c @@ -188,7 +188,6 @@ static uint16_t held_shift = 0; /* timers */ uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; /* current frame */ uint8_t current_frame = 0; @@ -280,35 +279,37 @@ static void render_luna(int LUNA_X, int LUNA_Y) { /* current status */ if (led_usb_state.caps_lock) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(bark[current_frame], ANIM_SIZE); } else if (isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } +# if OLED_TIMEOUT > 0 + /* the animation prevents the normal timeout from occuring */ + if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) { + oled_off(); + return; + } else { + oled_on(); + } +# endif + /* animation timer */ if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { anim_timer = timer_read32(); animate_luna(); } - - /* this fixes the screen on and off bug */ - if (current_wpm > 0) { - oled_on(); - anim_sleep = timer_read32(); - } else if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - } } /* KEYBOARD PET END */ diff --git a/keyboards/sofle/keymaps/noqmk/keymap.c b/keyboards/sofle/keymaps/noqmk/keymap.c index ae92a7ec7f..29afbcb842 100644 --- a/keyboards/sofle/keymaps/noqmk/keymap.c +++ b/keyboards/sofle/keymaps/noqmk/keymap.c @@ -167,7 +167,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #ifdef OLED_ENABLE bool show_lock = true; // this is used to display the lock icon and disable keypresses when the keyboard is locked -bool animate = true; // this variable is used to fix the flickering bug static void render_logo(void) { static const char PROGMEM no_qmk[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -230,7 +229,6 @@ static const char PROGMEM mac_logo[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* timers */ uint32_t anim_timer = 0; -uint32_t anim_sleep = 0; /* current frame */ uint8_t current_frame = 0; @@ -322,36 +320,36 @@ static void render_luna(int LUNA_X, int LUNA_Y) { /* current status */ if (led_usb_state.caps_lock) { - oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(bark[current_frame], ANIM_SIZE); } else if (isSneaking) { - oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sneak[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_WALK_SPEED) { - oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(sit[current_frame], ANIM_SIZE); } else if (current_wpm <= MIN_RUN_SPEED) { - oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(walk[current_frame], ANIM_SIZE); } else { - oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE); + oled_write_raw_P(run[current_frame], ANIM_SIZE); } } - /* animation timer, stops the animation logic when the oled is turned off */ - if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION && animate == true) { - anim_timer = timer_read32(); - animate_luna(); +# if OLED_TIMEOUT > 0 + /* the animation prevents the normal timeout from occuring */ + if (last_input_activity_elapsed() > OLED_TIMEOUT && last_led_activity_elapsed() > OLED_TIMEOUT) { + oled_off(); + return; + } else { + oled_on(); } +# endif - /* this fixes the screen on and off bug by disabling the animation logic when the oled is off */ - if (current_wpm > 0) { - oled_on(); - anim_sleep = timer_read32(); - animate = true; - } else if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { - oled_off(); - animate = false; + /* animation timer */ + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animate_luna(); } } -- cgit v1.2.3