]> git.tnoah.ca Git - lora-radio.git/commitdiff
Improve screensaver to be non-blocking
authorjacob.eva <x00010@disroot.org>
Fri, 30 Aug 2024 14:31:20 +0000 (15:31 +0100)
committerjacob.eva <x00010@disroot.org>
Fri, 30 Aug 2024 14:31:20 +0000 (15:31 +0100)
Display.h

index ec36120279db9906ae351dd49b38e5051b2f7843..a23ca48a5066e5a34717502a8222b2f3290e2dbc 100644 (file)
--- a/Display.h
+++ b/Display.h
@@ -129,8 +129,12 @@ uint8_t disp_ext_fb = false;
 unsigned char fb[512];
 uint32_t last_disp_update = 0;
 int disp_update_interval = 1000/disp_target_fps;
+
+#define SCREENSAVER_TIME 500 // ms
 uint32_t last_screensaver = 0;
 uint32_t screensaver_interval = 600000;
+bool screensaver_enabled = false;
+
 uint32_t last_page_flip = 0;
 uint32_t last_interface_page_flip = 0;
 int page_interval = 4000;
@@ -1113,11 +1117,15 @@ void update_display(bool blank = false) {
       update_stat_area();
       update_disp_area();
       display.display();
-      if (millis()-last_screensaver >= screensaver_interval) {
+      // Invert display to protect against OLED screen burn in
+      if (millis()-last_screensaver >= screensaver_interval+SCREENSAVER_TIME && screensaver_enabled) {
+            display.invertDisplay(0);
+            last_screensaver = millis();
+            screensaver_enabled = false;
+      }
+      else if (millis()-last_screensaver >= screensaver_interval) {
         display.invertDisplay(1);
-        delay(500);
-        display.invertDisplay(0);
-        last_screensaver = millis();
+        screensaver_enabled = true;
       }
       #elif DISP_H == 122 && (DISPLAY == EINK_BW || DISPLAY == EINK_3C)
       display.setFullWindow();