UI设计文档与AGENTS.md固化MCU端dark mono主题与I1调色板约束

This commit is contained in:
2026-09-21 05:12:29 +08:00
parent 472c8172fb
commit 07c97cb3cd
2 changed files with 9 additions and 0 deletions
+8
View File
@@ -56,6 +56,14 @@ MCU **无物理屏幕**:LVGL 做 160×160 **1bpp 单色离屏渲染**,帧缓
① 末 8 个像素字节写到缓冲之外(曾把紧邻 `.bss` 的 `s_frame_box[0]` 指针打脏 → 野指针 HardFault;金丝雀实测越界 n=8);
② flush 回调收到的首地址**含 palette**,照原样整帧拷贝会让推流画面**整体错位 8 字节**。
故 `ui_port.c` 按 `stride×h + palette` 供给缓冲,上报尺寸含 palette,flush 时 `color_p + UI_DRAW_BUF_PALETTE` 取像素。
9. **MCU 端必须显式应用 dark mono 主题 + 初始化 I1 调色板(2026-09-21 实证,远端"纯白屏"根因)**:
`lv_display_create()` 内部会按 `lv_theme_mono_init(disp, **false**)`(白底黑字)初始化**单例**主题,而
`lv_display_set_theme()` 只在屏幕为空时把主题重应用到 `screens[0]`(底层)——**活动屏幕保持 LVGL 类默认浅灰 `F5F5F5`**;
UI 内容恒用 `lv_color_white()` 绘制(`ui_standby`/`ui_menu_view`/`ui_deco`/`ui_content_page`)→ 白底白字完全不可见,
远端整帧 99% 为亮(客户端显示"纯白")。修法(`ui_port.c`):`lv_theme_mono_init(disp, true, ...)` +
`lv_display_set_theme()` + 对**活动屏幕**再 `lv_theme_apply()`(实测 `bg_before=F5F5F5` → `bg_after=000000`)。
另外 I1 缓冲头 8 B 调色板 LVGL 不替调用方初始化(上电全 0 = 两项透明黑),须显式写 `[0]=黑 [1]=白`;
渲染器本身按亮度阈值置位(`lv_draw_sw_blend_to_i1.c`:亮 → 位=1),与客户端"位=1 即亮"的约定一致。
---