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:
Adolfo Reyna
2026-06-27 09:17:50 -04:00
parent 41004a3c6f
commit cd921e1aa9
11 changed files with 160 additions and 59 deletions
@@ -18,6 +18,7 @@ enum class ScreensaverType {
Mystify,
MatrixRain,
StackChan,
McpScreen, // MCP LLM-driven canvas
Count // Sentinel for bounds checking - must be last
};
@@ -4,7 +4,6 @@ namespace tt::settings::mcp {
struct McpSettings {
bool mcpEnabled = false; // Enable MCP server endpoints on system web server
bool mcpOverrideEnabled = true; // Automatically switch to override screen on drawing commands
};
bool load(McpSettings& settings);