/* * 模块名称:UI 记录页共享组件(运行记录 / 自检记录两页的公共实现) * 模块功能:把"定长记录 -> 每记录 2 行(偶数行时间戳、奇数行描述)+ 同记录读盘缓存 * + 空态单条伪行"这套逻辑收成一份,供多个日志页按实例复用 * 适用范围:Drivers/BSP/UI(仅 UI 层,数据源固定为 sys_log API) * 说明:缓存必须按实例存放而非文件级静态——两页共用代码但各有独立实例, * 若共享缓存,从 A 页切到 B 页会命中上一记录号而显示另一页的陈旧行(静默错数据)。 * 作者:王建锋 * 创建日期:2026-10-20 * 修改记录: * v1.0 2026-10-20 王建锋 创建(W6 U2:合并 ui_page_runlog / ui_page_selftest 的重复实现) */ #ifndef UI_W_RECORDS_H #define UI_W_RECORDS_H #ifdef __cplusplus extern "C" { #endif #include #include "sys_log.h" /* * 记录页实例:日志源 + 该实例自己的读盘缓存 * 用法:页面文件里 static ui_w_records_t s_rec = { SYSLOG_XXX }; * 其余字段自动清零,即"缓存初始无效",与合并前两页的行为一致。 */ typedef struct { syslog_id_t id; /* 日志源 ID(决定读哪个记录文件) */ uint8_t cache_valid; /* 缓存有效标志(0 = 无缓存) */ uint32_t last_rec; /* 已缓存的记录序号 */ char ts[SYSLOG_TS_LEN + 1u]; /* 时间戳缓存(含 NUL) */ char desc[SYSLOG_DESC_MAX + 1u];/* 描述缓存(含 NUL) */ } ui_w_records_t; /* * 函数功能:总行数(动态;每条记录 2 行,空日志 = 单条伪行"无记录") * 入口参数:inst - 记录页实例 ui_w_records_t * * 返回值:总行数 uint16_t */ uint16_t ui_w_records_count(ui_w_records_t *a_inst); /* * 函数功能:逐行取数(偶数行 = 时间戳、奇数行 = 描述;值列恒空) * 入口参数:inst - 记录页实例 ui_w_records_t * * row - 全局行下标 uint16_t * name - 名输出缓冲(框架栈缓冲 UI_BUF_STRLEN=32,含 NUL) char * * value - 值输出缓冲(同上;本组件恒写空串) char * * 限定条件:页面打开中(框架绘制/按键上下文,uiTask) */ void ui_w_records_refresh(ui_w_records_t *a_inst, uint16_t a_row, char *a_name, char *a_value); #ifdef __cplusplus } #endif #endif /* UI_W_RECORDS_H */