feat: implement MCP drawing as screensaver instead of standalone app
- Add ScreensaverType::McpScreen to DisplaySettings enum, toString/fromString - Add 'MCP Screen' option to the Display settings screensaver dropdown - New McpScreensaver (Screensaver subclass): creates full-screen lv_canvas on the overlay, allocates framebuffer in SPIRAM, registers canvas pointer in McpSystemState, shows 'Waiting for LLM...' until first draw command arrives - Wire McpScreensaver into DisplayIdle::activateScreensaver() switch - McpSystem::ensureOverrideScreen() now calls displayidle::findService()-> startScreensaver() instead of launching McpOverrideApp — canvas appears automatically on any LLM draw command - Remove McpOverrideApp (replaced by screensaver), deregister from Tactility.cpp - Remove mcpOverrideEnabled from McpSettings — no longer needed - Simplify McpSettingsApp: remove Screen Override toggle, update info text to direct users to Settings -> Display -> Screensaver -> MCP Screen
This commit is contained in:
@@ -26,7 +26,6 @@ class McpSettingsApp final : public App {
|
||||
bool updated = false;
|
||||
|
||||
lv_obj_t* switchMcpEnabled = nullptr;
|
||||
lv_obj_t* switchMcpOverrideEnabled = nullptr;
|
||||
lv_obj_t* labelUrlValue = nullptr;
|
||||
|
||||
static void onMcpEnabledSwitch(lv_event_t* e) {
|
||||
@@ -42,15 +41,6 @@ class McpSettingsApp final : public App {
|
||||
});
|
||||
}
|
||||
|
||||
static void onMcpOverrideSwitch(lv_event_t* e) {
|
||||
auto* app = static_cast<McpSettingsApp*>(lv_event_get_user_data(e));
|
||||
bool enabled = lv_obj_has_state(app->switchMcpOverrideEnabled, LV_STATE_CHECKED);
|
||||
getMainDispatcher().dispatch([app, enabled] {
|
||||
app->mcpSettings.mcpOverrideEnabled = enabled;
|
||||
app->updated = true;
|
||||
});
|
||||
}
|
||||
|
||||
void updateUrlDisplay() {
|
||||
if (!labelUrlValue) return;
|
||||
|
||||
@@ -60,7 +50,7 @@ class McpSettingsApp final : public App {
|
||||
}
|
||||
|
||||
std::string url = "http://";
|
||||
|
||||
|
||||
if (wsSettings.wifiMode == settings::webserver::WiFiMode::AccessPoint) {
|
||||
url += "192.168.4.1";
|
||||
} else {
|
||||
@@ -114,23 +104,6 @@ public:
|
||||
lv_obj_set_width(main_wrapper, LV_PCT(100));
|
||||
lv_obj_set_flex_grow(main_wrapper, 1);
|
||||
|
||||
// Screen Override Switch
|
||||
auto* override_wrapper = lv_obj_create(main_wrapper);
|
||||
lv_obj_set_size(override_wrapper, LV_PCT(100), LV_SIZE_CONTENT);
|
||||
lv_obj_set_style_pad_all(override_wrapper, 0, LV_STATE_DEFAULT);
|
||||
lv_obj_set_style_border_width(override_wrapper, 0, LV_STATE_DEFAULT);
|
||||
|
||||
auto* override_label = lv_label_create(override_wrapper);
|
||||
lv_label_set_text(override_label, "Screen Override");
|
||||
lv_obj_align(override_label, LV_ALIGN_LEFT_MID, 0, 0);
|
||||
|
||||
switchMcpOverrideEnabled = lv_switch_create(override_wrapper);
|
||||
if (mcpSettings.mcpOverrideEnabled) {
|
||||
lv_obj_add_state(switchMcpOverrideEnabled, LV_STATE_CHECKED);
|
||||
}
|
||||
lv_obj_align(switchMcpOverrideEnabled, LV_ALIGN_RIGHT_MID, 0, 0);
|
||||
lv_obj_add_event_cb(switchMcpOverrideEnabled, onMcpOverrideSwitch, LV_EVENT_VALUE_CHANGED, this);
|
||||
|
||||
// URL Display
|
||||
auto* url_wrapper = lv_obj_create(main_wrapper);
|
||||
lv_obj_set_size(url_wrapper, LV_PCT(100), LV_SIZE_CONTENT);
|
||||
@@ -138,10 +111,10 @@ public:
|
||||
lv_obj_set_style_border_width(url_wrapper, 1, LV_STATE_DEFAULT);
|
||||
lv_obj_set_flex_flow(url_wrapper, LV_FLEX_FLOW_COLUMN);
|
||||
lv_obj_set_style_flex_cross_place(url_wrapper, LV_FLEX_ALIGN_START, 0);
|
||||
|
||||
|
||||
auto* url_title = lv_label_create(url_wrapper);
|
||||
lv_label_set_text(url_title, "MCP Endpoint URL:");
|
||||
|
||||
|
||||
labelUrlValue = lv_label_create(url_wrapper);
|
||||
if (lv_display_get_color_format(lv_obj_get_display(parent)) == LV_COLOR_FORMAT_L8) {
|
||||
lv_obj_set_style_text_color(labelUrlValue, lv_theme_get_color_secondary(labelUrlValue), LV_PART_MAIN);
|
||||
@@ -164,7 +137,8 @@ public:
|
||||
"Endpoints:\n"
|
||||
"- POST /api/mcp (JSON-RPC tools)\n"
|
||||
"- POST /api/screen/raw (big-endian RGB565 writes)\n\n"
|
||||
"If Screen Override is enabled, the device automatically shows the canvas upon receiving drawing calls.");
|
||||
"To show the LLM canvas, select 'MCP Screen' in Settings -> Display -> Screensaver. "
|
||||
"The canvas also pops up automatically when an LLM sends a draw command.");
|
||||
}
|
||||
|
||||
void onHide(AppContext& app) override {
|
||||
@@ -183,9 +157,6 @@ public:
|
||||
|
||||
if (mcpStateChanged) {
|
||||
LOGGER.info("MCP server state changed to {}", copy.mcpEnabled ? "enabled" : "disabled");
|
||||
|
||||
// Control the WebServer service immediately through setWebServerEnabled
|
||||
// WebServerService will check mcpSettings internally when setEnabled is executed
|
||||
service::webserver::setWebServerEnabled(copy.mcpEnabled);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user