fix(mcp): implement startMcpScreensaver - missing method caused linker error
- Was declared in DisplayIdleService.h but not defined in clean refactored branch
- Implementation taken from original 8970143f: locks LVGL, checks overlay, ensures backlight, creates McpScreensaver
- Fixes build of feature/local-all-rebased on es3c28p
This commit is contained in:
@@ -9,11 +9,11 @@
|
|||||||
#include "StackChanScreensaver.h"
|
#include "StackChanScreensaver.h"
|
||||||
#include "McpScreensaver.h"
|
#include "McpScreensaver.h"
|
||||||
|
|
||||||
#include <tactility/log.h>
|
|
||||||
#include <Tactility/CoreDefines.h>
|
#include <Tactility/CoreDefines.h>
|
||||||
#include <Tactility/hal/display/DisplayDevice.h>
|
#include <Tactility/hal/display/DisplayDevice.h>
|
||||||
#include <Tactility/hal/power/PowerDevice.h>
|
#include <Tactility/hal/power/PowerDevice.h>
|
||||||
#include <Tactility/lvgl/LvglSync.h>
|
#include <Tactility/lvgl/LvglSync.h>
|
||||||
|
#include <Tactility/mcp/McpSystem.h>
|
||||||
#include <Tactility/service/ServiceContext.h>
|
#include <Tactility/service/ServiceContext.h>
|
||||||
#include <Tactility/service/ServiceManifest.h>
|
#include <Tactility/service/ServiceManifest.h>
|
||||||
#include <Tactility/service/ServiceRegistration.h>
|
#include <Tactility/service/ServiceRegistration.h>
|
||||||
@@ -284,6 +284,61 @@ bool DisplayIdleService::isScreensaverActive() const {
|
|||||||
return screensaverOverlay != nullptr;
|
return screensaverOverlay != nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DisplayIdleService::startMcpScreensaver() {
|
||||||
|
if (!lvgl::lock(200)) {
|
||||||
|
LOG_W(TAG, "startMcpScreensaver: failed to acquire LVGL lock");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (screensaverOverlay != nullptr) {
|
||||||
|
// Screensaver already active — if drawArea is registered we're done,
|
||||||
|
// otherwise stop the current one so we can replace it with McpScreensaver.
|
||||||
|
const auto& mcpState = mcp::getState();
|
||||||
|
if (mcpState.drawArea != nullptr) {
|
||||||
|
lvgl::unlock();
|
||||||
|
return; // McpScreensaver already running
|
||||||
|
}
|
||||||
|
// Wrong screensaver type active — tear it down first
|
||||||
|
if (screensaver) {
|
||||||
|
screensaver->stop();
|
||||||
|
screensaver.reset();
|
||||||
|
}
|
||||||
|
lv_obj_delete(screensaverOverlay);
|
||||||
|
screensaverOverlay = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
screensaverActiveCounter = 0;
|
||||||
|
backlightOff = false;
|
||||||
|
|
||||||
|
// Ensure backlight is active if the display supports it
|
||||||
|
auto display = getDisplay();
|
||||||
|
if (display != nullptr && display->supportsBacklightDuty()) {
|
||||||
|
uint8_t duty = cachedDisplaySettings.backlightDuty;
|
||||||
|
if (duty == 0) duty = 255; // ensure visible if settings not loaded / default
|
||||||
|
display->setBacklightDuty(duty);
|
||||||
|
}
|
||||||
|
|
||||||
|
lv_coord_t screenW = lv_display_get_horizontal_resolution(nullptr);
|
||||||
|
lv_coord_t screenH = lv_display_get_vertical_resolution(nullptr);
|
||||||
|
|
||||||
|
lv_obj_t* top = lv_layer_top();
|
||||||
|
screensaverOverlay = lv_obj_create(top);
|
||||||
|
lv_obj_remove_style_all(screensaverOverlay);
|
||||||
|
lv_obj_set_size(screensaverOverlay, LV_PCT(100), LV_PCT(100));
|
||||||
|
lv_obj_set_pos(screensaverOverlay, 0, 0);
|
||||||
|
lv_obj_set_style_bg_color(screensaverOverlay, lv_color_black(), 0);
|
||||||
|
lv_obj_set_style_bg_opa(screensaverOverlay, LV_OPA_COVER, 0);
|
||||||
|
lv_obj_add_flag(screensaverOverlay, LV_OBJ_FLAG_CLICKABLE);
|
||||||
|
lv_obj_add_event_cb(screensaverOverlay, stopScreensaverCb, LV_EVENT_CLICKED, this);
|
||||||
|
|
||||||
|
screensaver = std::make_unique<McpScreensaver>();
|
||||||
|
screensaver->start(screensaverOverlay, screenW, screenH);
|
||||||
|
|
||||||
|
lvgl::unlock();
|
||||||
|
displayDimmed = true;
|
||||||
|
LOG_I(TAG, "MCP screensaver activated");
|
||||||
|
}
|
||||||
|
|
||||||
void DisplayIdleService::reloadSettings() {
|
void DisplayIdleService::reloadSettings() {
|
||||||
// Set flag for thread-safe reload - actual reload happens in tick()
|
// Set flag for thread-safe reload - actual reload happens in tick()
|
||||||
settingsReloadRequested.store(true, std::memory_order_release);
|
settingsReloadRequested.store(true, std::memory_order_release);
|
||||||
|
|||||||
Reference in New Issue
Block a user