|
@@ -114,8 +114,11 @@ bool oled_active = false;
|
|
|
bool oled_scrolling = false;
|
|
|
uint8_t oled_rotation = 0;
|
|
|
uint8_t oled_rotation_width = 0;
|
|
|
-#if !defined(OLED_DISABLE_TIMEOUT)
|
|
|
- uint16_t oled_last_activity;
|
|
|
+#if OLED_TIMEOUT > 0
|
|
|
+ uint32_t oled_timeout;
|
|
|
+#endif
|
|
|
+#if OLED_SCROLL_TIMEOUT > 0
|
|
|
+ uint32_t oled_scroll_timeout;
|
|
|
#endif
|
|
|
|
|
|
// Internal variables to reduce math instructions
|
|
@@ -209,6 +212,13 @@ bool oled_init(uint8_t rotation) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+#if OLED_TIMEOUT > 0
|
|
|
+ oled_timeout = timer_read32() + OLED_TIMEOUT;
|
|
|
+#endif
|
|
|
+#if OLED_SCROLL_TIMEOUT > 0
|
|
|
+ oled_scroll_timeout = timer_read32() + OLED_SCROLL_TIMEOUT;
|
|
|
+#endif
|
|
|
+
|
|
|
oled_clear();
|
|
|
oled_initialized = true;
|
|
|
oled_active = true;
|
|
@@ -457,8 +467,8 @@ void oled_write_ln_P(const char *data, bool invert) {
|
|
|
#endif // defined(__AVR__)
|
|
|
|
|
|
bool oled_on(void) {
|
|
|
-#if !defined(OLED_DISABLE_TIMEOUT)
|
|
|
- oled_last_activity = timer_read();
|
|
|
+#if OLED_TIMEOUT > 0
|
|
|
+ oled_timeout = timer_read32() + OLED_TIMEOUT;
|
|
|
#endif
|
|
|
|
|
|
static const uint8_t PROGMEM display_on[] = { I2C_CMD, DISPLAY_ON };
|
|
@@ -522,6 +532,7 @@ bool oled_scroll_off(void) {
|
|
|
return oled_scrolling;
|
|
|
}
|
|
|
oled_scrolling = false;
|
|
|
+ oled_dirty = -1;
|
|
|
}
|
|
|
return !oled_scrolling;
|
|
|
}
|
|
@@ -549,15 +560,32 @@ void oled_task(void) {
|
|
|
|
|
|
oled_task_user();
|
|
|
|
|
|
+#if OLED_SCROLL_TIMEOUT > 0
|
|
|
+ if (oled_dirty && oled_scrolling) {
|
|
|
+ oled_scroll_timeout = timer_read32() + OLED_SCROLL_TIMEOUT;
|
|
|
+ oled_scroll_off();
|
|
|
+ }
|
|
|
+#endif
|
|
|
+
|
|
|
// Smart render system, no need to check for dirty
|
|
|
oled_render();
|
|
|
|
|
|
// Display timeout check
|
|
|
-#if !defined(OLED_DISABLE_TIMEOUT)
|
|
|
- if (oled_active && timer_elapsed(oled_last_activity) > OLED_TIMEOUT) {
|
|
|
+#if OLED_TIMEOUT > 0
|
|
|
+ if (oled_active && timer_expired32(timer_read32(), oled_timeout)) {
|
|
|
oled_off();
|
|
|
}
|
|
|
#endif
|
|
|
+
|
|
|
+#if OLED_SCROLL_TIMEOUT > 0
|
|
|
+ if (!oled_scrolling && timer_expired32(timer_read32(), oled_scroll_timeout)) {
|
|
|
+#ifdef OLED_SCROLL_TIMEOUT_RIGHT
|
|
|
+ oled_scroll_right();
|
|
|
+#else
|
|
|
+ oled_scroll_left();
|
|
|
+#endif
|
|
|
+ }
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
__attribute__((weak))
|