@@ -533,6 +533,10 @@ void Screen::handleSetOn(bool on, FrameCallback einkScreensaver)
533533 }
534534}
535535
536+ #ifdef PIN_EINK_EN
537+ uint32_t backlight_peek_time = 0 ;
538+ #endif
539+
536540void Screen::setup ()
537541{
538542
@@ -757,6 +761,18 @@ int32_t Screen::runOnce()
757761 enabled = false ;
758762 return RUN_SAME;
759763 }
764+ #ifdef PIN_EINK_EN
765+ #ifndef BACKLIGHT_TIMEOUT_MS
766+ #define BACKLIGHT_TIMEOUT_MS 3000 // Turn off backlight after 3 seconds by default
767+ #endif
768+ // Turn off backlight after timeout
769+ if (uiconfig.screen_brightness > 0 && backlight_peek_time != 0 &&
770+ millis () - backlight_peek_time > BACKLIGHT_TIMEOUT_MS) {
771+ digitalWrite (PIN_EINK_EN, LOW);
772+ backlight_peek_time = 0 ;
773+ uiconfig.screen_brightness = 0 ;
774+ }
775+ #endif
760776
761777 if (displayHeight == 0 ) {
762778 displayHeight = dispdev->getHeight ();
@@ -1771,6 +1787,16 @@ int Screen::handleInputEvent(const InputEvent *event)
17711787 showFrame (FrameDirection::PREVIOUS);
17721788 } else if (event->inputEvent == INPUT_BROKER_CANCEL) {
17731789 setOn (false );
1790+ #ifdef PIN_EINK_EN
1791+ } else if (event->inputEvent == INPUT_BROKER_BACKLIGHT) {
1792+ digitalWrite (PIN_EINK_EN, HIGH);
1793+ backlight_peek_time = millis ();
1794+ uiconfig.screen_brightness = 1 ;
1795+ } else if (event->inputEvent == INPUT_BROKER_BACKLIGHT_TOGGLE) {
1796+ uiconfig.screen_brightness = 1 - uiconfig.screen_brightness ;
1797+ digitalWrite (PIN_EINK_EN, uiconfig.screen_brightness == 0 ? LOW : HIGH);
1798+ backlight_peek_time = 0 ;
1799+ #endif
17741800 }
17751801 }
17761802 }
0 commit comments