9ceb218f80
Co-authored-by: Cursor <cursoragent@cursor.com>
5.7 KiB
5.7 KiB
UI 模块说明(CCU621_M)
路径:
app/ui/
返回主说明:README
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))
- 看门狗喂狗;
- 读取并解包屏幕报文(触控、字符串、变量写入);
- 执行页面切换控制(当前页校验 + 目标页下发);
- 执行当前页面刷新逻辑(按页面类型调用对应显示函数);
- 更新通信超时计数并上报状态;
- 睡眠等待下个周期。
设计目标是将“通信、状态机、显示逻辑”解耦,便于后续替换业务数据源而不影响页面框架。
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. 后续对接建议(优先级)
建议按以下顺序接入真实业务能力:
- 流程状态与启停控制;
- 电表/计量实时数据与订单结算数据;
- BMS 数据;
- 平台在线/升级/禁用状态;
- 历史故障与历史订单分页读取;
- 通信超时与故障上报闭环。