@@ -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 ();
@@ -1429,9 +1445,6 @@ int Screen::handleStatusUpdate(const meshtastic::Status *arg)
14291445 }
14301446 nodeDB->updateGUI = false ;
14311447 break ;
1432- case STATUS_TYPE_POWER:
1433- forceDisplay (true );
1434- break ;
14351448 }
14361449
14371450 return 0 ;
@@ -1766,6 +1779,16 @@ int Screen::handleInputEvent(const InputEvent *event)
17661779 showFrame (FrameDirection::PREVIOUS);
17671780 } else if (event->inputEvent == INPUT_BROKER_CANCEL) {
17681781 setOn (false );
1782+ #ifdef PIN_EINK_EN
1783+ } else if (event->inputEvent == INPUT_BROKER_BACKLIGHT) {
1784+ digitalWrite (PIN_EINK_EN, HIGH);
1785+ backlight_peek_time = millis ();
1786+ uiconfig.screen_brightness = 1 ;
1787+ } else if (event->inputEvent == INPUT_BROKER_BACKLIGHT_TOGGLE) {
1788+ uiconfig.screen_brightness = 1 - uiconfig.screen_brightness ;
1789+ digitalWrite (PIN_EINK_EN, uiconfig.screen_brightness == 0 ? LOW : HIGH);
1790+ backlight_peek_time = 0 ;
1791+ #endif
17691792 }
17701793 }
17711794 }
0 commit comments