Add auto-sleep/wake functionality with timer-based dimming

- Added PWM brightness control to ST7796 driver (0-100%)
- Implemented hardware sleep mode for ST7796 (saves ~150mA)
- Added sleep/wake functions preserving framebuffer and settings
- Implemented timer-based inactivity detection (checks every 10s)
- Auto-sleep after 5 minutes of no user input
- Touch controller remains active during TFT sleep for instant wake
- E-ink display also sleeps after timeout, requires re-init on wake
- Added hardware_pwm library dependency to CMakeLists.txt
- Brightness and sleep/wake methods exposed through display abstraction layer
This commit is contained in:
Adolfo Reyna
2026-02-10 20:29:10 -05:00
parent b16211f148
commit 8cbb95b181
7 changed files with 384 additions and 7 deletions

View File

@@ -32,6 +32,11 @@ public:
// Optional: Backlight control (if supported)
virtual void set_backlight(bool on) { (void)on; }
// Optional: Brightness control (if supported)
// brightness: 0-100 (percentage), 0=off, 100=full brightness
virtual void set_brightness(uint8_t brightness) { (void)brightness; }
virtual uint8_t get_brightness() const { return 100; } // Default to full brightness
// Optional: Orientation control (not commonly needed for bitmap displays)
virtual void set_rotation(uint8_t rotation) { (void)rotation; }

View File

@@ -69,9 +69,24 @@ void LowLevelDisplayST7796::refresh() {
}
void LowLevelDisplayST7796::set_backlight(bool on) {
// ST7796 driver doesn't have backlight control yet
// TODO: Add GPIO control for backlight pin
(void)on;
// Use brightness control: on = 100%, off = 0%
st7796_set_brightness(on ? 100 : 0);
}
void LowLevelDisplayST7796::set_brightness(uint8_t brightness) {
st7796_set_brightness(brightness);
}
uint8_t LowLevelDisplayST7796::get_brightness() const {
return st7796_get_brightness();
}
void LowLevelDisplayST7796::sleep() {
st7796_sleep();
}
void LowLevelDisplayST7796::wake() {
st7796_wake();
}
void LowLevelDisplayST7796::set_rotation(uint8_t rotation) {

View File

@@ -32,6 +32,14 @@ public:
// Backlight control
void set_backlight(bool on) override;
// Brightness control (0-100)
void set_brightness(uint8_t brightness) override;
uint8_t get_brightness() const override;
// Power management
void sleep(); // Put display to sleep (low power, touch still active)
void wake(); // Wake display from sleep
// Orientation control
void set_rotation(uint8_t rotation) override;