Rdzleo
31982ba7b9
feat(ui): Phase 10 - 数字人模式 LVGL → esp_emote_gfx 完整切换
✅ 验证完成:
- 音频卡顿明显改善(用户实测)
- 数字人 hiyori 动画正常显示
- nm 验证:固件中 0 个 lv_*/lvgl_* 函数符号
- kapi.bin: 4.7MB → 2.75MB(-42%)
关键改动:
- main/dzbj/ai_chat_ui_eaf.c (404 行新增):
完全替代 LVGL 版 ai_chat_ui.c,提供同名 C API(ai_chat_screen_init
/ set_status / set_emotion / set_chat_message / resume_animation)。
AiChatDisplay C++ 桥接层无需改动。
内部用 gfx_emote_init + gfx_disp_add + gfx_anim + mmap_assets。
- main/CMakeLists.txt:双轨编译
CONFIG_BAJI_BADGE_MODE=y → ai_chat_ui.c (LVGL) + bg_gif_demo.c
CONFIG_BAJI_BADGE_MODE=n → ai_chat_ui_eaf.c (esp_emote_gfx)
- main/dzbj/dzbj_init.c:EAF 模式跳过 lvgl_lcd_init() 调用
- main/dzbj/lcd.c/h:暴露 lcd_io_handle 给 EAF 注册 IO 完成回调
踩坑修复(commit message 留档供后续参考):
1. esp_mmap_assets v2.0.0 在 use_fs=true 模式下 mmap_assets_get_mem()
返回的是文件内偏移量而非 RAM 指针(fseek bug + offset 没加
data_section_start),导致 LoadProhibited panic。
解决:完全绕过 mmap_assets,自己 fopen + 解析 MMAP bin 头
(layout: 头 16B + 每 entry 28B + data 段每文件 2B magic + 数据)。
2. esp_emote_gfx 期望 esp_lcd_touch v2.x 新 API,项目用 v1.1.2 旧 API。
在 managed_components 内 gfx_touch.c 加 shim 桥接(local patch,
reconfigure 后需 reapply)。
3. EAF format magic 是 0x89 'EAF'(gfx_eaf_dec.h),不是 0x5A5A
(那是 esp_mmap_assets 内部文件分隔符)。
4. SPIFFS 需要在 ai_chat_screen_init 入口自动挂载(不能依赖
bg_gif_demo 的惰性挂载,那个已被 CONFIG 排除)。
依赖增量:
- espressif2022/esp_emote_gfx: ~3.0.5
- espressif/esp_mmap_assets: * (仅用于声明依赖,运行时被绕过)
数字人模式核心 UI 范围:
- 显示数字人动画 ✅ (hiyori_m06/m07, 居中循环)
- 情绪 → GIF 映射 ✅ (23 情绪 → 2 EAF,sad/angry 暂用 m07,m03 待补)
- 字幕/状态文字: stub ⏳(字体接驳留待后续,需打包 .bin 字体到资源)
- 触摸: 不支持(PoC 阶段不需要)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:53:21 +08:00
..
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-05-15 15:53:21 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-28 10:32:38 +08:00
2026-02-27 17:07:51 +08:00
2026-02-27 17:07:51 +08:00
2026-02-27 17:07:51 +08:00
2026-02-28 10:23:04 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-02-24 15:57:32 +08:00
2026-03-19 15:28:14 +08:00