diff --git a/src/hal/Keyboard.cpp b/src/hal/Keyboard.cpp index 27f5bbe..a72e1c6 100644 --- a/src/hal/Keyboard.cpp +++ b/src/hal/Keyboard.cpp @@ -115,10 +115,12 @@ bool Keyboard::setBacklightBrightness(uint8_t percent) { } bool Keyboard::backlightOn() { + _backlightLit = _backlightBrightness > 0; return setBrightness(_backlightBrightness); } bool Keyboard::backlightOff() { + _backlightLit = false; return setBrightness(0); } diff --git a/src/hal/Keyboard.h b/src/hal/Keyboard.h index c31943d..ad25882 100644 --- a/src/hal/Keyboard.h +++ b/src/hal/Keyboard.h @@ -55,6 +55,7 @@ public: bool setBacklightBrightness(uint8_t percent); // 0 stores off; non-zero doesn't change current brightness bool backlightOn(); bool backlightOff(); + bool backlightIsLit() const { return _backlightLit; } private: uint8_t readKey(uint8_t* modOut); @@ -67,6 +68,7 @@ private: bool _altHeld = false; // Software Alt tracking unsigned long _altPressTime = 0; // When Alt was detected uint8_t _backlightBrightness = 255; // [31, 255] + bool _backlightLit = false; // last host-commanded state; C3 + toggles are invisible static Keyboard* _instance; static int _debugCount; // Log first N keypresses diff --git a/src/hal/Power.cpp b/src/hal/Power.cpp index f01e8e1..e6dbf79 100644 --- a/src/hal/Power.cpp +++ b/src/hal/Power.cpp @@ -134,7 +134,9 @@ void Power::setState(State newState) { } else { display.setBrightness(percentToPWM(_brightnessPct)); } - if (_kbAutoOn) { + // On wake, relight only what screen-off forced dark (or per auto-on) — + // never force-enable for users who keep the kb light off. + if (_kbAutoOn || (oldState == SCREEN_OFF && _kbLitBeforeOff)) { keyboard.backlightOn(); } break; @@ -148,9 +150,9 @@ void Power::setState(State newState) { // LovyanGFX sleep() sets brightness to 0 internally — no // need to call setBrightness(0) beforehand. display.sleep(); - if (_kbAutoOff) { - keyboard.backlightOff(); - } + // Kb backlight always follows screen-off — the timeout exists to save battery. + _kbLitBeforeOff = keyboard.backlightIsLit(); + keyboard.backlightOff(); break; } } diff --git a/src/hal/Power.h b/src/hal/Power.h index 780ec91..e9ed276 100644 --- a/src/hal/Power.h +++ b/src/hal/Power.h @@ -60,5 +60,6 @@ private: static constexpr uint8_t DIM_PWM = 40; // ~15% PWM when dimmed bool _kbAutoOn = false; bool _kbAutoOff = false; + bool _kbLitBeforeOff = false; bool _justWokeFromOff = false; };