按 GSD 框架 .planning/milestones/digital_human_rtc/ 规划完成 Phase 1。 源代码全部保留,通过 Kconfig 开关 + CMakeLists 条件编译 + #ifdef 调用点保护 实现"吧唧模式不进固件但代码可恢复"。 ## 核心变更 ### Kconfig 开关(默认关闭) - 新增 CONFIG_BAJI_BADGE_MODE(main/Kconfig.projbuild) - sdkconfig.defaults 默认 =n - =y 时恢复双模式(电子吧唧 + AI 对话) - =n 时仅 AI 数字人 RTC 模式 ### CMakeLists 剥离(剥离式不重写) - 9 个 dzbj/ 吧唧专属 + 9 个 ui/screens/ 吧唧 UI 进入 if(CONFIG_BAJI_BADGE_MODE) 条件块 - 公共保留: dzbj/lcd.c, ai_chat_ui.c, sprite_demo.c, dual_gif_demo.c, bg_gif_demo.c, pages_pwm.c, dzbj_init.c, fatfs.c - 修正 PLAN 漏判:dzbj_init/fatfs 公共化(AI 模式调用 dzbj_hw_display_init/DecodeImg) ### 调用点 #ifdef 保护 - application.cc: L20 include, L63-66 background_task, L536 device_mode 分支 - movecall_moji_esp32s3.cc: dzbj headers, init_spiffs_image_list extern, dzbj_boot_click_handler extern, device_mode_is_badge 分支, InitializeBadgeMode, InitializeBadgeModeButtons, mode_switch_combo 注册, device_mode_in_switch_suppress - 保留公共 extern: ai_chat_screen_init, ai_chat_resume_animation, pwm_init ### 整体文件级 #ifdef 包裹 - dzbj/dzbj_button.c/h - dzbj/sleep_mgr.c - sleep_mgr/include/sleep_mgr.h ### 6 个文件显式 #include "sdkconfig.h" - ESP-IDF 不会 force-include,必须手动 include 才能拿到 CONFIG_* 宏 ## G7 验收双向编译 - =n 模式 build: ✅ EXIT=0(数字人 RTC 单一形态) - =y 模式 build: ✅ EXIT=0(双模式恢复可用) ## 固件大小变化 | 段 | =n | =y | 节省 | |----|-----|------|------| | .text | 2.03 MB | 2.06 MB | 27 KB | | .rodata | 2.48 MB | 3.87 MB | 1.39 MB | | Total | 4.63 MB | 6.05 MB | 1.45 MB | ## GSD 文档(同时提交) - .planning/milestones/digital_human_rtc/MILESTONE.md - .planning/milestones/digital_human_rtc/ROADMAP.md - .planning/milestones/digital_human_rtc/INTEL.md - .planning/milestones/digital_human_rtc/phases/phase_01_kconfig_isolation/PLAN.md - .planning/milestones/digital_human_rtc/phases/phase_01_kconfig_isolation/SIZE_REPORT.md - .planning/milestones/digital_human_rtc/phases/phase_01_kconfig_isolation/BADGE_MODE_ISOLATION_MAP.md - 编译大小原始数据: size_*.txt ## 已知事项 - =n 固件 4.63 MB 仍 > 4 MB 目标,Phase 2 调整分区 + Phase 3 物理移除图片资源解决 - main/dzbj/ 下所有源文件完整保留,无任何物理删除
56 lines
1.4 KiB
C
56 lines
1.4 KiB
C
#include "sdkconfig.h"
|
||
#include "dzbj_init.h"
|
||
#include "dzbj_gpio.h"
|
||
#include "lcd.h"
|
||
#include "pages_pwm.h"
|
||
#ifdef CONFIG_BAJI_BADGE_MODE
|
||
#include "ui/ui.h"
|
||
#endif
|
||
#include "freertos/FreeRTOS.h"
|
||
#include "freertos/task.h"
|
||
#include "esp_log.h"
|
||
|
||
#define TAG "DZBJ"
|
||
|
||
// 仅硬件+LVGL 初始化(不加载 SquareLine UI,不点亮背光)
|
||
void dzbj_hw_display_init(i2c_master_bus_handle_t i2c_bus) {
|
||
ESP_LOGI(TAG, "开始初始化显示硬件...");
|
||
|
||
// 1. LCD 硬件初始化(QSPI ST77916)
|
||
lcd_init();
|
||
ESP_LOGI(TAG, "LCD 硬件初始化完成");
|
||
|
||
#if DZBJ_ENABLE_TOUCH
|
||
// 2. 传入 I2C 总线句柄(与音频编解码器共享)
|
||
lcd_set_i2c_bus(i2c_bus);
|
||
|
||
// 3. 触摸控制器初始化(CST816S)
|
||
touch_init();
|
||
#else
|
||
(void)i2c_bus;
|
||
ESP_LOGI(TAG, "屏幕触摸已禁用 (DZBJ_ENABLE_TOUCH=0)");
|
||
#endif
|
||
|
||
// 4. LVGL 初始化(显示)
|
||
lvgl_lcd_init();
|
||
ESP_LOGI(TAG, "LVGL 初始化完成");
|
||
}
|
||
|
||
#ifdef CONFIG_BAJI_BADGE_MODE
|
||
// 完整初始化(硬件+LVGL + SquareLine UI + 背光)—— 仅吧唧模式
|
||
void dzbj_display_init(i2c_master_bus_handle_t i2c_bus) {
|
||
dzbj_hw_display_init(i2c_bus);
|
||
|
||
// SquareLine UI 初始化
|
||
ui_init();
|
||
ESP_LOGI(TAG, "UI 初始化完成");
|
||
|
||
// 等待首帧渲染完成
|
||
vTaskDelay(pdMS_TO_TICKS(100));
|
||
|
||
// 点亮背光
|
||
pwm_init();
|
||
ESP_LOGI(TAG, "背光已点亮,dzbj 显示模块初始化完成");
|
||
}
|
||
#endif // CONFIG_BAJI_BADGE_MODE
|