- 启动自检日志:远程日志启动后记录 endpoint、目录、待上传文件数、队列配置、coredump 状态。
- 上传状态统计:记录成功/失败次数、最后 HTTP 状态、最后错误码、最后上传时间、最后成功时间。
- 独立日志 Flash 分区:新增 logfs LittleFS 分区 512KB,日志不再占用音频资源分区;远程日志文件上限为 24 * 16KB =
384KB。
- 本地诊断 factory CLI:
- log status
- log flush
- log clear
- Coredump 支持:启用 flash coredump,新增 64KB coredump 分区;当前会上报 coredump 存在状态、地址、大小、panic
reason 和设备状态快照。
- 上传附带设备状态快照:reset reason、固件版本、project name、heap、任务数、多模态连接/活动状态、coredump 状态。
This commit is contained in:
@@ -33,6 +33,8 @@
|
||||
#define VOICE_PROMPT_DEFAULT_BASE_PATH "/littlefs/audio_prompts"
|
||||
#define VOICE_PROMPT_LITTLEFS_BASE_PATH "/littlefs"
|
||||
#define VOICE_PROMPT_LITTLEFS_PARTITION "gifpack"
|
||||
#define PLATFORM_LOGFS_BASE_PATH "/logfs"
|
||||
#define PLATFORM_LOGFS_PARTITION "logfs"
|
||||
#define VOICE_PROMPT_FRAME_HEADER_BYTES 4U
|
||||
#define VOICE_PROMPT_MAX_OPUS_PACKET_BYTES 2048U
|
||||
#define VOICE_PROMPT_OPUS_FRAME_MS 60U
|
||||
@@ -43,6 +45,8 @@ static const char *VOICE_TAG = "voice_prompt";
|
||||
static bool s_power_hold_configured;
|
||||
static bool s_voice_prompt_littlefs_mount_attempted;
|
||||
static esp_err_t s_voice_prompt_littlefs_mount_result = ESP_ERR_INVALID_STATE;
|
||||
static bool s_logfs_mount_attempted;
|
||||
static esp_err_t s_logfs_mount_result = ESP_ERR_INVALID_STATE;
|
||||
|
||||
static uint64_t power_manager_gpio_bit_mask(int gpio_num)
|
||||
{
|
||||
@@ -154,6 +158,49 @@ esp_err_t platform_mount_littlefs(void)
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t platform_mount_logfs(void)
|
||||
{
|
||||
if (s_logfs_mount_attempted) {
|
||||
return s_logfs_mount_result;
|
||||
}
|
||||
|
||||
esp_vfs_littlefs_conf_t conf = {
|
||||
.base_path = PLATFORM_LOGFS_BASE_PATH,
|
||||
.partition_label = PLATFORM_LOGFS_PARTITION,
|
||||
.partition = NULL,
|
||||
.format_if_mount_failed = true,
|
||||
.dont_mount = false,
|
||||
};
|
||||
|
||||
esp_err_t err = esp_vfs_littlefs_register(&conf);
|
||||
if (err == ESP_ERR_INVALID_STATE &&
|
||||
esp_littlefs_mounted(PLATFORM_LOGFS_PARTITION)) {
|
||||
err = ESP_OK;
|
||||
}
|
||||
if (err == ESP_OK) {
|
||||
size_t total_bytes = 0;
|
||||
size_t used_bytes = 0;
|
||||
esp_err_t info_err = esp_littlefs_info(PLATFORM_LOGFS_PARTITION,
|
||||
&total_bytes,
|
||||
&used_bytes);
|
||||
if (info_err == ESP_OK) {
|
||||
ESP_LOGI(VOICE_TAG,
|
||||
"LogFS mounted at %s, used=%u total=%u",
|
||||
PLATFORM_LOGFS_BASE_PATH,
|
||||
(unsigned)used_bytes,
|
||||
(unsigned)total_bytes);
|
||||
}
|
||||
} else {
|
||||
ESP_LOGW(VOICE_TAG,
|
||||
"Mount LogFS failed: %s",
|
||||
esp_err_to_name(err));
|
||||
}
|
||||
|
||||
s_logfs_mount_attempted = true;
|
||||
s_logfs_mount_result = err;
|
||||
return err;
|
||||
}
|
||||
|
||||
esp_err_t voice_prompt_play_file(const char *path)
|
||||
{
|
||||
if (path == NULL || path[0] == '\0') {
|
||||
|
||||
Reference in New Issue
Block a user