94b0d79026
本笔含两组收尾工作(同一工作区内交错在 6 个共享文档/门禁配置里, 拆开会产生"文档声称的页数与树里黄金数不一致"的中间提交,故合为一笔): 一、UI 补齐(清单清空) - 新建 6 个内容页模块:ui_page_accident / oper / alarm / start / yk 复用 ui_w_records 共享组件(分页、空态"无记录"、按实例读盘缓存), 记录层与五个写入点已由道F task-10 / 道G task-12 落地,本批只补页面; ui_page_runreport 为 13 行 2 页只读统计,四个数逐个挂范围标签 (自电池周期 / 本次开机),boot_ready=0 显 "--" 不显 0。 - 数据面:ui_data_info_t 尾部追加 9 字段,ui_data_feed 用 boot_stats_get() + iec104_serv_get_stats() 纯搬运;模拟器填确定值假数据 (差异登记 docs/测试说明/模拟器差距清单.md §2.3 两行)。 - 接线:菜单树 6 叶绑 #page=,绑定叶 22→28、UI_PAGE_MAP_COUNT=28; 字库 185→218 字 / 280→313 字形;双端注册 uvprojx +30、CMakeLists +6。 - 回归:内容页黄金 53→60(含 runreport_p2 真拍第 2 页),文本断言 425 正向 / 36 反向;存量 53 张逐字节零漂移;记录 5 页各用独立空目录 (模拟器把操作留痕写进 cwd 的 sim_oper.log,共用 tmp 会让空态拍不到)。 二、数据可信销项 + 「数据可信」任务卡号整族清退 - 删除已闭环的"已知电压注入验证"行与闭环结论块(证据在 docs/硬件平台/ADC通道映射说明.md §8.1 与 docs/测试说明/ADC前端注入验证流程.md §5~§7),§5 标识列改语义短语。 - 卡 0/0b/1~12 共 14 个号全仓 288 站点 / 56 文件清退成语义短语, 代码注释、测试、门禁配置与文档一并改;换算表入 docs/编号规范.md §9.3。 这一族是中文前缀,不进 check_ids 语料,刻意不入 id_aliases.json。 验证(实测) - @build 0 错 0 警:Code=236456 RO=28124 RW=1876 ZI=137084; RAM +464 B(RW +304 / ZI +160),RW_IRAM1 62.2% / RW_CCM 87.9%, 体积同码凭证与 RAM 台账已回填。 - check_menu_rows 8 状态 rc=0(池 5368/5448 常量未动); check_content_pages 60 页 rc=0;check_font_charset / registration / coding-standard / bom-drift / mojibake / doc-links --all / layer-deps / nested-comment 全 rc=0;check_ids --strict 无错误;主机单测 ui_data 295 / boot_stats 21 / sys_log_mcu 141 / soe 32 / soe_store 27。 未做(不是遗漏) - 六页真机判据(真记录翻页、掉电保持、清除后归零、boot_count 自增、 拔 RTC 电池落 RESTARTED、IWDG 复位落 rst_cause、主站连一次 conn_up+1) 已登记 docs/任务规划/登记簿.md §7;模拟器结构上照不到。 - docs/产品需求/产品需求设计文档.md 属另一条在飞改动,本笔不含; 其中我已同步 6 处现状数字(28 叶 / 60 页 / 218 字),随该笔入库。
80 lines
3.7 KiB
C
80 lines
3.7 KiB
C
/*
|
||
* 模块名称:UI Page 事故记录(事故记录内容页)
|
||
* 模块功能:事故记录叶子节点(node 34,父节点「记录查询」)的内容页数据——动态列表,
|
||
* 每条记录 2 行(偶数行 = 时间戳、奇数行 = 描述),可移选分页;数据经 ui_w_records
|
||
* 注入 reader 取自 sys_log(/log/accid.log,容量上限 512 条,满时删除重建);
|
||
* 空日志显示单条伪行"无记录";向框架 ui_content_page 提供页面描述符(零 LVGL 对象)
|
||
* 记录口径(本文件只读显示、不实现写入方;权威表 App/log/README.md §五类记录):
|
||
* 触发判据 = 元件 asserted 上升沿**且**该元件跳闸投退项 = 1(跳闸型动作);
|
||
* 写入点 = App/task/protect_task.c 的 s_log_active_edge();
|
||
* "记录类型 = 日志 ID 本身"(一类记录一个文件,记录体内没有类型字段位,
|
||
* Lead 裁定 2026-10-26)——本页只读 accid.log 一个文件,不做跨文件混排。
|
||
* 台架待补(不在本批,已登记 docs/任务规划/登记簿.md):真 NAND 上真实记录的翻页读取、
|
||
* 掉电后记录保持、清除记录后本页归零这三件事都要上板复核;模拟器侧该文件
|
||
* 没有写入方,像素黄金只能验空态"无记录"。
|
||
* 适用平台:STM32F407ZGTx / PC 模拟器(两端共用)
|
||
* 作者:DTU 项目组
|
||
* 创建日期:2026-10-28
|
||
* 修改记录:
|
||
* v1.0 2026-10-28 DTU 项目组 创建(UI 补齐「记录 5 页」:照 ui_page_runlog.c 同构,
|
||
* 分页 / 空态 / 按实例读盘缓存全部复用 ui_w_records,
|
||
* 本文件不重复实现,也不改共享组件)
|
||
*/
|
||
|
||
/* 头文件包含区 */
|
||
#include "ui_page_accident.h"
|
||
#include "ui_w_records.h"
|
||
|
||
#include "ui_tokens.h"
|
||
|
||
/* 静态变量定义区 */
|
||
|
||
/*
|
||
* 记录页薄跳板:内容全部走 ui_w_records 共享组件(W6 合并先例)。
|
||
* 实例 s_rec 携带记录源编号与**本实例自己的**读盘缓存——多页共用组件代码,
|
||
* 但缓存不得共享,否则切页会命中上一记录号而显示另一页的陈旧行(静默错数据)。
|
||
*/
|
||
static ui_w_records_t s_rec = { UI_W_REC_LOG_ACCIDENT };
|
||
|
||
/*
|
||
* 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录")
|
||
* 入口参数:无
|
||
* 返 回 值:总行数 uint16_t
|
||
* 限定条件:uiTask 绘制上下文(经框架回调)
|
||
*/
|
||
static uint16_t pg_count(void) {
|
||
return ui_w_records_count(&s_rec);
|
||
}
|
||
|
||
/*
|
||
* 函数功能:逐行取数(转调共享组件;偶数行 = 时间戳、奇数行 = 描述)
|
||
* 入口参数:row - 全局行下标 uint16_t
|
||
* name - 名输出缓冲 char *
|
||
* value - 值输出缓冲(本组件恒写空串) char *
|
||
* 返 回 值:无 void
|
||
* 限定条件:uiTask 绘制上下文(经框架回调)
|
||
*/
|
||
static void pg_refresh(uint16_t row, char *name, char *value) {
|
||
ui_w_records_refresh(&s_rec, row, name, value);
|
||
}
|
||
|
||
/*
|
||
* 页面描述符(外部链接:生成物 ui_page_registry.c 按菜单树 #page=accident 绑定引用):
|
||
* 动态列表页——每记录 2 行、UI_LIST_ROWS 行/页;band_h=UI_ROW_BAND_H(同 AC/DC 约定:
|
||
* selectable 页选中行黑字必须配白带,band_h=0 会致选中行不可见)
|
||
*/
|
||
const content_page_def_t ui_page_accident_desc = {
|
||
.id = "accident",
|
||
.title = "事故记录",
|
||
.selectable = 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,
|
||
.count_cb = pg_count,
|
||
.refresh = pg_refresh,
|
||
};
|