Files
STM32F4-Base/Drivers/BSP/UI/ui_page_deadband.c
T
wandering1 ae09c5737a docs: 删任务规划两份已完成文档,数据可信内容迁入算法层/硬件平台/登记簿
任务规划目录从 5 个文件收敛到 3 个:只留导航(README)、待办(登记簿)、
暂缓专项(暂缓-RS485)。

删除的两个文件都不再有现行读者:
- UI补齐.md 执行清单 2026-10-28 清空、上板判据 2026-11-06 台架轮已复核;
  叶数口径迁 docs/UI设计/菜单页面设计.md §3.9,三条内容页硬规矩迁
  docs/UI设计/内容页架构.md §7.1,两条未闭环待办迁登记簿 §7/§8。
- 数据可信.md 不是完成记录,而是被约 130 处代码头注释引用的设计约束,
  因此按内容分三处落位后删除,不整篇丢弃。

数据可信内容的新归属(旧节号 → 新家):
- §2/§4 设计口径 → docs/算法/采集与算法层设计说明.md 新增 §13(13 小节),
  §7 前置决策表 → §13.12 已定案的前置决策。
- §3 台阶与波次退出判据 → docs/硬件平台/ADC通道映射说明.md 新增 §9。
- §5 任务卡 → docs/任务规划/登记簿.md §7(拆成变比确认 / 两点标定两行)。

引用改写 34 文件 77 处路径引用 + 14 文件 24 处昵称引用 + 双重节号 35 处,
覆盖代码头注释、测试、生成器与文档;归档区历史路径改纯文本提及。
四个 SVG 生成器文案同步并重跑,产物随脚本同批提交。

同批处理两件事:
- 9 个 UTF-16 LE 证据文件转 UTF-8。end-of-file-fixer 按字节判末尾换行,
  UTF-16 的换行是 0A 00、末字节 00,钩子会追加裸 0x0a 使文件变奇数长度,
  8 个已实际损坏。转码后逐文件比对 HEAD 原文验证正文零丢失。
- 修回 App/cfg/cfg_file.c 被剥掉的 UTF-8 BOM(补 3 字节,未整文件重写)。

验证:/keil-build 0 错误 0 警告(Code=255160);check_doc_links --all
--sections-strict 221 篇全通过、无法判定 0;pre-commit 全量全 Passed。
2026-11-09 16:13:57 +08:00

118 lines
4.7 KiB
C

/*
* 模块名称:UI Page deadband (遥测死区内容页)
* 模块功能:三遥设置 → 遥测死区 叶子(#P 受密码保护)的内容页——9 行数值表,
* 每页 8 行自动分页;本文件零 App include:行表现状(值/粗守域/量纲/
* 小数位)逐行来自 ui_data.h 通道五注入表,写与落盘确认全经
* ui_w_ytview 视图模型(状态机/反显/徽标在那一侧,两页共用一份)——
* 本文件只是标准骨架几何令牌接进框架的薄跳板,改一次口径两页一致
* 两态一页:123 修改权限 → 可编辑(编辑器 + 保存行 = 落盘确认);000 查看权限
* → 只读(attach 内不绑 commit → 无保存行、key_cb 整页交回框架,
* 行为与"没有 key_cb"逐字等价,整定四页同一条分派纪律)
* 徽标说明:本页**不画**"未标定"——死区数值来自 [run_par] 档、与两点标定无关,
* 挂不相干的告警等于稀释真告警(ui_w_ytview.h 同注)
* 适用平台:STM32F407ZGTx / PC 模拟器(共用源码)
* 作者:DTU 项目组
* 创建日期:2026-10-27
* 修改记录:
* v1.0 2026-10-27 DTU 项目组 创建(道F task-7;通用判据 = docs/UI设计/
* 内容页架构.md §7.1;本页另须「改死区能改变 104 上送门限 /
* 改 k 后页面值按比例变化 / 只走既有落盘链不加第二真源」)
*/
/* 头文件包含区 */
#include "ui_page_deadband.h"
#include "ui_tokens.h"
#include "ui_w_setlist.h"
#include "ui_w_ytview.h"
/* 静态变量定义区 */
/* 本页定值表实例(组件状态独占一份,勿跨页共用——ui_w_setlist 实例化约定) */
static ui_w_setlist_t s_sl;
/* 函数定义区 */
/*
* 函数功能:开页绑视图(行表现状逐行现取 + 两态分派都在视图模型内;接 init_cb)
* 入口参数:无
* 返回值:无
* 限定条件:框架开页链内(本次进入权限已装载,时序依据见 ui_page_view_param.c
* 同位置注释:框架先装权限再调 init_cb)
*/
static void pg_init(void) {
ui_w_ytview_attach_db(&s_sl);
}
/*
* 函数功能:总行数(数据行现给 + 可编辑态才有保存行;接 count_cb)
* 入口参数:无
* 返回值:总行数 uint16_t
* 限定条件:框架绘制/翻页链内
*/
static uint16_t pg_count(void) {
return ui_w_setlist_count(&s_sl);
}
/*
* 函数功能:逐行取数(接 refresh;行现状在视图模型里现取,本层无缓存)
* 入口参数:a_row / a_name / a_value - 契约见 ui_content_page.h
* 返回值:无
* 限定条件:框架绘制链内
*/
static void pg_refresh(uint16_t a_row, char *a_name, char *a_value) {
ui_w_setlist_refresh(&s_sl, a_row, a_name, a_value);
}
/*
* 函数功能:自绘层(编辑光标反显 + 写被拒行反显)
* 入口参数:a_layer / a_clip - 契约见 ui_content_page.h
* 返回值:无
* 限定条件:框架绘制链内,内置区块画完之后
*/
static void pg_draw(lv_layer_t *a_layer, const lv_area_t *a_clip) {
ui_w_setlist_draw(&s_sl, a_layer, a_clip);
}
/*
* 函数功能:按键转发(接 key_cb)
* 入口参数:a_key - LVGL 键值 lv_key_t
* 返回值:true - 本页已消费;false - 交回框架(↑↓ 移选、← 关页)
* 限定条件:描述符 edit_capable=1 + key_intercept=1(编辑中 ←→ 是移数字光标,
* 必须先给页面,否则框架把 ← 当关页——整定四页同款实证)
* 函数说明:第一条门 = 只读进入(未绑 commit)整页交回框架,与"本页没有
* key_cb"逐字等价(黄金参考只读态为证);其余分发规则全在组件
*/
static bool pg_key(lv_key_t a_key) {
if (s_sl.commit == NULL) {
return false;
}
return (ui_w_setlist_key(&s_sl, a_key) != 0u);
}
/*
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=deadband 绑定引用)
* 列表页骨架 + 可编辑 + ← 拦截;band_h 必须 >0(选中行黑字白底反显,同四整定页);
* row_count 给静态上限(9 数据行 + 保存行),行数运行时以注入表现报为准
*/
const content_page_def_t ui_page_deadband_desc = {
.id = "deadband",
.title = "遥测死区",
.selectable = 1u,
.edit_capable = 1u,
.key_intercept = 1u,
.top_y = UI_LIST_TOP,
.pitch = UI_ROW_PITCH,
.band_h = UI_ROW_BAND_H,
.text_dy = 0,
.left_x = UI_LIST_LEFT_X,
.right_x = UI_LIST_RIGHT_X,
.rows_per_page = UI_LIST_ROWS,
.row_count = 10u,
.init_cb = pg_init,
.count_cb = pg_count,
.refresh = pg_refresh,
.draw_cb = pg_draw,
.key_cb = pg_key,
};