From 96432e2b7d77ce09a46cc148e12f05dfbe2d2f40 Mon Sep 17 00:00:00 2001 From: mverch67 Date: Sat, 1 Aug 2026 23:56:40 +0200 Subject: [PATCH] fix DeviceScreen sleep observers --- src/graphics/tftSetup.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/graphics/tftSetup.cpp b/src/graphics/tftSetup.cpp index 0526f4a343..ff872f169f 100644 --- a/src/graphics/tftSetup.cpp +++ b/src/graphics/tftSetup.cpp @@ -235,10 +235,8 @@ DeviceScreen *deviceScreen = nullptr; #ifdef ARCH_ESP32 // Get notified when the system is entering light sleep -CallbackObserver tftSleepObserver = - CallbackObserver(deviceScreen, &DeviceScreen::prepareSleep); -CallbackObserver endSleepObserver = - CallbackObserver(deviceScreen, &DeviceScreen::wakeUp); +static CallbackObserver *tftSleepObserver = nullptr; +static CallbackObserver *endSleepObserver = nullptr; #endif /** @@ -413,8 +411,14 @@ void tftSetup(void) if (deviceScreen) { #ifdef ARCH_ESP32 - tftSleepObserver.observe(¬ifyLightSleep); - endSleepObserver.observe(¬ifyLightSleepEnd); + if (!tftSleepObserver) { + tftSleepObserver = new CallbackObserver(deviceScreen, &DeviceScreen::prepareSleep); + } + if (!endSleepObserver) { + endSleepObserver = new CallbackObserver(deviceScreen, &DeviceScreen::wakeUp); + } + tftSleepObserver->observe(¬ifyLightSleep); + endSleepObserver->observe(¬ifyLightSleepEnd); xTaskCreatePinnedToCore(tft_task_handler, "tft", TFT_TASK_STACK_SIZE, NULL, 1, NULL, 0); #elif defined(ARCH_PORTDUINO) std::thread *tft_task = new std::thread([] { tft_task_handler(); });