# UI 模块说明(CCU621_M) > 路径:`app/ui/` > 返回主说明:[README](../../README.md) ## 1. 模块定位 `app/ui` 是整机的人机交互中枢,负责把“系统状态”转换为“屏幕可视化结果”,并把“屏幕触控/输入”转换为“系统控制动作”。 核心职责分为四类: - 通信层:与迪文屏进行串口协议收发; - 交互层:触控事件解析、输入字符串解析; - 状态机层:页面跳转、页面生命周期、超时返回; - 数据适配层:把业务数据统一封装给 UI(`ui_interface.c`)。 ## 2. 代码结构与职责划分 - `ui_task.c/.h` - UI 主任务入口; - 页面状态机(当前页面判断、页面切换触发); - 页面显示刷新调度(按 1s/首次进入/事件触发刷新); - 看门狗喂狗和通信超时检测。 - `ui_comm_impl.c/.h` - 迪文协议封包/解包; - 控制寄存器与数据寄存器读写; - 字符串显示下发、动画图标下发; - 参数区块镜像管理与屏幕写回。 - `ui_interface.c/.h` - 提供统一的“取数/控数”接口; - 屏蔽底层模块差异(流程、BMS、计量、平台); - 当前版本承担 `CCU621_M` 兼容层职能(部分数据默认值策略)。 - `ui_info.c/.h` - 页面文案资源(中文/英文); - 故障文本辅助转换; - UI 显示固定字符串资源。 ## 3. UI 主流程(任务周期) `v_ui_task()` 一个周期内的关键步骤: 调度信息(来自 `app/app_init/app_init.c`): - `UiComm`:`100ms` 周期(任务入口:`v_ui_task(void *argument)`) 1. 看门狗喂狗; 2. 读取并解包屏幕报文(触控、字符串、变量写入); 3. 执行页面切换控制(当前页校验 + 目标页下发); 4. 执行当前页面刷新逻辑(按页面类型调用对应显示函数); 5. 更新通信超时计数并上报状态; 6. 睡眠等待下个周期。 设计目标是将“通信、状态机、显示逻辑”解耦,便于后续替换业务数据源而不影响页面框架。 ## 4. 多语言界面实现逻辑 多语言由两个层次实现: - 页面资源映射层(页面ID -> 屏幕图片ID) - 每个逻辑页面 `E_UI_ID_TYPE` 在映射表里有多套语言图片索引; - 通过 `u8_lalanguage_type` 选择对应语言图片并下发; - 切语言时不改页面状态机,只改映射结果。 - 动态文本层(实时字符串) - 实时流程文案、状态文本通过 `ui_info.c` 的字符串表输出; - 同一个寄存器地址可按语言写入不同字符串; - 对于长度变化文本,先清空再写入,防止残留字符。 当前默认使用中/英两套资源,后续可按同一模式扩展第三语言。 ## 5. 页面跳转状态机设计 页面切换由“被动跳转 + 主动跳转”共同驱动: - 被动跳转(用户输入) - 触控按钮(开始、停止、返回、上一页、下一页等); - 字符串输入(维护密码、管理员密码、确认动作密码等)。 - 主动跳转(系统状态变化) - 空闲 -> 启动中 -> 充电中 -> 停止中 -> 结算; - 故障触发 -> 故障页面; - 升级标志触发 -> 升级页面; - 空闲超时 -> 屏保/首页。 状态机关键变量: - `e_set_pic_id`:目标逻辑页面; - `u8_ret_pic_id`:屏幕当前页面ID回读值; - `e_previous_id`:上一页面(用于返回); - `u8_first_jump`:首次进入页面标志(用于首次刷新)。 ## 6. 主要页面显示内容(摘要) - 待机页 - 二维码、联网图标、枪状态、桩号; - 双枪/单枪根据配置和工作状态动态切换页面。 - 启动中页 - 当前流程阶段文本; - 倒计时; - 达到充电状态后自动转实时页。 - 充电实时页 - 电压、电流、电量/功率、金额、时长、SOC; - 支持切换到电池信息页和停止操作。 - 电池信息页 - 电池类型/容量、需求电压电流、额定上限等; - 不同语言模式可展示不同字段重点。 - 停止中/结算页 - 停止倒计时、订单结算信息、停止原因; - 支持返回待机。 - 维护相关页 - 参数分类配置(系统/保护/网络/模块/预留/其他); - 历史告警分页、历史充电记录分页; - 操作确认页(保存参数/参数初始化/系统重启)。 ## 7. 参数配置区块设计 参数按寄存器区块管理: - `0x0200` 系统参数; - `0x0220` 保护参数; - `0x0240` 网络参数; - `0x0260` 模块参数; - `0x0280` 预留参数。 读写策略: - “进入页面”时:从共享配置初始化 UI 参数镜像并下发到屏; - “屏幕修改”时:回写参数镜像; - “确认保存”时:镜像写回系统配置并持久化。 字符串参数(桩号、域名、二维码、APN)单独按地址映射回写,避免和数值参数混用。 ## 8. 当前兼容策略(CCU621_M 过渡期) 由于 `CCU621_M` 业务模块未完全对齐旧项目,`ui_interface.c` 使用了默认策略: - 部分运行时数据(流程/BMS/计量/平台状态)临时返回默认值; - 控制接口先占位(记录启动方式,不直接驱动底层流程); - 历史记录接口返回空结果并给固定提示文案; - 可直接映射的固定参数与字符串(桩号、域名、密码、二维码、APN)已接入共享配置。 该策略目标是“先保障界面框架稳定可联调”,后续逐项替换默认值。 ## 9. 后续对接建议(优先级) 建议按以下顺序接入真实业务能力: 1. 流程状态与启停控制; 2. 电表/计量实时数据与订单结算数据; 3. BMS 数据; 4. 平台在线/升级/禁用状态; 5. 历史故障与历史订单分页读取; 6. 通信超时与故障上报闭环。