/* * 模块名称:UI 遥测整定视图模型(ui_w_ytview) * 模块功能:两张遥测整定页(遥测死区 9 行 / 遥测系数 8 行)的**共用视图模型**—— * 行表现状从 ui_data.h 通道五注入表逐行现取(工程量 + 粗守域 + 量纲 + * 显示小数位),换算成 ui_w_setlist 的显示域(工程量 × 10^decimals), * 并把"写一行 / 落盘确认 / 越界反显 / 未标定徽标"四件事收在一处,供两张 * 页面薄跳板(ui_page_deadband / ui_page_calib)共用——两页共用一份状态机 * 与换算,与 ui_w_setview"行表只有一份,界内界外就不会两套口径"同一条理由 * 与整定四页(ui_w_setview 的写方向)**故意不同形**,三处差别都写在 .c 的函数头: * ① 无工作叠层:死区/系数的真源本身就是 RAM 副本,语义 setter 是执行侧 * 写入口(写值与置脏同一函数内发生),"编辑即生效、ESC 不回滚"是本档 * 语义(与定值"攒一批整表封存"不同,取舍见 .c 文件头); * ② 保存行不是"投递整表",而是**落盘确认**:值在逐行 ENTER 时已经写进 * 副本并置脏,保存行按键只锁存"我这次动作的结果"(脏位归零 = 整档已 * 外科保存成功,判据 = ui_data_yt_pending(),与 104 留痕同一条 * "先 peek 再算成功",不另发明); * ③ 没有 LOCK 态:本档不受定值校验和闭锁管辖;"未标定"(cal_blocked) * 只画徽标、不禁编辑——改系数恰恰是走向标定的动作,禁了就是把路堵死 * 值域诚实性:行 min/max **逐行来自执行侧现给**(合法域唯一出口 run_par_db_range / * 粗守上限 RUN_PAR_K_MAX_UV)——本模块不出现任何一个范围数字字面量, * 抄一份就是卡片判据要拦的第二真源;µV 真带(执行段裁)没有公开访问器, * 本模块**不**补一份假的(task-43 收口前屏上只有粗守这一层,真带拒的值 * 经 set 返回 -1 → 行反显 + 保存行 ERR,两层守卫互不掩盖) * 分层:只依赖 Drivers/BSP/UI 同层(ui_data.h 注入表 + ui_w_setlist/ui_w_editor), * 零 App include(layer-deps + 模拟器链接期两条老理由,见 ui_data.h 通道五表注) * 适用平台:STM32F407ZGTx / PC 模拟器(共用源码) * 作者:DTU 项目组 * 创建日期:2026-10-27 * 修改记录: * v1.0 2026-10-27 DTU 项目组 创建(道F task-7;判据 docs/任务规划/UI补齐.md * §2 第 4 行;Lead 裁定:注入表八口形状、结果锁存、 * 粗守 + 注释两层守卫、真带访问器归 task-43) */ #ifndef UI_W_YTVIEW_H #define UI_W_YTVIEW_H #ifdef __cplusplus extern "C" { #endif #include #include "ui_w_setlist.h" /* ui_w_setlist_t + lvgl(经 ui_content_page.h) */ /* * 函数功能:把**死区**视图绑到定值表实例(行表现状逐行现取;两态在内部按 * ui_content_page_is_editable() 分派——只读不绑 commit/state,无保存行) * 入口参数:a_inst - 页面持有的实例(static,一页一份) ui_w_setlist_t * * 返回值:无 * 限定条件:页面 init_cb 内调用(uiTask 上下文,此时本次进入的权限已装载) * 函数说明:每次开页都重填行表并清历史结果(st/badmap)——上一次开页的 WAIT/OK * 与越界反显都不该带到这一次来(同整定四页"开页清稿"纪律) */ void ui_w_ytview_attach_db(ui_w_setlist_t *a_inst); /* * 函数功能:把**系数**视图绑到定值表实例(形状/分派/清稿与 attach_db 同一条路) * 入口参数:a_inst - 页面持有的实例 ui_w_setlist_t * * 返回值:无 * 限定条件:页面 init_cb 内调用 */ void ui_w_ytview_attach_cal(ui_w_setlist_t *a_inst); /* * 函数功能:系数页标题右侧画"未标定"徽标(cal_blocked 的屏上表达) * 入口参数:a_layer - 绘制层 lv_layer_t * * a_clip - 重绘区 const lv_area_t * * 返回值:无 * 限定条件:系数页 draw_cb 内(框架内置区块之后);只在 cal_blocked() 为真时落墨 * 函数说明:**死区页刻意不调它**——死区数值来自 [run_par] 档、与两点标定无关, * 在那页画"未标定"是把不相关的告警挂到不相干的屏上(徽标是断言)。 * 几何右界取 141:与整定四页徽标同一实测理由(标题带装饰右腿占 x 约 * 147..158);本标题"遥测系数"4 字到 x 约 104,与徽标左缘仅 1 px 间隙, * 会被读成一句"遥测系数未标定"——该读法语义成立(本页说的就是系数、 * 而系数此刻确实没标定过),像素黄金目检时确认过不再挪 */ void ui_w_ytview_draw_cal_badge(lv_layer_t *a_layer, const lv_area_t *a_clip); #ifdef __cplusplus } #endif #endif /* UI_W_YTVIEW_H */