Files
STM32F4-Base/Drivers/BSP/UI/ui_page_registry.h
T
super_agent_bot 912c16b757
CI / 静态门禁 (pre-commit) (push) Failing after 7m28s
CI / 主机侧单测 (MSVC) (push) Successful in 29s
CI / 静态门禁 (pre-commit) (pull_request) Has been cancelled
CI / 主机侧单测 (MSVC) (pull_request) Has been cancelled
feat(sntp): 板端 SNTP 校时接入——coreSNTP 序列化器 + [sntp] 段 + 设置页(#73)
- vendored coreSNTP v2.0.0 序列化器(MIT,仅 serializer+LICENSE,零堆),
  48 字节报文编解码在库,节奏与准入判据在本方(RFC 4330 §10 调研口径)
- App/sync/time_sntp.c 挂 timeSyncTask 的 8888 事件循环,等待切片 ≤50 ms,
  不饿任务狗与 IWDG;懒建 UDP socket,代际变化/禁用/死错误码即关闭归还
- 防伪 = OriginTimestamp 逐位等于发出时 T1(含低 16 位随机小数位);
  mode/stratum/闰秒指示/KoD 按 RFC 拒收;DENY·RSTR 换服务器、RATE 只退避
- 主备轮换 + 失败指数退避(5 s 起、60 s 封顶)+ 首轮 1~5 分钟随机错峰;
  成功恢复 poll_min 周期(1~1440 分,出厂默认 60,默认不启用不发包)
- 钟面 = 本地时间:UTC+8 固定偏移落 sys_clock_set_unix(§1.1 时基裁定,
  第三个写入口,装置仍不存时区);|offset|<2 s 只记日志不步进,冷启动或
  更大偏差步进并回写 SD2506,留痕 [SNTP] step 与 syslog OPER
- 首个校验通过的同步置 SYS_EVT_TIMESYNC_READY(就绪位,消费方按需 NoClear)
- [sntp] 配置段(enable/server1/server2/poll_min)属主 sntp_cfg.c,
  注册在 net_cfg_load();UI 页 31「SNTP 设置」(密码叶):启用开关 +
  主/备服务器 octet 编辑 + 周期(分) + 保存,复用 net_cfg_save_request 链
- 测试与门禁:test/host/sntp 新套件(报文/防伪/KoD/退避周期/阶跃域/配置
  注册表)、net_cfg 与 time_sync 套件补 fake、黄金参考 66→74 张零漂移、
  字符集 228 字、Keil 0 错 0 警(RO +5,848 B 含字体)、覆盖率基线回填
- 文档:墙钟维护说明 §16、网络配置说明 [sntp] 节、配置文件设计说明变更记录、
  产品需求 FR-TIME-3 与 8.3/9.1.2 台账、UI 补齐规划/UI补齐 31 叶口径、
  登记簿销项并登记「SNTP 校时真机判据」等台架(PC 时间源 192.168.31.161/.13)
2026-11-04 16:02:28 +08:00

57 lines
2.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* 模块名称:UI 页面注册表头文件(自动生成)
* 模块功能:叶子节点 → 内容页描述符的映射表与查询 API;密码页非节点绑定,单独出口
* 适用平台:STM32F407ZGTx / PC 模拟器(共用源码)
* 作者:王建锋
* 创建日期:2026-10-15
* 自动生成:本文件由 tools/menu_gen/gen_menu.py 从 ui_menu_tree.txt 的 #page= 注记生成,请勿手改。
* 新增一页:菜单树给叶子加 " #page=<模块名>" + 写 ui_page_<模块名>.c,重跑生成器
* (双端注册 uvprojx/CMakeLists 亦由生成器自动写入)
*/
#ifndef UI_PAGE_REGISTRY_H
#define UI_PAGE_REGISTRY_H
#include <stdint.h>
#include "ui_content_page.h"
#ifdef __cplusplus
extern "C" {
#endif
/* 注册表条目:一个绑定了内容页的菜单叶子(表序 = 节点下标升序) */
typedef struct {
uint8_t node; /* 菜单叶子节点下标(g_menu_tab 下标) */
const content_page_def_t *desc; /* 页面描述符(Flash const) */
} ui_page_entry_t;
#define UI_PAGE_MAP_COUNT 31u /* 绑定了内容页的叶子数 */
extern const ui_page_entry_t g_ui_page_map[UI_PAGE_MAP_COUNT];
/*
* 函数功能:查叶子节点绑定的内容页描述符
* 入口参数:node - 菜单叶子节点下标 uint8_t
* 返回值:页面描述符;该叶子未绑定内容页返回 NULL const content_page_def_t *
* 限定条件:node < UI_MENU_TAB_COUNT
* 函数说明:取代旧 ui_menu.c 手写 case 分发——映射的唯一真源是 ui_menu_tree.txt,
* 表序变化不会造成"下标硬编码错位"(线性扫描:绑定页是个位数量级)
*/
const content_page_def_t *ui_page_registry_for(uint8_t node);
/*
* 函数功能:取密码页描述符(需密码叶子统一进这一页)
* 入口参数:无
* 返回值:密码页描述符;菜单树未声明 @password 指令时返回 NULL const content_page_def_t *
* 限定条件:无
* 函数说明:密码页**不是**节点绑定的(任何 #P 叶子都进同一页),故不进 node→desc 映射,
* 由本接口单独出口;取值来自 ui_menu_tree.txt 的 `# @password=<模块名>` 指令
*/
const content_page_def_t *ui_page_registry_password(void);
#ifdef __cplusplus
}
#endif
#endif /* UI_PAGE_REGISTRY_H */