diff --git a/AGENTS.md b/AGENTS.md index 39f42828..04d5956a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -90,7 +90,7 @@ ## 提交门禁(pre-commit) -- 任一失败即拦截,共 **48 个钩子**(新增 `bom-guard` / `setview-check` 两条,2026-10-25 道E task-20,详解篇目待补;**每种门禁一篇详解(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径)→ `docs/门禁说明/README.md` 索引**;通用机制与整体口径 → `docs/代码规范/pre-commit使用说明.md`):通用 5 + `gitlint` + `cppcheck` / `test-cppcheck` + `no-mojibake` + `coding-standard` + 文档三件套 `doc-links` / `task-table` / `mem-numbers` + `id-check`(**编号门禁**,`docs/编号规范.md` §8 八项校验;**已关闸为【增量拦截】**:只拦 `scripts/id_known_backlog.json` 台账之外的新错误级问题,存量按指纹豁免、台账只减不增;另有一根恒生效的线——可判定比例跌破 `id_registry.json` 基线即失败)+ `lv-conf-sync`(两份 `lv_conf.h` 特性子集一致)+ `cubemx-survival` + 主机侧单测 22 个(`-unit-test` 后缀,2026-10-25 增补 adc-cal / prot-dim / vol-idle-sync / ui-data / meas / run-par 六个)+ `test-coverage`(**覆盖率总闸**:跑全部 39 套并守基线回退;缺 mscoverage 组件时按用户裁定 **FAIL**、不 skip,2026-10-24)+ `test-suite-switch` + `registration-check`(双端注册反向校验 + UI 页面描述符表接线,N-23/U4)+ `mem-budget`(RAM 92% 预算门禁,N-27)+ `font-charset`(UI 字符集差集检查,防缺字白框,U4)+ `ui-golden`(UI 像素回归,菜单 8 状态 + 内容页 11 页黄金参考,U4)+ `layer-deps`(**分层方向**:`Drivers/BSP/**` 不得 include `App/**` 的头;存量 3 条基线只减不增(2026-10-25 记录 reader 注入削掉 UI 记录 3 条边,6→3),报告 S-1)+ `bsp-err`(**BSP 错误码与超时命名约定**:公开 API 不得拿 `HAL_StatusTypeDef`/`bool` 当错误通道、`*_TIMEOUT` 宏不得取负值、非 void 须写「返回值:」、**返回错误码的函数不得裸丢弃返回值**(须接住或显式 `(void)`;实测编译器与 cppcheck 都不报这类,只有这条会响);约定正文 `Drivers/BSP/bsp_err.h`,存量基线只减不增(2026-10-23 首清点 19 条 → 已还 18;`consume-result` 上线又暴露 37 条存量丢弃 → **现 38 条**),报告 S-5) +- 任一失败即拦截,共 **48 个钩子**(新增 `bom-guard` / `setview-check` 两条,2026-10-25 道E task-20;**每种门禁一篇详解(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径)→ `docs/门禁说明/README.md` 索引**;通用机制与整体口径 → `docs/代码规范/pre-commit使用说明.md`):通用 5 + `gitlint` + `cppcheck` / `test-cppcheck` + `no-mojibake` + `coding-standard` + 文档三件套 `doc-links` / `task-table` / `mem-numbers` + `id-check`(**编号门禁**,`docs/编号规范.md` §8 八项校验;**已关闸为【增量拦截】**:只拦 `scripts/id_known_backlog.json` 台账之外的新错误级问题,存量按指纹豁免、台账只减不增;另有一根恒生效的线——可判定比例跌破 `id_registry.json` 基线即失败)+ `lv-conf-sync`(两份 `lv_conf.h` 特性子集一致)+ `cubemx-survival` + 主机侧单测 22 个(`-unit-test` 后缀,2026-10-25 增补 adc-cal / prot-dim / vol-idle-sync / ui-data / meas / run-par 六个)+ `test-coverage`(**覆盖率总闸**:跑全部 39 套并守基线回退;缺 mscoverage 组件时按用户裁定 **FAIL**、不 skip,2026-10-24)+ `test-suite-switch` + `registration-check`(双端注册反向校验 + UI 页面描述符表接线,N-23/U4)+ `mem-budget`(RAM 92% 预算门禁,N-27)+ `font-charset`(UI 字符集差集检查,防缺字白框,U4)+ `ui-golden`(UI 像素回归,菜单 8 状态 + 内容页 18 页黄金参考,U4)+ `layer-deps`(**分层方向**:`Drivers/BSP/**` 不得 include `App/**` 的头;存量 3 条基线只减不增(2026-10-25 记录 reader 注入削掉 UI 记录 3 条边,6→3),报告 S-1)+ `bsp-err`(**BSP 错误码与超时命名约定**:公开 API 不得拿 `HAL_StatusTypeDef`/`bool` 当错误通道、`*_TIMEOUT` 宏不得取负值、非 void 须写「返回值:」、**返回错误码的函数不得裸丢弃返回值**(须接住或显式 `(void)`;实测编译器与 cppcheck 都不报这类,只有这条会响);约定正文 `Drivers/BSP/bsp_err.h`,存量基线只减不增(2026-10-23 首清点 19 条 → 已还 18;`consume-result` 上线又暴露 37 条存量丢弃 → **现 38 条**),报告 S-5) - **范围 = 项目代码**:第三方(`Lib/`、`Middlewares/`、CMSIS、HAL、`lftpd`、`dhara`、`MDK-ARM`)排除;`cppcheck`/`coding-standard` 另排除 `test/`,规范检查再排除 CubeMX 生成的 `Src/`/`Inc/`。**`simulator/` 已纳入全部钩子**(2026-10-11)——生成物只靠 `.gitignore` 挡,**不在 `exclude` 里写目录名**(教训见 `docs/代码规范/pre-commit使用说明.md` §5.5) - ⚠ **pre-commit 4.x 已移除 `always: true`**(实测对 `local` 钩子只告警 `Unexpected key(s)` 并跳过)→ 想"总是跑"的钩子**必须让 `files:` 覆盖到所有会触发它的文件**,没有兜底开关 - **改写型钩子(`trailing-whitespace` + `end-of-file-fixer`)豁免 CubeMX/Keil 生成文件**(配置里 YAML 锚点 `&cubemx-generated`);⚠ **只读检查不受影响**:`cppcheck` / 乱码 / `cubemx-survival` / `task-table` / `mem-numbers` 仍覆盖 `Src/`、`Inc/` @@ -173,7 +173,7 @@ | ADC 采样节拍 / 通道映射 / V0.1 硬件缺陷 | `docs/子系统设计/ADC采样节拍设计说明.md`、`docs/硬件平台/ADC通道映射说明.md` | | 存储栈(FatFs / dhara / lftpd / 两条 FatFs 陷阱) | `docs/架构设计/STM32F4-Base存储架构说明.md` | | RAM / 栈预算 / 容量台账 | `docs/内存管理/RAM使用分析与优化方案.md`、`内存内容分配策略.md` | -| **每个提交门禁一篇详解**(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径) | `docs/门禁说明/README.md`(48 个钩子 → 23 篇索引;bom-guard / setview-check 两篇待补) | +| **每个提交门禁一篇详解**(查什么 / 拦下过什么真事 / 限制与盲区 / 基线口径) | `docs/门禁说明/README.md`(48 个钩子 → 25 篇索引) | | 实体编号怎么写 / 前缀总表 / `id-check` 八项校验 | `docs/编号规范.md`(§4 总表、§8 门禁与实测基线) | | 提交门禁通用机制(阶段 / stash 陷阱 / 触发面 / 增量拦截三段式) | `docs/代码规范/pre-commit使用说明.md` §2 | | 代码规范 V1.0 / cppcheck 口径 | `docs/代码规范/嵌入式C语言代码规范_V1.0.md`、`cppcheck使用说明.md` | diff --git a/docs/测试说明/主机单测覆盖率口径.md b/docs/测试说明/主机单测覆盖率口径.md index 89bd2cad..dbfb165f 100644 --- a/docs/测试说明/主机单测覆盖率口径.md +++ b/docs/测试说明/主机单测覆盖率口径.md @@ -704,7 +704,7 @@ uint16_t ch395f_link_change_count(void); | 类别 | 体量 | 为什么不做 | 那它靠什么把关 | |---|---|---|---| | 芯片驱动(寄存器/时序) | `ch395f.c`(801)、`gd5f2gq5ue.c`(689)、`sd2506.c`(264)、`tpafe5160.c`(157)、`rs485.c`(79) = **1,990 行** | 把 HAL 与寄存器假到底 ≈ **重写一遍驱动**,测的是自己的桩而不是硬件行为(SPI 分频必须 8、DMA 流、I2C 时序在桩里怎么编都"对") | 板级套件(`board-test-suite` skill)+ `@test` 真机日志 + 4 个 Fault 现场;陷阱逐条登记在 `docs/问题记录/CH395F_Trap_Records.md`、`docs/问题记录/GD5F2GQ5UE_Trap_Records.md`、`docs/问题记录/SD2506_Trap_Records.md` | -| UI 侧 | 17 个 `.c` = **1,942 行** | 与 PC 模拟器是**同一份源码**,行为回归已由 `ui-golden`(菜单 8 状态 + 内容页 11 页像素黄金参考)覆盖;再写单测是第三份重复投资 | `ui-verify` skill 五步 + `docs/UI设计/UI_自动化测试流程.md` | +| UI 侧 | 17 个 `.c` = **1,942 行** | 与 PC 模拟器是**同一份源码**,行为回归已由 `ui-golden`(菜单 8 状态 + 内容页 18 页像素黄金参考)覆盖;再写单测是第三份重复投资 | `ui-verify` skill 五步 + `docs/UI设计/UI_自动化测试流程.md` | | 任务编排 | `default_task.c`(281)、`adc_task.c`(171)、`net_task.c`(123)、`protect_task.c`(90)、`ui_task.c`(71)、`rs485_task.c`(11) = **747 行** | 每个只有 4~5 个函数,主体是"按顺序调别人";真逻辑在被调模块里(那些已测或在 P1/P2)。给编排层写单测最容易写成"断言我调了几次"的自证 | 真机启动锚点计数 + IWDG `required_mask`(`@test`)+ `docs/架构设计/项目启动顺序管理.md` | | 内核前装配 | `app_main.c`(135) | 被测对象本身就是"`osKernelStart` 之前不许调内核 API"的时序,主机侧无法忠实复现(PC 上没有那个约束) | 同上 + `cubemx-survival` 审计 | diff --git a/docs/门禁说明/README.md b/docs/门禁说明/README.md index b6700cda..35788684 100644 --- a/docs/门禁说明/README.md +++ b/docs/门禁说明/README.md @@ -40,7 +40,7 @@ | [`cubemx-survival.md`](cubemx-survival.md) | `cubemx-survival` | CubeMX 重生成会不会把定制静默抹掉(L3 审计兜底) | `.ioc`、`Src/`、`Inc/` | 已写 | | [`test-suite-switch.md`](test-suite-switch.md) | `test-suite-switch` | 板级套件开关必须互斥;全注释 = 产品构建 | `test/board/test_config.h` | 已写 | | [`font-charset.md`](font-charset.md) | `font-charset` | UI 用到的汉字是否都在子集字体里(缺字 = 白框) | `Drivers/BSP/UI/**`、字体脚本 | 已写 | -| [`ui-golden.md`](ui-golden.md) | `ui-golden` | UI 像素回归:菜单 8 状态 + 内容页 11 页黄金参考图比对 | UI 源码、模拟器 | 已写 | +| [`ui-golden.md`](ui-golden.md) | `ui-golden` | UI 像素回归:菜单 8 状态 + 内容页 18 页黄金参考图比对 | UI 源码、模拟器 | 已写 | | [`bom-guard.md`](bom-guard.md) | `bom-guard` | 带 BOM 的文件被编辑工具剥掉 BOM(ARMCC 换解码 → 假语法错) | `Drivers/BSP/UI/**` 等名单内文件 | 已写 | | [`setview-check.md`](setview-check.md) | `setview-check` | 定值查看行表与 `prot_set` 枚举序 / `g_prot_set_meta` 上下限是否同一份口径 | `tools/setview_check/**`、`ui_w_setview.*` | 已写 | | [`host-unit-tests.md`](host-unit-tests.md) | 16 个 `*-unit-test` | 主机侧单测(同一机制 16 个实例):逻辑层在无硬件的 PC 上编译并跑断言 | 各自被测模块与其测试目录 | 已写 | diff --git a/docs/门禁说明/ui-golden.md b/docs/门禁说明/ui-golden.md index 0a16ec7c..b42cf15a 100644 --- a/docs/门禁说明/ui-golden.md +++ b/docs/门禁说明/ui-golden.md @@ -1,4 +1,4 @@ -# `ui-golden` — UI 像素回归(菜单 8 状态 + 内容页 11 页黄金参考) +# `ui-golden` — UI 像素回归(菜单 8 状态 + 内容页 18 页黄金参考) > 一句话:改 UI 源码时,把模拟器增量重编 + 两条 golden 回归串成一次提交门禁,**像素对不上就拦**。 > 它是包装器:真正的判据在被包装的两条脚本与参考图里。 diff --git a/scripts/ram_baseline.tsv b/scripts/ram_baseline.tsv index 2c72e358..93971c8d 100644 --- a/scripts/ram_baseline.tsv +++ b/scripts/ram_baseline.tsv @@ -7,4 +7,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi 2026-10-22 213436 18652 1188 131500 232088 22.1 75264 57.4 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4120;sys_log_mcu.o=3588;default_task.o=2736 2026-10-23 213676 18860 1188 131500 232536 22.2 75264 57.4 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4120;sys_log_mcu.o=3588;default_task.o=2736 2026-10-24 213780 18860 1204 131852 232640 22.2 75632 57.7 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736 -2026-10-25 219620 22036 1280 132864 241656 23.0 76720 58.5 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736 +2026-10-25 224688 24640 1328 135088 249328 23.8 78992 60.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6766;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4128;sys_log_mcu.o=3944;default_task.o=2736 diff --git a/scripts/size_attestation.json b/scripts/size_attestation.json index b85fd834..ece775c4 100644 --- a/scripts/size_attestation.json +++ b/scripts/size_attestation.json @@ -1,25 +1,25 @@ { - "built_at": "2026-10-25T13:20:00+08:00", - "fingerprint": "cced501cd26bc3359ccfb1317318c159559006776849f41414a9cc132e88f0a3", - "fingerprint_files": 1408, + "built_at": "2026-10-25T15:47:11+08:00", + "fingerprint": "8d724896ffc95f322041c305a0fbf6704f72bb46fb56367d67c49d14d81074f0", + "fingerprint_files": 1422, "fingerprint_source": "git-index", "gated_regions": [ "RW_IRAM1", "RW_CCM" ], - "git_head": "7bbcc9cf6f129c820d9f487c3a6ce0b1cdf6cfad", + "git_head": "498cc60b9d617ba24528622ba9ef69809d90225e", "map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map", - "map_mtime": 1792905580, + "map_mtime": 1792914282, "pct": { - "ER_IROM1": 23.05, + "ER_IROM1": 23.78, "RW_CCM": 87.89, - "RW_IRAM1": 58.53, + "RW_IRAM1": 60.27, "UNINIT_CCM": 18.75 }, "regions": { "ER_IROM1": { "max": 1048576, - "size": 241656 + "size": 249328 }, "RW_CCM": { "max": 65280, @@ -27,7 +27,7 @@ }, "RW_IRAM1": { "max": 131072, - "size": 76720 + "size": 78992 }, "UNINIT_CCM": { "max": 256, @@ -37,10 +37,10 @@ "schema": 2, "scope_note": "\u540c\u7801\u51ed\u8bc1\uff1a\u6307\u7eb9\u8986\u76d6\u56fa\u4ef6\u4f53\u79ef\u76f8\u5173\u6e90\u7801\uff0c\u53e3\u5f84\u89c1\u672c\u811a\u672c docstring", "sizes": { - "code": 219620, - "ro_data": 22036, - "rw_data": 1280, - "zi_data": 132864 + "code": 224688, + "ro_data": 24640, + "rw_data": 1328, + "zi_data": 135088 }, "threshold_pct": 92.0, "worktree_dirt_at_stamp": 0, diff --git a/scripts/test_coverage_baseline.json b/scripts/test_coverage_baseline.json index 710922b0..273455ab 100644 --- a/scripts/test_coverage_baseline.json +++ b/scripts/test_coverage_baseline.json @@ -137,12 +137,12 @@ "lines_valid": 87 }, "App/log/soe_store.c": { - "func_rate": 1.0, + "func_rate": 0.5714, "funcs_covered": 4, - "funcs_valid": 4, - "line_rate": 0.9873, - "lines_covered": 78, - "lines_valid": 79 + "funcs_valid": 7, + "line_rate": 0.6299, + "lines_covered": 80, + "lines_valid": 127 }, "App/log/sys_log_mcu.c": { "func_rate": 1.0, @@ -593,9 +593,9 @@ "soe_store": { "files": { "App/log/soe_rec.c": 87, - "App/log/soe_store.c": 79 + "App/log/soe_store.c": 127 }, - "lines_total": 166, + "lines_total": 214, "ok": true }, "sys_clock": { @@ -706,13 +706,13 @@ "totals": { "files_generated_excluded": 5, "files_tested": 43, - "files_untested": 122, - "func_rate": 0.9357, + "files_untested": 136, + "func_rate": 0.9299, "funcs_covered": 451, - "funcs_valid": 482, - "line_rate": 0.9026, - "lines_covered": 6202, - "lines_valid": 6871, + "funcs_valid": 485, + "line_rate": 0.8967, + "lines_covered": 6204, + "lines_valid": 6919, "modules_ok": 39, "modules_total": 39 }, @@ -749,13 +749,17 @@ "code_lines": 264, "path": "Drivers/BSP/SD2506/sd2506.c" }, + { + "code_lines": 263, + "path": "App/app/ui_data_feed.c" + }, { "code_lines": 249, "path": "App/task/adc_task.c" }, { - "code_lines": 242, - "path": "App/app/ui_data_feed.c" + "code_lines": 207, + "path": "Drivers/BSP/UI/ui_w_setlist.c" }, { "code_lines": 206, @@ -770,8 +774,8 @@ "path": "Drivers/BSP/UI/ui_standby.c" }, { - "code_lines": 204, - "path": "Drivers/BSP/UI/ui_w_setlist.c" + "code_lines": 197, + "path": "Drivers/BSP/UI/ui_w_setview.c" }, { "code_lines": 157, @@ -781,6 +785,10 @@ "code_lines": 150, "path": "Drivers/BSP/UI/ui_page_password.c" }, + { + "code_lines": 146, + "path": "Drivers/BSP/UI/ui_page_device_info.c" + }, { "code_lines": 140, "path": "App/app/app_main.c" @@ -793,6 +801,10 @@ "code_lines": 123, "path": "App/task/net_task.c" }, + { + "code_lines": 122, + "path": "App/task/ui_task.c" + }, { "code_lines": 117, "path": "App/task/protect_task.c" @@ -801,6 +813,10 @@ "code_lines": 113, "path": "Drivers/BSP/UI/ui_page_action.c" }, + { + "code_lines": 112, + "path": "Drivers/BSP/UI/ui_page_ac.c" + }, { "code_lines": 101, "path": "Drivers/BSP/NET/net_types.h" @@ -809,18 +825,18 @@ "code_lines": 98, "path": "Drivers/BSP/SD2506/sd2506.h" }, - { - "code_lines": 95, - "path": "App/task/ui_task.c" - }, { "code_lines": 93, "path": "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.h" }, { - "code_lines": 88, + "code_lines": 89, "path": "Drivers/BSP/UI/ui_data.h" }, + { + "code_lines": 86, + "path": "Drivers/BSP/UI/ui_page_yx.c" + }, { "code_lines": 83, "path": "Drivers/BSP/NET/net_socket.h" @@ -841,6 +857,10 @@ "code_lines": 77, "path": "Drivers/BSP/dbg_log.h" }, + { + "code_lines": 69, + "path": "Drivers/BSP/UI/ui_page_dc.c" + }, { "code_lines": 62, "path": "App/protocol/iec104/iec104_asdu.h" @@ -862,7 +882,7 @@ "path": "App/util/task_watchdog.h" }, { - "code_lines": 50, + "code_lines": 51, "path": "Drivers/BSP/UI/ui_w_setlist.h" }, { @@ -889,10 +909,6 @@ "code_lines": 41, "path": "Drivers/BSP/NET/lftpd/private/lftpd_status.h" }, - { - "code_lines": 41, - "path": "Drivers/BSP/UI/ui_page_ac.c" - }, { "code_lines": 39, "path": "Drivers/BSP/UI/ui_w_records.c" @@ -925,6 +941,22 @@ "code_lines": 31, "path": "Drivers/BSP/UI/ui_deco.c" }, + { + "code_lines": 31, + "path": "Drivers/BSP/UI/ui_page_view_param.c" + }, + { + "code_lines": 31, + "path": "Drivers/BSP/UI/ui_page_view_plate.c" + }, + { + "code_lines": 31, + "path": "Drivers/BSP/UI/ui_page_view_set.c" + }, + { + "code_lines": 31, + "path": "Drivers/BSP/UI/ui_page_view_word.c" + }, { "code_lines": 31, "path": "Drivers/BSP/UI/ui_w_editor.h" @@ -957,10 +989,6 @@ "code_lines": 27, "path": "App/task/task_handles.h" }, - { - "code_lines": 27, - "path": "Drivers/BSP/UI/ui_page_device_info.c" - }, { "code_lines": 26, "path": "App/util/task_prof.h" @@ -981,6 +1009,10 @@ "code_lines": 24, "path": "Drivers/BSP/UI/ui_tokens.h" }, + { + "code_lines": 24, + "path": "Drivers/BSP/UI/ui_w_setview.h" + }, { "code_lines": 23, "path": "App/algo/adc_cal.h" @@ -1010,12 +1042,12 @@ "path": "Drivers/BSP/UI/ui_page_selftest.c" }, { - "code_lines": 20, - "path": "App/log/console_log.h" + "code_lines": 22, + "path": "Drivers/BSP/UI/ui_page_soe.c" }, { "code_lines": 20, - "path": "Drivers/BSP/UI/ui_page_dc.c" + "path": "App/log/console_log.h" }, { "code_lines": 19, @@ -1049,6 +1081,10 @@ "code_lines": 15, "path": "App/algo/freq.h" }, + { + "code_lines": 15, + "path": "App/log/soe_store.h" + }, { "code_lines": 15, "path": "App/util/sys_clock.h" @@ -1065,10 +1101,6 @@ "code_lines": 14, "path": "Drivers/BSP/UI/ui_style.c" }, - { - "code_lines": 13, - "path": "App/log/soe_store.h" - }, { "code_lines": 13, "path": "App/task/adc_task.h" @@ -1133,6 +1165,30 @@ "code_lines": 11, "path": "Drivers/BSP/UI/ui_page_net_cfg.h" }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_soe.h" + }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_view_param.h" + }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_view_plate.h" + }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_view_set.h" + }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_view_word.h" + }, + { + "code_lines": 11, + "path": "Drivers/BSP/UI/ui_page_yx.h" + }, { "code_lines": 11, "path": "Drivers/BSP/UI/ui_style.h"