Files
STM32F4-Base/simulator/CMakeLists.txt
T
wandering1 f711130b4c feat(UI组件): 新增数值编辑器/定值表/动作确认页三组件(道B task-5)
域5 新增 3 对文件(双端注册 uvprojx + CMakeLists),只做渲染与输入抽象、
不接真实数据源(数据绑定 = 批 2 道E ui_data/prot_set 经回调注入):
- ui_w_editor:定点整数(10^decimals)逐位编辑——上下步进(0..9 环绕无进位)、
  左右移数字光标(首末环绕)、ENTER 提交经 min/max 范围校验,越界拒绝并
  显示"越界"提示留在编辑态;光标反显盒与 ui_page_net_cfg 字节光标同画法
  (含"只画单字符防折行"实测坑注释);共享格式化 ui_w_editor_fmt_scaled()
  单一规则源(值列显示与编辑光标恒同串)
- ui_w_setlist:定值四视图(参数/定值/控制字/软压板)共用列表渲染 +
  整定输入——行表(名称<=7字/id/类型/小数位/范围/二态串表) + 回调注入
  (get/set/commit/state/bad);查看视图(commit=NULL)与整定视图只差绑定:
  整定视图末行固定"保存"行,值随交接态 ENTER/WAIT/OK/ERR(net_cfg 先例),
  整表一次提交(一次封存一次校验和,页面补齐规划 §3.2);二态行 ENTER
  循环切换;保存失败越界行经 bad 回调反显(页面扩充详细方案 §3.2.7)
- ui_page_action:可复用操作确认链——一次确认 -> 二次确认 -> ok_cb
  只投递不阻塞 -> done_text 回报(或成功即关页),拒收显示 ERR 可重试;
  ESC/LEFT 关页取消(实测取消后菜单与基线逐字节一致);单例描述符由
  开页装载(内容页框架全局单页前提),不定义 ui_page_action_desc
  (registration-check 页面模块判据不误拦,批 2 跳板各自出口)

组件文案用字全部落在上一分支预置字集内(font-charset WARN 60->52 印证
确/取/消/越/二/次/返/回 已转源码在用),无需再动字库。

BSP 公开 API 约定合规(首提被 cppcheck/coding-standard/bsp-err 三钩拦下,
按门禁口径修净后复验全绿):
- 键分发返回值取 uint8_t 1/0 不用 bool(bsp-err/err-type:bool 只许
  is_/has_ 谓词);ui_w_editor_value 直返 int32_t(出参形状无错误通道)
- ui_page_action_open 返回 bsp_err_t:BSP_ERR_PARAM 参数无效 /
  BSP_ERR_STATE 已有页打开 / BSP_ERR_NO_SPACE 框架开页失败(可判分支)
- get/state/bad 回调 typedef 各补"返回值:"注释块(bsp-err/return-doc)
- cppcheck variableScope 变量收scope 7 处;CODE-RULE-18 Yoda 1 处
  (sel+1u==total -> sel==count);提交内已不含 --wdemo/--wact harness

验证:
- 模拟器零警告;组件行为经临时 sim-only harness(--wdemo/--wact) 截图
  目检 7 态:基线视图/bad 反显/进编辑步进/越界拒绝/二态切换/保存整表
  提交 OK/确认链三段/取消回菜单;harness(main.c 4 处 + CMake 1 行 +
  ui_w_demo.c)已完整还原删除,提交内不含(最终树 main.c 无改动,
  CMakeLists diff 仅 3 行注册)
- 回归:菜单 8 状态 + 内容页 11 页黄金参考逐字节 PASS(ref 无变化,
  无基线更新提交);池基线 5368/往返 5448 不变
- 门禁:coding-standard PASS / font-charset PASS / layer-deps PASS
  (新文件零 App include,基线 6 不变——减基线归 task-6)
- @build 0 Error 0 Warning;Code +324 B、RO/RW/ZI 0(组件尚无引用方,
  ARM 链接器未剥离仅因新 TU;批 2 页面接线后实例 RAM 每页约 +40~60 B)

gate: 全钩子正常执行通过,无 --no-verify
- pre-commit run --all-files 全绿(含 mem-budget/mem-numbers:本分支基于
  回填后台账 d9ab955,RAM 0 变化、RO 不变,仅 Code +324 B 不涉受管区)
- 手工自查:6 新文件 BOM=EF BB BF 齐全、全 LF、U+FFFD=0、字面量仅
  UTF-8 中文(UI 带 BOM 先例口径:保存/越界/二次确认/告警/跳闸等,
  全部已在字体子集);ASCII 串仅 ENTER/WAIT/OK/ERR 状态字
2026-10-25 04:34:43 +08:00

195 lines
7.8 KiB
CMake
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.
cmake_minimum_required(VERSION 3.15)
project(lvgl_sim C)
#=============================================================================
# 路径配置(相对于 simulator/ 目录)
#=============================================================================
set(PROJECT_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/..")
set(LVGL_DIR "${PROJECT_ROOT}/Lib/lvgl")
set(UI_DIR "${PROJECT_ROOT}/Drivers/BSP/UI")
set(NET_DIR "${PROJECT_ROOT}/Drivers/BSP/NET")
set(NETCFG_DIR "${PROJECT_ROOT}/Drivers/BSP/NETCFG")
set(SDL2_DIR "${CMAKE_CURRENT_SOURCE_DIR}/SDL2/SDL2-2.32.10")
#=============================================================================
# 编译标准
#=============================================================================
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
# Windows 控制台输出(显示 printf)
if(WIN32)
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
endif()
# MSVC:源码为 UTF-8 编码(含中文注释),强制按 UTF-8 解析消除 C4819 警告
if(MSVC)
add_compile_options(/utf-8)
endif()
#=============================================================================
# SDL2 头文件路径(需先于 add_subdirectory 定义,供 LVGL SDL 驱动使用)
#=============================================================================
# LVGL SDL 驱动内部 #include "SDL2/SDL.h",include 目录下已有 SDL2/ 子目录
set(SDL2_INCLUDE_DIR "${SDL2_DIR}/include" CACHE PATH "SDL2 include directory for LVGL")
#=============================================================================
# LVGL 子目录(引用项目自带的 LVGL v9.3.0 源码)
#=============================================================================
# LVGL 内部会自动检测 lv_conf.h(通过 LV_CONF_INCLUDE_SIMPLE 宏)
# 需要将 simulator 目录加入 LVGL 的包含路径,使其能找到 lv_conf.h
set(LV_CONF_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE PATH "Directory containing lv_conf.h for LVGL")
add_subdirectory("${LVGL_DIR}" lvgl_build)
#=============================================================================
# 包含路径
#=============================================================================
include_directories(
${CMAKE_CURRENT_SOURCE_DIR} # lv_conf.h (LVGL 找), dbg_log.h
${CMAKE_CURRENT_SOURCE_DIR}/sim # sim_port.h 等模拟器平台层
${LVGL_DIR} # lvgl.h
${LVGL_DIR}/src # lvgl 内部头文件
${UI_DIR} # ui_menu.h, ui_font_cn_12.h
${NET_DIR} # net_socket.h / net_types.h(net_* API 双端共享核心)
${NETCFG_DIR} # net_cfg.h(网络配置,双端共享核心)
${PROJECT_ROOT}/test/board # test_config.h / net_latency_test.h(共享核心
# ui_net_sink.c、net_socket.c 引含;探针默认关闭,
# 声明宿主安全;2026-09-21 修复模拟器构建断链;
# 2026-10-02 测试目录重构后头文件移入 test/board/)
${PROJECT_ROOT}/App/cfg # cfg_file.h / cfg_file_store.h(通用配置文件引擎,双端共享核心)
${PROJECT_ROOT}/App/log # sys_log.h(运行/自检记录引擎,双端共享核心)
${PROJECT_ROOT}/Drivers/BSP # dbg_log.h(使用 simulator 的 dbg_cfg.h 配置)
${SDL2_DIR}/include # SDL2 头文件
)
#=============================================================================
# SDL2 库(使用本地预编译版本)
#=============================================================================
set(SDL2_INCLUDE_PARENT "${SDL2_DIR}/include")
set(SDL2_LIB_X64 "${SDL2_DIR}/lib/x64")
#=============================================================================
# 源文件
#=============================================================================
set(SIM_SOURCES
main.c
sim/sim_port.c
sim/sim_latency_stub.c # 探针符号宿主空实现(ui_net_sink.c 引用,见文件头注释)
)
# UI 源文件(与 MCU 端共用,直接编译)
set(UI_SOURCES
${UI_DIR}/ui_menu.c
${UI_DIR}/ui_menu_view.c
${UI_DIR}/ui_content_page.c
${UI_DIR}/ui_deco.c
${UI_DIR}/ui_page_device_info.c
${UI_DIR}/ui_page_ac.c
${UI_DIR}/ui_page_dc.c
${UI_DIR}/ui_page_password.c
${UI_DIR}/ui_page_net_cfg.c
${UI_DIR}/ui_page_runlog.c
${UI_DIR}/ui_page_selftest.c
${UI_DIR}/ui_standby.c
${UI_DIR}/ui_menu_tab.c
${UI_DIR}/ui_font_cn_12.c
${UI_DIR}/ui_net_sink.c
${UI_DIR}/ui_page_registry.c
${UI_DIR}/ui_style.c
${UI_DIR}/ui_w_records.c
${UI_DIR}/ui_w_editor.c
${UI_DIR}/ui_w_setlist.c
${UI_DIR}/ui_page_action.c
)
# 运行/自检记录引擎(双端共享核心 + 平台存储后端;MCU 端编 sys_log_mcu.c,见 Keil 工程)
set(SYSLOG_SOURCES
sim/sim_syslog.c
)
# 网络配置(双端共享核心 + cfg_file 引擎 + 平台存储后端;MCU 端编 cfg_file_store_mcu.c,见 Keil 工程)
set(NETCFG_SOURCES
${NETCFG_DIR}/net_cfg.c
${NETCFG_DIR}/ftp_cfg.c
${PROJECT_ROOT}/App/cfg/cfg_file.c
sim/cfg_file_store_sim.c
)
# 网络后端(net_* 核心 API 的 Winsock 实现 + UI 推流平台后端;MCU 端另编 net_socket.c 与 _mcu 后端)
set(NET_SOURCES
sim/net_socket_sim.c
sim/ui_net_sink_backend_sim.c
)
#=============================================================================
# 构建可执行文件
#=============================================================================
add_executable(lvgl_sim WIN32 ${SIM_SOURCES} ${UI_SOURCES} ${NETCFG_SOURCES} ${SYSLOG_SOURCES} ${NET_SOURCES})
target_compile_definitions(lvgl_sim PRIVATE
LV_CONF_INCLUDE_SIMPLE # 让 lvgl.h 找到 lv_conf.h
LV_LVGL_H_INCLUDE_SIMPLE # ui_font_cn_12.c 内部 include 简化
WIN32_LEAN_AND_MEAN # 防止 Windows.h 拉入 winsock.h(与 winsock2.h 冲突)
NET_NO_OS # 剥离 net_socket.h 的 FreeRTOS 相关接口(纯 BSD Socket)
)
target_include_directories(lvgl_sim PRIVATE
${SDL2_INCLUDE_PARENT} # SDL2/SDL.h 路径
)
target_link_directories(lvgl_sim PRIVATE
${SDL2_LIB_X64}
)
target_link_libraries(lvgl_sim
lvgl
SDL2
SDL2main
ws2_32
)
# 数学库(非 MSVC)
if(NOT MSVC)
target_link_libraries(lvgl_sim m pthread)
endif()
# Windows 子系统:控制台(显示 printf 输出)
if(WIN32)
if(MSVC)
target_link_options(lvgl_sim PRIVATE "/SUBSYSTEM:CONSOLE")
else()
target_link_options(lvgl_sim PRIVATE "-mconsole")
endif()
endif()
# 复制 SDL2.dll 到输出目录
add_custom_command(TARGET lvgl_sim POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${SDL2_LIB_X64}/SDL2.dll"
"$<TARGET_FILE_DIR:lvgl_sim>/SDL2.dll"
COMMENT "Copying SDL2.dll to output directory"
)
#=============================================================================
# 自定义目标:运行模拟器
#=============================================================================
add_custom_target(run COMMAND ${CMAKE_BINARY_DIR}/lvgl_sim DEPENDS lvgl_sim)
#=============================================================================
# 调试模式额外警告
#=============================================================================
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Debug mode enabled for simulator")
if(MSVC)
target_compile_options(lvgl_sim PRIVATE /W4)
else()
target_compile_options(lvgl_sim PRIVATE -Wall -Wextra -Wpedantic)
endif()
endif()
message(STATUS "=== LVGL Simulator ===")
message(STATUS "Screen: 160x160, 1bpp monochrome")
message(STATUS "LVGL dir: ${LVGL_DIR}")
message(STATUS "UI dir: ${UI_DIR}")
message(STATUS "SDL2: ${SDL2_DIR}")