Rdzleo dbdd304905 代码初始化:
本项目为触摸版项目代码复制而来,基于此版本进行按键功能的适配!
2026-03-23 11:14:56 +08:00

86 lines
2.5 KiB
C++

/*
* SPDX-FileCopyrightText: 2024-2026 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "esp_spiffs.h"
#include "private/utils.hpp"
#include "modules/ai_agents.hpp"
#include "modules/board.hpp"
#include "modules/console.hpp"
#include "modules/expression.hpp"
#include "modules/general_services.hpp"
#include "modules/profiler.hpp"
using namespace esp_brookesia;
constexpr const char *SPIFFS_MOUNT_ROOT = "/spiffs";
constexpr const char *SPIFFS_PARTITION_LABEL = "spiffs_data";
static void init_spiffs(void);
extern "C" void app_main(void)
{
/* Initialize SPIFFS */
init_spiffs();
/* Initialize board */
Board::get_instance().init();
/* Create a task scheduler for general usage */
std::shared_ptr<lib_utils::TaskScheduler> task_scheduler;
BROOKESIA_CHECK_EXCEPTION_EXIT(
task_scheduler = std::make_shared<lib_utils::TaskScheduler>(), "Failed to create task scheduler"
);
auto start_result = task_scheduler->start({
.worker_configs = {
{
.name = "GeneralWorker",
.core_id = -1,
.priority = 1,
.stack_size = 10 * 1024,
}
}
});
BROOKESIA_CHECK_FALSE_EXIT(start_result, "Failed to start task scheduler");
/* Initialize general services */
GeneralServices::get_instance().init(task_scheduler);
GeneralServices::get_instance().init_audio();
GeneralServices::get_instance().start_nvs();
GeneralServices::get_instance().start_sntp();
/* Initialize expression */
Expression::get_instance().init(task_scheduler);
Expression::get_instance().init_emote();
/* Initialize AI agents */
AI_Agents::get_instance().init(task_scheduler);
AI_Agents::get_instance().init_coze();
AI_Agents::get_instance().init_openai();
AI_Agents::get_instance().init_xiaozhi();
/* Start profiler */
Profiler::get_instance().init(task_scheduler);
Profiler::get_instance().start_thread_profiler();
Profiler::get_instance().start_memory_profiler();
/* Start console */
Console::get_instance().start();
}
static void init_spiffs(void)
{
esp_vfs_spiffs_conf_t conf = {
.base_path = SPIFFS_MOUNT_ROOT,
.partition_label = SPIFFS_PARTITION_LABEL,
.max_files = 5,
.format_if_mount_failed = true
};
esp_err_t ret = esp_vfs_spiffs_register(&conf);
BROOKESIA_CHECK_ESP_ERR_EXECUTE(ret, {}, {
BROOKESIA_LOGE("Failed to mount or format SPIFFS");
});
BROOKESIA_LOGI("SPIFFS mounted successfully");
}