From f4f29f52669314ec761d9ab6154712d228b9811a Mon Sep 17 00:00:00 2001 From: every_holiday Date: Thu, 11 Jun 2026 20:09:05 +0900 Subject: [PATCH 1/2] Direct boot into AI Agent mode --- .../main/apps/app_launcher/app_launcher.cpp | 25 +++++++++++++++++++ .../main/apps/app_launcher/app_launcher.h | 2 ++ firmware/main/main.cpp | 3 +-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/firmware/main/apps/app_launcher/app_launcher.cpp b/firmware/main/apps/app_launcher/app_launcher.cpp index e1e3d209..bd2c8b33 100644 --- a/firmware/main/apps/app_launcher/app_launcher.cpp +++ b/firmware/main/apps/app_launcher/app_launcher.cpp @@ -12,6 +12,10 @@ using namespace mooncake; +namespace { +constexpr int kAiAgentAppId = 1; +} + void AppLauncher::onLauncherCreate() { mclog::tagInfo(getAppInfo().name, "on create"); @@ -26,6 +30,13 @@ void AppLauncher::onLauncherOpen() LvglLockGuard lock; + if (GetHAL().getXiaozhiConfig().startAiAgentOnBoot) { + mclog::tagInfo(getAppInfo().name, "ai agent boot requested, open ai agent directly"); + _direct_ai_agent_requested = true; + open_ai_agent_if_requested(); + return; + } + if (!_startup_checked && !GetHAL().isAppConfiged()) { mclog::tagInfo(getAppInfo().name, "app not configured, start startup worker"); _startup_worker = std::make_unique(); @@ -38,6 +49,10 @@ void AppLauncher::onLauncherRunning() { LvglLockGuard lock; + if (_direct_ai_agent_requested) { + return; + } + if (_startup_worker) { _startup_worker->update(); if (_startup_worker->isDone()) { @@ -77,6 +92,16 @@ void AppLauncher::create_launcher_view() }; } +void AppLauncher::open_ai_agent_if_requested() +{ + if (!_direct_ai_agent_requested) { + return; + } + + _direct_ai_agent_requested = false; + openApp(kAiAgentAppId); +} + void AppLauncher::screensaver_update() { const uint32_t SCREENSAVER_TIMEOUT_MS = 30000; diff --git a/firmware/main/apps/app_launcher/app_launcher.h b/firmware/main/apps/app_launcher/app_launcher.h index c62cca79..f2125526 100644 --- a/firmware/main/apps/app_launcher/app_launcher.h +++ b/firmware/main/apps/app_launcher/app_launcher.h @@ -25,7 +25,9 @@ class AppLauncher : public mooncake::templates::AppLauncherBase { std::unique_ptr _startup_worker; uint32_t _screensaver_timecount = 0; bool _startup_checked = false; + bool _direct_ai_agent_requested = false; void create_launcher_view(); + void open_ai_agent_if_requested(); void screensaver_update(); }; diff --git a/firmware/main/main.cpp b/firmware/main/main.cpp index 3f11ed65..21456687 100644 --- a/firmware/main/main.cpp +++ b/firmware/main/main.cpp @@ -26,8 +26,7 @@ extern "C" void app_main(void) ui_hal::on_delay([](uint32_t ms) { GetHAL().delay(ms); }); ui_hal::on_get_tick([]() { return GetHAL().millis(); }); - const bool skip_mooncake = - GetHAL().getXiaozhiConfig().startAiAgentOnBoot && GetHAL().getWarmRebootTarget() < 0; + const bool skip_mooncake = GetHAL().getWarmRebootTarget() < 0 && !GetHAL().getXiaozhiConfig().startAiAgentOnBoot; if (!skip_mooncake) { // Install apps From a8b023ef374738b9011476de930903c60a4181d5 Mon Sep 17 00:00:00 2001 From: every_holiday Date: Thu, 11 Jun 2026 20:16:05 +0900 Subject: [PATCH 2/2] Fix AI Agent boot routing --- .../main/apps/app_launcher/app_launcher.cpp | 37 +++++++++++-------- .../main/apps/app_launcher/app_launcher.h | 2 +- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/firmware/main/apps/app_launcher/app_launcher.cpp b/firmware/main/apps/app_launcher/app_launcher.cpp index bd2c8b33..4e0bfb65 100644 --- a/firmware/main/apps/app_launcher/app_launcher.cpp +++ b/firmware/main/apps/app_launcher/app_launcher.cpp @@ -12,10 +12,6 @@ using namespace mooncake; -namespace { -constexpr int kAiAgentAppId = 1; -} - void AppLauncher::onLauncherCreate() { mclog::tagInfo(getAppInfo().name, "on create"); @@ -30,16 +26,16 @@ void AppLauncher::onLauncherOpen() LvglLockGuard lock; - if (GetHAL().getXiaozhiConfig().startAiAgentOnBoot) { - mclog::tagInfo(getAppInfo().name, "ai agent boot requested, open ai agent directly"); - _direct_ai_agent_requested = true; - open_ai_agent_if_requested(); - return; - } - if (!_startup_checked && !GetHAL().isAppConfiged()) { mclog::tagInfo(getAppInfo().name, "app not configured, start startup worker"); _startup_worker = std::make_unique(); + return; + } + + if (GetHAL().getXiaozhiConfig().startAiAgentOnBoot) { + mclog::tagInfo(getAppInfo().name, "ai agent boot requested, open ai agent directly"); + _boot_ai_agent_requested = true; + create_launcher_view(); } else { create_launcher_view(); } @@ -49,7 +45,8 @@ void AppLauncher::onLauncherRunning() { LvglLockGuard lock; - if (_direct_ai_agent_requested) { + if (_boot_ai_agent_requested) { + open_ai_agent_if_requested(); return; } @@ -94,12 +91,22 @@ void AppLauncher::create_launcher_view() void AppLauncher::open_ai_agent_if_requested() { - if (!_direct_ai_agent_requested) { + if (!_boot_ai_agent_requested) { return; } - _direct_ai_agent_requested = false; - openApp(kAiAgentAppId); + _boot_ai_agent_requested = false; + + for (const auto& props : getAppProps()) { + if (props.info.name == "AI.AGENT") { + mclog::tagInfo(getAppInfo().name, "opening app by name: {}", props.info.name); + openApp(props.appID); + return; + } + } + + mclog::tagError(getAppInfo().name, "AI.Agent app not found, fall back to launcher"); + create_launcher_view(); } void AppLauncher::screensaver_update() diff --git a/firmware/main/apps/app_launcher/app_launcher.h b/firmware/main/apps/app_launcher/app_launcher.h index f2125526..9986527c 100644 --- a/firmware/main/apps/app_launcher/app_launcher.h +++ b/firmware/main/apps/app_launcher/app_launcher.h @@ -25,7 +25,7 @@ class AppLauncher : public mooncake::templates::AppLauncherBase { std::unique_ptr _startup_worker; uint32_t _screensaver_timecount = 0; bool _startup_checked = false; - bool _direct_ai_agent_requested = false; + bool _boot_ai_agent_requested = false; void create_launcher_view(); void open_ai_agent_if_requested();