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(); });