Files
STM32F4-Base/Drivers/BSP/UI
super_agent_bot 046097918d fix(ui/wave): 回放页切通道/切段后不重绘——key_cb 接管键后补失效
回放页 v1.0 建的键处理返回 true(接管全部键),但从未调
ui_content_page_invalidate():框架只在 key_cb 返回 false 时才替页面
失效,于是「键送达、状态已切、屏上纹丝不动」。该病被枚举缺陷完全
遮住(整页恒空、没有可切的画面),随本波枚举修复首次上板才暴露:
真机按 ←/→/↑/↓ 帧字节完全不变(同帧哈希),布局与状态机无问题。

- 上/下切通道、左/右切段成功路径、空态再探路径,各补一次
  ui_content_page_invalidate()(与 ui_page_clock / ui_page_password
  等已接管键的页面同纪律);
- 切段失败仍保持「按了没动」的诚实语义(不重绘、不把忙态清成空);
- 修改记录 v1.1。

/keil-build 0 错误 0 警告(Code 247,288 B,+4 B),RAM 不变;
台账 / 同码凭证同批刷新。

Refs #38
2026-11-02 18:21:34 +08:00
..
2026-09-09 17:15:04 +08:00
2026-09-07 10:48:18 +08:00
2026-09-10 11:36:33 +08:00

Drivers/BSP/UI/ — LVGL UI 组件

基于 LVGL 的界面实现:菜单树、内容页、通用组件、中文字库、待机页。 与 PC 模拟器共用同一套 UI 源码(simulator/ 只提供平台层)。

结构

核心 / 框架

文件 作用
ui_port.c/h LVGL 移植层:显示驱动、输入设备、tick 注册
ui_menu.c/h 菜单框架(树结构与导航)
ui_menu_view.c/h 菜单视图渲染
ui_menu_tab.c/h 页签组件
ui_deco.c/h 界面装饰元素(图标、边框等)
ui_standby.c/h 待机页
ui_pwd_def.h 密码页默认值定义
ui_font_cn_12.c 中文字库(由 tools/font_gen/ 生成,勿手改)

内容页

文件 作用
ui_content_page.c/h 内容页框架
ui_page_ac.c/h 交流量页
ui_page_dc.c/h 直流量页
ui_page_device_info.c/h 设备信息页
ui_page_net_cfg.c/h 网口设置页
ui_page_password.c/h 密码页
ui_page_runlog.c/h 运行日志页
ui_page_selftest.c/h 自检页

数据汇入(推流)

文件 作用
ui_net_sink.c/h 远端显示总线(RemoDispBus)数据汇入口
ui_net_sink_backend.h 后端抽象接口(MCU / 模拟器分别实现)
ui_net_sink_backend_mcu.c MCU 端后端实现

⚠️ 编码注意(本目录含中文字符串)

  • 本目录文件带 UTF-8 BOM(.c 内含中文字符串字面量,BOM 使 ARMCC 按 UTF-8 解码)
  • Edit 工具会剥掉 BOM:改完必须核对并按原样补回 3 字节 EF BB BF, 否则 ARMCC 改按 CP936 解读 → #870-D: invalid multibyte character sequence
  • UI 改动一律走 ui-verify skill 五步门禁
  • 含新汉字的文案提交前先跑 font-regen skill 重生成 ui_font_cn_12.c

相关文档

  • UI 架构:docs/UI设计/UI_设计架构.md
  • 菜单设计:docs/UI设计/菜单页面设计.md、docs/UI设计/内容页架构.md
  • 字体:docs/UI设计/UI_中文字体生成与配置.md
  • 模拟器:docs/UI设计/LVGL模拟器部署与使用说明.md
  • 自动化测试:docs/UI设计/UI_自动化测试流程.md
  • 协议:docs/UI设计/RemoDispBus协议与接收设计说明.md