Files
STM32F4-Base/Lib/lv_conf.h
T
wandering1 c936441c83 门禁扩容:新增 lv-conf-sync、simulator/ 纳入全部钩子;含 L3 定值/元件框架落地
本轮把"自研代码落在门禁之外"的口子收掉,同时落地 LVGL 特性裁剪与
L3 保护定值/元件框架。

门禁(.pre-commit-config.yaml,26 个钩子)
- 新增 scripts/check_lv_conf_sync.py + 钩子 lv-conf-sync:比对两份
  lv_conf.h 的**生效值**(未定义则取 lv_conf_internal.h 兜底默认),
  抓 MISMATCH / LVGL 不认的宏名 / 同文件重复定义
- 顶层 exclude 删掉 simulator/:其下 21 个 tracked 文件全是本项目自研
  代码,生成物(build/、SDL2/、tests/ref/、shot*)已在 .gitignore;
  doc-links 的 exclude 同步删除
- lv-conf-sync 的 files: 覆盖两端配置 → 只改 simulator/lv_conf.h 也触发
  (pre-commit 4.x 已移除 always: true,实测只告警并跳过,无兜底开关)
- 新增 prot-set-unit-test / prot-elm-unit-test 两个主机侧单测钩子
- S11(2.3.5) 判定细化:禁的是"用路径找文件",尖括号系统头带子目录
  (如 <sys/stat.h>)不再误报;全仓库复核仅 2 处项目代码判定变化

模拟器代码整改(纳入钩子后暴露,全部修代码而非豁免)
- cppcheck 4 处:sim_syslog.c 判空分支内解引用 p_epoch(真实 bug)、
  2 处 struct tm 未初始化、1 处指针可加 const
- coding-standard 61 处:44 处函数左大括号并到右括号同行、8 处补函数
  注释、3 处补文件头注释块、2 处 __ 前缀保护宏改 XXX_H、2 处 sprintf
  改 snprintf(写入字节数与原来完全一致)

LVGL 特性裁剪(F-1/F-2/F-3)
- 两端 lv_conf.h 对齐同一特性子集:删 26 个 LVGL 9.3 不存在的选项名、
  3 处重复定义,10 项靠默认值隐式生效的改为显式固化
- 实测对镜像体积中性;价值在防漂移,且模拟器 golden 回归跑的正是固件
  实际编译的配置

L3 软件侧
- App/algo/prot_set.* Q10 定值模型(范围校验 / 整表 all-or-nothing /
  校验和封存-自检-闭锁)+ prot_elm.* 通用"滞回+定时限"元件框架 7 实例
- test/host/prot_set、test/host/prot_elm 主机侧单测;uvprojx 挂载两处

文档同步
- pre-commit使用说明:§2.8 S11 口径、§2.15 lv-conf-sync 详解、新增 §5.5
  复盘(教训:exclude 只写真正不该进钩子的路径)
- AGENTS.md、UI_设计架构 §1.4 第 10 条、RAM 分析、审查报告刷新与销项

验证
- @build BUILD_OK 0/0(Code=194276 RO=15872 RW=876 ZI=139892)
- 模拟器重建:菜单 8 状态像素逐字节一致(池 5368 B)、11 内容页黄金参考
  全过(往返 5448 B)、remo sink 0/25600 位差异、--logtest/--cfgtest PASS
- 全仓库 cppcheck / coding-standard / no-mojibake --all-files 全过
- check_doc_links --all 129/0;check_mem_numbers --check 内存数字一致
- 端到端:往 simulator/lv_conf.h 注入一行漂移 → 钩子 FAIL(exit 1)
2026-10-11 08:48:49 +08:00

185 lines
9.2 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.
/**
* @file lv_conf.h
* @brief LVGL v9 配置(STM32F407ZGTx,160x160 单色 1bpp,离屏渲染+网络推流)
* @note 本项目仅用作离屏渲染:flush 把 1bpp 像素写入内存帧缓冲,
* 由 RemoDispBus 协议按需经网络发出。无真实屏、无触摸。
*/
#ifndef LV_CONF_H
#define LV_CONF_H
/* ⚠ 本文件与 simulator/lv_conf.h 必须保持**同一特性子集**,已由门禁校验:
* `python scripts/check_lv_conf_sync.py`(pre-commit 钩子 lv-conf-sync,always 跑)。
* 2026-10-11 清理:删掉 14 个 LVGL 9.3 **不存在**的选项(LVGL 8 / 9.4 模板残留,
* 写了不生效,与已删的 LV_USE_THEME_BASIC 同类):LV_USE_PNG / JPG / ANIMATION /
* ENCODER / MOUSEWHEEL / IMGBTN / METER / COLORWHEEL / TEXTLINE / ASSERT_USER_CODE /
* ASSERT_LAYOUT、LV_DRAW_SW_YIELD / ASYNC、LV_COLOR_CHROMA_KEY。
* 另把此前靠 lv_conf_internal 默认值隐式生效的开关显式固化为 0(见下"核心特性"块)。 */
/* 1bpp 单色 */
#define LV_COLOR_DEPTH 1
/* 控件裁剪(F-2/F-3,2026-10-11):本项目 UI 全部自绘——实测 Drivers/BSP/UI、App、
* simulator 三处**零控件构造函数、零 flex/grid 布局调用**,只用 lv_obj_create +
* lv_theme_mono_init。此前这些类靠 lv_theme_simple(9.3 默认 =1)当锚点链进镜像:
* label 4,042 + buttonmatrix 3,586 + textarea 3,632 + bar 1,800 + button 26
* = 13,086 B;另 flex 2,776 + grid 2,592 = 5,368 B。
* ⚠ 将来引入控件型页面(U2 原型库)时按需逐项打开,并同步 simulator/lv_conf.h
* 后复跑 ui-verify 五步门禁。
* 注:原 LV_USE_OBJ 在 9.3 不是有效选项(lv_conf_internal 无此宏),已删。 */
#define LV_USE_FLEX 0 /* F-3:全仓无 lv_obj_set_flex_* 调用 */
#define LV_USE_GRID 0 /* F-3:全仓无 lv_obj_set_grid_* 调用 */
#define LV_USE_LABEL 0
#define LV_USE_BUTTON 0
#define LV_USE_BUTTONMATRIX 0
#define LV_USE_BAR 0
#define LV_USE_TEXTAREA 0
#define LV_USE_MENU 0
#define LV_USE_IMAGEBUTTON 0 /* 9.3 默认 1;显式关死,与 simulator 一致 */
/* 刷新周期(ms):离屏渲染,无需高刷 */
#define LV_DEF_REFR_PERIOD 20
/* 关闭日志,省 RAM 与代码。
* 注:9.3 **没有** LV_USE_ANIMATION(动画属核心),原该行是无效项,已删。 */
#define LV_USE_LOG 0
/* 不使用 LVGL 自带 OS 抽象,由 ui_task 手动调用 lv_timer_handler */
#define LV_USE_OS 0
#define LV_OS_PRIORITY 0
#define LV_OS_TASK_NAME "ui"
/* 内存池:1bpp 小界面,菜单页较多,给 40KB */
#define LV_MEM_SIZE (40 * 1024)
#define LV_MEM_ADR 0 /* 0 = 内部静态分配 */
/* 断言全部关闭,减少体积(9.3 只有这 4 个 ASSERT 宏;原 ASSERT_USER_CODE /
* ASSERT_LAYOUT 是 LVGL 8 残留,已删) */
#define LV_USE_ASSERT_NULL 0
#define LV_USE_ASSERT_MALLOC 0
#define LV_USE_ASSERT_OBJ 0
#define LV_USE_ASSERT_STYLE 0
/* 内置字体:先启用 Latin 以通过编译;
* 中文 1bpp 字库由 fontconverter 生成后通过 ui_font_cn_12 接入并替换默认字体 */
#define LV_FONT_MONTSERRAT_12 1
#define LV_FONT_MONTSERRAT_14 0
#define LV_FONT_MONTSERRAT_16 0
#define LV_FONT_MONTSERRAT_18 0
#define LV_FONT_MONTSERRAT_20 0
#define LV_FONT_MONTSERRAT_22 0
#define LV_FONT_MONTSERRAT_24 0
#define LV_FONT_MONTSERRAT_28 0
#define LV_FONT_MONTSERRAT_32 0
#define LV_FONT_MONTSERRAT_48 0
#define LV_FONT_UNSCII_8 0
#define LV_FONT_UNSCII_16 0
#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0
#define LV_FONT_SIMSUN_16_CJK 0 /* 预留:中文全字库(若启用需对应源文件) */
/* 默认字体:阶段一先用 Latin 12;中文接入后改为 &ui_font_cn_12 */
#define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(ui_font_cn_12)
#define LV_FONT_DEFAULT &ui_font_cn_12
/* 文本编码 UTF-8(菜单含中文) */
#define LV_TXT_ENC LV_TXT_ENC_UTF8
/* 主题:只用 mono(ui_port.c 显式 lv_theme_mono_init(disp, true, ...) + set_theme + apply)。
* ⚠ 9.3 **没有** LV_USE_THEME_BASIC —— 原那条是无效配置(写了也不生效,已删)。
* ⚠ 关键:LV_USE_THEME_SIMPLE 默认 =1,lv_display_create() 会因此强链 lv_theme_simple,
* 而它正是把上面那些控件类拉进镜像的锚点(主题本体 866 B + 锚定控件 13,086 B)。 */
#define LV_USE_THEME_DEFAULT 0
#define LV_USE_THEME_SIMPLE 0
#define LV_USE_THEME_MONO 1
/* 绘制相关:1bpp 无需 GPU/抗锯齿 */
/* 复杂绘制必须开启:主界面顶部开口浅 V 装饰含斜线,lv_line 斜段依赖 LV_DRAW_SW_COMPLEX,
* 关闭则两腿不渲染(只画水平线)。原值靠 lv_conf_internal 默认(=1)隐式生效,此处显式固化。
* 注意:LV_DRAW_SW_CIRCLE_CACHE_SIZE 须非零(默认 4),否则零长数组编译报错。 */
#define LV_DRAW_SW_COMPLEX 1
/* 简单绘制层缓冲:9.3 默认 24 KB(从 LVGL 池里取),本项目 UI 不建层 →
* 与 simulator 一致显式设 0(golden 回归已在 0 下逐字节验证) */
#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE 0
/* 注:9.3 没有 LV_DRAW_SW_YIELD / LV_DRAW_SW_ASYNC(9.4 才有),原两行无效,已删。 */
/* 软件渲染器的颜色格式支持(F-1,2026-10-11):显示为 I1(LV_COLOR_DEPTH 1),
* 只有 blend_to_i1 会被用到。此前 11 个宏全靠 lv_conf_internal 默认(=1)隐式生效,
* 把 7 个用不到的混合核整份链进镜像:实测 blend_to_* 合计 40,582 B,其中 i1 仅 5,272 B
* → 死代码 35,310 B。每份 blend 文件都是文件级 #if 守卫,关掉 = 整个 TU 不参与编译。
* ⚠ 字形 A8 位图是作为 **mask** 传入的,混合按**目的**格式(I1)分派 → 不需要
* SUPPORT_A8/L8/AL88(此判断已由 simulator 的 I1-only 配置 + golden 回归验证)。
* 取值与 simulator/lv_conf.h 保持一致(模拟器早已是 I1-only)。 */
#define LV_DRAW_SW_SUPPORT_I1 1
#define LV_DRAW_SW_SUPPORT_L8 0
#define LV_DRAW_SW_SUPPORT_AL88 0
#define LV_DRAW_SW_SUPPORT_A8 0
#define LV_DRAW_SW_SUPPORT_RGB565 0
#define LV_DRAW_SW_SUPPORT_RGB565_SWAPPED 0
#define LV_DRAW_SW_SUPPORT_RGB565A8 0
#define LV_DRAW_SW_SUPPORT_RGB888 0
#define LV_DRAW_SW_SUPPORT_XRGB8888 0
#define LV_DRAW_SW_SUPPORT_ARGB8888 0
#define LV_DRAW_SW_SUPPORT_ARGB8888_PREMULTIPLIED 0
/* 输入设备:全部不用(远程按键经 RemoDispBus 直接注入,见 ui_net_sink)。
* 注:9.3 没有 LV_USE_MOUSEWHEEL / LV_USE_ENCODER(LVGL 8 残留),已删;
* LV_USE_KEYBOARD 原在本文件定义两次,去重(下方控件块保留一处)。 */
/* 不使用的第三方扩展(9.3 的图片解码宏是 LV_USE_LODEPNG / TJPGD,
* 没有 LV_USE_PNG / LV_USE_JPG —— LVGL 8 残留,已删) */
#define LV_USE_BMP 0
#define LV_USE_GIF 0
#define LV_USE_QRCODE 0
#define LV_USE_BARCODE 0
#define LV_USE_IME_PINYIN 0
#define LV_USE_GRIDNAV 0
#define LV_USE_FRAGMENT 0
/* 裁剪未用控件,减小体积(本 UI 只用 lv_obj + 自绘,见文件头 F-2/F-3 说明)。
* 注:LV_USE_COLORWHEEL / IMGBTN / METER / TEXTLINE 在 9.3 不存在(LVGL 8 残留),已删。 */
#define LV_USE_ANIMIMG 0
#define LV_USE_ARC 0
#define LV_USE_CHART 0
#define LV_USE_CHECKBOX 0
#define LV_USE_DROPDOWN 0
#define LV_USE_KEYBOARD 0
#define LV_USE_LED 0
#define LV_USE_LIST 0
#define LV_USE_MSGBOX 0
#define LV_USE_ROLLER 0
#define LV_USE_SCALE 0
#define LV_USE_SLIDER 0
#define LV_USE_SPAN 0
#define LV_USE_SPINBOX 0
#define LV_USE_SPINNER 0
#define LV_USE_SWITCH 0
#define LV_USE_TABVIEW 0
#define LV_USE_TILEVIEW 0
#define LV_USE_WIN 0
#define LV_USE_TABLE 0
#define LV_USE_CALENDAR 0
#define LV_USE_CANVAS 0
#define LV_USE_IMAGE 0 /* 菜单未用图片控件;lv_menu 已关,无图标依赖 */
/* 核心特性:此前全靠 lv_conf_internal 默认值隐式生效(默认 =1 的整份链进固件),
* 现显式固化为 0,并与 simulator/lv_conf.h 对齐(check_lv_conf_sync.py 校验)。
* 其中 LV_USE_OBSERVER 默认 1 → 固件此前一直白链 lv_observer.c。 */
#define LV_USE_OBSERVER 0
#define LV_USE_FLOAT 0
#define LV_USE_MATRIX 0
#define LV_USE_VECTOR_GRAPHIC 0
#define LV_USE_OBJ_PROPERTY 0
#define LV_USE_GESTURE_RECOGNITION 0
#define LV_USE_COLOR_FILTER 0
#define LV_USE_DRAW_PXP 0 /* NXP 并行像素引擎,STM32 无关 */
#define LV_WIDGETS_HAS_DEFAULT_VALUE 0
/* 以下两组是已关父项(LV_USE_LABEL / LV_USE_THEME_DEFAULT)的子选项,本身惰性,
* 但显式写死可防"将来只在一端启用父项"时的静默漂移 */
#define LV_LABEL_TEXT_SELECTION 0
#define LV_LABEL_LONG_TXT_HINT 0
#define LV_LABEL_WAIT_CHAR_COUNT 0
#define LV_THEME_DEFAULT_DARK 0
#define LV_THEME_DEFAULT_GROW 0
#define LV_THEME_DEFAULT_TRANSITION_TIME 0
#endif /* LV_CONF_H */