diff --git a/firmware/main/apps/app_launcher/app_launcher.cpp b/firmware/main/apps/app_launcher/app_launcher.cpp index e1e3d209..4e0bfb65 100644 --- a/firmware/main/apps/app_launcher/app_launcher.cpp +++ b/firmware/main/apps/app_launcher/app_launcher.cpp @@ -29,6 +29,13 @@ void AppLauncher::onLauncherOpen() 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(); } @@ -38,6 +45,11 @@ void AppLauncher::onLauncherRunning() { LvglLockGuard lock; + if (_boot_ai_agent_requested) { + open_ai_agent_if_requested(); + return; + } + if (_startup_worker) { _startup_worker->update(); if (_startup_worker->isDone()) { @@ -77,6 +89,26 @@ void AppLauncher::create_launcher_view() }; } +void AppLauncher::open_ai_agent_if_requested() +{ + if (!_boot_ai_agent_requested) { + return; + } + + _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() { 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..9986527c 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 _boot_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