f711130b4c
域5 新增 3 对文件(双端注册 uvprojx + CMakeLists),只做渲染与输入抽象、 不接真实数据源(数据绑定 = 批 2 道E ui_data/prot_set 经回调注入): - ui_w_editor:定点整数(10^decimals)逐位编辑——上下步进(0..9 环绕无进位)、 左右移数字光标(首末环绕)、ENTER 提交经 min/max 范围校验,越界拒绝并 显示"越界"提示留在编辑态;光标反显盒与 ui_page_net_cfg 字节光标同画法 (含"只画单字符防折行"实测坑注释);共享格式化 ui_w_editor_fmt_scaled() 单一规则源(值列显示与编辑光标恒同串) - ui_w_setlist:定值四视图(参数/定值/控制字/软压板)共用列表渲染 + 整定输入——行表(名称<=7字/id/类型/小数位/范围/二态串表) + 回调注入 (get/set/commit/state/bad);查看视图(commit=NULL)与整定视图只差绑定: 整定视图末行固定"保存"行,值随交接态 ENTER/WAIT/OK/ERR(net_cfg 先例), 整表一次提交(一次封存一次校验和,页面补齐规划 §3.2);二态行 ENTER 循环切换;保存失败越界行经 bad 回调反显(页面扩充详细方案 §3.2.7) - ui_page_action:可复用操作确认链——一次确认 -> 二次确认 -> ok_cb 只投递不阻塞 -> done_text 回报(或成功即关页),拒收显示 ERR 可重试; ESC/LEFT 关页取消(实测取消后菜单与基线逐字节一致);单例描述符由 开页装载(内容页框架全局单页前提),不定义 ui_page_action_desc (registration-check 页面模块判据不误拦,批 2 跳板各自出口) 组件文案用字全部落在上一分支预置字集内(font-charset WARN 60->52 印证 确/取/消/越/二/次/返/回 已转源码在用),无需再动字库。 BSP 公开 API 约定合规(首提被 cppcheck/coding-standard/bsp-err 三钩拦下, 按门禁口径修净后复验全绿): - 键分发返回值取 uint8_t 1/0 不用 bool(bsp-err/err-type:bool 只许 is_/has_ 谓词);ui_w_editor_value 直返 int32_t(出参形状无错误通道) - ui_page_action_open 返回 bsp_err_t:BSP_ERR_PARAM 参数无效 / BSP_ERR_STATE 已有页打开 / BSP_ERR_NO_SPACE 框架开页失败(可判分支) - get/state/bad 回调 typedef 各补"返回值:"注释块(bsp-err/return-doc) - cppcheck variableScope 变量收scope 7 处;CODE-RULE-18 Yoda 1 处 (sel+1u==total -> sel==count);提交内已不含 --wdemo/--wact harness 验证: - 模拟器零警告;组件行为经临时 sim-only harness(--wdemo/--wact) 截图 目检 7 态:基线视图/bad 反显/进编辑步进/越界拒绝/二态切换/保存整表 提交 OK/确认链三段/取消回菜单;harness(main.c 4 处 + CMake 1 行 + ui_w_demo.c)已完整还原删除,提交内不含(最终树 main.c 无改动, CMakeLists diff 仅 3 行注册) - 回归:菜单 8 状态 + 内容页 11 页黄金参考逐字节 PASS(ref 无变化, 无基线更新提交);池基线 5368/往返 5448 不变 - 门禁:coding-standard PASS / font-charset PASS / layer-deps PASS (新文件零 App include,基线 6 不变——减基线归 task-6) - @build 0 Error 0 Warning;Code +324 B、RO/RW/ZI 0(组件尚无引用方, ARM 链接器未剥离仅因新 TU;批 2 页面接线后实例 RAM 每页约 +40~60 B) gate: 全钩子正常执行通过,无 --no-verify - pre-commit run --all-files 全绿(含 mem-budget/mem-numbers:本分支基于 回填后台账 d9ab955,RAM 0 变化、RO 不变,仅 Code +324 B 不涉受管区) - 手工自查:6 新文件 BOM=EF BB BF 齐全、全 LF、U+FFFD=0、字面量仅 UTF-8 中文(UI 带 BOM 先例口径:保存/越界/二次确认/告警/跳闸等, 全部已在字体子集);ASCII 串仅 ENTER/WAIT/OK/ERR 状态字
72 lines
3.8 KiB
C
72 lines
3.8 KiB
C
/*
|
||
* 模块名称:UI 动作确认页(操作页共享实现,ui_page_action)
|
||
* 模块功能:可复用的"确认 -> 二次确认 -> 执行回报"操作页构建器——
|
||
* 强制复归 / 清除记录 / 手动录波等叶子共用同一页实现,
|
||
* 各自以一份实例(标题/问句/结果行/执行回调)开页;
|
||
* 执行回调只投递请求不阻塞(跨任务交接由页面跳板实现),
|
||
* 成功经 done_text 回报后再 ENTER 返回,done_text=NULL 成功即关页;
|
||
* 投递失败显示 ERR,下一次 ENTER 重新走二次确认
|
||
* 适用范围:Drivers/BSP/UI(表单页形态:无浅 V 装饰、无页脚——用户密钥页
|
||
* 跟随实机先例;ESC 恒关页 = 取消,LEFT 亦关页 = 取消)
|
||
* 说明:同一时刻仅一张操作页在用(内容页框架本就全局单页),模块以
|
||
* static 单例描述符 + 当前实例指针承载钩子上下文;页面跳板
|
||
* (批 2 各 ui_page_xxx)持 ui_page_action_t 实例并在自己的入口
|
||
* 调 ui_page_action_open()
|
||
* 作者:王建锋
|
||
* 创建日期:2026-10-25
|
||
* 修改记录:
|
||
* v1.0 2026-10-25 王建锋 创建(道B task-5 三组件之一;规格 =
|
||
* 页面扩充详细方案.md §3.4 装置维护操作页 +
|
||
* §4.2 ui_page_action bind(title, prompt, ok_cb)
|
||
* 二次确认、ok_cb 只投递不阻塞)
|
||
*/
|
||
#ifndef UI_PAGE_ACTION_H
|
||
#define UI_PAGE_ACTION_H
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
#include <stdbool.h>
|
||
#include <stdint.h>
|
||
|
||
#include "bsp_err.h" /* bsp_err_t(开页结果错误通道——BSP 公开 API 约定) */
|
||
|
||
/* 执行回调:只投递请求(事件位/消息队列),立即返回;
|
||
* 返回值:true = 投递被接受(页面转成功回报),false = 拒收(页面显示 ERR) */
|
||
typedef bool (*ui_page_action_ok_fn)(void);
|
||
|
||
/* 操作页实例(配置字段 Flash 指针 + 运行态);
|
||
* 用法:页面跳板 static 一份、花括号初始化配置,开页经 ui_page_action_open */
|
||
typedef struct {
|
||
const char *title; /* Flash:页标题(框架头部居中) */
|
||
const char *prompt; /* Flash:确认问句(如"确认复归所有保护?"——
|
||
问句用字须已入字体子集) */
|
||
const char *done_text; /* Flash:成功后结果行(如"已请求复归");
|
||
NULL = 成功后直接关页回菜单 */
|
||
ui_page_action_ok_fn ok_cb; /* 必填:执行投递 */
|
||
uint8_t stage; /* 运行态:0 一次确认 / 1 二次确认 / 2 完成回报 */
|
||
uint8_t err; /* 运行态:1 = 上轮投递被拒(显示 ERR) */
|
||
} ui_page_action_t;
|
||
|
||
/*
|
||
* 函数功能:开操作页(装载实例 + 复位确认态 + 经内容页框架开页)
|
||
* 入口参数:inst - 操作页实例(配置字段须已填好;ok_cb 不得为 NULL)
|
||
* ui_page_action_t *
|
||
* perm - 授予权限(ui_perm_t;由跳板决定传什么权限,
|
||
* 组件不拦权限只拦 ok_cb 为空)
|
||
* 返回值:BSP_OK = 已开页;BSP_ERR_PARAM = 参数无效;
|
||
* BSP_ERR_STATE = 已有页面打开(框架单页互斥);
|
||
* BSP_ERR_NO_SPACE = 框架开页失败(池不足等) bsp_err_t
|
||
* 限定条件:uiTask 上下文;每次进入从一次确认开始(不跨次保留 stage)
|
||
* 函数说明:键语义——ENTER 推进确认链(0->1->执行->2),ESC/LEFT 关页取消;
|
||
* stage=2 时 ENTER 关页返回
|
||
*/
|
||
bsp_err_t ui_page_action_open(ui_page_action_t *a_inst, uint8_t a_perm);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif /* UI_PAGE_ACTION_H */
|