Files
CCU621M/app/ui/ui模块说明.md
T

162 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 通信超时与故障上报闭环。