From 7936e7a139a65d7722318f78fca416aafa67e355 Mon Sep 17 00:00:00 2001
From: Jouke Witteveen <j.witteveen@gmail.com>
Date: Fri, 30 Sep 2022 22:24:43 +0200
Subject: [PATCH] Fix keyboard pet OLED timeout logic (#17189)

The animation itself turns the screen on, preventing the normal timeout
from ever triggering.
---
 .../kikoslab/ellora65/keymaps/via/keymap.c    | 30 +++++++++----------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/keyboards/kikoslab/ellora65/keymaps/via/keymap.c b/keyboards/kikoslab/ellora65/keymaps/via/keymap.c
index 8275718b..aff4a920 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) {