lxd 1 kuukausi sitten
commit
f733356d97
100 muutettua tiedostoa jossa 17729 lisäystä ja 0 poistoa
  1. 10 0
      .gitignore
  2. 8 0
      CMakeLists.txt
  3. 0 0
      cmake-build-debug/.cmake/api/v1/query/cache-v2
  4. 0 0
      cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1
  5. 0 0
      cmake-build-debug/.cmake/api/v1/query/codemodel-v2
  6. 0 0
      cmake-build-debug/.cmake/api/v1/query/toolchains-v1
  7. 471 0
      cmake-build-debug/CMakeCache.txt
  8. 28 0
      cmake-build-debug/CMakeFiles/3.29.6/CMakeASMCompiler.cmake
  9. 80 0
      cmake-build-debug/CMakeFiles/3.29.6/CMakeCCompiler.cmake
  10. 92 0
      cmake-build-debug/CMakeFiles/3.29.6/CMakeCXXCompiler.cmake
  11. BIN
      cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_C.bin
  12. BIN
      cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_CXX.bin
  13. 6 0
      cmake-build-debug/CMakeFiles/3.29.6/CMakeRCCompiler.cmake
  14. 15 0
      cmake-build-debug/CMakeFiles/3.29.6/CMakeSystem.cmake
  15. 895 0
      cmake-build-debug/CMakeFiles/3.29.6/CompilerIdC/CMakeCCompilerId.c
  16. BIN
      cmake-build-debug/CMakeFiles/3.29.6/CompilerIdC/a.exe
  17. 878 0
      cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/CMakeCXXCompilerId.cpp
  18. BIN
      cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/a.exe
  19. 472 0
      cmake-build-debug/CMakeFiles/CMakeConfigureLog.yaml
  20. 38 0
      cmake-build-debug/CMakeFiles/clion-Debug-log.txt
  21. 5 0
      cmake-build-debug/CMakeFiles/clion-environment.txt
  22. 1 0
      cmake-build-debug/CMakeFiles/cmake.check_cache
  23. 1 0
      cmake-build-debug/CMakeFiles/git-data/HEAD
  24. 50 0
      cmake-build-debug/CMakeFiles/git-data/grabRef.cmake
  25. 1 0
      cmake-build-debug/CMakeFiles/git-data/head-ref
  26. 1 0
      cmake-build-debug/config.env
  27. 3407 0
      cmake-build-debug/config/kconfig_menus.json
  28. 1557 0
      cmake-build-debug/config/sdkconfig.cmake
  29. 1053 0
      cmake-build-debug/config/sdkconfig.h
  30. 1555 0
      cmake-build-debug/config/sdkconfig.json
  31. 55 0
      cmake-build-debug/kconfigs.in
  32. 5 0
      cmake-build-debug/kconfigs_projbuild.in
  33. 3 0
      copyui.bat
  34. 3 0
      copyui.sh
  35. 125 0
      dependencies.lock
  36. 33 0
      main/CMakeLists.txt
  37. 418 0
      main/actions.c
  38. 176 0
      main/actions.h
  39. 121 0
      main/app/beep.c
  40. 94 0
      main/app/extend_io.c
  41. 670 0
      main/app/fp_controller.c
  42. 22 0
      main/app/include/beep.h
  43. 39 0
      main/app/include/extend_io.h
  44. 115 0
      main/app/include/fp_controller.h
  45. 96 0
      main/app/include/modbus_master.h
  46. 40 0
      main/app/include/modbus_slave.h
  47. 21 0
      main/app/include/ota.h
  48. 16 0
      main/app/include/pwm0_10.h
  49. 18 0
      main/app/include/relay.h
  50. 83 0
      main/app/include/setting.h
  51. 77 0
      main/app/include/sht30.h
  52. 11 0
      main/app/include/time_sync.h
  53. 40 0
      main/app/include/wifi.h
  54. 188 0
      main/app/modbus_master.c
  55. 137 0
      main/app/modbus_slave.c
  56. 161 0
      main/app/ota.c
  57. 21 0
      main/app/pwm0_10.c
  58. 44 0
      main/app/relay.c
  59. 177 0
      main/app/setting.c
  60. 269 0
      main/app/sht30.c
  61. 73 0
      main/app/time_sync.c
  62. 368 0
      main/app/wifi.c
  63. 26 0
      main/framework/channel.c
  64. 28 0
      main/framework/channel.h
  65. 89 0
      main/framework/framework.c
  66. 15 0
      main/framework/framework.h
  67. 51 0
      main/framework/framework_compat.c
  68. 30 0
      main/framework/framework_compat.h
  69. 238 0
      main/framework/gateway/access.c
  70. 43 0
      main/framework/gateway/access.h
  71. 29 0
      main/framework/gateway/gateway.c
  72. 22 0
      main/framework/gateway/gateway.h
  73. 71 0
      main/framework/gateway/gateway_defs.h
  74. 124 0
      main/framework/gateway/login.c
  75. 15 0
      main/framework/gateway/login.h
  76. 120 0
      main/framework/gateway/register.c
  77. 17 0
      main/framework/gateway/register.h
  78. 25 0
      main/framework/sub_device/command.c
  79. 17 0
      main/framework/sub_device/command.h
  80. 27 0
      main/framework/sub_device/object.c
  81. 20 0
      main/framework/sub_device/object.h
  82. 170 0
      main/framework/sub_device/zero_device.c
  83. 20 0
      main/framework/sub_device/zero_device.h
  84. 334 0
      main/framework/system/miscellaneous_interface.c
  85. 59 0
      main/framework/system/miscellaneous_interface.h
  86. 99 0
      main/framework/system/net_http.c
  87. 24 0
      main/framework/system/net_http.h
  88. 88 0
      main/framework/system/timer.c
  89. 19 0
      main/framework/system/timer.h
  90. 7 0
      main/idf_component.yml
  91. 178 0
      main/lcd/include/lcd_st7701.h
  92. 385 0
      main/lcd/lcd_st7701.c
  93. 581 0
      main/lvgl_port.c
  94. 164 0
      main/lvgl_port.h
  95. 121 0
      main/main.c
  96. 16 0
      main/main.h
  97. 42 0
      main/ui/custom/custom.c
  98. 23 0
      main/ui/custom/custom.h
  99. 8 0
      main/ui/custom/custom.mk
  100. 41 0
      main/ui/custom/lv_conf_ext.h

+ 10 - 0
.gitignore

@@ -0,0 +1,10 @@
+managed_components
+build
+.idea
+.vscode
+.DS_Store
+cmake-build-debug-*
+xfUI/fp/XFJS/lvgl
+xfUI/fp/XFJS/lvgl-simulator
+xfUI/fp/XFJS/ports
+xfUI/fp/XFJS/temp

+ 8 - 0
CMakeLists.txt

@@ -0,0 +1,8 @@
+# For more information about build system see
+# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
+# The following five lines of boilerplate have to be in your project's
+# CMakeLists in this exact order for cmake to work correctly
+cmake_minimum_required(VERSION 3.16)
+set(PROJECT_VER "2025-07-17-V1.0.1")
+include($ENV{IDF_PATH}/tools/cmake/project.cmake)
+project(fp-wire-controller)

+ 0 - 0
cmake-build-debug/.cmake/api/v1/query/cache-v2


+ 0 - 0
cmake-build-debug/.cmake/api/v1/query/cmakeFiles-v1


+ 0 - 0
cmake-build-debug/.cmake/api/v1/query/codemodel-v2


+ 0 - 0
cmake-build-debug/.cmake/api/v1/query/toolchains-v1


+ 471 - 0
cmake-build-debug/CMakeCache.txt

@@ -0,0 +1,471 @@
+# This is the CMakeCache file.
+# For build in directory: e:/01project/01/wire-controller/cmake-build-debug
+# It was generated by CMake: D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/bin/cmake.exe
+# You can edit this file to change values found and used by cmake.
+# If you do not want to change any of the values, simply exit the editor.
+# If you do want to change a value, simply edit, save, and exit the editor.
+# The syntax for the file is as follows:
+# KEY:TYPE=VALUE
+# KEY is the name of a variable in the cache.
+# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
+# VALUE is the current value for the KEY.
+
+########################
+# EXTERNAL cache entries
+########################
+
+//Path to a program.
+CMAKE_ADDR2LINE:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/addr2line.exe
+
+//Path to a program.
+CMAKE_AR:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ar.exe
+
+//ASM compiler
+CMAKE_ASM_COMPILER:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_ASM_COMPILER_AR:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_ASM_COMPILER_RANLIB:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe
+
+//Flags used by the ASM compiler during all build types.
+CMAKE_ASM_FLAGS:STRING=
+
+//Flags used by the ASM compiler during DEBUG builds.
+CMAKE_ASM_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the ASM compiler during MINSIZEREL builds.
+CMAKE_ASM_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the ASM compiler during RELEASE builds.
+CMAKE_ASM_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the ASM compiler during RELWITHDEBINFO builds.
+CMAKE_ASM_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Choose the type of build, options are: None Debug Release RelWithDebInfo
+// MinSizeRel ...
+CMAKE_BUILD_TYPE:STRING=Debug
+
+//Enable colored diagnostics throughout.
+CMAKE_COLOR_DIAGNOSTICS:BOOL=ON
+
+//CXX compiler
+CMAKE_CXX_COMPILER:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/g++.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_AR:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_CXX_COMPILER_RANLIB:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe
+
+//Flags used by the CXX compiler during all build types.
+CMAKE_CXX_FLAGS:STRING=
+
+//Flags used by the CXX compiler during DEBUG builds.
+CMAKE_CXX_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the CXX compiler during MINSIZEREL builds.
+CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the CXX compiler during RELEASE builds.
+CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the CXX compiler during RELWITHDEBINFO builds.
+CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C++ applications.
+CMAKE_CXX_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//C compiler
+CMAKE_C_COMPILER:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc.exe
+
+//A wrapper around 'ar' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_AR:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe
+
+//A wrapper around 'ranlib' adding the appropriate '--plugin' option
+// for the GCC compiler
+CMAKE_C_COMPILER_RANLIB:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe
+
+//Flags used by the C compiler during all build types.
+CMAKE_C_FLAGS:STRING=
+
+//Flags used by the C compiler during DEBUG builds.
+CMAKE_C_FLAGS_DEBUG:STRING=-g
+
+//Flags used by the C compiler during MINSIZEREL builds.
+CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
+
+//Flags used by the C compiler during RELEASE builds.
+CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
+
+//Flags used by the C compiler during RELWITHDEBINFO builds.
+CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
+
+//Libraries linked by default with all C applications.
+CMAKE_C_STANDARD_LIBRARIES:STRING=-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
+
+//Path to a program.
+CMAKE_DLLTOOL:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/dlltool.exe
+
+//Flags used by the linker during all build types.
+CMAKE_EXE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during DEBUG builds.
+CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during MINSIZEREL builds.
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during RELEASE builds.
+CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during RELWITHDEBINFO builds.
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Enable/Disable output of compile commands during generation.
+CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
+
+//Value Computed by CMake.
+CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/pkgRedirects
+
+//Convert GNU import libraries to MS format (requires Visual Studio)
+CMAKE_GNUtoMS:BOOL=OFF
+
+//Install path prefix, prepended onto install directories.
+CMAKE_INSTALL_PREFIX:PATH=C:/Program Files (x86)/wire-controller
+
+//Path to a program.
+CMAKE_LINKER:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe
+
+//make program
+CMAKE_MAKE_PROGRAM:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe
+
+//Flags used by the linker during the creation of modules during
+// all build types.
+CMAKE_MODULE_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of modules during
+// DEBUG builds.
+CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of modules during
+// MINSIZEREL builds.
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELEASE builds.
+CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of modules during
+// RELWITHDEBINFO builds.
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_NM:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/nm.exe
+
+//Path to a program.
+CMAKE_OBJCOPY:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/objcopy.exe
+
+//Path to a program.
+CMAKE_OBJDUMP:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/objdump.exe
+
+//Value Computed by CMake
+CMAKE_PROJECT_DESCRIPTION:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
+
+//Value Computed by CMake
+CMAKE_PROJECT_NAME:STATIC=wire-controller
+
+//Path to a program.
+CMAKE_RANLIB:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ranlib.exe
+
+//RC compiler
+CMAKE_RC_COMPILER:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/windres.exe
+
+//Flags for Windows Resource Compiler during all build types.
+CMAKE_RC_FLAGS:STRING=
+
+//Flags for Windows Resource Compiler during DEBUG builds.
+CMAKE_RC_FLAGS_DEBUG:STRING=
+
+//Flags for Windows Resource Compiler during MINSIZEREL builds.
+CMAKE_RC_FLAGS_MINSIZEREL:STRING=
+
+//Flags for Windows Resource Compiler during RELEASE builds.
+CMAKE_RC_FLAGS_RELEASE:STRING=
+
+//Flags for Windows Resource Compiler during RELWITHDEBINFO builds.
+CMAKE_RC_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_READELF:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/readelf.exe
+
+//Flags used by the linker during the creation of shared libraries
+// during all build types.
+CMAKE_SHARED_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during DEBUG builds.
+CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during MINSIZEREL builds.
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELEASE builds.
+CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of shared libraries
+// during RELWITHDEBINFO builds.
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//If set, runtime paths are not added when installing shared libraries,
+// but are added when building.
+CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
+
+//If set, runtime paths are not added when using shared libraries.
+CMAKE_SKIP_RPATH:BOOL=NO
+
+//Flags used by the linker during the creation of static libraries
+// during all build types.
+CMAKE_STATIC_LINKER_FLAGS:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during DEBUG builds.
+CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during MINSIZEREL builds.
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELEASE builds.
+CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
+
+//Flags used by the linker during the creation of static libraries
+// during RELWITHDEBINFO builds.
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
+
+//Path to a program.
+CMAKE_STRIP:FILEPATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/strip.exe
+
+//Path to a program.
+CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND
+
+//If this value is on, makefiles will be generated without the
+// .SILENT directive, and all commands will be echoed to the console
+// during the make.  This is useful for debugging only. With Visual
+// Studio IDE projects all commands are done without /nologo.
+CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
+
+//Git command line client
+GIT_EXECUTABLE:FILEPATH=D:/01app/ESPIDE/516/Espressif/tools/idf-git/2.44.0/cmd/git.exe
+
+//IDF Build Target
+IDF_TARGET:STRING=esp32s3
+
+//IDF Build Toolchain Type
+IDF_TOOLCHAIN:STRING=gcc
+
+//Value Computed by CMake
+wire-controller_BINARY_DIR:STATIC=E:/01project/01/wire-controller/cmake-build-debug
+
+//Value Computed by CMake
+wire-controller_IS_TOP_LEVEL:STATIC=ON
+
+//Value Computed by CMake
+wire-controller_SOURCE_DIR:STATIC=E:/01project/01/wire-controller
+
+
+########################
+# INTERNAL cache entries
+########################
+
+//ADVANCED property for variable: CMAKE_ADDR2LINE
+CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_AR
+CMAKE_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_COMPILER
+CMAKE_ASM_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_COMPILER_AR
+CMAKE_ASM_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_COMPILER_RANLIB
+CMAKE_ASM_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+CMAKE_ASM_COMPILER_WORKS:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_FLAGS
+CMAKE_ASM_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_FLAGS_DEBUG
+CMAKE_ASM_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_FLAGS_MINSIZEREL
+CMAKE_ASM_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELEASE
+CMAKE_ASM_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_ASM_FLAGS_RELWITHDEBINFO
+CMAKE_ASM_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//This is the directory where this CMakeCache.txt was created
+CMAKE_CACHEFILE_DIR:INTERNAL=e:/01project/01/wire-controller/cmake-build-debug
+//Major version of cmake used to create the current loaded cache
+CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3
+//Minor version of cmake used to create the current loaded cache
+CMAKE_CACHE_MINOR_VERSION:INTERNAL=29
+//Patch version of cmake used to create the current loaded cache
+CMAKE_CACHE_PATCH_VERSION:INTERNAL=6
+//Path to CMake executable.
+CMAKE_COMMAND:INTERNAL=D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/bin/cmake.exe
+//Path to cpack program executable.
+CMAKE_CPACK_COMMAND:INTERNAL=D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/bin/cpack.exe
+//Path to ctest program executable.
+CMAKE_CTEST_COMMAND:INTERNAL=D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/bin/ctest.exe
+//ADVANCED property for variable: CMAKE_CXX_COMPILER
+CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
+CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
+CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS
+CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
+CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
+CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
+CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
+CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_CXX_STANDARD_LIBRARIES
+CMAKE_CXX_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER
+CMAKE_C_COMPILER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_AR
+CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB
+CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS
+CMAKE_C_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG
+CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL
+CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE
+CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO
+CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_C_STANDARD_LIBRARIES
+CMAKE_C_STANDARD_LIBRARIES-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_DLLTOOL
+CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
+//Executable file format
+CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
+CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
+CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
+CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
+CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
+CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
+//Name of external makefile project generator.
+CMAKE_EXTRA_GENERATOR:INTERNAL=
+//Name of generator.
+CMAKE_GENERATOR:INTERNAL=Ninja
+//Generator instance identifier.
+CMAKE_GENERATOR_INSTANCE:INTERNAL=
+//Name of generator platform.
+CMAKE_GENERATOR_PLATFORM:INTERNAL=
+//Name of generator toolset.
+CMAKE_GENERATOR_TOOLSET:INTERNAL=
+//Source directory with the top level CMakeLists.txt file for this
+// project
+CMAKE_HOME_DIRECTORY:INTERNAL=E:/01project/01/wire-controller
+//ADVANCED property for variable: CMAKE_LINKER
+CMAKE_LINKER-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
+CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
+CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
+CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
+CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_NM
+CMAKE_NM-ADVANCED:INTERNAL=1
+//number of local generators
+CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJCOPY
+CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_OBJDUMP
+CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
+//Platform information initialized
+CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RANLIB
+CMAKE_RANLIB-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_COMPILER
+CMAKE_RC_COMPILER-ADVANCED:INTERNAL=1
+CMAKE_RC_COMPILER_WORKS:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS
+CMAKE_RC_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_DEBUG
+CMAKE_RC_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_MINSIZEREL
+CMAKE_RC_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELEASE
+CMAKE_RC_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_RC_FLAGS_RELWITHDEBINFO
+CMAKE_RC_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_READELF
+CMAKE_READELF-ADVANCED:INTERNAL=1
+//Path to CMake installation.
+CMAKE_ROOT:INTERNAL=D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
+CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
+CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
+CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
+CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
+CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_SKIP_RPATH
+CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
+CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
+CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
+CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
+CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
+CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_STRIP
+CMAKE_STRIP-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_TAPI
+CMAKE_TAPI-ADVANCED:INTERNAL=1
+//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
+CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
+//Details about finding Git
+FIND_PACKAGE_MESSAGE_DETAILS_Git:INTERNAL=[D:/01app/ESPIDE/516/Espressif/tools/idf-git/2.44.0/cmd/git.exe][v2.44.0.windows.1()]
+//ADVANCED property for variable: GIT_EXECUTABLE
+GIT_EXECUTABLE-ADVANCED:INTERNAL=1
+//linker supports push/pop state
+_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE
+

+ 28 - 0
cmake-build-debug/CMakeFiles/3.29.6/CMakeASMCompiler.cmake

@@ -0,0 +1,28 @@
+set(CMAKE_ASM_COMPILER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc.exe")
+set(CMAKE_ASM_COMPILER_ARG1 "")
+set(CMAKE_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ar.exe")
+set(CMAKE_ASM_COMPILER_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ranlib.exe")
+set(CMAKE_ASM_COMPILER_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe")
+set(CMAKE_LINKER_LINK "")
+set(CMAKE_LINKER_LLD "")
+set(CMAKE_ASM_COMPILER_LINKER "")
+set(CMAKE_ASM_COMPILER_LINKER_ID "")
+set(CMAKE_ASM_COMPILER_LINKER_VERSION )
+set(CMAKE_ASM_COMPILER_LINKER_FRONTEND_VARIANT )
+set(CMAKE_MT "")
+set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
+set(CMAKE_ASM_COMPILER_LOADED 1)
+set(CMAKE_ASM_COMPILER_ID "GNU")
+set(CMAKE_ASM_COMPILER_VERSION "")
+set(CMAKE_ASM_COMPILER_ENV_VAR "ASM")
+
+
+
+
+set(CMAKE_ASM_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_ASM_LINKER_PREFERENCE 0)
+set(CMAKE_ASM_LINKER_DEPFILE_SUPPORTED )
+
+

+ 80 - 0
cmake-build-debug/CMakeFiles/3.29.6/CMakeCCompiler.cmake

@@ -0,0 +1,80 @@
+set(CMAKE_C_COMPILER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc.exe")
+set(CMAKE_C_COMPILER_ARG1 "")
+set(CMAKE_C_COMPILER_ID "GNU")
+set(CMAKE_C_COMPILER_VERSION "13.1.0")
+set(CMAKE_C_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_C_COMPILER_WRAPPER "")
+set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17")
+set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON")
+set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23")
+set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes")
+set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros")
+set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert")
+set(CMAKE_C17_COMPILE_FEATURES "c_std_17")
+set(CMAKE_C23_COMPILE_FEATURES "c_std_23")
+
+set(CMAKE_C_PLATFORM_ID "MinGW")
+set(CMAKE_C_SIMULATE_ID "")
+set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU")
+set(CMAKE_C_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ar.exe")
+set(CMAKE_C_COMPILER_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ranlib.exe")
+set(CMAKE_C_COMPILER_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe")
+set(CMAKE_LINKER_LINK "")
+set(CMAKE_LINKER_LLD "")
+set(CMAKE_C_COMPILER_LINKER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe")
+set(CMAKE_C_COMPILER_LINKER_ID "GNU")
+set(CMAKE_C_COMPILER_LINKER_VERSION 2.40)
+set(CMAKE_C_COMPILER_LINKER_FRONTEND_VARIANT GNU)
+set(CMAKE_MT "")
+set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
+set(CMAKE_COMPILER_IS_GNUCC 1)
+set(CMAKE_C_COMPILER_LOADED 1)
+set(CMAKE_C_COMPILER_WORKS TRUE)
+set(CMAKE_C_ABI_COMPILED TRUE)
+
+set(CMAKE_C_COMPILER_ENV_VAR "CC")
+
+set(CMAKE_C_COMPILER_ID_RUN 1)
+set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m)
+set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC)
+set(CMAKE_C_LINKER_PREFERENCE 10)
+set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE)
+
+# Save compiler ABI information.
+set(CMAKE_C_SIZEOF_DATA_PTR "8")
+set(CMAKE_C_COMPILER_ABI "")
+set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN")
+set(CMAKE_C_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_C_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_C_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}")
+endif()
+
+if(CMAKE_C_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_C_CL_SHOWINCLUDES_PREFIX)
+  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed;D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include")
+set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "")
+set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "")
+set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")

+ 92 - 0
cmake-build-debug/CMakeFiles/3.29.6/CMakeCXXCompiler.cmake

@@ -0,0 +1,92 @@
+set(CMAKE_CXX_COMPILER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/g++.exe")
+set(CMAKE_CXX_COMPILER_ARG1 "")
+set(CMAKE_CXX_COMPILER_ID "GNU")
+set(CMAKE_CXX_COMPILER_VERSION "13.1.0")
+set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
+set(CMAKE_CXX_COMPILER_WRAPPER "")
+set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17")
+set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
+set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
+set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
+set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
+set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
+set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
+set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
+set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
+
+set(CMAKE_CXX_PLATFORM_ID "MinGW")
+set(CMAKE_CXX_SIMULATE_ID "")
+set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
+set(CMAKE_CXX_SIMULATE_VERSION "")
+
+
+
+
+set(CMAKE_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ar.exe")
+set(CMAKE_CXX_COMPILER_AR "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ar.exe")
+set(CMAKE_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ranlib.exe")
+set(CMAKE_CXX_COMPILER_RANLIB "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc-ranlib.exe")
+set(CMAKE_LINKER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe")
+set(CMAKE_LINKER_LINK "")
+set(CMAKE_LINKER_LLD "")
+set(CMAKE_CXX_COMPILER_LINKER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe")
+set(CMAKE_CXX_COMPILER_LINKER_ID "GNU")
+set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.40)
+set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU)
+set(CMAKE_MT "")
+set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
+set(CMAKE_COMPILER_IS_GNUCXX 1)
+set(CMAKE_CXX_COMPILER_LOADED 1)
+set(CMAKE_CXX_COMPILER_WORKS TRUE)
+set(CMAKE_CXX_ABI_COMPILED TRUE)
+
+set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
+
+set(CMAKE_CXX_COMPILER_ID_RUN 1)
+set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
+set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
+
+foreach (lang IN ITEMS C OBJC OBJCXX)
+  if (CMAKE_${lang}_COMPILER_ID_RUN)
+    foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
+      list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
+    endforeach()
+  endif()
+endforeach()
+
+set(CMAKE_CXX_LINKER_PREFERENCE 30)
+set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
+set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE)
+
+# Save compiler ABI information.
+set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
+set(CMAKE_CXX_COMPILER_ABI "")
+set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
+set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
+
+if(CMAKE_CXX_SIZEOF_DATA_PTR)
+  set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
+endif()
+
+if(CMAKE_CXX_COMPILER_ABI)
+  set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
+endif()
+
+if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
+  set(CMAKE_LIBRARY_ARCHITECTURE "")
+endif()
+
+set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
+if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
+  set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
+endif()
+
+
+
+
+
+set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed;D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include")
+set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
+set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
+set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
+set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "")

BIN
cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_C.bin


BIN
cmake-build-debug/CMakeFiles/3.29.6/CMakeDetermineCompilerABI_CXX.bin


+ 6 - 0
cmake-build-debug/CMakeFiles/3.29.6/CMakeRCCompiler.cmake

@@ -0,0 +1,6 @@
+set(CMAKE_RC_COMPILER "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/windres.exe")
+set(CMAKE_RC_COMPILER_ARG1 "")
+set(CMAKE_RC_COMPILER_LOADED 1)
+set(CMAKE_RC_SOURCE_FILE_EXTENSIONS rc;RC)
+set(CMAKE_RC_OUTPUT_EXTENSION .obj)
+set(CMAKE_RC_COMPILER_ENV_VAR "RC")

+ 15 - 0
cmake-build-debug/CMakeFiles/3.29.6/CMakeSystem.cmake

@@ -0,0 +1,15 @@
+set(CMAKE_HOST_SYSTEM "Windows-10.0.22631")
+set(CMAKE_HOST_SYSTEM_NAME "Windows")
+set(CMAKE_HOST_SYSTEM_VERSION "10.0.22631")
+set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
+
+
+
+set(CMAKE_SYSTEM "Windows-10.0.22631")
+set(CMAKE_SYSTEM_NAME "Windows")
+set(CMAKE_SYSTEM_VERSION "10.0.22631")
+set(CMAKE_SYSTEM_PROCESSOR "AMD64")
+
+set(CMAKE_CROSSCOMPILING "FALSE")
+
+set(CMAKE_SYSTEM_LOADED 1)

+ 895 - 0
cmake-build-debug/CMakeFiles/3.29.6/CompilerIdC/CMakeCCompilerId.c

@@ -0,0 +1,895 @@
+#ifdef __cplusplus
+# error "A C++ compiler has been selected for C."
+#endif
+
+#if defined(__18CXX)
+# define ID_VOID_MAIN
+#endif
+#if defined(__CLASSIC_C__)
+/* cv-qualifiers did not exist in K&R C */
+# define const
+# define volatile
+#endif
+
+#if !defined(__has_include)
+/* If the compiler does not have __has_include, pretend the answer is
+   always no.  */
+#  define __has_include(x) 0
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+   Version date components:   YYYY=Year, MM=Month,   DD=Day  */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_ID "GNU"
+# endif
+  /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
+     except that a few beta releases use the old format with V=2021.  */
+# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+#  if defined(__INTEL_COMPILER_UPDATE)
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+#  else
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
+#  endif
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
+   /* The third version component from --version is an update index,
+      but no macro is provided for it.  */
+#  define COMPILER_VERSION_PATCH DEC(0)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+   /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
+# define COMPILER_ID "IntelLLVM"
+#if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+#endif
+/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
+ * later.  Look for 6 digit vs. 8 digit version number to decide encoding.
+ * VVVV is no smaller than the current year when a version is released.
+ */
+#if __INTEL_LLVM_COMPILER < 1000000L
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER    % 10)
+#else
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER     % 100)
+#endif
+#if defined(_MSC_VER)
+  /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+#elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+#endif
+#if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+#endif
+#if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+#endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+  /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+   /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+   /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_C)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_C >= 0x5100
+   /* __SUNPRO_C = 0xVRRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
+# else
+   /* __SUNPRO_CC = 0xVRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_C    & 0xF)
+# endif
+
+#elif defined(__HP_cc)
+# define COMPILER_ID "HP"
+  /* __HP_cc = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_cc     % 100)
+
+#elif defined(__DECC)
+# define COMPILER_ID "Compaq"
+  /* __DECC_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000  % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECC_VER         % 10000)
+
+#elif defined(__IBMC__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+  /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
+
+#elif defined(__open_xl__) && defined(__clang__)
+# define COMPILER_ID "IBMClang"
+# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
+# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
+# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
+
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800
+# define COMPILER_ID "XL"
+  /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
+
+#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800
+# define COMPILER_ID "VisualAge"
+  /* __IBMC__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMC__    % 10)
+
+#elif defined(__NVCOMPILER)
+# define COMPILER_ID "NVHPC"
+# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
+# if defined(__NVCOMPILER_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
+# endif
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(__clang__) && defined(__cray__)
+# define COMPILER_ID "CrayClang"
+# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
+# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
+# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
+
+#elif defined(__CLANG_FUJITSU)
+# define COMPILER_ID "FujitsuClang"
+# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(__FUJITSU)
+# define COMPILER_ID "Fujitsu"
+# if defined(__FCC_version__)
+#   define COMPILER_VERSION __FCC_version__
+# elif defined(__FCC_major__)
+#   define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+#   define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+#   define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# endif
+# if defined(__fcc_version)
+#   define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
+# elif defined(__FCC_VERSION)
+#   define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
+# endif
+
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER      % 10)
+# endif
+
+#elif defined(__TASKING__)
+# define COMPILER_ID "Tasking"
+  # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
+  # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
+
+#elif defined(__ORANGEC__)
+# define COMPILER_ID "OrangeC"
+# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
+# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
+
+#elif defined(__TINYC__)
+# define COMPILER_ID "TinyCC"
+
+#elif defined(__BCC__)
+# define COMPILER_ID "Bruce"
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+  /* __ARMCC_VERSION = VRRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
+#else
+  /* __ARMCC_VERSION = VRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100   % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__) && defined(__ti__)
+# define COMPILER_ID "TIClang"
+  # define COMPILER_VERSION_MAJOR DEC(__ti_major__)
+  # define COMPILER_VERSION_MINOR DEC(__ti_minor__)
+  # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
+# define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
+# define COMPILER_ID "LCC"
+# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
+# if defined(__LCC_MINOR__)
+#  define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
+# endif
+# if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#  define SIMULATE_ID "GNU"
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+#  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+#  if defined(__GNUC_PATCHLEVEL__)
+#   define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+#  endif
+# endif
+
+#elif defined(__GNUC__)
+# define COMPILER_ID "GNU"
+# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# if defined(__GNUC_MINOR__)
+#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+  /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+#  if _MSC_VER >= 1400
+    /* _MSC_FULL_VER = VVRRPPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+#  else
+    /* _MSC_FULL_VER = VVRRPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+#  endif
+# endif
+# if defined(_MSC_BUILD)
+#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(_ADI_COMPILER)
+# define COMPILER_ID "ADSP"
+#if defined(__VERSIONNUM__)
+  /* __VERSIONNUM__ = 0xVVRRPPTT */
+#  define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
+#  define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
+#  define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
+#  define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+#  define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+#  define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+#  define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+#  define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC)
+# define COMPILER_ID "SDCC"
+# if defined(__SDCC_VERSION_MAJOR)
+#  define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR)
+#  define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR)
+#  define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH)
+# else
+  /* SDCC = VRP */
+#  define COMPILER_VERSION_MAJOR DEC(SDCC/100)
+#  define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10)
+#  define COMPILER_VERSION_PATCH DEC(SDCC    % 10)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+  identification macro.  Try to identify the platform and guess that
+  it is the native compiler.  */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name.  */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__MSYS__)
+# define PLATFORM_ID "MSYS"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+#  define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+#  define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+#  define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+#  define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+#  define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+#  define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+#  define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+#  define PLATFORM_ID "Integrity"
+# endif
+
+# elif defined(_ADI_COMPILER)
+#  define PLATFORM_ID "ADSP"
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+   the architecture of the compiler being used.  This is because
+   the compilers do not have flags that can change the architecture,
+   but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+#  define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_ARM64EC)
+#  define ARCHITECTURE_ID "ARM64EC"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+#  define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+#  if _M_ARM == 4
+#   define ARCHITECTURE_ID "ARMV4I"
+#  elif _M_ARM == 5
+#   define ARCHITECTURE_ID "ARMV5I"
+#  else
+#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+#  endif
+
+# elif defined(_M_MIPS)
+#  define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+#  define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+#  define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+#  define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+#  define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+#  define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+#  define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+#  define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+#  define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+#  define ARCHITECTURE_ID "8051"
+
+# elif defined(__ICCSTM8__)
+#  define ARCHITECTURE_ID "STM8"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+#  define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+#  define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__clang__) && defined(__ti__)
+# if defined(__ARM_ARCH)
+#  define ARCHITECTURE_ID "Arm"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+#  define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+#  define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+# elif defined(__ADSPSHARC__)
+#  define ARCHITECTURE_ID "SHARC"
+
+# elif defined(__ADSPBLACKFIN__)
+#  define ARCHITECTURE_ID "Blackfin"
+
+#elif defined(__TASKING__)
+
+# if defined(__CTC__) || defined(__CPTC__)
+#  define ARCHITECTURE_ID "TriCore"
+
+# elif defined(__CMCS__)
+#  define ARCHITECTURE_ID "MCS"
+
+# elif defined(__CARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__CARC__)
+#  define ARCHITECTURE_ID "ARC"
+
+# elif defined(__C51__)
+#  define ARCHITECTURE_ID "8051"
+
+# elif defined(__CPCP__)
+#  define ARCHITECTURE_ID "PCP"
+
+# else
+#  define ARCHITECTURE_ID ""
+# endif
+
+#else
+#  define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals.  */
+#define DEC(n)                   \
+  ('0' + (((n) / 10000000)%10)), \
+  ('0' + (((n) / 1000000)%10)),  \
+  ('0' + (((n) / 100000)%10)),   \
+  ('0' + (((n) / 10000)%10)),    \
+  ('0' + (((n) / 1000)%10)),     \
+  ('0' + (((n) / 100)%10)),      \
+  ('0' + (((n) / 10)%10)),       \
+  ('0' +  ((n) % 10))
+
+/* Convert integer to hex digit literals.  */
+#define HEX(n)             \
+  ('0' + ((n)>>28 & 0xF)), \
+  ('0' + ((n)>>24 & 0xF)), \
+  ('0' + ((n)>>20 & 0xF)), \
+  ('0' + ((n)>>16 & 0xF)), \
+  ('0' + ((n)>>12 & 0xF)), \
+  ('0' + ((n)>>8  & 0xF)), \
+  ('0' + ((n)>>4  & 0xF)), \
+  ('0' + ((n)     & 0xF))
+
+/* Construct a string literal encoding the version number. */
+#ifdef COMPILER_VERSION
+char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
+
+/* Construct a string literal encoding the version number components. */
+#elif defined(COMPILER_VERSION_MAJOR)
+char const info_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+  COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+  '.', COMPILER_VERSION_MINOR,
+#  ifdef COMPILER_VERSION_PATCH
+   '.', COMPILER_VERSION_PATCH,
+#   ifdef COMPILER_VERSION_TWEAK
+    '.', COMPILER_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+  'i','n','t','e','r','n','a','l','[',
+  COMPILER_VERSION_INTERNAL,']','\0'};
+#elif defined(COMPILER_VERSION_INTERNAL_STR)
+char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+  SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+  '.', SIMULATE_VERSION_MINOR,
+#  ifdef SIMULATE_VERSION_PATCH
+   '.', SIMULATE_VERSION_PATCH,
+#   ifdef SIMULATE_VERSION_TWEAK
+    '.', SIMULATE_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+#if !defined(__STDC__) && !defined(__clang__)
+# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__)
+#  define C_VERSION "90"
+# else
+#  define C_VERSION
+# endif
+#elif __STDC_VERSION__ > 201710L
+# define C_VERSION "23"
+#elif __STDC_VERSION__ >= 201710L
+# define C_VERSION "17"
+#elif __STDC_VERSION__ >= 201000L
+# define C_VERSION "11"
+#elif __STDC_VERSION__ >= 199901L
+# define C_VERSION "99"
+#else
+# define C_VERSION "90"
+#endif
+const char* info_language_standard_default =
+  "INFO" ":" "standard_default[" C_VERSION "]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) ||           \
+     defined(__TI_COMPILER_VERSION__)) &&                                     \
+  !defined(__STRICT_ANSI__)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+#ifdef ID_VOID_MAIN
+void main() {}
+#else
+# if defined(__CLASSIC_C__)
+int main(argc, argv) int argc; char *argv[];
+# else
+int main(int argc, char* argv[])
+# endif
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+  require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+  require += info_cray[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}
+#endif

BIN
cmake-build-debug/CMakeFiles/3.29.6/CompilerIdC/a.exe


+ 878 - 0
cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/CMakeCXXCompilerId.cpp

@@ -0,0 +1,878 @@
+/* This source file must have a .cpp extension so that all C++ compilers
+   recognize the extension without flags.  Borland does not know .cxx for
+   example.  */
+#ifndef __cplusplus
+# error "A C compiler has been selected for C++."
+#endif
+
+#if !defined(__has_include)
+/* If the compiler does not have __has_include, pretend the answer is
+   always no.  */
+#  define __has_include(x) 0
+#endif
+
+
+/* Version number components: V=Version, R=Revision, P=Patch
+   Version date components:   YYYY=Year, MM=Month,   DD=Day  */
+
+#if defined(__INTEL_COMPILER) || defined(__ICC)
+# define COMPILER_ID "Intel"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_ID "GNU"
+# endif
+  /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
+     except that a few beta releases use the old format with V=2021.  */
+# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
+#  if defined(__INTEL_COMPILER_UPDATE)
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
+#  else
+#   define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER   % 10)
+#  endif
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
+#  define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
+   /* The third version component from --version is an update index,
+      but no macro is provided for it.  */
+#  define COMPILER_VERSION_PATCH DEC(0)
+# endif
+# if defined(__INTEL_COMPILER_BUILD_DATE)
+   /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
+#  define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
+# endif
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# if defined(__GNUC__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+# elif defined(__GNUG__)
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
+# define COMPILER_ID "IntelLLVM"
+#if defined(_MSC_VER)
+# define SIMULATE_ID "MSVC"
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_ID "GNU"
+#endif
+/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
+ * later.  Look for 6 digit vs. 8 digit version number to decide encoding.
+ * VVVV is no smaller than the current year when a version is released.
+ */
+#if __INTEL_LLVM_COMPILER < 1000000L
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER    % 10)
+#else
+# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
+# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER     % 100)
+#endif
+#if defined(_MSC_VER)
+  /* _MSC_VER = VVRR */
+# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+#endif
+#if defined(__GNUC__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+#elif defined(__GNUG__)
+# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
+#endif
+#if defined(__GNUC_MINOR__)
+# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+#endif
+#if defined(__GNUC_PATCHLEVEL__)
+# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+#endif
+
+#elif defined(__PATHCC__)
+# define COMPILER_ID "PathScale"
+# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
+# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
+# if defined(__PATHCC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
+# endif
+
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__     & 0xFFFF)
+
+#elif defined(__BORLANDC__)
+# define COMPILER_ID "Borland"
+  /* __BORLANDC__ = 0xVRR */
+# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
+# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
+
+#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
+# define COMPILER_ID "Watcom"
+   /* __WATCOMC__ = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__WATCOMC__)
+# define COMPILER_ID "OpenWatcom"
+   /* __WATCOMC__ = VVRP + 1100 */
+# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
+# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
+# if (__WATCOMC__ % 10) > 0
+#  define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
+# endif
+
+#elif defined(__SUNPRO_CC)
+# define COMPILER_ID "SunPro"
+# if __SUNPRO_CC >= 0x5100
+   /* __SUNPRO_CC = 0xVRRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
+# else
+   /* __SUNPRO_CC = 0xVRP */
+#  define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
+#  define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
+#  define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC    & 0xF)
+# endif
+
+#elif defined(__HP_aCC)
+# define COMPILER_ID "HP"
+  /* __HP_aCC = VVRRPP */
+# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
+# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
+# define COMPILER_VERSION_PATCH DEC(__HP_aCC     % 100)
+
+#elif defined(__DECCXX)
+# define COMPILER_ID "Compaq"
+  /* __DECCXX_VER = VVRRTPPPP */
+# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
+# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000  % 100)
+# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER         % 10000)
+
+#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
+# define COMPILER_ID "zOS"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__open_xl__) && defined(__clang__)
+# define COMPILER_ID "IBMClang"
+# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
+# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
+# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
+
+
+#elif defined(__ibmxl__) && defined(__clang__)
+# define COMPILER_ID "XLClang"
+# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
+# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
+# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
+# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
+
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
+# define COMPILER_ID "XL"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
+# define COMPILER_ID "VisualAge"
+  /* __IBMCPP__ = VRP */
+# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
+# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__IBMCPP__    % 10)
+
+#elif defined(__NVCOMPILER)
+# define COMPILER_ID "NVHPC"
+# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
+# if defined(__NVCOMPILER_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
+# endif
+
+#elif defined(__PGI)
+# define COMPILER_ID "PGI"
+# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
+# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
+# if defined(__PGIC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
+# endif
+
+#elif defined(__clang__) && defined(__cray__)
+# define COMPILER_ID "CrayClang"
+# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
+# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
+# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(_CRAYC)
+# define COMPILER_ID "Cray"
+# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
+# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
+
+#elif defined(__TI_COMPILER_VERSION__)
+# define COMPILER_ID "TI"
+  /* __TI_COMPILER_VERSION__ = VVVRRRPPP */
+# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
+# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000   % 1000)
+# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__        % 1000)
+
+#elif defined(__CLANG_FUJITSU)
+# define COMPILER_ID "FujitsuClang"
+# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# define COMPILER_VERSION_INTERNAL_STR __clang_version__
+
+
+#elif defined(__FUJITSU)
+# define COMPILER_ID "Fujitsu"
+# if defined(__FCC_version__)
+#   define COMPILER_VERSION __FCC_version__
+# elif defined(__FCC_major__)
+#   define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
+#   define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
+#   define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
+# endif
+# if defined(__fcc_version)
+#   define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
+# elif defined(__FCC_VERSION)
+#   define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
+# endif
+
+
+#elif defined(__ghs__)
+# define COMPILER_ID "GHS"
+/* __GHS_VERSION_NUMBER = VVVVRP */
+# ifdef __GHS_VERSION_NUMBER
+# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
+# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
+# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER      % 10)
+# endif
+
+#elif defined(__TASKING__)
+# define COMPILER_ID "Tasking"
+  # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
+  # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
+
+#elif defined(__ORANGEC__)
+# define COMPILER_ID "OrangeC"
+# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
+# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
+# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
+
+#elif defined(__SCO_VERSION__)
+# define COMPILER_ID "SCO"
+
+#elif defined(__ARMCC_VERSION) && !defined(__clang__)
+# define COMPILER_ID "ARMCC"
+#if __ARMCC_VERSION >= 1000000
+  /* __ARMCC_VERSION = VRRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION     % 10000)
+#else
+  /* __ARMCC_VERSION = VRPPPP */
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION    % 10000)
+#endif
+
+
+#elif defined(__clang__) && defined(__apple_build_version__)
+# define COMPILER_ID "AppleClang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
+
+#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
+# define COMPILER_ID "ARMClang"
+  # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
+  # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
+  # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100   % 100)
+# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
+
+#elif defined(__clang__) && defined(__ti__)
+# define COMPILER_ID "TIClang"
+  # define COMPILER_VERSION_MAJOR DEC(__ti_major__)
+  # define COMPILER_VERSION_MINOR DEC(__ti_minor__)
+  # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
+# define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
+
+#elif defined(__clang__)
+# define COMPILER_ID "Clang"
+# if defined(_MSC_VER)
+#  define SIMULATE_ID "MSVC"
+# endif
+# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
+# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
+# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+# if defined(_MSC_VER)
+   /* _MSC_VER = VVRR */
+#  define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
+#  define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
+# endif
+
+#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
+# define COMPILER_ID "LCC"
+# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
+# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
+# if defined(__LCC_MINOR__)
+#  define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
+# endif
+# if defined(__GNUC__) && defined(__GNUC_MINOR__)
+#  define SIMULATE_ID "GNU"
+#  define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
+#  define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
+#  if defined(__GNUC_PATCHLEVEL__)
+#   define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+#  endif
+# endif
+
+#elif defined(__GNUC__) || defined(__GNUG__)
+# define COMPILER_ID "GNU"
+# if defined(__GNUC__)
+#  define COMPILER_VERSION_MAJOR DEC(__GNUC__)
+# else
+#  define COMPILER_VERSION_MAJOR DEC(__GNUG__)
+# endif
+# if defined(__GNUC_MINOR__)
+#  define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
+# endif
+# if defined(__GNUC_PATCHLEVEL__)
+#  define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
+# endif
+
+#elif defined(_MSC_VER)
+# define COMPILER_ID "MSVC"
+  /* _MSC_VER = VVRR */
+# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
+# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
+# if defined(_MSC_FULL_VER)
+#  if _MSC_VER >= 1400
+    /* _MSC_FULL_VER = VVRRPPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
+#  else
+    /* _MSC_FULL_VER = VVRRPPPP */
+#   define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
+#  endif
+# endif
+# if defined(_MSC_BUILD)
+#  define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
+# endif
+
+#elif defined(_ADI_COMPILER)
+# define COMPILER_ID "ADSP"
+#if defined(__VERSIONNUM__)
+  /* __VERSIONNUM__ = 0xVVRRPPTT */
+#  define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
+#  define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
+#  define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
+#  define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
+#endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# define COMPILER_ID "IAR"
+# if defined(__VER__) && defined(__ICCARM__)
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
+#  define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
+#  define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
+#  define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
+#  define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
+#  define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
+#  define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
+# endif
+
+
+/* These compilers are either not known or too old to define an
+  identification macro.  Try to identify the platform and guess that
+  it is the native compiler.  */
+#elif defined(__hpux) || defined(__hpua)
+# define COMPILER_ID "HP"
+
+#else /* unknown compiler */
+# define COMPILER_ID ""
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
+#ifdef SIMULATE_ID
+char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
+#endif
+
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto[]";
+#endif
+
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
+#endif
+
+#define STRINGIFY_HELPER(X) #X
+#define STRINGIFY(X) STRINGIFY_HELPER(X)
+
+/* Identify known platforms by name.  */
+#if defined(__linux) || defined(__linux__) || defined(linux)
+# define PLATFORM_ID "Linux"
+
+#elif defined(__MSYS__)
+# define PLATFORM_ID "MSYS"
+
+#elif defined(__CYGWIN__)
+# define PLATFORM_ID "Cygwin"
+
+#elif defined(__MINGW32__)
+# define PLATFORM_ID "MinGW"
+
+#elif defined(__APPLE__)
+# define PLATFORM_ID "Darwin"
+
+#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
+# define PLATFORM_ID "Windows"
+
+#elif defined(__FreeBSD__) || defined(__FreeBSD)
+# define PLATFORM_ID "FreeBSD"
+
+#elif defined(__NetBSD__) || defined(__NetBSD)
+# define PLATFORM_ID "NetBSD"
+
+#elif defined(__OpenBSD__) || defined(__OPENBSD)
+# define PLATFORM_ID "OpenBSD"
+
+#elif defined(__sun) || defined(sun)
+# define PLATFORM_ID "SunOS"
+
+#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
+# define PLATFORM_ID "AIX"
+
+#elif defined(__hpux) || defined(__hpux__)
+# define PLATFORM_ID "HP-UX"
+
+#elif defined(__HAIKU__)
+# define PLATFORM_ID "Haiku"
+
+#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
+# define PLATFORM_ID "BeOS"
+
+#elif defined(__QNX__) || defined(__QNXNTO__)
+# define PLATFORM_ID "QNX"
+
+#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
+# define PLATFORM_ID "Tru64"
+
+#elif defined(__riscos) || defined(__riscos__)
+# define PLATFORM_ID "RISCos"
+
+#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
+# define PLATFORM_ID "SINIX"
+
+#elif defined(__UNIX_SV__)
+# define PLATFORM_ID "UNIX_SV"
+
+#elif defined(__bsdos__)
+# define PLATFORM_ID "BSDOS"
+
+#elif defined(_MPRAS) || defined(MPRAS)
+# define PLATFORM_ID "MP-RAS"
+
+#elif defined(__osf) || defined(__osf__)
+# define PLATFORM_ID "OSF1"
+
+#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
+# define PLATFORM_ID "SCO_SV"
+
+#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
+# define PLATFORM_ID "ULTRIX"
+
+#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
+# define PLATFORM_ID "Xenix"
+
+#elif defined(__WATCOMC__)
+# if defined(__LINUX__)
+#  define PLATFORM_ID "Linux"
+
+# elif defined(__DOS__)
+#  define PLATFORM_ID "DOS"
+
+# elif defined(__OS2__)
+#  define PLATFORM_ID "OS2"
+
+# elif defined(__WINDOWS__)
+#  define PLATFORM_ID "Windows3x"
+
+# elif defined(__VXWORKS__)
+#  define PLATFORM_ID "VxWorks"
+
+# else /* unknown platform */
+#  define PLATFORM_ID
+# endif
+
+#elif defined(__INTEGRITY)
+# if defined(INT_178B)
+#  define PLATFORM_ID "Integrity178"
+
+# else /* regular Integrity */
+#  define PLATFORM_ID "Integrity"
+# endif
+
+# elif defined(_ADI_COMPILER)
+#  define PLATFORM_ID "ADSP"
+
+#else /* unknown platform */
+# define PLATFORM_ID
+
+#endif
+
+/* For windows compilers MSVC and Intel we can determine
+   the architecture of the compiler being used.  This is because
+   the compilers do not have flags that can change the architecture,
+   but rather depend on which compiler is being used
+*/
+#if defined(_WIN32) && defined(_MSC_VER)
+# if defined(_M_IA64)
+#  define ARCHITECTURE_ID "IA64"
+
+# elif defined(_M_ARM64EC)
+#  define ARCHITECTURE_ID "ARM64EC"
+
+# elif defined(_M_X64) || defined(_M_AMD64)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# elif defined(_M_ARM64)
+#  define ARCHITECTURE_ID "ARM64"
+
+# elif defined(_M_ARM)
+#  if _M_ARM == 4
+#   define ARCHITECTURE_ID "ARMV4I"
+#  elif _M_ARM == 5
+#   define ARCHITECTURE_ID "ARMV5I"
+#  else
+#   define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
+#  endif
+
+# elif defined(_M_MIPS)
+#  define ARCHITECTURE_ID "MIPS"
+
+# elif defined(_M_SH)
+#  define ARCHITECTURE_ID "SHx"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__WATCOMC__)
+# if defined(_M_I86)
+#  define ARCHITECTURE_ID "I86"
+
+# elif defined(_M_IX86)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
+# if defined(__ICCARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__ICCRX__)
+#  define ARCHITECTURE_ID "RX"
+
+# elif defined(__ICCRH850__)
+#  define ARCHITECTURE_ID "RH850"
+
+# elif defined(__ICCRL78__)
+#  define ARCHITECTURE_ID "RL78"
+
+# elif defined(__ICCRISCV__)
+#  define ARCHITECTURE_ID "RISCV"
+
+# elif defined(__ICCAVR__)
+#  define ARCHITECTURE_ID "AVR"
+
+# elif defined(__ICC430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__ICCV850__)
+#  define ARCHITECTURE_ID "V850"
+
+# elif defined(__ICC8051__)
+#  define ARCHITECTURE_ID "8051"
+
+# elif defined(__ICCSTM8__)
+#  define ARCHITECTURE_ID "STM8"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__ghs__)
+# if defined(__PPC64__)
+#  define ARCHITECTURE_ID "PPC64"
+
+# elif defined(__ppc__)
+#  define ARCHITECTURE_ID "PPC"
+
+# elif defined(__ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__x86_64__)
+#  define ARCHITECTURE_ID "x64"
+
+# elif defined(__i386__)
+#  define ARCHITECTURE_ID "X86"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__clang__) && defined(__ti__)
+# if defined(__ARM_ARCH)
+#  define ARCHITECTURE_ID "Arm"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+#elif defined(__TI_COMPILER_VERSION__)
+# if defined(__TI_ARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__MSP430__)
+#  define ARCHITECTURE_ID "MSP430"
+
+# elif defined(__TMS320C28XX__)
+#  define ARCHITECTURE_ID "TMS320C28x"
+
+# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
+#  define ARCHITECTURE_ID "TMS320C6x"
+
+# else /* unknown architecture */
+#  define ARCHITECTURE_ID ""
+# endif
+
+# elif defined(__ADSPSHARC__)
+#  define ARCHITECTURE_ID "SHARC"
+
+# elif defined(__ADSPBLACKFIN__)
+#  define ARCHITECTURE_ID "Blackfin"
+
+#elif defined(__TASKING__)
+
+# if defined(__CTC__) || defined(__CPTC__)
+#  define ARCHITECTURE_ID "TriCore"
+
+# elif defined(__CMCS__)
+#  define ARCHITECTURE_ID "MCS"
+
+# elif defined(__CARM__)
+#  define ARCHITECTURE_ID "ARM"
+
+# elif defined(__CARC__)
+#  define ARCHITECTURE_ID "ARC"
+
+# elif defined(__C51__)
+#  define ARCHITECTURE_ID "8051"
+
+# elif defined(__CPCP__)
+#  define ARCHITECTURE_ID "PCP"
+
+# else
+#  define ARCHITECTURE_ID ""
+# endif
+
+#else
+#  define ARCHITECTURE_ID
+#endif
+
+/* Convert integer to decimal digit literals.  */
+#define DEC(n)                   \
+  ('0' + (((n) / 10000000)%10)), \
+  ('0' + (((n) / 1000000)%10)),  \
+  ('0' + (((n) / 100000)%10)),   \
+  ('0' + (((n) / 10000)%10)),    \
+  ('0' + (((n) / 1000)%10)),     \
+  ('0' + (((n) / 100)%10)),      \
+  ('0' + (((n) / 10)%10)),       \
+  ('0' +  ((n) % 10))
+
+/* Convert integer to hex digit literals.  */
+#define HEX(n)             \
+  ('0' + ((n)>>28 & 0xF)), \
+  ('0' + ((n)>>24 & 0xF)), \
+  ('0' + ((n)>>20 & 0xF)), \
+  ('0' + ((n)>>16 & 0xF)), \
+  ('0' + ((n)>>12 & 0xF)), \
+  ('0' + ((n)>>8  & 0xF)), \
+  ('0' + ((n)>>4  & 0xF)), \
+  ('0' + ((n)     & 0xF))
+
+/* Construct a string literal encoding the version number. */
+#ifdef COMPILER_VERSION
+char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
+
+/* Construct a string literal encoding the version number components. */
+#elif defined(COMPILER_VERSION_MAJOR)
+char const info_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
+  COMPILER_VERSION_MAJOR,
+# ifdef COMPILER_VERSION_MINOR
+  '.', COMPILER_VERSION_MINOR,
+#  ifdef COMPILER_VERSION_PATCH
+   '.', COMPILER_VERSION_PATCH,
+#   ifdef COMPILER_VERSION_TWEAK
+    '.', COMPILER_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct a string literal encoding the internal version number. */
+#ifdef COMPILER_VERSION_INTERNAL
+char const info_version_internal[] = {
+  'I', 'N', 'F', 'O', ':',
+  'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
+  'i','n','t','e','r','n','a','l','[',
+  COMPILER_VERSION_INTERNAL,']','\0'};
+#elif defined(COMPILER_VERSION_INTERNAL_STR)
+char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
+#endif
+
+/* Construct a string literal encoding the version number components. */
+#ifdef SIMULATE_VERSION_MAJOR
+char const info_simulate_version[] = {
+  'I', 'N', 'F', 'O', ':',
+  's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
+  SIMULATE_VERSION_MAJOR,
+# ifdef SIMULATE_VERSION_MINOR
+  '.', SIMULATE_VERSION_MINOR,
+#  ifdef SIMULATE_VERSION_PATCH
+   '.', SIMULATE_VERSION_PATCH,
+#   ifdef SIMULATE_VERSION_TWEAK
+    '.', SIMULATE_VERSION_TWEAK,
+#   endif
+#  endif
+# endif
+  ']','\0'};
+#endif
+
+/* Construct the string literal in pieces to prevent the source from
+   getting matched.  Store it in a pointer rather than an array
+   because some compilers will just produce instructions to fill the
+   array rather than assigning a pointer to a static array.  */
+char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
+char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
+
+
+
+#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L
+#  if defined(__INTEL_CXX11_MODE__)
+#    if defined(__cpp_aggregate_nsdmi)
+#      define CXX_STD 201402L
+#    else
+#      define CXX_STD 201103L
+#    endif
+#  else
+#    define CXX_STD 199711L
+#  endif
+#elif defined(_MSC_VER) && defined(_MSVC_LANG)
+#  define CXX_STD _MSVC_LANG
+#else
+#  define CXX_STD __cplusplus
+#endif
+
+const char* info_language_standard_default = "INFO" ":" "standard_default["
+#if CXX_STD > 202002L
+  "23"
+#elif CXX_STD > 201703L
+  "20"
+#elif CXX_STD >= 201703L
+  "17"
+#elif CXX_STD >= 201402L
+  "14"
+#elif CXX_STD >= 201103L
+  "11"
+#else
+  "98"
+#endif
+"]";
+
+const char* info_language_extensions_default = "INFO" ":" "extensions_default["
+#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) ||           \
+     defined(__TI_COMPILER_VERSION__)) &&                                     \
+  !defined(__STRICT_ANSI__)
+  "ON"
+#else
+  "OFF"
+#endif
+"]";
+
+/*--------------------------------------------------------------------------*/
+
+int main(int argc, char* argv[])
+{
+  int require = 0;
+  require += info_compiler[argc];
+  require += info_platform[argc];
+  require += info_arch[argc];
+#ifdef COMPILER_VERSION_MAJOR
+  require += info_version[argc];
+#endif
+#ifdef COMPILER_VERSION_INTERNAL
+  require += info_version_internal[argc];
+#endif
+#ifdef SIMULATE_ID
+  require += info_simulate[argc];
+#endif
+#ifdef SIMULATE_VERSION_MAJOR
+  require += info_simulate_version[argc];
+#endif
+#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
+  require += info_cray[argc];
+#endif
+  require += info_language_standard_default[argc];
+  require += info_language_extensions_default[argc];
+  (void)argv;
+  return require;
+}

BIN
cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/a.exe


+ 472 - 0
cmake-build-debug/CMakeFiles/CMakeConfigureLog.yaml

@@ -0,0 +1,472 @@
+
+---
+events:
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineSystem.cmake:205 (message)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      The system is: Windows - 10.0.22631 - AMD64
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded.
+      Compiler: D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/gcc.exe 
+      Build flags: 
+      Id flags:  
+      
+      The output was:
+      0
+      
+      
+      Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.exe"
+      
+      The C compiler identification is GNU, found in:
+        E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdC/a.exe
+      
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:17 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded.
+      Compiler: D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/g++.exe 
+      Build flags: 
+      Id flags:  
+      
+      The output was:
+      0
+      
+      
+      Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.exe"
+      
+      The CXX compiler identification is GNU, found in:
+        E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/3.29.6/CompilerIdCXX/a.exe
+      
+  -
+    kind: "try_compile-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    checks:
+      - "Detecting C compiler ABI info"
+    directories:
+      source: "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-ydai3k"
+      binary: "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-ydai3k"
+    cmakeVariables:
+      CMAKE_C_FLAGS: ""
+      CMAKE_C_FLAGS_DEBUG: "-g"
+      CMAKE_EXE_LINKER_FLAGS: ""
+    buildResult:
+      variable: "CMAKE_C_ABI_COMPILED"
+      cached: true
+      stdout: |
+        Change Dir: 'E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-ydai3k'
+        
+        Run Build Command(s): "D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe" -v cmTC_52173
+        [1/2] "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe"   -fdiagnostics-color=always   -v -o CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj -c "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCCompilerABI.c"
+        Using built-in specs.
+        COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe
+        Target: x86_64-w64-mingw32
+        Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends
+        Thread model: posix
+        Supported LTO compression algorithms: zlib
+        gcc version 13.1.0 (GCC) 
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/'
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/cc1.exe -quiet -v -iprefix D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/ -D_REENTRANT D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_52173.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=nocona -version -fdiagnostics-color=always -o C:\\Users\\DELL\\AppData\\Local\\Temp\\cc9eg2of.s
+        GNU C17 (GCC) version 13.1.0 (x86_64-w64-mingw32)
+        	compiled by GNU C version 13.1.0, GMP version 6.2.1, MPFR version 4.2.0-p4, MPC version 1.3.1, isl version none
+        GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include"
+        ignoring nonexistent directory "/win/include"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../include"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include"
+        ignoring nonexistent directory "/mingw/include"
+        #include "..." search starts here:
+        #include <...> search starts here:
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include
+        End of search list.
+        Compiler executable checksum: 2aa4fcf5c9208168c5e2d38a58fc2a97
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/'
+         as -v -o CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj C:\\Users\\DELL\\AppData\\Local\\Temp\\cc9eg2of.s
+        GNU assembler version 2.40 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.40
+        COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/
+        LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../\x0d
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.'\x0d
+        [2/2] C:\\Windows\\system32\\cmd.exe /C "cd . && "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe"  -v -Wl,-v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj -o cmTC_52173.exe -Wl,--out-implib,libcmTC_52173.dll.a -Wl,--major-image-version,0,--minor-image-version,0   && cd ."
+        Using built-in specs.
+        COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe
+        COLLECT_LTO_WRAPPER=D:/01app/clion/CLion\\ 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/lto-wrapper.exe
+        Target: x86_64-w64-mingw32
+        Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends
+        Thread model: posix
+        Supported LTO compression algorithms: zlib
+        gcc version 13.1.0 (GCC) 
+        COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/
+        LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../
+        COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_52173.exe' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_52173.'
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/collect2.exe -m i386pep -Bdynamic -o cmTC_52173.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj --out-implib libcmTC_52173.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o
+        collect2 version 13.1.0
+        D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin/ld.exe -m i386pep -Bdynamic -o cmTC_52173.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj --out-implib libcmTC_52173.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o
+        GNU ld (GNU Binutils) 2.40
+        COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_52173.exe' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_52173.'\x0d
+        
+      exitCode: 0
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Parsed C implicit include dir info: rv=done
+        found start of include info
+        found start of implicit include info
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include]
+        end of search list found
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/include]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include]
+        implicit include dirs: [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed;D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include]
+      
+      
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Parsed C implicit link information:
+        link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
+        linker tool regex: [^[ 	]*(->|")?[ 	]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)]
+        ignore line: [Change Dir: 'E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-ydai3k']
+        ignore line: []
+        ignore line: [Run Build Command(s): "D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe" -v cmTC_52173]
+        ignore line: [[1/2] "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe"   -fdiagnostics-color=always   -v -o CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj -c "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCCompilerABI.c"]
+        ignore line: [Using built-in specs.]
+        ignore line: [COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe]
+        ignore line: [Target: x86_64-w64-mingw32]
+        ignore line: [Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends]
+        ignore line: [Thread model: posix]
+        ignore line: [Supported LTO compression algorithms: zlib]
+        ignore line: [gcc version 13.1.0 (GCC) ]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/']
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/cc1.exe -quiet -v -iprefix D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/ -D_REENTRANT D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_52173.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=nocona -version -fdiagnostics-color=always -o C:\\Users\\DELL\\AppData\\Local\\Temp\\cc9eg2of.s]
+        ignore line: [GNU C17 (GCC) version 13.1.0 (x86_64-w64-mingw32)]
+        ignore line: [	compiled by GNU C version 13.1.0  GMP version 6.2.1  MPFR version 4.2.0-p4  MPC version 1.3.1  isl version none]
+        ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include"]
+        ignore line: [ignoring nonexistent directory "/win/include"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../include"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include"]
+        ignore line: [ignoring nonexistent directory "/mingw/include"]
+        ignore line: [#include "..." search starts here:]
+        ignore line: [#include <...> search starts here:]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include]
+        ignore line: [End of search list.]
+        ignore line: [Compiler executable checksum: 2aa4fcf5c9208168c5e2d38a58fc2a97]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/']
+        ignore line: [ as -v -o CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj C:\\Users\\DELL\\AppData\\Local\\Temp\\cc9eg2of.s]
+        ignore line: [GNU assembler version 2.40 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.40]
+        ignore line: [COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/]
+        ignore line: [LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../\x0d]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj' '-c' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.'\x0d]
+        ignore line: [[2/2] C:\\Windows\\system32\\cmd.exe /C "cd . && "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe"  -v -Wl -v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj -o cmTC_52173.exe -Wl --out-implib libcmTC_52173.dll.a -Wl --major-image-version 0 --minor-image-version 0   && cd ."]
+        ignore line: [Using built-in specs.]
+        ignore line: [COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\gcc.exe]
+        ignore line: [COLLECT_LTO_WRAPPER=D:/01app/clion/CLion\\ 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/lto-wrapper.exe]
+        ignore line: [Target: x86_64-w64-mingw32]
+        ignore line: [Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends]
+        ignore line: [Thread model: posix]
+        ignore line: [Supported LTO compression algorithms: zlib]
+        ignore line: [gcc version 13.1.0 (GCC) ]
+        ignore line: [COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/]
+        ignore line: [LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../]
+        ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_52173.exe' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_52173.']
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/collect2.exe -m i386pep -Bdynamic -o cmTC_52173.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj --out-implib libcmTC_52173.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o]
+        ignore line: [collect2 version 13.1.0]
+        ignore line: [D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin/ld.exe -m i386pep -Bdynamic -o cmTC_52173.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_52173.dir/CMakeCCompilerABI.c.obj --out-implib libcmTC_52173.dll.a --major-image-version 0 --minor-image-version 0 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o]
+        ignore line: [GNU ld (GNU Binutils) 2.40]
+        ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_52173.exe' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_52173.'\x0d]
+        ignore line: []
+        ignore line: []
+        linker tool for 'C': D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe
+        implicit libs: []
+        implicit objs: []
+        implicit dirs: []
+        implicit fwks: []
+      
+      
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Running the C compiler's linker: "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe" "-v"
+      GNU ld (GNU Binutils) 2.40
+  -
+    kind: "try_compile-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:67 (try_compile)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    checks:
+      - "Detecting CXX compiler ABI info"
+    directories:
+      source: "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-qzgyl1"
+      binary: "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-qzgyl1"
+    cmakeVariables:
+      CMAKE_CXX_FLAGS: ""
+      CMAKE_CXX_FLAGS_DEBUG: "-g"
+      CMAKE_CXX_SCAN_FOR_MODULES: "OFF"
+      CMAKE_EXE_LINKER_FLAGS: ""
+    buildResult:
+      variable: "CMAKE_CXX_ABI_COMPILED"
+      cached: true
+      stdout: |
+        Change Dir: 'E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-qzgyl1'
+        
+        Run Build Command(s): "D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe" -v cmTC_c4720
+        [1/2] "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe"   -fdiagnostics-color=always   -v -o CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj -c "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp"
+        Using built-in specs.
+        COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe
+        Target: x86_64-w64-mingw32
+        Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends
+        Thread model: posix
+        Supported LTO compression algorithms: zlib
+        gcc version 13.1.0 (GCC) 
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/'
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/cc1plus.exe -quiet -v -iprefix D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/ -D_REENTRANT D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_c4720.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=nocona -version -fdiagnostics-color=always -o C:\\Users\\DELL\\AppData\\Local\\Temp\\ccoSwt1U.s
+        GNU C++17 (GCC) version 13.1.0 (x86_64-w64-mingw32)
+        	compiled by GNU C version 13.1.0, GMP version 6.2.1, MPFR version 4.2.0-p4, MPC version 1.3.1, isl version none
+        GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include"
+        ignoring nonexistent directory "/win/include"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../include"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed"
+        ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include"
+        ignoring nonexistent directory "/mingw/include"
+        #include "..." search starts here:
+        #include <...> search starts here:
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include
+        End of search list.
+        Compiler executable checksum: e75de627edc3c57e31324b930b15b056
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/'
+         as -v -o CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj C:\\Users\\DELL\\AppData\\Local\\Temp\\ccoSwt1U.s
+        GNU assembler version 2.40 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.40
+        COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/
+        LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../\x0d
+        COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.'\x0d
+        [2/2] C:\\Windows\\system32\\cmd.exe /C "cd . && "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe"  -v -Wl,-v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_c4720.exe -Wl,--out-implib,libcmTC_c4720.dll.a -Wl,--major-image-version,0,--minor-image-version,0   && cd ."
+        Using built-in specs.
+        COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe
+        COLLECT_LTO_WRAPPER=D:/01app/clion/CLion\\ 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/lto-wrapper.exe
+        Target: x86_64-w64-mingw32
+        Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends
+        Thread model: posix
+        Supported LTO compression algorithms: zlib
+        gcc version 13.1.0 (GCC) 
+        COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/
+        LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/;D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../
+        COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_c4720.exe' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_c4720.'
+         D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/collect2.exe -m i386pep -Bdynamic -o cmTC_c4720.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj --out-implib libcmTC_c4720.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o
+        collect2 version 13.1.0
+        D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin/ld.exe -m i386pep -Bdynamic -o cmTC_c4720.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj --out-implib libcmTC_c4720.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o
+        GNU ld (GNU Binutils) 2.40
+        COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_c4720.exe' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_c4720.'\x0d
+        
+      exitCode: 0
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:137 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Parsed CXX implicit include dir info: rv=done
+        found start of include info
+        found start of implicit include info
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+          add: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include]
+        end of search list found
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/include]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+        collapse include dir [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include] ==> [D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include]
+        implicit include dirs: [D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/include;D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed;D:/01app/clion/CLion 2024.2.3/bin/mingw/x86_64-w64-mingw32/include]
+      
+      
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:173 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Parsed CXX implicit link information:
+        link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)]
+        linker tool regex: [^[ 	]*(->|")?[ 	]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)]
+        ignore line: [Change Dir: 'E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/CMakeScratch/TryCompile-qzgyl1']
+        ignore line: []
+        ignore line: [Run Build Command(s): "D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe" -v cmTC_c4720]
+        ignore line: [[1/2] "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe"   -fdiagnostics-color=always   -v -o CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj -c "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp"]
+        ignore line: [Using built-in specs.]
+        ignore line: [COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe]
+        ignore line: [Target: x86_64-w64-mingw32]
+        ignore line: [Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends]
+        ignore line: [Thread model: posix]
+        ignore line: [Supported LTO compression algorithms: zlib]
+        ignore line: [gcc version 13.1.0 (GCC) ]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/']
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/cc1plus.exe -quiet -v -iprefix D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/ -D_REENTRANT D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_c4720.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=nocona -version -fdiagnostics-color=always -o C:\\Users\\DELL\\AppData\\Local\\Temp\\ccoSwt1U.s]
+        ignore line: [GNU C++17 (GCC) version 13.1.0 (x86_64-w64-mingw32)]
+        ignore line: [	compiled by GNU C version 13.1.0  GMP version 6.2.1  MPFR version 4.2.0-p4  MPC version 1.3.1  isl version none]
+        ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include"]
+        ignore line: [ignoring nonexistent directory "/win/include"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../include"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed"]
+        ignore line: [ignoring duplicate directory "D:/01app/clion/CLion 2024.2.3/bin/mingw/lib/gcc/../../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include"]
+        ignore line: [ignoring nonexistent directory "/mingw/include"]
+        ignore line: [#include "..." search starts here:]
+        ignore line: [#include <...> search starts here:]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/x86_64-w64-mingw32]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include/c++/backward]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../include]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/include-fixed]
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/include]
+        ignore line: [End of search list.]
+        ignore line: [Compiler executable checksum: e75de627edc3c57e31324b930b15b056]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/']
+        ignore line: [ as -v -o CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj C:\\Users\\DELL\\AppData\\Local\\Temp\\ccoSwt1U.s]
+        ignore line: [GNU assembler version 2.40 (x86_64-w64-mingw32) using BFD version (GNU Binutils) 2.40]
+        ignore line: [COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/]
+        ignore line: [LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../\x0d]
+        ignore line: [COLLECT_GCC_OPTIONS='-fdiagnostics-color=always' '-v' '-o' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.'\x0d]
+        ignore line: [[2/2] C:\\Windows\\system32\\cmd.exe /C "cd . && "D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe"  -v -Wl -v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_c4720.exe -Wl --out-implib libcmTC_c4720.dll.a -Wl --major-image-version 0 --minor-image-version 0   && cd ."]
+        ignore line: [Using built-in specs.]
+        ignore line: [COLLECT_GCC=D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin\\g++.exe]
+        ignore line: [COLLECT_LTO_WRAPPER=D:/01app/clion/CLion\\ 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/lto-wrapper.exe]
+        ignore line: [Target: x86_64-w64-mingw32]
+        ignore line: [Configured with: ../gcc-13.1.0/configure --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --build=x86_64-alpine-linux-musl --prefix=/win --enable-checking=release --enable-fully-dynamic-string --enable-languages=c,c++ --with-arch=nocona --with-tune=generic --enable-libatomic --enable-libgomp --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --enable-seh-exceptions --enable-shared --enable-static --enable-threads=posix --enable-version-specific-runtime-libs --disable-bootstrap --disable-graphite --disable-libada --disable-libstdcxx-pch --disable-libstdcxx-debug --disable-libquadmath --disable-lto --disable-nls --disable-multilib --disable-rpath --disable-symvers --disable-werror --disable-win32-registry --with-gnu-as --with-gnu-ld --with-system-libiconv --with-system-libz --with-gmp=/win/makedepends --with-mpfr=/win/makedepends --with-mpc=/win/makedepends]
+        ignore line: [Thread model: posix]
+        ignore line: [Supported LTO compression algorithms: zlib]
+        ignore line: [gcc version 13.1.0 (GCC) ]
+        ignore line: [COMPILER_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/]
+        ignore line: [LIBRARY_PATH=D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/]
+        ignore line: [D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../]
+        ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_c4720.exe' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_c4720.']
+        ignore line: [ D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../libexec/gcc/x86_64-w64-mingw32/13.1.0/collect2.exe -m i386pep -Bdynamic -o cmTC_c4720.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj --out-implib libcmTC_c4720.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o]
+        ignore line: [collect2 version 13.1.0]
+        ignore line: [D:\\01app\\clion\\CLion 2024.2.3\\bin\\mingw\\bin/ld.exe -m i386pep -Bdynamic -o cmTC_c4720.exe D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtbegin.o -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0 -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib -LD:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../.. -v CMakeFiles/cmTC_c4720.dir/CMakeCXXCompilerABI.cpp.obj --out-implib libcmTC_c4720.dll.a --major-image-version 0 --minor-image-version 0 -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 -liconv -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -lkernel32 D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/../../../../x86_64-w64-mingw32/lib/../lib/default-manifest.o D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/../lib/gcc/x86_64-w64-mingw32/13.1.0/crtend.o]
+        ignore line: [GNU ld (GNU Binutils) 2.40]
+        ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_c4720.exe' '-shared-libgcc' '-mtune=generic' '-march=nocona' '-dumpdir' 'cmTC_c4720.'\x0d]
+        ignore line: []
+        ignore line: []
+        linker tool for 'CXX': D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe
+        implicit libs: []
+        implicit objs: []
+        implicit dirs: []
+        implicit fwks: []
+      
+      
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerABI.cmake:210 (cmake_determine_linker_id)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Running the CXX compiler's linker: "D:/01app/clion/CLion 2024.2.3/bin/mingw/bin/ld.exe" "-v"
+      GNU ld (GNU Binutils) 2.40
+...
+
+---
+events:
+  -
+    kind: "message-v1"
+    backtrace:
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineCompilerId.cmake:1165 (message)"
+      - "D:/01app/clion/CLion 2024.2.3/bin/cmake/win/x64/share/cmake-3.29/Modules/CMakeDetermineASMCompiler.cmake:135 (CMAKE_DETERMINE_COMPILER_ID_VENDOR)"
+      - "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/tools/cmake/project.cmake:505 (__project)"
+      - "CMakeLists.txt:8 (project)"
+    message: |
+      Checking whether the ASM compiler is GNU using "--version" matched "(GNU assembler)|(GCC)|(Free Software Foundation)":
+      gcc.exe (GCC) 13.1.0
+      Copyright (C) 2023 Free Software Foundation, Inc.
+      This is free software; see the source for copying conditions.  There is NO
+      warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+      
+...

+ 38 - 0
cmake-build-debug/CMakeFiles/clion-Debug-log.txt

@@ -0,0 +1,38 @@
+"D:\01app\clion\CLion 2024.2.3\bin\cmake\win\x64\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe" -G Ninja -S E:\01project\01\wire-controller -B E:\01project\01\wire-controller\cmake-build-debug
+-- Building ESP-IDF components for target esp32s3
+-- Checking Python dependencies...
+Python requirements are satisfied.
+Constraint file: D:\01app\ESPIDE\516\Espressif\espidf.constraints.v5.1.txt
+Requirement files:
+ - D:\01app\ESPIDE\516\Espressif\frameworks\esp-idf-v5.1.6\tools\requirements\requirements.core.txt
+Python being checked: D:\01app\ESPIDE\516\Espressif\python_env\idf5.1_py3.11_env\Scripts\python.exe
+NOTICE: 
+Following dependencies have new versions available:
+Dependency "espressif/esp_lcd_touch_gt911": "1.1.2" -> "1.1.3"
+Consider running "idf.py update-dependencies" to update your lock file.
+NOTICE: Processing 10 dependencies:
+NOTICE: [1/10] espressif/cmake_utilities (0.5.3)
+NOTICE: [2/10] espressif/esp-modbus (2.0.2)
+NOTICE: [3/10] espressif/esp_io_expander (1.0.1)
+NOTICE: [4/10] espressif/esp_lcd_panel_io_additions (1.0.1)
+NOTICE: [5/10] espressif/esp_lcd_st7701 (1.1.0)
+NOTICE: [6/10] espressif/esp_lcd_touch (1.1.2)
+NOTICE: [7/10] espressif/esp_lcd_touch_ft5x06 (1.0.7)
+NOTICE: [8/10] espressif/esp_lcd_touch_gt911 (1.1.2)
+NOTICE: [9/10] lvgl/lvgl (9.2.2)
+NOTICE: [10/10] idf (5.1.6)
+-- DEBUG: Use esp-modbus component folder: E:/01project/01/wire-controller/managed_components/espressif__esp-modbus.
+-- Project sdkconfig file E:/01project/01/wire-controller/sdkconfig
+Compiler supported targets: x86_64-w64-mingw32
+
+CMake Error at D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/xtensa/project_include.cmake:18 (message):
+  Internal error, toolchain has not been set correctly by project (or an
+  invalid CMakeCache.txt file has been generated somehow)
+Call Stack (most recent call first):
+  D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/tools/cmake/build.cmake:398 (include)
+  D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/tools/cmake/build.cmake:628 (__build_process_project_includes)
+  D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/tools/cmake/project.cmake:604 (idf_build_process)
+  CMakeLists.txt:8 (project)
+
+
+-- Configuring incomplete, errors occurred!

+ 5 - 0
cmake-build-debug/CMakeFiles/clion-environment.txt

@@ -0,0 +1,5 @@
+ToolSet: 11.0 w64 (local)@D:\01app\clion\CLion 2024.2.3\bin\mingw
+Ninja: 1.12.0@D:\01app\clion\CLion 2024.2.3\bin\ninja\win\x64\ninja.exe
+Options: 
+
+Options:-DCMAKE_MAKE_PROGRAM=D:/01app/clion/CLion 2024.2.3/bin/ninja/win/x64/ninja.exe

+ 1 - 0
cmake-build-debug/CMakeFiles/cmake.check_cache

@@ -0,0 +1 @@
+# This file is generated by cmake for dependency checking of the CMakeCache.txt file

+ 1 - 0
cmake-build-debug/CMakeFiles/git-data/HEAD

@@ -0,0 +1 @@
+7452b1cb1d22cd1b439a6a922548efacea98ee72

+ 50 - 0
cmake-build-debug/CMakeFiles/git-data/grabRef.cmake

@@ -0,0 +1,50 @@
+#
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(HEAD_HASH)
+
+file(READ "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+set(GIT_DIR "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/.git")
+# handle git-worktree
+if(EXISTS "${GIT_DIR}/commondir")
+	file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024)
+	string(STRIP "${GIT_DIR_NEW}" GIT_DIR_NEW)
+	if(NOT IS_ABSOLUTE "${GIT_DIR_NEW}")
+		get_filename_component(GIT_DIR_NEW ${GIT_DIR}/${GIT_DIR_NEW} ABSOLUTE)
+	endif()
+	if(EXISTS "${GIT_DIR_NEW}")
+		set(GIT_DIR "${GIT_DIR_NEW}")
+	endif()
+endif()
+if(HEAD_CONTENTS MATCHES "ref")
+	# named branch
+	string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+	if(EXISTS "${GIT_DIR}/${HEAD_REF}")
+		configure_file("${GIT_DIR}/${HEAD_REF}" "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/git-data/head-ref" COPYONLY)
+	elseif(EXISTS "${GIT_DIR}/logs/${HEAD_REF}")
+		configure_file("${GIT_DIR}/logs/${HEAD_REF}" "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/git-data/head-ref" COPYONLY)
+		set(HEAD_HASH "${HEAD_REF}")
+	endif()
+else()
+	# detached HEAD
+	configure_file("${GIT_DIR}/HEAD" "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/git-data/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+	file(READ "E:/01project/01/wire-controller/cmake-build-debug/CMakeFiles/git-data/head-ref" HEAD_HASH LIMIT 1024)
+	string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()

+ 1 - 0
cmake-build-debug/CMakeFiles/git-data/head-ref

@@ -0,0 +1 @@
+7452b1cb1d22cd1b439a6a922548efacea98ee72

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1 - 0
cmake-build-debug/config.env


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 3407 - 0
cmake-build-debug/config/kconfig_menus.json


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 1557 - 0
cmake-build-debug/config/sdkconfig.cmake


+ 1053 - 0
cmake-build-debug/config/sdkconfig.h

@@ -0,0 +1,1053 @@
+/*
+ * Automatically generated file. DO NOT EDIT.
+ * Espressif IoT Development Framework (ESP-IDF) 5.1.6 Configuration Header
+ */
+#pragma once
+#define CONFIG_SOC_MPU_MIN_REGION_SIZE 0x20000000
+#define CONFIG_SOC_MPU_REGIONS_MAX_NUM 8
+#define CONFIG_SOC_ADC_SUPPORTED 1
+#define CONFIG_SOC_UART_SUPPORTED 1
+#define CONFIG_SOC_PCNT_SUPPORTED 1
+#define CONFIG_SOC_WIFI_SUPPORTED 1
+#define CONFIG_SOC_TWAI_SUPPORTED 1
+#define CONFIG_SOC_GDMA_SUPPORTED 1
+#define CONFIG_SOC_GPTIMER_SUPPORTED 1
+#define CONFIG_SOC_LCDCAM_SUPPORTED 1
+#define CONFIG_SOC_MCPWM_SUPPORTED 1
+#define CONFIG_SOC_DEDICATED_GPIO_SUPPORTED 1
+#define CONFIG_SOC_CACHE_SUPPORT_WRAP 1
+#define CONFIG_SOC_ULP_SUPPORTED 1
+#define CONFIG_SOC_ULP_FSM_SUPPORTED 1
+#define CONFIG_SOC_RISCV_COPROC_SUPPORTED 1
+#define CONFIG_SOC_BT_SUPPORTED 1
+#define CONFIG_SOC_USB_OTG_SUPPORTED 1
+#define CONFIG_SOC_USB_SERIAL_JTAG_SUPPORTED 1
+#define CONFIG_SOC_CCOMP_TIMER_SUPPORTED 1
+#define CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED 1
+#define CONFIG_SOC_SUPPORTS_SECURE_DL_MODE 1
+#define CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD 1
+#define CONFIG_SOC_SDMMC_HOST_SUPPORTED 1
+#define CONFIG_SOC_RTC_FAST_MEM_SUPPORTED 1
+#define CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED 1
+#define CONFIG_SOC_RTC_MEM_SUPPORTED 1
+#define CONFIG_SOC_PSRAM_DMA_CAPABLE 1
+#define CONFIG_SOC_XT_WDT_SUPPORTED 1
+#define CONFIG_SOC_I2S_SUPPORTED 1
+#define CONFIG_SOC_RMT_SUPPORTED 1
+#define CONFIG_SOC_SDM_SUPPORTED 1
+#define CONFIG_SOC_GPSPI_SUPPORTED 1
+#define CONFIG_SOC_LEDC_SUPPORTED 1
+#define CONFIG_SOC_I2C_SUPPORTED 1
+#define CONFIG_SOC_SYSTIMER_SUPPORTED 1
+#define CONFIG_SOC_SUPPORT_COEXISTENCE 1
+#define CONFIG_SOC_TEMP_SENSOR_SUPPORTED 1
+#define CONFIG_SOC_AES_SUPPORTED 1
+#define CONFIG_SOC_MPI_SUPPORTED 1
+#define CONFIG_SOC_SHA_SUPPORTED 1
+#define CONFIG_SOC_HMAC_SUPPORTED 1
+#define CONFIG_SOC_DIG_SIGN_SUPPORTED 1
+#define CONFIG_SOC_FLASH_ENC_SUPPORTED 1
+#define CONFIG_SOC_SECURE_BOOT_SUPPORTED 1
+#define CONFIG_SOC_MEMPROT_SUPPORTED 1
+#define CONFIG_SOC_TOUCH_SENSOR_SUPPORTED 1
+#define CONFIG_SOC_BOD_SUPPORTED 1
+#define CONFIG_SOC_XTAL_SUPPORT_40M 1
+#define CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG 1
+#define CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED 1
+#define CONFIG_SOC_ADC_DIG_CTRL_SUPPORTED 1
+#define CONFIG_SOC_ADC_ARBITER_SUPPORTED 1
+#define CONFIG_SOC_ADC_DIG_IIR_FILTER_SUPPORTED 1
+#define CONFIG_SOC_ADC_MONITOR_SUPPORTED 1
+#define CONFIG_SOC_ADC_DMA_SUPPORTED 1
+#define CONFIG_SOC_ADC_PERIPH_NUM 2
+#define CONFIG_SOC_ADC_MAX_CHANNEL_NUM 10
+#define CONFIG_SOC_ADC_ATTEN_NUM 4
+#define CONFIG_SOC_ADC_DIGI_CONTROLLER_NUM 2
+#define CONFIG_SOC_ADC_PATT_LEN_MAX 24
+#define CONFIG_SOC_ADC_DIGI_MIN_BITWIDTH 12
+#define CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH 12
+#define CONFIG_SOC_ADC_DIGI_RESULT_BYTES 4
+#define CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV 4
+#define CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM 2
+#define CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH 83333
+#define CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW 611
+#define CONFIG_SOC_ADC_RTC_MIN_BITWIDTH 12
+#define CONFIG_SOC_ADC_RTC_MAX_BITWIDTH 12
+#define CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED 1
+#define CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED 1
+#define CONFIG_SOC_APB_BACKUP_DMA 1
+#define CONFIG_SOC_BROWNOUT_RESET_SUPPORTED 1
+#define CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED 1
+#define CONFIG_SOC_CACHE_FREEZE_SUPPORTED 1
+#define CONFIG_SOC_CPU_CORES_NUM 2
+#define CONFIG_SOC_CPU_INTR_NUM 32
+#define CONFIG_SOC_CPU_HAS_FPU 1
+#define CONFIG_SOC_CPU_BREAKPOINTS_NUM 2
+#define CONFIG_SOC_CPU_WATCHPOINTS_NUM 2
+#define CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE 64
+#define CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN 4096
+#define CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH 16
+#define CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US 1100
+#define CONFIG_SOC_GDMA_GROUPS 1
+#define CONFIG_SOC_GDMA_PAIRS_PER_GROUP 5
+#define CONFIG_SOC_GDMA_SUPPORT_PSRAM 1
+#define CONFIG_SOC_GPIO_PORT 1
+#define CONFIG_SOC_GPIO_PIN_COUNT 49
+#define CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER 1
+#define CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB 1
+#define CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT 1
+#define CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD 1
+#define CONFIG_SOC_GPIO_VALID_GPIO_MASK 0x1FFFFFFFFFFFF
+#define CONFIG_SOC_GPIO_IN_RANGE_MAX 48
+#define CONFIG_SOC_GPIO_OUT_RANGE_MAX 48
+#define CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK 0x0001FFFFFC000000
+#define CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM 8
+#define CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM 8
+#define CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE 1
+#define CONFIG_SOC_I2C_NUM 2
+#define CONFIG_SOC_I2C_FIFO_LEN 32
+#define CONFIG_SOC_I2C_CMD_REG_NUM 8
+#define CONFIG_SOC_I2C_SUPPORT_SLAVE 1
+#define CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS 1
+#define CONFIG_SOC_I2C_SUPPORT_XTAL 1
+#define CONFIG_SOC_I2C_SUPPORT_RTC 1
+#define CONFIG_SOC_I2S_NUM 2
+#define CONFIG_SOC_I2S_HW_VERSION_2 1
+#define CONFIG_SOC_I2S_SUPPORTS_XTAL 1
+#define CONFIG_SOC_I2S_SUPPORTS_PLL_F160M 1
+#define CONFIG_SOC_I2S_SUPPORTS_PCM 1
+#define CONFIG_SOC_I2S_SUPPORTS_PDM 1
+#define CONFIG_SOC_I2S_SUPPORTS_PDM_TX 1
+#define CONFIG_SOC_I2S_PDM_MAX_TX_LINES 2
+#define CONFIG_SOC_I2S_SUPPORTS_PDM_RX 1
+#define CONFIG_SOC_I2S_PDM_MAX_RX_LINES 4
+#define CONFIG_SOC_I2S_SUPPORTS_TDM 1
+#define CONFIG_SOC_LEDC_SUPPORT_APB_CLOCK 1
+#define CONFIG_SOC_LEDC_SUPPORT_XTAL_CLOCK 1
+#define CONFIG_SOC_LEDC_CHANNEL_NUM 8
+#define CONFIG_SOC_LEDC_TIMER_BIT_WIDTH 14
+#define CONFIG_SOC_LEDC_SUPPORT_FADE_STOP 1
+#define CONFIG_SOC_MCPWM_GROUPS 2
+#define CONFIG_SOC_MCPWM_TIMERS_PER_GROUP 3
+#define CONFIG_SOC_MCPWM_OPERATORS_PER_GROUP 3
+#define CONFIG_SOC_MCPWM_COMPARATORS_PER_OPERATOR 2
+#define CONFIG_SOC_MCPWM_GENERATORS_PER_OPERATOR 2
+#define CONFIG_SOC_MCPWM_TRIGGERS_PER_OPERATOR 2
+#define CONFIG_SOC_MCPWM_GPIO_FAULTS_PER_GROUP 3
+#define CONFIG_SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP 1
+#define CONFIG_SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER 3
+#define CONFIG_SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP 3
+#define CONFIG_SOC_MCPWM_SWSYNC_CAN_PROPAGATE 1
+#define CONFIG_SOC_MMU_LINEAR_ADDRESS_REGION_NUM 1
+#define CONFIG_SOC_MMU_PERIPH_NUM 1
+#define CONFIG_SOC_PCNT_GROUPS 1
+#define CONFIG_SOC_PCNT_UNITS_PER_GROUP 4
+#define CONFIG_SOC_PCNT_CHANNELS_PER_UNIT 2
+#define CONFIG_SOC_PCNT_THRES_POINT_PER_UNIT 2
+#define CONFIG_SOC_RMT_GROUPS 1
+#define CONFIG_SOC_RMT_TX_CANDIDATES_PER_GROUP 4
+#define CONFIG_SOC_RMT_RX_CANDIDATES_PER_GROUP 4
+#define CONFIG_SOC_RMT_CHANNELS_PER_GROUP 8
+#define CONFIG_SOC_RMT_MEM_WORDS_PER_CHANNEL 48
+#define CONFIG_SOC_RMT_SUPPORT_RX_PINGPONG 1
+#define CONFIG_SOC_RMT_SUPPORT_RX_DEMODULATION 1
+#define CONFIG_SOC_RMT_SUPPORT_TX_ASYNC_STOP 1
+#define CONFIG_SOC_RMT_SUPPORT_TX_LOOP_COUNT 1
+#define CONFIG_SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP 1
+#define CONFIG_SOC_RMT_SUPPORT_TX_SYNCHRO 1
+#define CONFIG_SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY 1
+#define CONFIG_SOC_RMT_SUPPORT_XTAL 1
+#define CONFIG_SOC_RMT_SUPPORT_RC_FAST 1
+#define CONFIG_SOC_RMT_SUPPORT_APB 1
+#define CONFIG_SOC_RMT_SUPPORT_DMA 1
+#define CONFIG_SOC_LCD_I80_SUPPORTED 1
+#define CONFIG_SOC_LCD_RGB_SUPPORTED 1
+#define CONFIG_SOC_LCD_I80_BUSES 1
+#define CONFIG_SOC_LCD_RGB_PANELS 1
+#define CONFIG_SOC_LCD_I80_BUS_WIDTH 16
+#define CONFIG_SOC_LCD_RGB_DATA_WIDTH 16
+#define CONFIG_SOC_LCD_SUPPORT_RGB_YUV_CONV 1
+#define CONFIG_SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH 128
+#define CONFIG_SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM 549
+#define CONFIG_SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH 128
+#define CONFIG_SOC_RTCIO_PIN_COUNT 22
+#define CONFIG_SOC_RTCIO_INPUT_OUTPUT_SUPPORTED 1
+#define CONFIG_SOC_RTCIO_HOLD_SUPPORTED 1
+#define CONFIG_SOC_RTCIO_WAKE_SUPPORTED 1
+#define CONFIG_SOC_SDM_GROUPS 1
+#define CONFIG_SOC_SDM_CHANNELS_PER_GROUP 8
+#define CONFIG_SOC_SDM_CLK_SUPPORT_APB 1
+#define CONFIG_SOC_SPI_PERIPH_NUM 3
+#define CONFIG_SOC_SPI_MAX_CS_NUM 6
+#define CONFIG_SOC_SPI_MAXIMUM_BUFFER_SIZE 64
+#define CONFIG_SOC_SPI_SUPPORT_DDRCLK 1
+#define CONFIG_SOC_SPI_SLAVE_SUPPORT_SEG_TRANS 1
+#define CONFIG_SOC_SPI_SUPPORT_CD_SIG 1
+#define CONFIG_SOC_SPI_SUPPORT_CONTINUOUS_TRANS 1
+#define CONFIG_SOC_SPI_SUPPORT_SLAVE_HD_VER2 1
+#define CONFIG_SOC_SPI_SUPPORT_CLK_APB 1
+#define CONFIG_SOC_SPI_SUPPORT_CLK_XTAL 1
+#define CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT 1
+#define CONFIG_SOC_MEMSPI_IS_INDEPENDENT 1
+#define CONFIG_SOC_SPI_MAX_PRE_DIVIDER 16
+#define CONFIG_SOC_SPI_SUPPORT_OCT 1
+#define CONFIG_SOC_MEMSPI_SRC_FREQ_120M 1
+#define CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED 1
+#define CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED 1
+#define CONFIG_SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED 1
+#define CONFIG_SOC_SPIRAM_SUPPORTED 1
+#define CONFIG_SOC_SPIRAM_XIP_SUPPORTED 1
+#define CONFIG_SOC_SYSTIMER_COUNTER_NUM 2
+#define CONFIG_SOC_SYSTIMER_ALARM_NUM 3
+#define CONFIG_SOC_SYSTIMER_BIT_WIDTH_LO 32
+#define CONFIG_SOC_SYSTIMER_BIT_WIDTH_HI 20
+#define CONFIG_SOC_SYSTIMER_FIXED_DIVIDER 1
+#define CONFIG_SOC_SYSTIMER_INT_LEVEL 1
+#define CONFIG_SOC_SYSTIMER_ALARM_MISS_COMPENSATE 1
+#define CONFIG_SOC_TIMER_GROUPS 2
+#define CONFIG_SOC_TIMER_GROUP_TIMERS_PER_GROUP 2
+#define CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH 54
+#define CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL 1
+#define CONFIG_SOC_TIMER_GROUP_SUPPORT_APB 1
+#define CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS 4
+#define CONFIG_SOC_TOUCH_VERSION_2 1
+#define CONFIG_SOC_TOUCH_SENSOR_NUM 15
+#define CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM 3
+#define CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED 1
+#define CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX 0x1FFFFF
+#define CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX 0xFF
+#define CONFIG_SOC_TWAI_CONTROLLER_NUM 1
+#define CONFIG_SOC_TWAI_CLK_SUPPORT_APB 1
+#define CONFIG_SOC_TWAI_BRP_MIN 2
+#define CONFIG_SOC_TWAI_BRP_MAX 16384
+#define CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS 1
+#define CONFIG_SOC_UART_NUM 3
+#define CONFIG_SOC_UART_FIFO_LEN 128
+#define CONFIG_SOC_UART_BITRATE_MAX 5000000
+#define CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND 1
+#define CONFIG_SOC_UART_SUPPORT_WAKEUP_INT 1
+#define CONFIG_SOC_UART_SUPPORT_APB_CLK 1
+#define CONFIG_SOC_UART_SUPPORT_RTC_CLK 1
+#define CONFIG_SOC_UART_SUPPORT_XTAL_CLK 1
+#define CONFIG_SOC_UART_REQUIRE_CORE_RESET 1
+#define CONFIG_SOC_USB_OTG_PERIPH_NUM 1
+#define CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE 3968
+#define CONFIG_SOC_SHA_SUPPORT_DMA 1
+#define CONFIG_SOC_SHA_SUPPORT_RESUME 1
+#define CONFIG_SOC_SHA_GDMA 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA1 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA224 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA256 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA384 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA512 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA512_224 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA512_256 1
+#define CONFIG_SOC_SHA_SUPPORT_SHA512_T 1
+#define CONFIG_SOC_RSA_MAX_BIT_LEN 4096
+#define CONFIG_SOC_AES_SUPPORT_DMA 1
+#define CONFIG_SOC_AES_GDMA 1
+#define CONFIG_SOC_AES_SUPPORT_AES_128 1
+#define CONFIG_SOC_AES_SUPPORT_AES_256 1
+#define CONFIG_SOC_PM_SUPPORT_EXT0_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_EXT1_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_EXT_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_WIFI_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_BT_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP 1
+#define CONFIG_SOC_PM_SUPPORT_CPU_PD 1
+#define CONFIG_SOC_PM_SUPPORT_TAGMEM_PD 1
+#define CONFIG_SOC_PM_SUPPORT_RTC_PERIPH_PD 1
+#define CONFIG_SOC_PM_SUPPORT_RC_FAST_PD 1
+#define CONFIG_SOC_PM_SUPPORT_VDDSDIO_PD 1
+#define CONFIG_SOC_PM_SUPPORT_MAC_BB_PD 1
+#define CONFIG_SOC_PM_SUPPORT_MODEM_PD 1
+#define CONFIG_SOC_CONFIGURABLE_VDDSDIO_SUPPORTED 1
+#define CONFIG_SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY 1
+#define CONFIG_SOC_PM_CPU_RETENTION_BY_RTCCNTL 1
+#define CONFIG_SOC_PM_MODEM_RETENTION_BY_BACKUPDMA 1
+#define CONFIG_SOC_CLK_RC_FAST_D256_SUPPORTED 1
+#define CONFIG_SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256 1
+#define CONFIG_SOC_CLK_RC_FAST_SUPPORT_CALIBRATION 1
+#define CONFIG_SOC_CLK_XTAL32K_SUPPORTED 1
+#define CONFIG_SOC_EFUSE_DIS_DOWNLOAD_ICACHE 1
+#define CONFIG_SOC_EFUSE_DIS_DOWNLOAD_DCACHE 1
+#define CONFIG_SOC_EFUSE_HARD_DIS_JTAG 1
+#define CONFIG_SOC_EFUSE_DIS_USB_JTAG 1
+#define CONFIG_SOC_EFUSE_SOFT_DIS_JTAG 1
+#define CONFIG_SOC_EFUSE_DIS_DIRECT_BOOT 1
+#define CONFIG_SOC_EFUSE_DIS_ICACHE 1
+#define CONFIG_SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK 1
+#define CONFIG_SOC_SECURE_BOOT_V2_RSA 1
+#define CONFIG_SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS 3
+#define CONFIG_SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS 1
+#define CONFIG_SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY 1
+#define CONFIG_SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX 64
+#define CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES 1
+#define CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS 1
+#define CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_128 1
+#define CONFIG_SOC_FLASH_ENCRYPTION_XTS_AES_256 1
+#define CONFIG_SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE 16
+#define CONFIG_SOC_MEMPROT_MEM_ALIGN_SIZE 256
+#define CONFIG_SOC_PHY_DIG_REGS_MEM_SIZE 21
+#define CONFIG_SOC_MAC_BB_PD_MEM_SIZE 192
+#define CONFIG_SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH 12
+#define CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_TIME_TUNING 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE 1
+#define CONFIG_SOC_SPI_MEM_SUPPORT_WRAP 1
+#define CONFIG_SOC_COEX_HW_PTI 1
+#define CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE 1
+#define CONFIG_SOC_SDMMC_USE_GPIO_MATRIX 1
+#define CONFIG_SOC_SDMMC_NUM_SLOTS 2
+#define CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK 1
+#define CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC 1
+#define CONFIG_SOC_WIFI_HW_TSF 1
+#define CONFIG_SOC_WIFI_FTM_SUPPORT 1
+#define CONFIG_SOC_WIFI_GCMP_SUPPORT 1
+#define CONFIG_SOC_WIFI_WAPI_SUPPORT 1
+#define CONFIG_SOC_WIFI_CSI_SUPPORT 1
+#define CONFIG_SOC_WIFI_MESH_SUPPORT 1
+#define CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW 1
+#define CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND 1
+#define CONFIG_SOC_BLE_SUPPORTED 1
+#define CONFIG_SOC_BLE_MESH_SUPPORTED 1
+#define CONFIG_SOC_BLE_50_SUPPORTED 1
+#define CONFIG_SOC_BLE_DEVICE_PRIVACY_SUPPORTED 1
+#define CONFIG_SOC_BLUFI_SUPPORTED 1
+#define CONFIG_SOC_ULP_HAS_ADC 1
+#define CONFIG_SOC_PHY_COMBO_MODULE 1
+#define CONFIG_IDF_CMAKE 1
+#define CONFIG_IDF_TARGET_ARCH_XTENSA 1
+#define CONFIG_IDF_TARGET_ARCH "xtensa"
+#define CONFIG_IDF_TARGET "esp32s3"
+#define CONFIG_IDF_TARGET_ESP32S3 1
+#define CONFIG_IDF_FIRMWARE_CHIP_ID 0x0009
+#define CONFIG_APP_BUILD_TYPE_APP_2NDBOOT 1
+#define CONFIG_APP_BUILD_GENERATE_BINARIES 1
+#define CONFIG_APP_BUILD_BOOTLOADER 1
+#define CONFIG_APP_BUILD_USE_FLASH_SECTIONS 1
+#define CONFIG_BOOTLOADER_OFFSET_IN_FLASH 0x0
+#define CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE 1
+#define CONFIG_BOOTLOADER_LOG_LEVEL_INFO 1
+#define CONFIG_BOOTLOADER_LOG_LEVEL 3
+#define CONFIG_BOOTLOADER_FLASH_XMC_SUPPORT 1
+#define CONFIG_BOOTLOADER_VDDSDIO_BOOST_1_9V 1
+#define CONFIG_BOOTLOADER_REGION_PROTECTION_ENABLE 1
+#define CONFIG_BOOTLOADER_WDT_ENABLE 1
+#define CONFIG_BOOTLOADER_WDT_TIME_MS 9000
+#define CONFIG_BOOTLOADER_RESERVE_RTC_SIZE 0x0
+#define CONFIG_SECURE_BOOT_V2_RSA_SUPPORTED 1
+#define CONFIG_SECURE_BOOT_V2_PREFERRED 1
+#define CONFIG_SECURE_ROM_DL_MODE_ENABLED 1
+#define CONFIG_APP_COMPILE_TIME_DATE 1
+#define CONFIG_APP_RETRIEVE_LEN_ELF_SHA 9
+#define CONFIG_ESP_ROM_HAS_CRC_LE 1
+#define CONFIG_ESP_ROM_HAS_CRC_BE 1
+#define CONFIG_ESP_ROM_HAS_MZ_CRC32 1
+#define CONFIG_ESP_ROM_HAS_JPEG_DECODE 1
+#define CONFIG_ESP_ROM_UART_CLK_IS_XTAL 1
+#define CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING 1
+#define CONFIG_ESP_ROM_USB_OTG_NUM 3
+#define CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM 4
+#define CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG 1
+#define CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV 1
+#define CONFIG_ESP_ROM_GET_CLK_FREQ 1
+#define CONFIG_ESP_ROM_HAS_HAL_WDT 1
+#define CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND 1
+#define CONFIG_ESP_ROM_HAS_LAYOUT_TABLE 1
+#define CONFIG_ESP_ROM_HAS_SPI_FLASH 1
+#define CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG 1
+#define CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT 1
+#define CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE 1
+#define CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT 1
+#define CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG 1
+#define CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG 1
+#define CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG 1
+#define CONFIG_BOOT_ROM_LOG_ALWAYS_ON 1
+#define CONFIG_ESPTOOLPY_FLASH_MODE_AUTO_DETECT 1
+#define CONFIG_ESPTOOLPY_FLASHMODE_DIO 1
+#define CONFIG_ESPTOOLPY_FLASH_SAMPLE_MODE_STR 1
+#define CONFIG_ESPTOOLPY_FLASHMODE "dio"
+#define CONFIG_ESPTOOLPY_FLASHFREQ_120M 1
+#define CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT 1
+#define CONFIG_ESPTOOLPY_FLASHFREQ "80m"
+#define CONFIG_ESPTOOLPY_FLASHSIZE_16MB 1
+#define CONFIG_ESPTOOLPY_FLASHSIZE "16MB"
+#define CONFIG_ESPTOOLPY_BEFORE_RESET 1
+#define CONFIG_ESPTOOLPY_BEFORE "default_reset"
+#define CONFIG_ESPTOOLPY_AFTER_RESET 1
+#define CONFIG_ESPTOOLPY_AFTER "hard_reset"
+#define CONFIG_ESPTOOLPY_MONITOR_BAUD 115200
+#define CONFIG_PARTITION_TABLE_CUSTOM 1
+#define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv"
+#define CONFIG_PARTITION_TABLE_FILENAME "partitions.csv"
+#define CONFIG_PARTITION_TABLE_OFFSET 0x8000
+#define CONFIG_PARTITION_TABLE_MD5 1
+#define CONFIG_COMPILER_OPTIMIZATION_PERF 1
+#define CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE 1
+#define CONFIG_COMPILER_FLOAT_LIB_FROM_GCCLIB 1
+#define CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL 2
+#define CONFIG_COMPILER_HIDE_PATHS_MACROS 1
+#define CONFIG_COMPILER_STACK_CHECK_MODE_NONE 1
+#define CONFIG_APPTRACE_DEST_NONE 1
+#define CONFIG_APPTRACE_DEST_UART_NONE 1
+#define CONFIG_APPTRACE_UART_TASK_PRIO 1
+#define CONFIG_APPTRACE_LOCK_ENABLE 1
+#define CONFIG_BT_ALARM_MAX_NUM 50
+#define CONFIG_SPI_MASTER_ISR_IN_IRAM 1
+#define CONFIG_SPI_SLAVE_ISR_IN_IRAM 1
+#define CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM 1
+#define CONFIG_UART_ISR_IN_IRAM 1
+#define CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM 1
+#define CONFIG_EFUSE_MAX_BLK_LEN 256
+#define CONFIG_ESP_TLS_USING_MBEDTLS 1
+#define CONFIG_ESP_TLS_USE_DS_PERIPHERAL 1
+#define CONFIG_ADC_CONTINUOUS_ISR_IRAM_SAFE 1
+#define CONFIG_ESP_ERR_TO_NAME_LOOKUP 1
+#define CONFIG_ETH_ENABLED 1
+#define CONFIG_ETH_USE_SPI_ETHERNET 1
+#define CONFIG_ESP_EVENT_POST_FROM_ISR 1
+#define CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR 1
+#define CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS 1
+#define CONFIG_HTTPD_MAX_REQ_HDR_LEN 512
+#define CONFIG_HTTPD_MAX_URI_LEN 512
+#define CONFIG_HTTPD_ERR_RESP_NO_DELAY 1
+#define CONFIG_HTTPD_PURGE_BUF_LEN 32
+#define CONFIG_ESP32S3_REV_MIN_0 1
+#define CONFIG_ESP32S3_REV_MIN_FULL 0
+#define CONFIG_ESP_REV_MIN_FULL 0
+#define CONFIG_ESP32S3_REV_MAX_FULL 99
+#define CONFIG_ESP_REV_MAX_FULL 99
+#define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_STA 1
+#define CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP 1
+#define CONFIG_ESP_MAC_ADDR_UNIVERSE_BT 1
+#define CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH 1
+#define CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR 1
+#define CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR 1
+#define CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES 4
+#define CONFIG_ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND 1
+#define CONFIG_ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND 1
+#define CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU 1
+#define CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND 1
+#define CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND 1
+#define CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY 2000
+#define CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS 1
+#define CONFIG_RTC_CLK_SRC_INT_RC 1
+#define CONFIG_RTC_CLK_CAL_CYCLES 1024
+#define CONFIG_PERIPH_CTRL_FUNC_IN_IRAM 1
+#define CONFIG_GDMA_CTRL_FUNC_IN_IRAM 1
+#define CONFIG_GDMA_ISR_IRAM_SAFE 1
+#define CONFIG_XTAL_FREQ_40 1
+#define CONFIG_XTAL_FREQ 40
+#define CONFIG_LCD_PANEL_IO_FORMAT_BUF_SIZE 32
+#define CONFIG_ESP_NETIF_IP_LOST_TIMER_INTERVAL 120
+#define CONFIG_ESP_NETIF_TCPIP_LWIP 1
+#define CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API 1
+#define CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE 1
+#define CONFIG_ESP_PHY_MAX_WIFI_TX_POWER 20
+#define CONFIG_ESP_PHY_MAX_TX_POWER 20
+#define CONFIG_ESP_PHY_ENABLE_USB 1
+#define CONFIG_ESP_PHY_RF_CAL_PARTIAL 1
+#define CONFIG_ESP_PHY_CALIBRATION_MODE 0
+#define CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP 1
+#define CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP 1
+#define CONFIG_SPIRAM 1
+#define CONFIG_SPIRAM_MODE_OCT 1
+#define CONFIG_SPIRAM_TYPE_AUTO 1
+#define CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY 1
+#define CONFIG_SPIRAM_CLK_IO 30
+#define CONFIG_SPIRAM_CS_IO 26
+#define CONFIG_SPIRAM_FETCH_INSTRUCTIONS 1
+#define CONFIG_SPIRAM_RODATA 1
+#define CONFIG_SPIRAM_SPEED_120M 1
+#define CONFIG_SPIRAM_SPEED 120
+#define CONFIG_SPIRAM_BOOT_INIT 1
+#define CONFIG_SPIRAM_USE_MALLOC 1
+#define CONFIG_SPIRAM_MEMTEST 1
+#define CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL 16384
+#define CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP 1
+#define CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL 32768
+#define CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240 1
+#define CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ 240
+#define CONFIG_ESP32S3_INSTRUCTION_CACHE_16KB 1
+#define CONFIG_ESP32S3_INSTRUCTION_CACHE_SIZE 0x4000
+#define CONFIG_ESP32S3_INSTRUCTION_CACHE_8WAYS 1
+#define CONFIG_ESP32S3_ICACHE_ASSOCIATED_WAYS 8
+#define CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_32B 1
+#define CONFIG_ESP32S3_INSTRUCTION_CACHE_LINE_SIZE 32
+#define CONFIG_ESP32S3_DATA_CACHE_32KB 1
+#define CONFIG_ESP32S3_DATA_CACHE_SIZE 0x8000
+#define CONFIG_ESP32S3_DATA_CACHE_8WAYS 1
+#define CONFIG_ESP32S3_DCACHE_ASSOCIATED_WAYS 8
+#define CONFIG_ESP32S3_DATA_CACHE_LINE_64B 1
+#define CONFIG_ESP32S3_DATA_CACHE_LINE_SIZE 64
+#define CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM 0x0
+#define CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT 1
+#define CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS 0
+#define CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK 1
+#define CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP 1
+#define CONFIG_ESP_SYSTEM_MEMPROT_FEATURE 1
+#define CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK 1
+#define CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE 32
+#define CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE 2304
+#define CONFIG_ESP_MAIN_TASK_STACK_SIZE 3584
+#define CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0 1
+#define CONFIG_ESP_MAIN_TASK_AFFINITY 0x0
+#define CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE 2048
+#define CONFIG_ESP_CONSOLE_UART_DEFAULT 1
+#define CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG 1
+#define CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED 1
+#define CONFIG_ESP_CONSOLE_UART 1
+#define CONFIG_ESP_CONSOLE_MULTIPLE_UART 1
+#define CONFIG_ESP_CONSOLE_UART_NUM 0
+#define CONFIG_ESP_CONSOLE_UART_BAUDRATE 115200
+#define CONFIG_ESP_INT_WDT 1
+#define CONFIG_ESP_INT_WDT_TIMEOUT_MS 300
+#define CONFIG_ESP_INT_WDT_CHECK_CPU1 1
+#define CONFIG_ESP_TASK_WDT_EN 1
+#define CONFIG_ESP_TASK_WDT_INIT 1
+#define CONFIG_ESP_TASK_WDT_TIMEOUT_S 5
+#define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0 1
+#define CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1 1
+#define CONFIG_ESP_DEBUG_OCDAWARE 1
+#define CONFIG_ESP_SYSTEM_CHECK_INT_LEVEL_4 1
+#define CONFIG_ESP_BROWNOUT_DET 1
+#define CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7 1
+#define CONFIG_ESP_BROWNOUT_DET_LVL 7
+#define CONFIG_ESP_SYSTEM_BROWNOUT_INTR 1
+#define CONFIG_ESP_SYSTEM_BBPLL_RECALIB 1
+#define CONFIG_ESP_IPC_TASK_STACK_SIZE 1280
+#define CONFIG_ESP_IPC_USES_CALLERS_PRIORITY 1
+#define CONFIG_ESP_IPC_ISR_ENABLE 1
+#define CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER 1
+#define CONFIG_ESP_TIME_FUNCS_USE_ESP_TIMER 1
+#define CONFIG_ESP_TIMER_TASK_STACK_SIZE 3584
+#define CONFIG_ESP_TIMER_INTERRUPT_LEVEL 1
+#define CONFIG_ESP_TIMER_TASK_AFFINITY 0x0
+#define CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0 1
+#define CONFIG_ESP_TIMER_ISR_AFFINITY 0x1
+#define CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0 1
+#define CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD 1
+#define CONFIG_ESP_TIMER_IMPL_SYSTIMER 1
+#define CONFIG_ESP_WIFI_ENABLED 1
+#define CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM 10
+#define CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM 32
+#define CONFIG_ESP_WIFI_STATIC_TX_BUFFER 1
+#define CONFIG_ESP_WIFI_TX_BUFFER_TYPE 0
+#define CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM 16
+#define CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM 32
+#define CONFIG_ESP_WIFI_STATIC_RX_MGMT_BUFFER 1
+#define CONFIG_ESP_WIFI_DYNAMIC_RX_MGMT_BUF 0
+#define CONFIG_ESP_WIFI_RX_MGMT_BUF_NUM_DEF 5
+#define CONFIG_ESP_WIFI_AMPDU_TX_ENABLED 1
+#define CONFIG_ESP_WIFI_TX_BA_WIN 6
+#define CONFIG_ESP_WIFI_AMPDU_RX_ENABLED 1
+#define CONFIG_ESP_WIFI_RX_BA_WIN 6
+#define CONFIG_ESP_WIFI_NVS_ENABLED 1
+#define CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0 1
+#define CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN 752
+#define CONFIG_ESP_WIFI_MGMT_SBUF_NUM 32
+#define CONFIG_ESP_WIFI_IRAM_OPT 1
+#define CONFIG_ESP_WIFI_RX_IRAM_OPT 1
+#define CONFIG_ESP_WIFI_ENABLE_WPA3_SAE 1
+#define CONFIG_ESP_WIFI_ENABLE_SAE_PK 1
+#define CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT 1
+#define CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA 1
+#define CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME 50
+#define CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME 10
+#define CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME 15
+#define CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE 1
+#define CONFIG_ESP_WIFI_GMAC_SUPPORT 1
+#define CONFIG_ESP_WIFI_SOFTAP_SUPPORT 1
+#define CONFIG_ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM 7
+#define CONFIG_ESP_WIFI_MBEDTLS_CRYPTO 1
+#define CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT 1
+#define CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT 1
+#define CONFIG_ESP_COREDUMP_ENABLE_TO_NONE 1
+#define CONFIG_FATFS_VOLUME_COUNT 2
+#define CONFIG_FATFS_LFN_NONE 1
+#define CONFIG_FATFS_SECTOR_4096 1
+#define CONFIG_FATFS_CODEPAGE_437 1
+#define CONFIG_FATFS_CODEPAGE 437
+#define CONFIG_FATFS_FS_LOCK 0
+#define CONFIG_FATFS_TIMEOUT_MS 10000
+#define CONFIG_FATFS_PER_FILE_CACHE 1
+#define CONFIG_FATFS_ALLOC_PREFER_EXTRAM 1
+#define CONFIG_FATFS_VFS_FSTAT_BLKSIZE 0
+#define CONFIG_FREERTOS_HZ 1000
+#define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY 1
+#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 1
+#define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1536
+#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16
+#define CONFIG_FREERTOS_TIMER_TASK_PRIORITY 1
+#define CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH 2048
+#define CONFIG_FREERTOS_TIMER_QUEUE_LENGTH 10
+#define CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE 0
+#define CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES 1
+#define CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS 1
+#define CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER 1
+#define CONFIG_FREERTOS_ISR_STACKSIZE 1536
+#define CONFIG_FREERTOS_INTERRUPT_BACKTRACE 1
+#define CONFIG_FREERTOS_TICK_SUPPORT_SYSTIMER 1
+#define CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1 1
+#define CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER 1
+#define CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH 1
+#define CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT 1
+#define CONFIG_FREERTOS_NO_AFFINITY 0x7FFFFFFF
+#define CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION 1
+#define CONFIG_FREERTOS_DEBUG_OCDAWARE 1
+#define CONFIG_HAL_ASSERTION_EQUALS_SYSTEM 1
+#define CONFIG_HAL_DEFAULT_ASSERTION_LEVEL 2
+#define CONFIG_HAL_WDT_USE_ROM_IMPL 1
+#define CONFIG_HAL_SPI_MASTER_FUNC_IN_IRAM 1
+#define CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM 1
+#define CONFIG_HEAP_POISONING_DISABLED 1
+#define CONFIG_HEAP_TRACING_OFF 1
+#define CONFIG_LOG_DEFAULT_LEVEL_INFO 1
+#define CONFIG_LOG_DEFAULT_LEVEL 3
+#define CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE 1
+#define CONFIG_LOG_MAXIMUM_LEVEL 5
+#define CONFIG_LOG_COLORS 1
+#define CONFIG_LOG_TIMESTAMP_SOURCE_RTOS 1
+#define CONFIG_LWIP_LOCAL_HOSTNAME "espressif"
+#define CONFIG_LWIP_TCPIP_TASK_PRIO 18
+#define CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES 1
+#define CONFIG_LWIP_TIMERS_ONDEMAND 1
+#define CONFIG_LWIP_ND6 1
+#define CONFIG_LWIP_MAX_SOCKETS 10
+#define CONFIG_LWIP_SO_REUSE 1
+#define CONFIG_LWIP_SO_REUSE_RXTOALL 1
+#define CONFIG_LWIP_IP_DEFAULT_TTL 64
+#define CONFIG_LWIP_IP4_FRAG 1
+#define CONFIG_LWIP_IP6_FRAG 1
+#define CONFIG_LWIP_IP_REASS_MAX_PBUFS 10
+#define CONFIG_LWIP_ESP_GRATUITOUS_ARP 1
+#define CONFIG_LWIP_GARP_TMR_INTERVAL 60
+#define CONFIG_LWIP_ESP_MLDV6_REPORT 1
+#define CONFIG_LWIP_MLDV6_TMR_INTERVAL 40
+#define CONFIG_LWIP_TCPIP_RECVMBOX_SIZE 32
+#define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1
+#define CONFIG_LWIP_DHCP_DISABLE_VENDOR_CLASS_ID 1
+#define CONFIG_LWIP_DHCP_OPTIONS_LEN 68
+#define CONFIG_LWIP_NUM_NETIF_CLIENT_DATA 0
+#define CONFIG_LWIP_DHCP_COARSE_TIMER_SECS 1
+#define CONFIG_LWIP_DHCPS 1
+#define CONFIG_LWIP_DHCPS_LEASE_UNIT 60
+#define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8
+#define CONFIG_LWIP_IPV4 1
+#define CONFIG_LWIP_IPV6 1
+#define CONFIG_LWIP_IPV6_NUM_ADDRESSES 3
+#define CONFIG_LWIP_NETIF_LOOPBACK 1
+#define CONFIG_LWIP_LOOPBACK_MAX_PBUFS 8
+#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
+#define CONFIG_LWIP_MAX_LISTENING_TCP 16
+#define CONFIG_LWIP_TCP_HIGH_SPEED_RETRANSMISSION 1
+#define CONFIG_LWIP_TCP_MAXRTX 12
+#define CONFIG_LWIP_TCP_SYNMAXRTX 12
+#define CONFIG_LWIP_TCP_MSS 1440
+#define CONFIG_LWIP_TCP_TMR_INTERVAL 250
+#define CONFIG_LWIP_TCP_MSL 60000
+#define CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT 20000
+#define CONFIG_LWIP_TCP_SND_BUF_DEFAULT 5760
+#define CONFIG_LWIP_TCP_WND_DEFAULT 5760
+#define CONFIG_LWIP_TCP_RECVMBOX_SIZE 6
+#define CONFIG_LWIP_TCP_QUEUE_OOSEQ 1
+#define CONFIG_LWIP_TCP_OOSEQ_TIMEOUT 6
+#define CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS 4
+#define CONFIG_LWIP_TCP_OVERSIZE_MSS 1
+#define CONFIG_LWIP_TCP_RTO_TIME 1500
+#define CONFIG_LWIP_MAX_UDP_PCBS 16
+#define CONFIG_LWIP_UDP_RECVMBOX_SIZE 6
+#define CONFIG_LWIP_CHECKSUM_CHECK_ICMP 1
+#define CONFIG_LWIP_TCPIP_TASK_STACK_SIZE 3072
+#define CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY 1
+#define CONFIG_LWIP_TCPIP_TASK_AFFINITY 0x7FFFFFFF
+#define CONFIG_LWIP_IPV6_ND6_NUM_PREFIXES 5
+#define CONFIG_LWIP_IPV6_ND6_NUM_ROUTERS 3
+#define CONFIG_LWIP_IPV6_ND6_NUM_DESTINATIONS 10
+#define CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE 3
+#define CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS 5
+#define CONFIG_LWIP_ICMP 1
+#define CONFIG_LWIP_MAX_RAW_PCBS 16
+#define CONFIG_LWIP_SNTP_MAX_SERVERS 1
+#define CONFIG_LWIP_SNTP_UPDATE_DELAY 3600000
+#define CONFIG_LWIP_DNS_MAX_SERVERS 3
+#define CONFIG_LWIP_BRIDGEIF_MAX_PORTS 7
+#define CONFIG_LWIP_ESP_LWIP_ASSERT 1
+#define CONFIG_LWIP_HOOK_TCP_ISN_DEFAULT 1
+#define CONFIG_LWIP_HOOK_IP6_ROUTE_NONE 1
+#define CONFIG_LWIP_HOOK_ND6_GET_GW_NONE 1
+#define CONFIG_LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE 1
+#define CONFIG_LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE 1
+#define CONFIG_LWIP_HOOK_DNS_EXT_RESOLVE_NONE 1
+#define CONFIG_LWIP_HOOK_IP6_INPUT_NONE 1
+#define CONFIG_MBEDTLS_INTERNAL_MEM_ALLOC 1
+#define CONFIG_MBEDTLS_ASYMMETRIC_CONTENT_LEN 1
+#define CONFIG_MBEDTLS_SSL_IN_CONTENT_LEN 16384
+#define CONFIG_MBEDTLS_SSL_OUT_CONTENT_LEN 4096
+#define CONFIG_MBEDTLS_SSL_KEEP_PEER_CERTIFICATE 1
+#define CONFIG_MBEDTLS_PKCS7_C 1
+#define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE 1
+#define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL 1
+#define CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS 200
+#define CONFIG_MBEDTLS_CMAC_C 1
+#define CONFIG_MBEDTLS_HARDWARE_AES 1
+#define CONFIG_MBEDTLS_AES_USE_INTERRUPT 1
+#define CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER 1
+#define CONFIG_MBEDTLS_HARDWARE_MPI 1
+#define CONFIG_MBEDTLS_MPI_USE_INTERRUPT 1
+#define CONFIG_MBEDTLS_HARDWARE_SHA 1
+#define CONFIG_MBEDTLS_ROM_MD5 1
+#define CONFIG_MBEDTLS_HAVE_TIME 1
+#define CONFIG_MBEDTLS_ECDSA_DETERMINISTIC 1
+#define CONFIG_MBEDTLS_SHA512_C 1
+#define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1
+#define CONFIG_MBEDTLS_TLS_SERVER 1
+#define CONFIG_MBEDTLS_TLS_CLIENT 1
+#define CONFIG_MBEDTLS_TLS_ENABLED 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1
+#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1
+#define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1
+#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1
+#define CONFIG_MBEDTLS_SSL_ALPN 1
+#define CONFIG_MBEDTLS_CLIENT_SSL_SESSION_TICKETS 1
+#define CONFIG_MBEDTLS_SERVER_SSL_SESSION_TICKETS 1
+#define CONFIG_MBEDTLS_AES_C 1
+#define CONFIG_MBEDTLS_CCM_C 1
+#define CONFIG_MBEDTLS_GCM_C 1
+#define CONFIG_MBEDTLS_PEM_PARSE_C 1
+#define CONFIG_MBEDTLS_PEM_WRITE_C 1
+#define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1
+#define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1
+#define CONFIG_MBEDTLS_ECP_C 1
+#define CONFIG_MBEDTLS_ECDH_C 1
+#define CONFIG_MBEDTLS_ECDSA_C 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1
+#define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1
+#define CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM 1
+#define CONFIG_MBEDTLS_ERROR_STRINGS 1
+#define CONFIG_MQTT_PROTOCOL_311 1
+#define CONFIG_MQTT_TRANSPORT_SSL 1
+#define CONFIG_MQTT_TRANSPORT_WEBSOCKET 1
+#define CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE 1
+#define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1
+#define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1
+#define CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT 1
+#define CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0 1
+#define CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1 1
+#define CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2 1
+#define CONFIG_PTHREAD_TASK_PRIO_DEFAULT 5
+#define CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT 3072
+#define CONFIG_PTHREAD_STACK_MIN 768
+#define CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY 1
+#define CONFIG_PTHREAD_TASK_CORE_DEFAULT -1
+#define CONFIG_PTHREAD_TASK_NAME_DEFAULT "pthread"
+#define CONFIG_MMU_PAGE_SIZE_64KB 1
+#define CONFIG_MMU_PAGE_MODE "64KB"
+#define CONFIG_MMU_PAGE_SIZE 0x10000
+#define CONFIG_SPI_FLASH_BROWNOUT_RESET_XMC 1
+#define CONFIG_SPI_FLASH_BROWNOUT_RESET 1
+#define CONFIG_SPI_FLASH_UNDER_HIGH_FREQ 1
+#define CONFIG_SPI_FLASH_HPM_AUTO 1
+#define CONFIG_SPI_FLASH_HPM_ON 1
+#define CONFIG_SPI_FLASH_HPM_DC_AUTO 1
+#define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1
+#define CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS 1
+#define CONFIG_SPI_FLASH_YIELD_DURING_ERASE 1
+#define CONFIG_SPI_FLASH_ERASE_YIELD_DURATION_MS 20
+#define CONFIG_SPI_FLASH_ERASE_YIELD_TICKS 1
+#define CONFIG_SPI_FLASH_WRITE_CHUNK_SIZE 8192
+#define CONFIG_SPI_FLASH_VENDOR_XMC_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_GD_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_ISSI_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_MXIC_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_WINBOND_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_BOYA_SUPPORTED 1
+#define CONFIG_SPI_FLASH_VENDOR_TH_SUPPORTED 1
+#define CONFIG_SPI_FLASH_SUPPORT_ISSI_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_MXIC_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_GD_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_WINBOND_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_BOYA_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_TH_CHIP 1
+#define CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP 1
+#define CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE 1
+#define CONFIG_SPIFFS_MAX_PARTITIONS 3
+#define CONFIG_SPIFFS_CACHE 1
+#define CONFIG_SPIFFS_CACHE_WR 1
+#define CONFIG_SPIFFS_PAGE_CHECK 1
+#define CONFIG_SPIFFS_GC_MAX_RUNS 10
+#define CONFIG_SPIFFS_PAGE_SIZE 256
+#define CONFIG_SPIFFS_OBJ_NAME_LEN 32
+#define CONFIG_SPIFFS_USE_MAGIC 1
+#define CONFIG_SPIFFS_USE_MAGIC_LENGTH 1
+#define CONFIG_SPIFFS_META_LENGTH 4
+#define CONFIG_SPIFFS_USE_MTIME 1
+#define CONFIG_WS_TRANSPORT 1
+#define CONFIG_WS_BUFFER_SIZE 1024
+#define CONFIG_UNITY_ENABLE_FLOAT 1
+#define CONFIG_UNITY_ENABLE_DOUBLE 1
+#define CONFIG_UNITY_ENABLE_IDF_TEST_RUNNER 1
+#define CONFIG_USB_HOST_CONTROL_TRANSFER_MAX_SIZE 256
+#define CONFIG_USB_HOST_HW_BUFFER_BIAS_BALANCED 1
+#define CONFIG_USB_HOST_DEBOUNCE_DELAY_MS 250
+#define CONFIG_USB_HOST_RESET_HOLD_MS 30
+#define CONFIG_USB_HOST_RESET_RECOVERY_MS 30
+#define CONFIG_USB_HOST_SET_ADDR_RECOVERY_MS 10
+#define CONFIG_USB_OTG_SUPPORTED 1
+#define CONFIG_VFS_SUPPORT_IO 1
+#define CONFIG_VFS_SUPPORT_DIR 1
+#define CONFIG_VFS_SUPPORT_SELECT 1
+#define CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT 1
+#define CONFIG_VFS_SELECT_IN_RAM 1
+#define CONFIG_VFS_SUPPORT_TERMIOS 1
+#define CONFIG_VFS_MAX_COUNT 8
+#define CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS 1
+#define CONFIG_WL_SECTOR_SIZE_4096 1
+#define CONFIG_WL_SECTOR_SIZE 4096
+#define CONFIG_WIFI_PROV_SCAN_MAX_ENTRIES 16
+#define CONFIG_WIFI_PROV_AUTOSTOP_TIMEOUT 30
+#define CONFIG_WIFI_PROV_STA_ALL_CHANNEL_SCAN 1
+#define CONFIG_CU_DIAGNOSTICS_COLOR_ALWAYS 1
+#define CONFIG_FMB_COMM_MODE_RTU_EN 1
+#define CONFIG_FMB_MASTER_TIMEOUT_MS_RESPOND 500
+#define CONFIG_FMB_MASTER_DELAY_MS_CONVERT 500
+#define CONFIG_FMB_QUEUE_LENGTH 20
+#define CONFIG_FMB_PORT_TASK_STACK_SIZE 6144
+#define CONFIG_FMB_BUFFER_SIZE 260
+#define CONFIG_FMB_PORT_TASK_PRIO 20
+#define CONFIG_FMB_PORT_TASK_AFFINITY_CPU1 1
+#define CONFIG_FMB_PORT_TASK_AFFINITY 0x1
+#define CONFIG_FMB_CONTROLLER_NOTIFY_TIMEOUT 20
+#define CONFIG_FMB_CONTROLLER_NOTIFY_QUEUE_SIZE 20
+#define CONFIG_FMB_CONTROLLER_STACK_SIZE 6144
+#define CONFIG_FMB_EVENT_QUEUE_TIMEOUT 20
+#define CONFIG_ESP_LCD_TOUCH_MAX_POINTS 5
+#define CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS 1
+#define CONFIG_LV_CONF_SKIP 1
+#define CONFIG_LV_COLOR_DEPTH_16 1
+#define CONFIG_LV_COLOR_DEPTH 16
+#define CONFIG_LV_USE_BUILTIN_MALLOC 1
+#define CONFIG_LV_USE_BUILTIN_STRING 1
+#define CONFIG_LV_USE_BUILTIN_SPRINTF 1
+#define CONFIG_LV_MEM_SIZE_KILOBYTES 128
+#define CONFIG_LV_MEM_POOL_EXPAND_SIZE_KILOBYTES 0
+#define CONFIG_LV_MEM_ADR 0x0
+#define CONFIG_LV_DEF_REFR_PERIOD 10
+#define CONFIG_LV_DPI_DEF 130
+#define CONFIG_LV_OS_NONE 1
+#define CONFIG_LV_USE_OS 0
+#define CONFIG_LV_DRAW_BUF_STRIDE_ALIGN 1
+#define CONFIG_LV_DRAW_BUF_ALIGN 4
+#define CONFIG_LV_DRAW_LAYER_SIMPLE_BUF_SIZE 24576
+#define CONFIG_LV_USE_DRAW_SW 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_RGB565 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_RGB565A8 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_RGB888 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_XRGB8888 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_ARGB8888 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_L8 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_AL88 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_A8 1
+#define CONFIG_LV_DRAW_SW_SUPPORT_I1 1
+#define CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT 1
+#define CONFIG_LV_DRAW_SW_COMPLEX 1
+#define CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE 0
+#define CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE 4
+#define CONFIG_LV_DRAW_SW_ASM_NONE 1
+#define CONFIG_LV_USE_DRAW_SW_ASM 0
+#define CONFIG_LV_USE_ASSERT_NULL 1
+#define CONFIG_LV_USE_ASSERT_MALLOC 1
+#define CONFIG_LV_ASSERT_HANDLER_INCLUDE "assert.h"
+#define CONFIG_LV_CACHE_DEF_SIZE 0
+#define CONFIG_LV_IMAGE_HEADER_CACHE_DEF_CNT 0
+#define CONFIG_LV_GRADIENT_MAX_STOPS 2
+#define CONFIG_LV_COLOR_MIX_ROUND_OFS 128
+#define CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE 1
+#define CONFIG_LV_FONT_MONTSERRAT_14 1
+#define CONFIG_LV_FONT_MONTSERRAT_22 1
+#define CONFIG_LV_FONT_MONTSERRAT_32 1
+#define CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14 1
+#define CONFIG_LV_USE_FONT_PLACEHOLDER 1
+#define CONFIG_LV_TXT_ENC_UTF8 1
+#define CONFIG_LV_TXT_BREAK_CHARS " ,.;:-_)}"
+#define CONFIG_LV_TXT_LINE_BREAK_LONG_LEN 0
+#define CONFIG_LV_WIDGETS_HAS_DEFAULT_VALUE 1
+#define CONFIG_LV_USE_ANIMIMG 1
+#define CONFIG_LV_USE_ARC 1
+#define CONFIG_LV_USE_BAR 1
+#define CONFIG_LV_USE_BUTTON 1
+#define CONFIG_LV_USE_BUTTONMATRIX 1
+#define CONFIG_LV_USE_CALENDAR 1
+#define CONFIG_LV_USE_CALENDAR_HEADER_ARROW 1
+#define CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN 1
+#define CONFIG_LV_USE_CANVAS 1
+#define CONFIG_LV_USE_CHART 1
+#define CONFIG_LV_USE_CHECKBOX 1
+#define CONFIG_LV_USE_DROPDOWN 1
+#define CONFIG_LV_USE_IMAGE 1
+#define CONFIG_LV_USE_IMAGEBUTTON 1
+#define CONFIG_LV_USE_KEYBOARD 1
+#define CONFIG_LV_USE_LABEL 1
+#define CONFIG_LV_LABEL_TEXT_SELECTION 1
+#define CONFIG_LV_LABEL_LONG_TXT_HINT 1
+#define CONFIG_LV_LABEL_WAIT_CHAR_COUNT 3
+#define CONFIG_LV_USE_LED 1
+#define CONFIG_LV_USE_LINE 1
+#define CONFIG_LV_USE_LIST 1
+#define CONFIG_LV_USE_MENU 1
+#define CONFIG_LV_USE_MSGBOX 1
+#define CONFIG_LV_USE_ROLLER 1
+#define CONFIG_LV_USE_SCALE 1
+#define CONFIG_LV_USE_SLIDER 1
+#define CONFIG_LV_USE_SPAN 1
+#define CONFIG_LV_SPAN_SNIPPET_STACK_SIZE 64
+#define CONFIG_LV_USE_SPINBOX 1
+#define CONFIG_LV_USE_SPINNER 1
+#define CONFIG_LV_USE_SWITCH 1
+#define CONFIG_LV_USE_TEXTAREA 1
+#define CONFIG_LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500
+#define CONFIG_LV_USE_TABLE 1
+#define CONFIG_LV_USE_TABVIEW 1
+#define CONFIG_LV_USE_TILEVIEW 1
+#define CONFIG_LV_USE_WIN 1
+#define CONFIG_LV_USE_THEME_DEFAULT 1
+#define CONFIG_LV_THEME_DEFAULT_GROW 1
+#define CONFIG_LV_THEME_DEFAULT_TRANSITION_TIME 80
+#define CONFIG_LV_USE_THEME_SIMPLE 1
+#define CONFIG_LV_USE_FLEX 1
+#define CONFIG_LV_USE_GRID 1
+#define CONFIG_LV_FS_DEFAULT_DRIVE_LETTER 0
+#define CONFIG_LV_USE_QRCODE 1
+#define CONFIG_LV_USE_SYSMON 1
+#define CONFIG_LV_USE_PERF_MONITOR 1
+#define CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT 1
+#define CONFIG_LV_USE_MEM_MONITOR 1
+#define CONFIG_LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT 1
+#define CONFIG_LV_USE_OBSERVER 1
+#define CONFIG_LVGL_VERSION_MAJOR 9
+#define CONFIG_LVGL_VERSION_MINOR 2
+#define CONFIG_LVGL_VERSION_PATCH 2
+#define CONFIG_IDF_EXPERIMENTAL_FEATURES 1
+
+/* List of deprecated options */
+#define CONFIG_BROWNOUT_DET CONFIG_ESP_BROWNOUT_DET
+#define CONFIG_BROWNOUT_DET_LVL CONFIG_ESP_BROWNOUT_DET_LVL
+#define CONFIG_BROWNOUT_DET_LVL_SEL_7 CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7
+#define CONFIG_CONSOLE_UART CONFIG_ESP_CONSOLE_UART
+#define CONFIG_CONSOLE_UART_BAUDRATE CONFIG_ESP_CONSOLE_UART_BAUDRATE
+#define CONFIG_CONSOLE_UART_DEFAULT CONFIG_ESP_CONSOLE_UART_DEFAULT
+#define CONFIG_CONSOLE_UART_NUM CONFIG_ESP_CONSOLE_UART_NUM
+#define CONFIG_DEFAULT_PSRAM_CLK_IO CONFIG_SPIRAM_CLK_IO
+#define CONFIG_DEFAULT_PSRAM_CS_IO CONFIG_SPIRAM_CS_IO
+#define CONFIG_ESP32S3_BROWNOUT_DET CONFIG_ESP_BROWNOUT_DET
+#define CONFIG_ESP32S3_BROWNOUT_DET_LVL CONFIG_ESP_BROWNOUT_DET_LVL
+#define CONFIG_ESP32S3_BROWNOUT_DET_LVL_SEL_7 CONFIG_ESP_BROWNOUT_DET_LVL_SEL_7
+#define CONFIG_ESP32S3_DEBUG_OCDAWARE CONFIG_ESP_DEBUG_OCDAWARE
+#define CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY
+#define CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240 CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240
+#define CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ
+#define CONFIG_ESP32S3_RTC_CLK_CAL_CYCLES CONFIG_RTC_CLK_CAL_CYCLES
+#define CONFIG_ESP32S3_RTC_CLK_SRC_INT_RC CONFIG_RTC_CLK_SRC_INT_RC
+#define CONFIG_ESP32S3_SPIRAM_SUPPORT CONFIG_SPIRAM
+#define CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1 CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT
+#define CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_SYSTIMER CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT
+#define CONFIG_ESP32_APPTRACE_DEST_NONE CONFIG_APPTRACE_DEST_NONE
+#define CONFIG_ESP32_APPTRACE_LOCK_ENABLE CONFIG_APPTRACE_LOCK_ENABLE
+#define CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY
+#define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE CONFIG_ESP_COREDUMP_ENABLE_TO_NONE
+#define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE
+#define CONFIG_ESP32_PHY_MAX_TX_POWER CONFIG_ESP_PHY_MAX_TX_POWER
+#define CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER CONFIG_ESP_PHY_MAX_WIFI_TX_POWER
+#define CONFIG_ESP32_PTHREAD_STACK_MIN CONFIG_PTHREAD_STACK_MIN
+#define CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT CONFIG_PTHREAD_TASK_CORE_DEFAULT
+#define CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT CONFIG_PTHREAD_TASK_NAME_DEFAULT
+#define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT CONFIG_PTHREAD_TASK_PRIO_DEFAULT
+#define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT
+#define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED CONFIG_ESP_WIFI_AMPDU_RX_ENABLED
+#define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED CONFIG_ESP_WIFI_AMPDU_TX_ENABLED
+#define CONFIG_ESP32_WIFI_CACHE_TX_BUFFER_NUM CONFIG_ESP_WIFI_CACHE_TX_BUFFER_NUM
+#define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM CONFIG_ESP_WIFI_DYNAMIC_RX_BUFFER_NUM
+#define CONFIG_ESP32_WIFI_ENABLED CONFIG_ESP_WIFI_ENABLED
+#define CONFIG_ESP32_WIFI_ENABLE_WPA3_OWE_STA CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA
+#define CONFIG_ESP32_WIFI_ENABLE_WPA3_SAE CONFIG_ESP_WIFI_ENABLE_WPA3_SAE
+#define CONFIG_ESP32_WIFI_IRAM_OPT CONFIG_ESP_WIFI_IRAM_OPT
+#define CONFIG_ESP32_WIFI_MGMT_SBUF_NUM CONFIG_ESP_WIFI_MGMT_SBUF_NUM
+#define CONFIG_ESP32_WIFI_NVS_ENABLED CONFIG_ESP_WIFI_NVS_ENABLED
+#define CONFIG_ESP32_WIFI_RX_BA_WIN CONFIG_ESP_WIFI_RX_BA_WIN
+#define CONFIG_ESP32_WIFI_RX_IRAM_OPT CONFIG_ESP_WIFI_RX_IRAM_OPT
+#define CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN
+#define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM CONFIG_ESP_WIFI_STATIC_RX_BUFFER_NUM
+#define CONFIG_ESP32_WIFI_STATIC_TX_BUFFER CONFIG_ESP_WIFI_STATIC_TX_BUFFER
+#define CONFIG_ESP32_WIFI_STATIC_TX_BUFFER_NUM CONFIG_ESP_WIFI_STATIC_TX_BUFFER_NUM
+#define CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0 CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0
+#define CONFIG_ESP32_WIFI_TX_BA_WIN CONFIG_ESP_WIFI_TX_BA_WIN
+#define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE CONFIG_ESP_WIFI_TX_BUFFER_TYPE
+#define CONFIG_ESP_GRATUITOUS_ARP CONFIG_LWIP_ESP_GRATUITOUS_ARP
+#define CONFIG_ESP_SLEEP_DEEP_SLEEP_WAKEUP_DELAY CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY
+#define CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP
+#define CONFIG_ESP_TASK_WDT CONFIG_ESP_TASK_WDT_INIT
+#define CONFIG_FLASHMODE_DIO CONFIG_ESPTOOLPY_FLASHMODE_DIO
+#define CONFIG_GARP_TMR_INTERVAL CONFIG_LWIP_GARP_TMR_INTERVAL
+#define CONFIG_INT_WDT CONFIG_ESP_INT_WDT
+#define CONFIG_INT_WDT_CHECK_CPU1 CONFIG_ESP_INT_WDT_CHECK_CPU1
+#define CONFIG_INT_WDT_TIMEOUT_MS CONFIG_ESP_INT_WDT_TIMEOUT_MS
+#define CONFIG_IPC_TASK_STACK_SIZE CONFIG_ESP_IPC_TASK_STACK_SIZE
+#define CONFIG_LOG_BOOTLOADER_LEVEL CONFIG_BOOTLOADER_LOG_LEVEL
+#define CONFIG_LOG_BOOTLOADER_LEVEL_INFO CONFIG_BOOTLOADER_LOG_LEVEL_INFO
+#define CONFIG_MAIN_TASK_STACK_SIZE CONFIG_ESP_MAIN_TASK_STACK_SIZE
+#define CONFIG_MONITOR_BAUD CONFIG_ESPTOOLPY_MONITOR_BAUD
+#define CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE
+#define CONFIG_OPTIMIZATION_ASSERTION_LEVEL CONFIG_COMPILER_OPTIMIZATION_ASSERTION_LEVEL
+#define CONFIG_POST_EVENTS_FROM_IRAM_ISR CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR
+#define CONFIG_POST_EVENTS_FROM_ISR CONFIG_ESP_EVENT_POST_FROM_ISR
+#define CONFIG_SEMIHOSTFS_MAX_MOUNT_POINTS CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS
+#define CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS CONFIG_SPI_FLASH_DANGEROUS_WRITE_ABORTS
+#define CONFIG_STACK_CHECK_NONE CONFIG_COMPILER_STACK_CHECK_MODE_NONE
+#define CONFIG_SUPPORT_TERMIOS CONFIG_VFS_SUPPORT_TERMIOS
+#define CONFIG_SUPPRESS_SELECT_DEBUG_OUTPUT CONFIG_VFS_SUPPRESS_SELECT_DEBUG_OUTPUT
+#define CONFIG_SYSTEM_EVENT_QUEUE_SIZE CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE
+#define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE
+#define CONFIG_TASK_WDT CONFIG_ESP_TASK_WDT_INIT
+#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0
+#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1
+#define CONFIG_TASK_WDT_TIMEOUT_S CONFIG_ESP_TASK_WDT_TIMEOUT_S
+#define CONFIG_TCPIP_RECVMBOX_SIZE CONFIG_LWIP_TCPIP_RECVMBOX_SIZE
+#define CONFIG_TCPIP_TASK_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY
+#define CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY
+#define CONFIG_TCPIP_TASK_STACK_SIZE CONFIG_LWIP_TCPIP_TASK_STACK_SIZE
+#define CONFIG_TCP_MAXRTX CONFIG_LWIP_TCP_MAXRTX
+#define CONFIG_TCP_MSL CONFIG_LWIP_TCP_MSL
+#define CONFIG_TCP_MSS CONFIG_LWIP_TCP_MSS
+#define CONFIG_TCP_OVERSIZE_MSS CONFIG_LWIP_TCP_OVERSIZE_MSS
+#define CONFIG_TCP_QUEUE_OOSEQ CONFIG_LWIP_TCP_QUEUE_OOSEQ
+#define CONFIG_TCP_RECVMBOX_SIZE CONFIG_LWIP_TCP_RECVMBOX_SIZE
+#define CONFIG_TCP_SND_BUF_DEFAULT CONFIG_LWIP_TCP_SND_BUF_DEFAULT
+#define CONFIG_TCP_SYNMAXRTX CONFIG_LWIP_TCP_SYNMAXRTX
+#define CONFIG_TCP_WND_DEFAULT CONFIG_LWIP_TCP_WND_DEFAULT
+#define CONFIG_TIMER_QUEUE_LENGTH CONFIG_FREERTOS_TIMER_QUEUE_LENGTH
+#define CONFIG_TIMER_TASK_PRIORITY CONFIG_FREERTOS_TIMER_TASK_PRIORITY
+#define CONFIG_TIMER_TASK_STACK_DEPTH CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH
+#define CONFIG_TIMER_TASK_STACK_SIZE CONFIG_ESP_TIMER_TASK_STACK_SIZE
+#define CONFIG_UDP_RECVMBOX_SIZE CONFIG_LWIP_UDP_RECVMBOX_SIZE
+#define CONFIG_WPA_MBEDTLS_CRYPTO CONFIG_ESP_WIFI_MBEDTLS_CRYPTO
+#define CONFIG_WPA_MBEDTLS_TLS_CLIENT CONFIG_ESP_WIFI_MBEDTLS_TLS_CLIENT

+ 1555 - 0
cmake-build-debug/config/sdkconfig.json

@@ -0,0 +1,1555 @@
+{
+    "ADC_CALI_SUPPRESS_DEPRECATE_WARN": false,
+    "ADC_CONTINUOUS_FORCE_USE_ADC2_ON_C3_S3": false,
+    "ADC_CONTINUOUS_ISR_IRAM_SAFE": true,
+    "ADC_ONESHOT_CTRL_FUNC_IN_IRAM": false,
+    "ADC_SUPPRESS_DEPRECATE_WARN": false,
+    "APPTRACE_DEST_JTAG": false,
+    "APPTRACE_DEST_NONE": true,
+    "APPTRACE_DEST_UART1": false,
+    "APPTRACE_DEST_UART2": false,
+    "APPTRACE_DEST_UART_NONE": true,
+    "APPTRACE_DEST_USB_CDC": false,
+    "APPTRACE_LOCK_ENABLE": true,
+    "APPTRACE_UART_TASK_PRIO": 1,
+    "APP_BUILD_BOOTLOADER": true,
+    "APP_BUILD_GENERATE_BINARIES": true,
+    "APP_BUILD_TYPE_APP_2NDBOOT": true,
+    "APP_BUILD_TYPE_RAM": false,
+    "APP_BUILD_USE_FLASH_SECTIONS": true,
+    "APP_COMPILE_TIME_DATE": true,
+    "APP_EXCLUDE_PROJECT_NAME_VAR": false,
+    "APP_EXCLUDE_PROJECT_VER_VAR": false,
+    "APP_NO_BLOBS": false,
+    "APP_PROJECT_VER_FROM_CONFIG": false,
+    "APP_REPRODUCIBLE_BUILD": false,
+    "APP_RETRIEVE_LEN_ELF_SHA": 9,
+    "BOOTLOADER_APP_ROLLBACK_ENABLE": false,
+    "BOOTLOADER_APP_TEST": false,
+    "BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG": false,
+    "BOOTLOADER_COMPILER_OPTIMIZATION_NONE": false,
+    "BOOTLOADER_COMPILER_OPTIMIZATION_PERF": false,
+    "BOOTLOADER_COMPILER_OPTIMIZATION_SIZE": true,
+    "BOOTLOADER_CUSTOM_RESERVE_RTC": false,
+    "BOOTLOADER_FACTORY_RESET": false,
+    "BOOTLOADER_FLASH_DC_AWARE": false,
+    "BOOTLOADER_FLASH_XMC_SUPPORT": true,
+    "BOOTLOADER_LOG_LEVEL": 3,
+    "BOOTLOADER_LOG_LEVEL_DEBUG": false,
+    "BOOTLOADER_LOG_LEVEL_ERROR": false,
+    "BOOTLOADER_LOG_LEVEL_INFO": true,
+    "BOOTLOADER_LOG_LEVEL_NONE": false,
+    "BOOTLOADER_LOG_LEVEL_VERBOSE": false,
+    "BOOTLOADER_LOG_LEVEL_WARN": false,
+    "BOOTLOADER_OFFSET_IN_FLASH": 0,
+    "BOOTLOADER_REGION_PROTECTION_ENABLE": true,
+    "BOOTLOADER_RESERVE_RTC_SIZE": 0,
+    "BOOTLOADER_SKIP_VALIDATE_ALWAYS": false,
+    "BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP": false,
+    "BOOTLOADER_SKIP_VALIDATE_ON_POWER_ON": false,
+    "BOOTLOADER_VDDSDIO_BOOST_1_8V": false,
+    "BOOTLOADER_VDDSDIO_BOOST_1_9V": true,
+    "BOOTLOADER_WDT_DISABLE_IN_USER_CODE": false,
+    "BOOTLOADER_WDT_ENABLE": true,
+    "BOOTLOADER_WDT_TIME_MS": 9000,
+    "BOOT_ROM_LOG_ALWAYS_OFF": false,
+    "BOOT_ROM_LOG_ALWAYS_ON": true,
+    "BOOT_ROM_LOG_ON_GPIO_HIGH": false,
+    "BOOT_ROM_LOG_ON_GPIO_LOW": false,
+    "BT_ALARM_MAX_NUM": 50,
+    "BT_ENABLED": false,
+    "COMPILER_CXX_EXCEPTIONS": false,
+    "COMPILER_CXX_RTTI": false,
+    "COMPILER_DISABLE_GCC12_WARNINGS": false,
+    "COMPILER_DUMP_RTL_FILES": false,
+    "COMPILER_FLOAT_LIB_FROM_GCCLIB": true,
+    "COMPILER_HIDE_PATHS_MACROS": true,
+    "COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE": false,
+    "COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE": true,
+    "COMPILER_OPTIMIZATION_ASSERTIONS_SILENT": false,
+    "COMPILER_OPTIMIZATION_ASSERTION_LEVEL": 2,
+    "COMPILER_OPTIMIZATION_CHECKS_SILENT": false,
+    "COMPILER_OPTIMIZATION_DEFAULT": false,
+    "COMPILER_OPTIMIZATION_NONE": false,
+    "COMPILER_OPTIMIZATION_PERF": true,
+    "COMPILER_OPTIMIZATION_SIZE": false,
+    "COMPILER_STACK_CHECK_MODE_ALL": false,
+    "COMPILER_STACK_CHECK_MODE_NONE": true,
+    "COMPILER_STACK_CHECK_MODE_NORM": false,
+    "COMPILER_STACK_CHECK_MODE_STRONG": false,
+    "COMPILER_WARN_WRITE_STRINGS": false,
+    "CU_DIAGNOSTICS_COLOR_ALWAYS": true,
+    "CU_DIAGNOSTICS_COLOR_AUTO": false,
+    "CU_DIAGNOSTICS_COLOR_NEVER": false,
+    "CU_GCC_LTO_ENABLE": false,
+    "CU_GCC_STRING_1BYTE_ALIGN": false,
+    "CU_RELINKER_ENABLE": false,
+    "EFUSE_CUSTOM_TABLE": false,
+    "EFUSE_MAX_BLK_LEN": 256,
+    "EFUSE_VIRTUAL": false,
+    "ESP32S3_DATA_CACHE_16KB": false,
+    "ESP32S3_DATA_CACHE_32KB": true,
+    "ESP32S3_DATA_CACHE_4WAYS": false,
+    "ESP32S3_DATA_CACHE_64KB": false,
+    "ESP32S3_DATA_CACHE_8WAYS": true,
+    "ESP32S3_DATA_CACHE_LINE_16B": false,
+    "ESP32S3_DATA_CACHE_LINE_32B": false,
+    "ESP32S3_DATA_CACHE_LINE_64B": true,
+    "ESP32S3_DATA_CACHE_LINE_SIZE": 64,
+    "ESP32S3_DATA_CACHE_SIZE": 32768,
+    "ESP32S3_DCACHE_ASSOCIATED_WAYS": 8,
+    "ESP32S3_ICACHE_ASSOCIATED_WAYS": 8,
+    "ESP32S3_INSTRUCTION_CACHE_16KB": true,
+    "ESP32S3_INSTRUCTION_CACHE_32KB": false,
+    "ESP32S3_INSTRUCTION_CACHE_4WAYS": false,
+    "ESP32S3_INSTRUCTION_CACHE_8WAYS": true,
+    "ESP32S3_INSTRUCTION_CACHE_LINE_16B": false,
+    "ESP32S3_INSTRUCTION_CACHE_LINE_32B": true,
+    "ESP32S3_INSTRUCTION_CACHE_LINE_SIZE": 32,
+    "ESP32S3_INSTRUCTION_CACHE_SIZE": 16384,
+    "ESP32S3_REV_MAX_FULL": 99,
+    "ESP32S3_REV_MIN_0": true,
+    "ESP32S3_REV_MIN_1": false,
+    "ESP32S3_REV_MIN_2": false,
+    "ESP32S3_REV_MIN_FULL": 0,
+    "ESP32S3_RTCDATA_IN_FAST_MEM": false,
+    "ESP32S3_TRACEMEM_RESERVE_DRAM": 0,
+    "ESP32S3_TRAX": false,
+    "ESP32S3_UNIVERSAL_MAC_ADDRESSES": 4,
+    "ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR": true,
+    "ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO": false,
+    "ESP32S3_USE_FIXED_STATIC_RAM_SIZE": false,
+    "ESPTOOLPY_AFTER": "hard_reset",
+    "ESPTOOLPY_AFTER_NORESET": false,
+    "ESPTOOLPY_AFTER_RESET": true,
+    "ESPTOOLPY_BEFORE": "default_reset",
+    "ESPTOOLPY_BEFORE_NORESET": false,
+    "ESPTOOLPY_BEFORE_RESET": true,
+    "ESPTOOLPY_FLASHFREQ": "80m",
+    "ESPTOOLPY_FLASHFREQ_120M": true,
+    "ESPTOOLPY_FLASHFREQ_20M": false,
+    "ESPTOOLPY_FLASHFREQ_40M": false,
+    "ESPTOOLPY_FLASHFREQ_80M": false,
+    "ESPTOOLPY_FLASHFREQ_80M_DEFAULT": true,
+    "ESPTOOLPY_FLASHMODE": "dio",
+    "ESPTOOLPY_FLASHMODE_DIO": true,
+    "ESPTOOLPY_FLASHMODE_DOUT": false,
+    "ESPTOOLPY_FLASHMODE_QIO": false,
+    "ESPTOOLPY_FLASHMODE_QOUT": false,
+    "ESPTOOLPY_FLASHSIZE": "16MB",
+    "ESPTOOLPY_FLASHSIZE_128MB": false,
+    "ESPTOOLPY_FLASHSIZE_16MB": true,
+    "ESPTOOLPY_FLASHSIZE_1MB": false,
+    "ESPTOOLPY_FLASHSIZE_2MB": false,
+    "ESPTOOLPY_FLASHSIZE_32MB": false,
+    "ESPTOOLPY_FLASHSIZE_4MB": false,
+    "ESPTOOLPY_FLASHSIZE_64MB": false,
+    "ESPTOOLPY_FLASHSIZE_8MB": false,
+    "ESPTOOLPY_FLASH_MODE_AUTO_DETECT": true,
+    "ESPTOOLPY_FLASH_SAMPLE_MODE_STR": true,
+    "ESPTOOLPY_HEADER_FLASHSIZE_UPDATE": false,
+    "ESPTOOLPY_MONITOR_BAUD": 115200,
+    "ESPTOOLPY_NO_STUB": false,
+    "ESPTOOLPY_OCT_FLASH": false,
+    "ESP_BROWNOUT_DET": true,
+    "ESP_BROWNOUT_DET_LVL": 7,
+    "ESP_BROWNOUT_DET_LVL_SEL_1": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_2": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_3": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_4": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_5": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_6": false,
+    "ESP_BROWNOUT_DET_LVL_SEL_7": true,
+    "ESP_COEX_EXTERNAL_COEXIST_ENABLE": false,
+    "ESP_COEX_GPIO_DEBUG": false,
+    "ESP_CONSOLE_MULTIPLE_UART": true,
+    "ESP_CONSOLE_NONE": false,
+    "ESP_CONSOLE_SECONDARY_NONE": false,
+    "ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG": true,
+    "ESP_CONSOLE_UART": true,
+    "ESP_CONSOLE_UART_BAUDRATE": 115200,
+    "ESP_CONSOLE_UART_CUSTOM": false,
+    "ESP_CONSOLE_UART_DEFAULT": true,
+    "ESP_CONSOLE_UART_NUM": 0,
+    "ESP_CONSOLE_USB_CDC": false,
+    "ESP_CONSOLE_USB_SERIAL_JTAG": false,
+    "ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED": true,
+    "ESP_COREDUMP_ENABLE_TO_FLASH": false,
+    "ESP_COREDUMP_ENABLE_TO_NONE": true,
+    "ESP_COREDUMP_ENABLE_TO_UART": false,
+    "ESP_DEBUG_OCDAWARE": true,
+    "ESP_DEBUG_STUBS_ENABLE": false,
+    "ESP_DEFAULT_CPU_FREQ_MHZ": 240,
+    "ESP_DEFAULT_CPU_FREQ_MHZ_160": false,
+    "ESP_DEFAULT_CPU_FREQ_MHZ_240": true,
+    "ESP_DEFAULT_CPU_FREQ_MHZ_80": false,
+    "ESP_ERR_TO_NAME_LOOKUP": true,
+    "ESP_EVENT_LOOP_PROFILING": false,
+    "ESP_EVENT_POST_FROM_IRAM_ISR": true,
+    "ESP_EVENT_POST_FROM_ISR": true,
+    "ESP_HTTPS_OTA_ALLOW_HTTP": false,
+    "ESP_HTTPS_OTA_DECRYPT_CB": false,
+    "ESP_HTTPS_SERVER_ENABLE": false,
+    "ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH": false,
+    "ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH": false,
+    "ESP_HTTP_CLIENT_ENABLE_HTTPS": true,
+    "ESP_INT_WDT": true,
+    "ESP_INT_WDT_CHECK_CPU1": true,
+    "ESP_INT_WDT_TIMEOUT_MS": 300,
+    "ESP_IPC_ISR_ENABLE": true,
+    "ESP_IPC_TASK_STACK_SIZE": 1280,
+    "ESP_IPC_USES_CALLERS_PRIORITY": true,
+    "ESP_LCD_TOUCH_MAX_BUTTONS": 1,
+    "ESP_LCD_TOUCH_MAX_POINTS": 5,
+    "ESP_MAC_ADDR_UNIVERSE_BT": true,
+    "ESP_MAC_ADDR_UNIVERSE_ETH": true,
+    "ESP_MAC_ADDR_UNIVERSE_WIFI_AP": true,
+    "ESP_MAC_ADDR_UNIVERSE_WIFI_STA": true,
+    "ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR": true,
+    "ESP_MAC_USE_CUSTOM_MAC_AS_BASE_MAC": false,
+    "ESP_MAIN_TASK_AFFINITY": 0,
+    "ESP_MAIN_TASK_AFFINITY_CPU0": true,
+    "ESP_MAIN_TASK_AFFINITY_CPU1": false,
+    "ESP_MAIN_TASK_AFFINITY_NO_AFFINITY": false,
+    "ESP_MAIN_TASK_STACK_SIZE": 3584,
+    "ESP_MINIMAL_SHARED_STACK_SIZE": 2048,
+    "ESP_NETIF_BRIDGE_EN": false,
+    "ESP_NETIF_IP_LOST_TIMER_INTERVAL": 120,
+    "ESP_NETIF_L2_TAP": false,
+    "ESP_NETIF_LOOPBACK": false,
+    "ESP_NETIF_RECEIVE_REPORT_ERRORS": false,
+    "ESP_NETIF_TCPIP_LWIP": true,
+    "ESP_NETIF_USES_TCPIP_WITH_BSD_API": true,
+    "ESP_PANIC_HANDLER_IRAM": false,
+    "ESP_PHY_CALIBRATION_AND_DATA_STORAGE": true,
+    "ESP_PHY_CALIBRATION_MODE": 0,
+    "ESP_PHY_ENABLE_CERT_TEST": false,
+    "ESP_PHY_ENABLE_USB": true,
+    "ESP_PHY_INIT_DATA_IN_PARTITION": false,
+    "ESP_PHY_MAX_TX_POWER": 20,
+    "ESP_PHY_MAX_WIFI_TX_POWER": 20,
+    "ESP_PHY_PLL_TRACK_DEBUG": false,
+    "ESP_PHY_REDUCE_TX_POWER": false,
+    "ESP_PHY_RF_CAL_FULL": false,
+    "ESP_PHY_RF_CAL_NONE": false,
+    "ESP_PHY_RF_CAL_PARTIAL": true,
+    "ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_0": true,
+    "ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_1": true,
+    "ESP_PROTOCOMM_SUPPORT_SECURITY_VERSION_2": true,
+    "ESP_REV_MAX_FULL": 99,
+    "ESP_REV_MIN_FULL": 0,
+    "ESP_ROM_GET_CLK_FREQ": true,
+    "ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG": true,
+    "ESP_ROM_HAS_CACHE_WRITEBACK_BUG": true,
+    "ESP_ROM_HAS_CRC_BE": true,
+    "ESP_ROM_HAS_CRC_LE": true,
+    "ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV": true,
+    "ESP_ROM_HAS_ERASE_0_REGION_BUG": true,
+    "ESP_ROM_HAS_ETS_PRINTF_BUG": true,
+    "ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG": true,
+    "ESP_ROM_HAS_HAL_WDT": true,
+    "ESP_ROM_HAS_JPEG_DECODE": true,
+    "ESP_ROM_HAS_LAYOUT_TABLE": true,
+    "ESP_ROM_HAS_MZ_CRC32": true,
+    "ESP_ROM_HAS_NEWLIB_NANO_FORMAT": true,
+    "ESP_ROM_HAS_RETARGETABLE_LOCKING": true,
+    "ESP_ROM_HAS_SPI_FLASH": true,
+    "ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE": true,
+    "ESP_ROM_NEEDS_SWSETUP_WORKAROUND": true,
+    "ESP_ROM_RAM_APP_NEEDS_MMU_INIT": true,
+    "ESP_ROM_UART_CLK_IS_XTAL": true,
+    "ESP_ROM_USB_OTG_NUM": 3,
+    "ESP_ROM_USB_SERIAL_DEVICE_NUM": 4,
+    "ESP_SLEEP_CACHE_SAFE_ASSERTION": false,
+    "ESP_SLEEP_DEBUG": false,
+    "ESP_SLEEP_FLASH_LEAKAGE_WORKAROUND": true,
+    "ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS": true,
+    "ESP_SLEEP_GPIO_RESET_WORKAROUND": true,
+    "ESP_SLEEP_MSPI_NEED_ALL_IO_PU": true,
+    "ESP_SLEEP_PSRAM_LEAKAGE_WORKAROUND": true,
+    "ESP_SLEEP_RTC_BUS_ISO_WORKAROUND": true,
+    "ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY": 2000,
+    "ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP": true,
+    "ESP_SYSTEM_BBPLL_RECALIB": true,
+    "ESP_SYSTEM_BROWNOUT_INTR": true,
+    "ESP_SYSTEM_CHECK_INT_LEVEL_4": true,
+    "ESP_SYSTEM_EVENT_QUEUE_SIZE": 32,
+    "ESP_SYSTEM_EVENT_TASK_STACK_SIZE": 2304,
+    "ESP_SYSTEM_GDBSTUB_RUNTIME": false,
+    "ESP_SYSTEM_MEMPROT_FEATURE": true,
+    "ESP_SYSTEM_MEMPROT_FEATURE_LOCK": true,
+    "ESP_SYSTEM_PANIC_GDBSTUB": false,
+    "ESP_SYSTEM_PANIC_PRINT_HALT": false,
+    "ESP_SYSTEM_PANIC_PRINT_REBOOT": true,
+    "ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS": 0,
+    "ESP_SYSTEM_PANIC_SILENT_REBOOT": false,
+    "ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK": true,
+    "ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0": true,
+    "ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1": true,
+    "ESP_TASK_WDT_EN": true,
+    "ESP_TASK_WDT_INIT": true,
+    "ESP_TASK_WDT_PANIC": false,
+    "ESP_TASK_WDT_TIMEOUT_S": 5,
+    "ESP_TIMER_IMPL_SYSTIMER": true,
+    "ESP_TIMER_INTERRUPT_LEVEL": 1,
+    "ESP_TIMER_ISR_AFFINITY": 1,
+    "ESP_TIMER_ISR_AFFINITY_CPU0": true,
+    "ESP_TIMER_PROFILING": false,
+    "ESP_TIMER_SHOW_EXPERIMENTAL": false,
+    "ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD": true,
+    "ESP_TIMER_TASK_AFFINITY": 0,
+    "ESP_TIMER_TASK_AFFINITY_CPU0": true,
+    "ESP_TIMER_TASK_STACK_SIZE": 3584,
+    "ESP_TIME_FUNCS_USE_ESP_TIMER": true,
+    "ESP_TIME_FUNCS_USE_RTC_TIMER": true,
+    "ESP_TLS_CLIENT_SESSION_TICKETS": false,
+    "ESP_TLS_INSECURE": false,
+    "ESP_TLS_PSK_VERIFICATION": false,
+    "ESP_TLS_SERVER": false,
+    "ESP_TLS_USE_DS_PERIPHERAL": true,
+    "ESP_TLS_USING_MBEDTLS": true,
+    "ESP_WIFI_11KV_SUPPORT": false,
+    "ESP_WIFI_11R_SUPPORT": false,
+    "ESP_WIFI_AMPDU_RX_ENABLED": true,
+    "ESP_WIFI_AMPDU_TX_ENABLED": true,
+    "ESP_WIFI_AMSDU_TX_ENABLED": false,
+    "ESP_WIFI_CACHE_TX_BUFFER_NUM": 32,
+    "ESP_WIFI_CSI_ENABLED": false,
+    "ESP_WIFI_DEBUG_PRINT": false,
+    "ESP_WIFI_DPP_SUPPORT": false,
+    "ESP_WIFI_DYNAMIC_RX_BUFFER_NUM": 32,
+    "ESP_WIFI_DYNAMIC_RX_MGMT_BUF": 0,
+    "ESP_WIFI_DYNAMIC_RX_MGMT_BUFFER": false,
+    "ESP_WIFI_ENABLED": true,
+    "ESP_WIFI_ENABLE_SAE_PK": true,
+    "ESP_WIFI_ENABLE_WPA3_OWE_STA": true,
+    "ESP_WIFI_ENABLE_WPA3_SAE": true,
+    "ESP_WIFI_ENTERPRISE_SUPPORT": true,
+    "ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER": false,
+    "ESP_WIFI_ESPNOW_MAX_ENCRYPT_NUM": 7,
+    "ESP_WIFI_EXTRA_IRAM_OPT": false,
+    "ESP_WIFI_FTM_ENABLE": false,
+    "ESP_WIFI_GCMP_SUPPORT": false,
+    "ESP_WIFI_GMAC_SUPPORT": true,
+    "ESP_WIFI_IRAM_OPT": true,
+    "ESP_WIFI_MBEDTLS_CRYPTO": true,
+    "ESP_WIFI_MBEDTLS_TLS_CLIENT": true,
+    "ESP_WIFI_MBO_SUPPORT": false,
+    "ESP_WIFI_MGMT_SBUF_NUM": 32,
+    "ESP_WIFI_NVS_ENABLED": true,
+    "ESP_WIFI_RX_BA_WIN": 6,
+    "ESP_WIFI_RX_IRAM_OPT": true,
+    "ESP_WIFI_RX_MGMT_BUF_NUM_DEF": 5,
+    "ESP_WIFI_SLP_BEACON_LOST_OPT": false,
+    "ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME": 10,
+    "ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME": 50,
+    "ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME": 15,
+    "ESP_WIFI_SLP_IRAM_OPT": false,
+    "ESP_WIFI_SOFTAP_BEACON_MAX_LEN": 752,
+    "ESP_WIFI_SOFTAP_SAE_SUPPORT": true,
+    "ESP_WIFI_SOFTAP_SUPPORT": true,
+    "ESP_WIFI_STATIC_RX_BUFFER_NUM": 10,
+    "ESP_WIFI_STATIC_RX_MGMT_BUFFER": true,
+    "ESP_WIFI_STATIC_TX_BUFFER": true,
+    "ESP_WIFI_STATIC_TX_BUFFER_NUM": 16,
+    "ESP_WIFI_STA_DISCONNECTED_PM_ENABLE": true,
+    "ESP_WIFI_SUITE_B_192": false,
+    "ESP_WIFI_TASK_PINNED_TO_CORE_0": true,
+    "ESP_WIFI_TASK_PINNED_TO_CORE_1": false,
+    "ESP_WIFI_TESTING_OPTIONS": false,
+    "ESP_WIFI_TX_BA_WIN": 6,
+    "ESP_WIFI_TX_BUFFER_TYPE": 0,
+    "ESP_WIFI_WAPI_PSK": false,
+    "ESP_WIFI_WPS_PASSPHRASE": false,
+    "ESP_WIFI_WPS_SOFTAP_REGISTRAR": false,
+    "ESP_WIFI_WPS_STRICT": false,
+    "ETH_ENABLED": true,
+    "ETH_SPI_ETHERNET_DM9051": false,
+    "ETH_SPI_ETHERNET_KSZ8851SNL": false,
+    "ETH_SPI_ETHERNET_W5500": false,
+    "ETH_TRANSMIT_MUTEX": false,
+    "ETH_USE_OPENETH": false,
+    "ETH_USE_SPI_ETHERNET": true,
+    "FATFS_ALLOC_PREFER_EXTRAM": true,
+    "FATFS_CODEPAGE": 437,
+    "FATFS_CODEPAGE_437": true,
+    "FATFS_CODEPAGE_720": false,
+    "FATFS_CODEPAGE_737": false,
+    "FATFS_CODEPAGE_771": false,
+    "FATFS_CODEPAGE_775": false,
+    "FATFS_CODEPAGE_850": false,
+    "FATFS_CODEPAGE_852": false,
+    "FATFS_CODEPAGE_855": false,
+    "FATFS_CODEPAGE_857": false,
+    "FATFS_CODEPAGE_860": false,
+    "FATFS_CODEPAGE_861": false,
+    "FATFS_CODEPAGE_862": false,
+    "FATFS_CODEPAGE_863": false,
+    "FATFS_CODEPAGE_864": false,
+    "FATFS_CODEPAGE_865": false,
+    "FATFS_CODEPAGE_866": false,
+    "FATFS_CODEPAGE_869": false,
+    "FATFS_CODEPAGE_932": false,
+    "FATFS_CODEPAGE_936": false,
+    "FATFS_CODEPAGE_949": false,
+    "FATFS_CODEPAGE_950": false,
+    "FATFS_CODEPAGE_DYNAMIC": false,
+    "FATFS_FS_LOCK": 0,
+    "FATFS_LFN_HEAP": false,
+    "FATFS_LFN_NONE": true,
+    "FATFS_LFN_STACK": false,
+    "FATFS_PER_FILE_CACHE": true,
+    "FATFS_SECTOR_4096": true,
+    "FATFS_SECTOR_512": false,
+    "FATFS_TIMEOUT_MS": 10000,
+    "FATFS_USE_FASTSEEK": false,
+    "FATFS_VFS_FSTAT_BLKSIZE": 0,
+    "FATFS_VOLUME_COUNT": 2,
+    "FMB_BUFFER_SIZE": 260,
+    "FMB_COMM_MODE_ASCII_EN": false,
+    "FMB_COMM_MODE_RTU_EN": true,
+    "FMB_COMM_MODE_TCP_EN": false,
+    "FMB_CONTROLLER_NOTIFY_QUEUE_SIZE": 20,
+    "FMB_CONTROLLER_NOTIFY_TIMEOUT": 20,
+    "FMB_CONTROLLER_SLAVE_ID_SUPPORT": false,
+    "FMB_CONTROLLER_STACK_SIZE": 6144,
+    "FMB_EVENT_QUEUE_TIMEOUT": 20,
+    "FMB_EXT_TYPE_SUPPORT": false,
+    "FMB_MASTER_DELAY_MS_CONVERT": 500,
+    "FMB_MASTER_TIMEOUT_MS_RESPOND": 500,
+    "FMB_PORT_TASK_AFFINITY": 1,
+    "FMB_PORT_TASK_AFFINITY_CPU0": false,
+    "FMB_PORT_TASK_AFFINITY_CPU1": true,
+    "FMB_PORT_TASK_AFFINITY_NO_AFFINITY": false,
+    "FMB_PORT_TASK_PRIO": 20,
+    "FMB_PORT_TASK_STACK_SIZE": 6144,
+    "FMB_QUEUE_LENGTH": 20,
+    "FMB_TIMER_USE_ISR_DISPATCH_METHOD": false,
+    "FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER": true,
+    "FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE": false,
+    "FREERTOS_CHECK_STACKOVERFLOW_CANARY": true,
+    "FREERTOS_CHECK_STACKOVERFLOW_NONE": false,
+    "FREERTOS_CHECK_STACKOVERFLOW_PTRVAL": false,
+    "FREERTOS_CORETIMER_SYSTIMER_LVL1": true,
+    "FREERTOS_CORETIMER_SYSTIMER_LVL3": false,
+    "FREERTOS_DEBUG_OCDAWARE": true,
+    "FREERTOS_ENABLE_BACKWARD_COMPATIBILITY": false,
+    "FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP": false,
+    "FREERTOS_ENABLE_TASK_SNAPSHOT": true,
+    "FREERTOS_GENERATE_RUN_TIME_STATS": false,
+    "FREERTOS_HZ": 1000,
+    "FREERTOS_IDLE_TASK_STACKSIZE": 1536,
+    "FREERTOS_INTERRUPT_BACKTRACE": true,
+    "FREERTOS_ISR_STACKSIZE": 1536,
+    "FREERTOS_MAX_TASK_NAME_LEN": 16,
+    "FREERTOS_NO_AFFINITY": 2147483647,
+    "FREERTOS_PLACE_FUNCTIONS_INTO_FLASH": false,
+    "FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH": true,
+    "FREERTOS_QUEUE_REGISTRY_SIZE": 0,
+    "FREERTOS_SMP": false,
+    "FREERTOS_SUPPORT_STATIC_ALLOCATION": true,
+    "FREERTOS_SYSTICK_USES_SYSTIMER": true,
+    "FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES": 1,
+    "FREERTOS_THREAD_LOCAL_STORAGE_POINTERS": 1,
+    "FREERTOS_TICK_SUPPORT_SYSTIMER": true,
+    "FREERTOS_TIMER_QUEUE_LENGTH": 10,
+    "FREERTOS_TIMER_TASK_PRIORITY": 1,
+    "FREERTOS_TIMER_TASK_STACK_DEPTH": 2048,
+    "FREERTOS_TLSP_DELETION_CALLBACKS": true,
+    "FREERTOS_UNICORE": false,
+    "FREERTOS_USE_IDLE_HOOK": false,
+    "FREERTOS_USE_TICK_HOOK": false,
+    "FREERTOS_USE_TRACE_FACILITY": false,
+    "FREERTOS_WATCHPOINT_END_OF_STACK": false,
+    "GDMA_CTRL_FUNC_IN_IRAM": true,
+    "GDMA_ISR_IRAM_SAFE": true,
+    "GPIO_CTRL_FUNC_IN_IRAM": false,
+    "GPTIMER_CTRL_FUNC_IN_IRAM": false,
+    "GPTIMER_ENABLE_DEBUG_LOG": false,
+    "GPTIMER_ISR_HANDLER_IN_IRAM": true,
+    "GPTIMER_ISR_IRAM_SAFE": false,
+    "GPTIMER_SUPPRESS_DEPRECATE_WARN": false,
+    "HAL_ASSERTION_DISABLE": false,
+    "HAL_ASSERTION_ENABLE": false,
+    "HAL_ASSERTION_EQUALS_SYSTEM": true,
+    "HAL_ASSERTION_SILENT": false,
+    "HAL_DEFAULT_ASSERTION_LEVEL": 2,
+    "HAL_SPI_MASTER_FUNC_IN_IRAM": true,
+    "HAL_SPI_SLAVE_FUNC_IN_IRAM": true,
+    "HAL_WDT_USE_ROM_IMPL": true,
+    "HEAP_ABORT_WHEN_ALLOCATION_FAILS": false,
+    "HEAP_PLACE_FUNCTION_INTO_FLASH": false,
+    "HEAP_POISONING_COMPREHENSIVE": false,
+    "HEAP_POISONING_DISABLED": true,
+    "HEAP_POISONING_LIGHT": false,
+    "HEAP_TRACING_OFF": true,
+    "HEAP_TRACING_STANDALONE": false,
+    "HEAP_TRACING_TOHOST": false,
+    "HEAP_USE_HOOKS": false,
+    "HTTPD_ERR_RESP_NO_DELAY": true,
+    "HTTPD_LOG_PURGE_DATA": false,
+    "HTTPD_MAX_REQ_HDR_LEN": 512,
+    "HTTPD_MAX_URI_LEN": 512,
+    "HTTPD_PURGE_BUF_LEN": 32,
+    "HTTPD_QUEUE_WORK_BLOCKING": false,
+    "HTTPD_WS_SUPPORT": false,
+    "I2S_ENABLE_DEBUG_LOG": false,
+    "I2S_ISR_IRAM_SAFE": false,
+    "I2S_SUPPRESS_DEPRECATE_WARN": false,
+    "IDF_CMAKE": true,
+    "IDF_EXPERIMENTAL_FEATURES": true,
+    "IDF_FIRMWARE_CHIP_ID": 9,
+    "IDF_TARGET": "esp32s3",
+    "IDF_TARGET_ARCH": "xtensa",
+    "IDF_TARGET_ARCH_XTENSA": true,
+    "IDF_TARGET_ESP32S3": true,
+    "LCD_ENABLE_DEBUG_LOG": false,
+    "LCD_PANEL_IO_FORMAT_BUF_SIZE": 32,
+    "LCD_RGB_ISR_IRAM_SAFE": false,
+    "LCD_RGB_RESTART_IN_VSYNC": false,
+    "LOG_COLORS": true,
+    "LOG_DEFAULT_LEVEL": 3,
+    "LOG_DEFAULT_LEVEL_DEBUG": false,
+    "LOG_DEFAULT_LEVEL_ERROR": false,
+    "LOG_DEFAULT_LEVEL_INFO": true,
+    "LOG_DEFAULT_LEVEL_NONE": false,
+    "LOG_DEFAULT_LEVEL_VERBOSE": false,
+    "LOG_DEFAULT_LEVEL_WARN": false,
+    "LOG_MAXIMUM_EQUALS_DEFAULT": false,
+    "LOG_MAXIMUM_LEVEL": 5,
+    "LOG_MAXIMUM_LEVEL_DEBUG": false,
+    "LOG_MAXIMUM_LEVEL_VERBOSE": true,
+    "LOG_TIMESTAMP_SOURCE_RTOS": true,
+    "LOG_TIMESTAMP_SOURCE_SYSTEM": false,
+    "LVGL_VERSION_MAJOR": 9,
+    "LVGL_VERSION_MINOR": 2,
+    "LVGL_VERSION_PATCH": 2,
+    "LV_ASSERT_HANDLER_INCLUDE": "assert.h",
+    "LV_ATTRIBUTE_FAST_MEM_USE_IRAM": false,
+    "LV_ATTRIBUTE_MEM_ALIGN_SIZE": 1,
+    "LV_BIG_ENDIAN_SYSTEM": false,
+    "LV_BIN_DECODER_RAM_LOAD": false,
+    "LV_BUILD_EXAMPLES": false,
+    "LV_CACHE_DEF_SIZE": 0,
+    "LV_CALENDAR_WEEK_STARTS_MONDAY": false,
+    "LV_COLOR_DEPTH": 16,
+    "LV_COLOR_DEPTH_1": false,
+    "LV_COLOR_DEPTH_16": true,
+    "LV_COLOR_DEPTH_24": false,
+    "LV_COLOR_DEPTH_32": false,
+    "LV_COLOR_DEPTH_8": false,
+    "LV_COLOR_MIX_ROUND_OFS": 128,
+    "LV_CONF_MINIMAL": false,
+    "LV_CONF_SKIP": true,
+    "LV_DEF_REFR_PERIOD": 10,
+    "LV_DPI_DEF": 130,
+    "LV_DRAW_BUF_ALIGN": 4,
+    "LV_DRAW_BUF_STRIDE_ALIGN": 1,
+    "LV_DRAW_LAYER_SIMPLE_BUF_SIZE": 24576,
+    "LV_DRAW_SW_ASM_CUSTOM": false,
+    "LV_DRAW_SW_ASM_HELIUM": false,
+    "LV_DRAW_SW_ASM_NEON": false,
+    "LV_DRAW_SW_ASM_NONE": true,
+    "LV_DRAW_SW_CIRCLE_CACHE_SIZE": 4,
+    "LV_DRAW_SW_COMPLEX": true,
+    "LV_DRAW_SW_DRAW_UNIT_CNT": 1,
+    "LV_DRAW_SW_SHADOW_CACHE_SIZE": 0,
+    "LV_DRAW_SW_SUPPORT_A8": true,
+    "LV_DRAW_SW_SUPPORT_AL88": true,
+    "LV_DRAW_SW_SUPPORT_ARGB8888": true,
+    "LV_DRAW_SW_SUPPORT_I1": true,
+    "LV_DRAW_SW_SUPPORT_L8": true,
+    "LV_DRAW_SW_SUPPORT_RGB565": true,
+    "LV_DRAW_SW_SUPPORT_RGB565A8": true,
+    "LV_DRAW_SW_SUPPORT_RGB888": true,
+    "LV_DRAW_SW_SUPPORT_XRGB8888": true,
+    "LV_ENABLE_GLOBAL_CUSTOM": false,
+    "LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_10": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_12": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_14": true,
+    "LV_FONT_DEFAULT_MONTSERRAT_16": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_18": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_20": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_22": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_24": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_26": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_28": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_30": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_32": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_34": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_36": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_38": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_40": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_42": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_44": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_46": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_48": false,
+    "LV_FONT_DEFAULT_MONTSERRAT_8": false,
+    "LV_FONT_DEFAULT_SIMSUN_14_CJK": false,
+    "LV_FONT_DEFAULT_SIMSUN_16_CJK": false,
+    "LV_FONT_DEFAULT_UNSCII_16": false,
+    "LV_FONT_DEFAULT_UNSCII_8": false,
+    "LV_FONT_DEJAVU_16_PERSIAN_HEBREW": false,
+    "LV_FONT_FMT_TXT_LARGE": false,
+    "LV_FONT_MONTSERRAT_10": false,
+    "LV_FONT_MONTSERRAT_12": false,
+    "LV_FONT_MONTSERRAT_14": true,
+    "LV_FONT_MONTSERRAT_16": false,
+    "LV_FONT_MONTSERRAT_18": false,
+    "LV_FONT_MONTSERRAT_20": false,
+    "LV_FONT_MONTSERRAT_22": true,
+    "LV_FONT_MONTSERRAT_24": false,
+    "LV_FONT_MONTSERRAT_26": false,
+    "LV_FONT_MONTSERRAT_28": false,
+    "LV_FONT_MONTSERRAT_28_COMPRESSED": false,
+    "LV_FONT_MONTSERRAT_30": false,
+    "LV_FONT_MONTSERRAT_32": true,
+    "LV_FONT_MONTSERRAT_34": false,
+    "LV_FONT_MONTSERRAT_36": false,
+    "LV_FONT_MONTSERRAT_38": false,
+    "LV_FONT_MONTSERRAT_40": false,
+    "LV_FONT_MONTSERRAT_42": false,
+    "LV_FONT_MONTSERRAT_44": false,
+    "LV_FONT_MONTSERRAT_46": false,
+    "LV_FONT_MONTSERRAT_48": false,
+    "LV_FONT_MONTSERRAT_8": false,
+    "LV_FONT_SIMSUN_14_CJK": false,
+    "LV_FONT_SIMSUN_16_CJK": false,
+    "LV_FONT_UNSCII_16": false,
+    "LV_FONT_UNSCII_8": false,
+    "LV_FS_DEFAULT_DRIVE_LETTER": 0,
+    "LV_GRADIENT_MAX_STOPS": 2,
+    "LV_IMAGE_HEADER_CACHE_DEF_CNT": 0,
+    "LV_LABEL_LONG_TXT_HINT": true,
+    "LV_LABEL_TEXT_SELECTION": true,
+    "LV_LABEL_WAIT_CHAR_COUNT": 3,
+    "LV_MEM_ADR": 0,
+    "LV_MEM_MONITOR_ALIGN_BOTTOM_LEFT": true,
+    "LV_MEM_MONITOR_ALIGN_BOTTOM_MID": false,
+    "LV_MEM_MONITOR_ALIGN_BOTTOM_RIGHT": false,
+    "LV_MEM_MONITOR_ALIGN_CENTER": false,
+    "LV_MEM_MONITOR_ALIGN_LEFT_MID": false,
+    "LV_MEM_MONITOR_ALIGN_RIGHT_MID": false,
+    "LV_MEM_MONITOR_ALIGN_TOP_LEFT": false,
+    "LV_MEM_MONITOR_ALIGN_TOP_MID": false,
+    "LV_MEM_MONITOR_ALIGN_TOP_RIGHT": false,
+    "LV_MEM_POOL_EXPAND_SIZE_KILOBYTES": 0,
+    "LV_MEM_SIZE_KILOBYTES": 128,
+    "LV_OBJ_STYLE_CACHE": false,
+    "LV_OS_CMSIS_RTOS2": false,
+    "LV_OS_CUSTOM": false,
+    "LV_OS_FREERTOS": false,
+    "LV_OS_MQX": false,
+    "LV_OS_NONE": true,
+    "LV_OS_PTHREAD": false,
+    "LV_OS_RTTHREAD": false,
+    "LV_OS_WINDOWS": false,
+    "LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT": false,
+    "LV_PERF_MONITOR_ALIGN_BOTTOM_MID": false,
+    "LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT": true,
+    "LV_PERF_MONITOR_ALIGN_CENTER": false,
+    "LV_PERF_MONITOR_ALIGN_LEFT_MID": false,
+    "LV_PERF_MONITOR_ALIGN_RIGHT_MID": false,
+    "LV_PERF_MONITOR_ALIGN_TOP_LEFT": false,
+    "LV_PERF_MONITOR_ALIGN_TOP_MID": false,
+    "LV_PERF_MONITOR_ALIGN_TOP_RIGHT": false,
+    "LV_SPAN_SNIPPET_STACK_SIZE": 64,
+    "LV_TEXTAREA_DEF_PWD_SHOW_TIME": 1500,
+    "LV_THEME_DEFAULT_DARK": false,
+    "LV_THEME_DEFAULT_GROW": true,
+    "LV_THEME_DEFAULT_TRANSITION_TIME": 80,
+    "LV_TXT_BREAK_CHARS": " ,.;:-_)}",
+    "LV_TXT_ENC_ASCII": false,
+    "LV_TXT_ENC_UTF8": true,
+    "LV_TXT_LINE_BREAK_LONG_LEN": 0,
+    "LV_USE_ANIMIMG": true,
+    "LV_USE_ARABIC_PERSIAN_CHARS": false,
+    "LV_USE_ARC": true,
+    "LV_USE_ASSERT_MALLOC": true,
+    "LV_USE_ASSERT_MEM_INTEGRITY": false,
+    "LV_USE_ASSERT_NULL": true,
+    "LV_USE_ASSERT_OBJ": false,
+    "LV_USE_ASSERT_STYLE": false,
+    "LV_USE_BAR": true,
+    "LV_USE_BARCODE": false,
+    "LV_USE_BIDI": false,
+    "LV_USE_BMP": false,
+    "LV_USE_BUILTIN_MALLOC": true,
+    "LV_USE_BUILTIN_SPRINTF": true,
+    "LV_USE_BUILTIN_STRING": true,
+    "LV_USE_BUTTON": true,
+    "LV_USE_BUTTONMATRIX": true,
+    "LV_USE_CALENDAR": true,
+    "LV_USE_CALENDAR_CHINESE": false,
+    "LV_USE_CALENDAR_HEADER_ARROW": true,
+    "LV_USE_CALENDAR_HEADER_DROPDOWN": true,
+    "LV_USE_CANVAS": true,
+    "LV_USE_CHART": true,
+    "LV_USE_CHECKBOX": true,
+    "LV_USE_CLIB_MALLOC": false,
+    "LV_USE_CLIB_SPRINTF": false,
+    "LV_USE_CLIB_STRING": false,
+    "LV_USE_CUSTOM_MALLOC": false,
+    "LV_USE_CUSTOM_SPRINTF": false,
+    "LV_USE_CUSTOM_STRING": false,
+    "LV_USE_DEMO_FLEX_LAYOUT": false,
+    "LV_USE_DEMO_KEYPAD_AND_ENCODER": false,
+    "LV_USE_DEMO_MULTILANG": false,
+    "LV_USE_DEMO_MUSIC": false,
+    "LV_USE_DEMO_RENDER": false,
+    "LV_USE_DEMO_SCROLL": false,
+    "LV_USE_DEMO_STRESS": false,
+    "LV_USE_DEMO_WIDGETS": false,
+    "LV_USE_DRAW_ARM2D_SYNC": false,
+    "LV_USE_DRAW_DAVE2D": false,
+    "LV_USE_DRAW_SDL": false,
+    "LV_USE_DRAW_SW": true,
+    "LV_USE_DRAW_SW_ASM": 0,
+    "LV_USE_DRAW_SW_COMPLEX_GRADIENTS": false,
+    "LV_USE_DRAW_VGLITE": false,
+    "LV_USE_DRAW_VG_LITE": false,
+    "LV_USE_DROPDOWN": true,
+    "LV_USE_EVDEV": false,
+    "LV_USE_FFMPEG": false,
+    "LV_USE_FILE_EXPLORER": false,
+    "LV_USE_FLEX": true,
+    "LV_USE_FLOAT": false,
+    "LV_USE_FONT_COMPRESSED": false,
+    "LV_USE_FONT_PLACEHOLDER": true,
+    "LV_USE_FRAGMENT": false,
+    "LV_USE_FREETYPE": false,
+    "LV_USE_FS_ARDUINO_ESP_LITTLEFS": false,
+    "LV_USE_FS_ARDUINO_SD": false,
+    "LV_USE_FS_FATFS": false,
+    "LV_USE_FS_LITTLEFS": false,
+    "LV_USE_FS_MEMFS": false,
+    "LV_USE_FS_POSIX": false,
+    "LV_USE_FS_STDIO": false,
+    "LV_USE_FS_WIN32": false,
+    "LV_USE_GENERIC_MIPI": false,
+    "LV_USE_GIF": false,
+    "LV_USE_GRID": true,
+    "LV_USE_GRIDNAV": false,
+    "LV_USE_ILI9341": false,
+    "LV_USE_IMAGE": true,
+    "LV_USE_IMAGEBUTTON": true,
+    "LV_USE_IME_PINYIN": false,
+    "LV_USE_IMGFONT": false,
+    "LV_USE_KEYBOARD": true,
+    "LV_USE_LABEL": true,
+    "LV_USE_LAYER_DEBUG": false,
+    "LV_USE_LED": true,
+    "LV_USE_LIBINPUT": false,
+    "LV_USE_LIBJPEG_TURBO": false,
+    "LV_USE_LIBPNG": false,
+    "LV_USE_LINE": true,
+    "LV_USE_LINUX_DRM": false,
+    "LV_USE_LINUX_FBDEV": false,
+    "LV_USE_LIST": true,
+    "LV_USE_LODEPNG": false,
+    "LV_USE_LOG": false,
+    "LV_USE_LZ4": false,
+    "LV_USE_MATRIX": false,
+    "LV_USE_MEM_MONITOR": true,
+    "LV_USE_MENU": true,
+    "LV_USE_MICROPYTHON_MALLOC": false,
+    "LV_USE_MONKEY": false,
+    "LV_USE_MSGBOX": true,
+    "LV_USE_NATIVE_HELIUM_ASM": false,
+    "LV_USE_NUTTX": false,
+    "LV_USE_OBJ_ID": false,
+    "LV_USE_OBJ_PROPERTY": false,
+    "LV_USE_OBSERVER": true,
+    "LV_USE_OPENGLES": false,
+    "LV_USE_OS": 0,
+    "LV_USE_PARALLEL_DRAW_DEBUG": false,
+    "LV_USE_PERF_MONITOR": true,
+    "LV_USE_PERF_MONITOR_LOG_MODE": false,
+    "LV_USE_PRIVATE_API": false,
+    "LV_USE_PROFILER": false,
+    "LV_USE_PXP": false,
+    "LV_USE_QNX": false,
+    "LV_USE_QRCODE": true,
+    "LV_USE_REFR_DEBUG": false,
+    "LV_USE_RENESAS_GLCDC": false,
+    "LV_USE_RLE": false,
+    "LV_USE_RLOTTIE": false,
+    "LV_USE_ROLLER": true,
+    "LV_USE_RTTHREAD_MALLOC": false,
+    "LV_USE_SCALE": true,
+    "LV_USE_SDL": false,
+    "LV_USE_SLIDER": true,
+    "LV_USE_SNAPSHOT": false,
+    "LV_USE_SPAN": true,
+    "LV_USE_SPINBOX": true,
+    "LV_USE_SPINNER": true,
+    "LV_USE_ST7735": false,
+    "LV_USE_ST7789": false,
+    "LV_USE_ST7796": false,
+    "LV_USE_SWITCH": true,
+    "LV_USE_SYSMON": true,
+    "LV_USE_TABLE": true,
+    "LV_USE_TABVIEW": true,
+    "LV_USE_TEXTAREA": true,
+    "LV_USE_TFT_ESPI": false,
+    "LV_USE_THEME_DEFAULT": true,
+    "LV_USE_THEME_MONO": false,
+    "LV_USE_THEME_SIMPLE": true,
+    "LV_USE_THORVG": false,
+    "LV_USE_TILEVIEW": true,
+    "LV_USE_TINY_TTF": false,
+    "LV_USE_TJPGD": false,
+    "LV_USE_VECTOR_GRAPHIC": false,
+    "LV_USE_WAYLAND": false,
+    "LV_USE_WIN": true,
+    "LV_USE_X11": false,
+    "LV_WIDGETS_HAS_DEFAULT_VALUE": true,
+    "LWIP_AUTOIP": false,
+    "LWIP_BRIDGEIF_MAX_PORTS": 7,
+    "LWIP_BROADCAST_PING": false,
+    "LWIP_CHECKSUM_CHECK_ICMP": true,
+    "LWIP_CHECKSUM_CHECK_IP": false,
+    "LWIP_CHECKSUM_CHECK_UDP": false,
+    "LWIP_CHECK_THREAD_SAFETY": false,
+    "LWIP_DEBUG": false,
+    "LWIP_DHCPS": true,
+    "LWIP_DHCPS_LEASE_UNIT": 60,
+    "LWIP_DHCPS_MAX_STATION_NUM": 8,
+    "LWIP_DHCP_COARSE_TIMER_SECS": 1,
+    "LWIP_DHCP_DISABLE_CLIENT_ID": false,
+    "LWIP_DHCP_DISABLE_VENDOR_CLASS_ID": true,
+    "LWIP_DHCP_DOES_ARP_CHECK": true,
+    "LWIP_DHCP_GET_NTP_SRV": false,
+    "LWIP_DHCP_OPTIONS_LEN": 68,
+    "LWIP_DHCP_RESTORE_LAST_IP": false,
+    "LWIP_DNS_MAX_SERVERS": 3,
+    "LWIP_DNS_SUPPORT_MDNS_QUERIES": true,
+    "LWIP_ESP_GRATUITOUS_ARP": true,
+    "LWIP_ESP_LWIP_ASSERT": true,
+    "LWIP_ESP_MLDV6_REPORT": true,
+    "LWIP_EXTRA_IRAM_OPTIMIZATION": false,
+    "LWIP_FALLBACK_DNS_SERVER_SUPPORT": false,
+    "LWIP_FORCE_ROUTER_FORWARDING": false,
+    "LWIP_GARP_TMR_INTERVAL": 60,
+    "LWIP_HOOK_DNS_EXT_RESOLVE_CUSTOM": false,
+    "LWIP_HOOK_DNS_EXT_RESOLVE_NONE": true,
+    "LWIP_HOOK_IP6_INPUT_CUSTOM": false,
+    "LWIP_HOOK_IP6_INPUT_DEFAULT": false,
+    "LWIP_HOOK_IP6_INPUT_NONE": true,
+    "LWIP_HOOK_IP6_ROUTE_CUSTOM": false,
+    "LWIP_HOOK_IP6_ROUTE_DEFAULT": false,
+    "LWIP_HOOK_IP6_ROUTE_NONE": true,
+    "LWIP_HOOK_IP6_SELECT_SRC_ADDR_CUSTOM": false,
+    "LWIP_HOOK_IP6_SELECT_SRC_ADDR_DEFAULT": false,
+    "LWIP_HOOK_IP6_SELECT_SRC_ADDR_NONE": true,
+    "LWIP_HOOK_ND6_GET_GW_CUSTOM": false,
+    "LWIP_HOOK_ND6_GET_GW_DEFAULT": false,
+    "LWIP_HOOK_ND6_GET_GW_NONE": true,
+    "LWIP_HOOK_NETCONN_EXT_RESOLVE_CUSTOM": false,
+    "LWIP_HOOK_NETCONN_EXT_RESOLVE_DEFAULT": false,
+    "LWIP_HOOK_NETCONN_EXT_RESOLVE_NONE": true,
+    "LWIP_HOOK_TCP_ISN_CUSTOM": false,
+    "LWIP_HOOK_TCP_ISN_DEFAULT": true,
+    "LWIP_HOOK_TCP_ISN_NONE": false,
+    "LWIP_ICMP": true,
+    "LWIP_IP4_FRAG": true,
+    "LWIP_IP4_REASSEMBLY": false,
+    "LWIP_IP6_FRAG": true,
+    "LWIP_IP6_REASSEMBLY": false,
+    "LWIP_IPV4": true,
+    "LWIP_IPV6": true,
+    "LWIP_IPV6_AUTOCONFIG": false,
+    "LWIP_IPV6_FORWARD": false,
+    "LWIP_IPV6_MEMP_NUM_ND6_QUEUE": 3,
+    "LWIP_IPV6_ND6_NUM_DESTINATIONS": 10,
+    "LWIP_IPV6_ND6_NUM_NEIGHBORS": 5,
+    "LWIP_IPV6_ND6_NUM_PREFIXES": 5,
+    "LWIP_IPV6_ND6_NUM_ROUTERS": 3,
+    "LWIP_IPV6_NUM_ADDRESSES": 3,
+    "LWIP_IP_DEFAULT_TTL": 64,
+    "LWIP_IP_FORWARD": false,
+    "LWIP_IP_REASS_MAX_PBUFS": 10,
+    "LWIP_IRAM_OPTIMIZATION": false,
+    "LWIP_L2_TO_L3_COPY": false,
+    "LWIP_LOCAL_HOSTNAME": "espressif",
+    "LWIP_LOOPBACK_MAX_PBUFS": 8,
+    "LWIP_MAX_ACTIVE_TCP": 16,
+    "LWIP_MAX_LISTENING_TCP": 16,
+    "LWIP_MAX_RAW_PCBS": 16,
+    "LWIP_MAX_SOCKETS": 10,
+    "LWIP_MAX_UDP_PCBS": 16,
+    "LWIP_MLDV6_TMR_INTERVAL": 40,
+    "LWIP_MULTICAST_PING": false,
+    "LWIP_ND6": true,
+    "LWIP_NETBUF_RECVINFO": false,
+    "LWIP_NETIF_API": false,
+    "LWIP_NETIF_LOOPBACK": true,
+    "LWIP_NETIF_STATUS_CALLBACK": false,
+    "LWIP_NUM_NETIF_CLIENT_DATA": 0,
+    "LWIP_PPP_SUPPORT": false,
+    "LWIP_SLIP_SUPPORT": false,
+    "LWIP_SNTP_MAX_SERVERS": 1,
+    "LWIP_SNTP_UPDATE_DELAY": 3600000,
+    "LWIP_SO_LINGER": false,
+    "LWIP_SO_RCVBUF": false,
+    "LWIP_SO_REUSE": true,
+    "LWIP_SO_REUSE_RXTOALL": true,
+    "LWIP_STATS": false,
+    "LWIP_TCPIP_CORE_LOCKING": false,
+    "LWIP_TCPIP_RECVMBOX_SIZE": 32,
+    "LWIP_TCPIP_TASK_AFFINITY": 2147483647,
+    "LWIP_TCPIP_TASK_AFFINITY_CPU0": false,
+    "LWIP_TCPIP_TASK_AFFINITY_CPU1": false,
+    "LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY": true,
+    "LWIP_TCPIP_TASK_PRIO": 18,
+    "LWIP_TCPIP_TASK_STACK_SIZE": 3072,
+    "LWIP_TCP_FIN_WAIT_TIMEOUT": 20000,
+    "LWIP_TCP_HIGH_SPEED_RETRANSMISSION": true,
+    "LWIP_TCP_MAXRTX": 12,
+    "LWIP_TCP_MSL": 60000,
+    "LWIP_TCP_MSS": 1440,
+    "LWIP_TCP_OOSEQ_MAX_PBUFS": 4,
+    "LWIP_TCP_OOSEQ_TIMEOUT": 6,
+    "LWIP_TCP_OVERSIZE_DISABLE": false,
+    "LWIP_TCP_OVERSIZE_MSS": true,
+    "LWIP_TCP_OVERSIZE_QUARTER_MSS": false,
+    "LWIP_TCP_QUEUE_OOSEQ": true,
+    "LWIP_TCP_RECVMBOX_SIZE": 6,
+    "LWIP_TCP_RTO_TIME": 1500,
+    "LWIP_TCP_SACK_OUT": false,
+    "LWIP_TCP_SND_BUF_DEFAULT": 5760,
+    "LWIP_TCP_SYNMAXRTX": 12,
+    "LWIP_TCP_TMR_INTERVAL": 250,
+    "LWIP_TCP_WND_DEFAULT": 5760,
+    "LWIP_TIMERS_ONDEMAND": true,
+    "LWIP_UDP_RECVMBOX_SIZE": 6,
+    "LWIP_USE_ONLY_LWIP_SELECT": false,
+    "LWIP_WND_SCALE": false,
+    "MBEDTLS_AES_C": true,
+    "MBEDTLS_AES_USE_INTERRUPT": true,
+    "MBEDTLS_ASYMMETRIC_CONTENT_LEN": true,
+    "MBEDTLS_ATCA_HW_ECDSA_SIGN": false,
+    "MBEDTLS_ATCA_HW_ECDSA_VERIFY": false,
+    "MBEDTLS_BLOWFISH_C": false,
+    "MBEDTLS_CAMELLIA_C": false,
+    "MBEDTLS_CCM_C": true,
+    "MBEDTLS_CERTIFICATE_BUNDLE": true,
+    "MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN": false,
+    "MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL": true,
+    "MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE": false,
+    "MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS": 200,
+    "MBEDTLS_CHACHA20_C": false,
+    "MBEDTLS_CLIENT_SSL_SESSION_TICKETS": true,
+    "MBEDTLS_CMAC_C": true,
+    "MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE": false,
+    "MBEDTLS_CUSTOM_MEM_ALLOC": false,
+    "MBEDTLS_DEBUG": false,
+    "MBEDTLS_DEFAULT_MEM_ALLOC": false,
+    "MBEDTLS_DES_C": false,
+    "MBEDTLS_DHM_C": false,
+    "MBEDTLS_DYNAMIC_BUFFER": false,
+    "MBEDTLS_ECDH_C": true,
+    "MBEDTLS_ECDSA_C": true,
+    "MBEDTLS_ECDSA_DETERMINISTIC": true,
+    "MBEDTLS_ECJPAKE_C": false,
+    "MBEDTLS_ECP_C": true,
+    "MBEDTLS_ECP_DP_BP256R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_BP384R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_BP512R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_CURVE25519_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP192K1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP192R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP224K1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP224R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP256K1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP256R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP384R1_ENABLED": true,
+    "MBEDTLS_ECP_DP_SECP521R1_ENABLED": true,
+    "MBEDTLS_ECP_FIXED_POINT_OPTIM": true,
+    "MBEDTLS_ECP_NIST_OPTIM": true,
+    "MBEDTLS_ECP_RESTARTABLE": false,
+    "MBEDTLS_ERROR_STRINGS": true,
+    "MBEDTLS_EXTERNAL_MEM_ALLOC": false,
+    "MBEDTLS_GCM_C": true,
+    "MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER": true,
+    "MBEDTLS_HARDWARE_AES": true,
+    "MBEDTLS_HARDWARE_MPI": true,
+    "MBEDTLS_HARDWARE_SHA": true,
+    "MBEDTLS_HAVE_TIME": true,
+    "MBEDTLS_HAVE_TIME_DATE": false,
+    "MBEDTLS_HKDF_C": false,
+    "MBEDTLS_INTERNAL_MEM_ALLOC": true,
+    "MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA": true,
+    "MBEDTLS_KEY_EXCHANGE_ECDHE_RSA": true,
+    "MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA": true,
+    "MBEDTLS_KEY_EXCHANGE_ECDH_RSA": true,
+    "MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE": true,
+    "MBEDTLS_KEY_EXCHANGE_RSA": true,
+    "MBEDTLS_LARGE_KEY_SOFTWARE_MPI": false,
+    "MBEDTLS_MPI_USE_INTERRUPT": true,
+    "MBEDTLS_NIST_KW_C": false,
+    "MBEDTLS_PEM_PARSE_C": true,
+    "MBEDTLS_PEM_WRITE_C": true,
+    "MBEDTLS_PKCS7_C": true,
+    "MBEDTLS_PLATFORM_TIME_ALT": false,
+    "MBEDTLS_POLY1305_C": false,
+    "MBEDTLS_PSK_MODES": false,
+    "MBEDTLS_RIPEMD160_C": false,
+    "MBEDTLS_ROM_MD5": true,
+    "MBEDTLS_SERVER_SSL_SESSION_TICKETS": true,
+    "MBEDTLS_SHA3_C": false,
+    "MBEDTLS_SHA512_C": true,
+    "MBEDTLS_SSL_ALPN": true,
+    "MBEDTLS_SSL_CONTEXT_SERIALIZATION": false,
+    "MBEDTLS_SSL_IN_CONTENT_LEN": 16384,
+    "MBEDTLS_SSL_KEEP_PEER_CERTIFICATE": true,
+    "MBEDTLS_SSL_OUT_CONTENT_LEN": 4096,
+    "MBEDTLS_SSL_PROTO_DTLS": false,
+    "MBEDTLS_SSL_PROTO_GMTSSL1_1": false,
+    "MBEDTLS_SSL_PROTO_TLS1_2": true,
+    "MBEDTLS_SSL_PROTO_TLS1_3": false,
+    "MBEDTLS_SSL_RENEGOTIATION": true,
+    "MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH": false,
+    "MBEDTLS_THREADING_C": false,
+    "MBEDTLS_TLS_CLIENT": true,
+    "MBEDTLS_TLS_CLIENT_ONLY": false,
+    "MBEDTLS_TLS_DISABLED": false,
+    "MBEDTLS_TLS_ENABLED": true,
+    "MBEDTLS_TLS_SERVER": true,
+    "MBEDTLS_TLS_SERVER_AND_CLIENT": true,
+    "MBEDTLS_TLS_SERVER_ONLY": false,
+    "MBEDTLS_X509_CRL_PARSE_C": true,
+    "MBEDTLS_X509_CSR_PARSE_C": true,
+    "MBEDTLS_X509_TRUSTED_CERT_CALLBACK": false,
+    "MBEDTLS_XTEA_C": false,
+    "MCPWM_CTRL_FUNC_IN_IRAM": false,
+    "MCPWM_ENABLE_DEBUG_LOG": false,
+    "MCPWM_ISR_IRAM_SAFE": false,
+    "MCPWM_SUPPRESS_DEPRECATE_WARN": false,
+    "MMU_PAGE_MODE": "64KB",
+    "MMU_PAGE_SIZE": 65536,
+    "MMU_PAGE_SIZE_64KB": true,
+    "MQTT_CUSTOM_OUTBOX": false,
+    "MQTT_MSG_ID_INCREMENTAL": false,
+    "MQTT_PROTOCOL_311": true,
+    "MQTT_PROTOCOL_5": false,
+    "MQTT_REPORT_DELETED_MESSAGES": false,
+    "MQTT_SKIP_PUBLISH_IF_DISCONNECTED": false,
+    "MQTT_TASK_CORE_SELECTION_ENABLED": false,
+    "MQTT_TRANSPORT_SSL": true,
+    "MQTT_TRANSPORT_WEBSOCKET": true,
+    "MQTT_TRANSPORT_WEBSOCKET_SECURE": true,
+    "MQTT_USE_CUSTOM_CONFIG": false,
+    "NEWLIB_NANO_FORMAT": false,
+    "NEWLIB_STDIN_LINE_ENDING_CR": true,
+    "NEWLIB_STDIN_LINE_ENDING_CRLF": false,
+    "NEWLIB_STDIN_LINE_ENDING_LF": false,
+    "NEWLIB_STDOUT_LINE_ENDING_CR": false,
+    "NEWLIB_STDOUT_LINE_ENDING_CRLF": true,
+    "NEWLIB_STDOUT_LINE_ENDING_LF": false,
+    "NEWLIB_TIME_SYSCALL_USE_HRT": false,
+    "NEWLIB_TIME_SYSCALL_USE_NONE": false,
+    "NEWLIB_TIME_SYSCALL_USE_RTC": false,
+    "NEWLIB_TIME_SYSCALL_USE_RTC_HRT": true,
+    "NVS_ASSERT_ERROR_CHECK": false,
+    "OPENTHREAD_ENABLED": false,
+    "OPENTHREAD_SPINEL_ONLY": false,
+    "PARTITION_TABLE_CUSTOM": true,
+    "PARTITION_TABLE_CUSTOM_FILENAME": "partitions.csv",
+    "PARTITION_TABLE_FILENAME": "partitions.csv",
+    "PARTITION_TABLE_MD5": true,
+    "PARTITION_TABLE_OFFSET": 32768,
+    "PARTITION_TABLE_SINGLE_APP": false,
+    "PARTITION_TABLE_SINGLE_APP_LARGE": false,
+    "PARTITION_TABLE_TWO_OTA": false,
+    "PCNT_CTRL_FUNC_IN_IRAM": false,
+    "PCNT_ENABLE_DEBUG_LOG": false,
+    "PCNT_ISR_IRAM_SAFE": false,
+    "PCNT_SUPPRESS_DEPRECATE_WARN": false,
+    "PERIPH_CTRL_FUNC_IN_IRAM": true,
+    "PM_ENABLE": false,
+    "PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP": true,
+    "PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP": true,
+    "PM_SLP_IRAM_OPT": false,
+    "PTHREAD_DEFAULT_CORE_0": false,
+    "PTHREAD_DEFAULT_CORE_1": false,
+    "PTHREAD_DEFAULT_CORE_NO_AFFINITY": true,
+    "PTHREAD_STACK_MIN": 768,
+    "PTHREAD_TASK_CORE_DEFAULT": -1,
+    "PTHREAD_TASK_NAME_DEFAULT": "pthread",
+    "PTHREAD_TASK_PRIO_DEFAULT": 5,
+    "PTHREAD_TASK_STACK_SIZE_DEFAULT": 3072,
+    "RINGBUF_PLACE_FUNCTIONS_INTO_FLASH": false,
+    "RMT_ENABLE_DEBUG_LOG": false,
+    "RMT_ISR_IRAM_SAFE": false,
+    "RMT_RECV_FUNC_IN_IRAM": false,
+    "RMT_SUPPRESS_DEPRECATE_WARN": false,
+    "RTC_CLK_CAL_CYCLES": 1024,
+    "RTC_CLK_SRC_EXT_CRYS": false,
+    "RTC_CLK_SRC_EXT_OSC": false,
+    "RTC_CLK_SRC_INT_8MD256": false,
+    "RTC_CLK_SRC_INT_RC": true,
+    "SDM_CTRL_FUNC_IN_IRAM": false,
+    "SDM_ENABLE_DEBUG_LOG": false,
+    "SDM_SUPPRESS_DEPRECATE_WARN": false,
+    "SECURE_BOOT": false,
+    "SECURE_BOOT_V2_PREFERRED": true,
+    "SECURE_BOOT_V2_RSA_SUPPORTED": true,
+    "SECURE_FLASH_ENC_ENABLED": false,
+    "SECURE_ROM_DL_MODE_ENABLED": true,
+    "SECURE_SIGNED_APPS_NO_SECURE_BOOT": false,
+    "SOC_ADC_ARBITER_SUPPORTED": true,
+    "SOC_ADC_ATTEN_NUM": 4,
+    "SOC_ADC_CALIBRATION_V1_SUPPORTED": true,
+    "SOC_ADC_DIGI_CONTROLLER_NUM": 2,
+    "SOC_ADC_DIGI_DATA_BYTES_PER_CONV": 4,
+    "SOC_ADC_DIGI_IIR_FILTER_NUM": 2,
+    "SOC_ADC_DIGI_MAX_BITWIDTH": 12,
+    "SOC_ADC_DIGI_MIN_BITWIDTH": 12,
+    "SOC_ADC_DIGI_RESULT_BYTES": 4,
+    "SOC_ADC_DIG_CTRL_SUPPORTED": true,
+    "SOC_ADC_DIG_IIR_FILTER_SUPPORTED": true,
+    "SOC_ADC_DMA_SUPPORTED": true,
+    "SOC_ADC_MAX_CHANNEL_NUM": 10,
+    "SOC_ADC_MONITOR_SUPPORTED": true,
+    "SOC_ADC_PATT_LEN_MAX": 24,
+    "SOC_ADC_PERIPH_NUM": 2,
+    "SOC_ADC_RTC_CTRL_SUPPORTED": true,
+    "SOC_ADC_RTC_MAX_BITWIDTH": 12,
+    "SOC_ADC_RTC_MIN_BITWIDTH": 12,
+    "SOC_ADC_SAMPLE_FREQ_THRES_HIGH": 83333,
+    "SOC_ADC_SAMPLE_FREQ_THRES_LOW": 611,
+    "SOC_ADC_SELF_HW_CALI_SUPPORTED": true,
+    "SOC_ADC_SUPPORTED": true,
+    "SOC_AES_GDMA": true,
+    "SOC_AES_SUPPORTED": true,
+    "SOC_AES_SUPPORT_AES_128": true,
+    "SOC_AES_SUPPORT_AES_256": true,
+    "SOC_AES_SUPPORT_DMA": true,
+    "SOC_APB_BACKUP_DMA": true,
+    "SOC_APPCPU_HAS_CLOCK_GATING_BUG": true,
+    "SOC_ASYNC_MEMCPY_SUPPORTED": true,
+    "SOC_BLE_50_SUPPORTED": true,
+    "SOC_BLE_DEVICE_PRIVACY_SUPPORTED": true,
+    "SOC_BLE_MESH_SUPPORTED": true,
+    "SOC_BLE_SUPPORTED": true,
+    "SOC_BLUFI_SUPPORTED": true,
+    "SOC_BOD_SUPPORTED": true,
+    "SOC_BROWNOUT_RESET_SUPPORTED": true,
+    "SOC_BT_SUPPORTED": true,
+    "SOC_CACHE_FREEZE_SUPPORTED": true,
+    "SOC_CACHE_SUPPORT_WRAP": true,
+    "SOC_CACHE_WRITEBACK_SUPPORTED": true,
+    "SOC_CCOMP_TIMER_SUPPORTED": true,
+    "SOC_CLK_RC_FAST_D256_SUPPORTED": true,
+    "SOC_CLK_RC_FAST_SUPPORT_CALIBRATION": true,
+    "SOC_CLK_XTAL32K_SUPPORTED": true,
+    "SOC_COEX_HW_PTI": true,
+    "SOC_CONFIGURABLE_VDDSDIO_SUPPORTED": true,
+    "SOC_CPU_BREAKPOINTS_NUM": 2,
+    "SOC_CPU_CORES_NUM": 2,
+    "SOC_CPU_HAS_FPU": true,
+    "SOC_CPU_INTR_NUM": 32,
+    "SOC_CPU_WATCHPOINTS_NUM": 2,
+    "SOC_CPU_WATCHPOINT_MAX_REGION_SIZE": 64,
+    "SOC_DEDICATED_GPIO_SUPPORTED": true,
+    "SOC_DEDIC_GPIO_IN_CHANNELS_NUM": 8,
+    "SOC_DEDIC_GPIO_OUT_AUTO_ENABLE": true,
+    "SOC_DEDIC_GPIO_OUT_CHANNELS_NUM": 8,
+    "SOC_DIG_SIGN_SUPPORTED": true,
+    "SOC_DS_KEY_CHECK_MAX_WAIT_US": 1100,
+    "SOC_DS_KEY_PARAM_MD_IV_LENGTH": 16,
+    "SOC_DS_SIGNATURE_MAX_BIT_LEN": 4096,
+    "SOC_EFUSE_BLOCK9_KEY_PURPOSE_QUIRK": true,
+    "SOC_EFUSE_DIS_DIRECT_BOOT": true,
+    "SOC_EFUSE_DIS_DOWNLOAD_DCACHE": true,
+    "SOC_EFUSE_DIS_DOWNLOAD_ICACHE": true,
+    "SOC_EFUSE_DIS_ICACHE": true,
+    "SOC_EFUSE_DIS_USB_JTAG": true,
+    "SOC_EFUSE_HARD_DIS_JTAG": true,
+    "SOC_EFUSE_KEY_PURPOSE_FIELD": true,
+    "SOC_EFUSE_REVOKE_BOOT_KEY_DIGESTS": true,
+    "SOC_EFUSE_SECURE_BOOT_KEY_DIGESTS": 3,
+    "SOC_EFUSE_SOFT_DIS_JTAG": true,
+    "SOC_EXTERNAL_COEX_LEADER_TX_LINE": true,
+    "SOC_FLASH_ENCRYPTED_XTS_AES_BLOCK_MAX": 64,
+    "SOC_FLASH_ENCRYPTION_XTS_AES": true,
+    "SOC_FLASH_ENCRYPTION_XTS_AES_128": true,
+    "SOC_FLASH_ENCRYPTION_XTS_AES_256": true,
+    "SOC_FLASH_ENCRYPTION_XTS_AES_OPTIONS": true,
+    "SOC_FLASH_ENC_SUPPORTED": true,
+    "SOC_GDMA_GROUPS": true,
+    "SOC_GDMA_PAIRS_PER_GROUP": 5,
+    "SOC_GDMA_SUPPORTED": true,
+    "SOC_GDMA_SUPPORT_PSRAM": true,
+    "SOC_GPIO_FILTER_CLK_SUPPORT_APB": true,
+    "SOC_GPIO_IN_RANGE_MAX": 48,
+    "SOC_GPIO_OUT_RANGE_MAX": 48,
+    "SOC_GPIO_PIN_COUNT": 49,
+    "SOC_GPIO_PORT": 1,
+    "SOC_GPIO_SUPPORT_FORCE_HOLD": true,
+    "SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER": true,
+    "SOC_GPIO_SUPPORT_RTC_INDEPENDENT": true,
+    "SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK": 562949886312448,
+    "SOC_GPIO_VALID_GPIO_MASK": 562949953421311,
+    "SOC_GPSPI_SUPPORTED": true,
+    "SOC_GPTIMER_SUPPORTED": true,
+    "SOC_HMAC_SUPPORTED": true,
+    "SOC_I2C_CMD_REG_NUM": 8,
+    "SOC_I2C_FIFO_LEN": 32,
+    "SOC_I2C_NUM": 2,
+    "SOC_I2C_SUPPORTED": true,
+    "SOC_I2C_SUPPORT_HW_CLR_BUS": true,
+    "SOC_I2C_SUPPORT_RTC": true,
+    "SOC_I2C_SUPPORT_SLAVE": true,
+    "SOC_I2C_SUPPORT_XTAL": true,
+    "SOC_I2S_HW_VERSION_2": true,
+    "SOC_I2S_NUM": 2,
+    "SOC_I2S_PDM_MAX_RX_LINES": 4,
+    "SOC_I2S_PDM_MAX_TX_LINES": 2,
+    "SOC_I2S_SUPPORTED": true,
+    "SOC_I2S_SUPPORTS_PCM": true,
+    "SOC_I2S_SUPPORTS_PDM": true,
+    "SOC_I2S_SUPPORTS_PDM_RX": true,
+    "SOC_I2S_SUPPORTS_PDM_TX": true,
+    "SOC_I2S_SUPPORTS_PLL_F160M": true,
+    "SOC_I2S_SUPPORTS_TDM": true,
+    "SOC_I2S_SUPPORTS_XTAL": true,
+    "SOC_LCDCAM_SUPPORTED": true,
+    "SOC_LCD_I80_BUSES": 1,
+    "SOC_LCD_I80_BUS_WIDTH": 16,
+    "SOC_LCD_I80_SUPPORTED": true,
+    "SOC_LCD_RGB_DATA_WIDTH": 16,
+    "SOC_LCD_RGB_PANELS": 1,
+    "SOC_LCD_RGB_SUPPORTED": true,
+    "SOC_LCD_SUPPORT_RGB_YUV_CONV": true,
+    "SOC_LEDC_CHANNEL_NUM": 8,
+    "SOC_LEDC_SUPPORTED": true,
+    "SOC_LEDC_SUPPORT_APB_CLOCK": true,
+    "SOC_LEDC_SUPPORT_FADE_STOP": true,
+    "SOC_LEDC_SUPPORT_XTAL_CLOCK": true,
+    "SOC_LEDC_TIMER_BIT_WIDTH": 14,
+    "SOC_MAC_BB_PD_MEM_SIZE": 192,
+    "SOC_MCPWM_CAPTURE_CHANNELS_PER_TIMER": 3,
+    "SOC_MCPWM_CAPTURE_TIMERS_PER_GROUP": true,
+    "SOC_MCPWM_COMPARATORS_PER_OPERATOR": 2,
+    "SOC_MCPWM_GENERATORS_PER_OPERATOR": 2,
+    "SOC_MCPWM_GPIO_FAULTS_PER_GROUP": 3,
+    "SOC_MCPWM_GPIO_SYNCHROS_PER_GROUP": 3,
+    "SOC_MCPWM_GROUPS": 2,
+    "SOC_MCPWM_OPERATORS_PER_GROUP": 3,
+    "SOC_MCPWM_SUPPORTED": true,
+    "SOC_MCPWM_SWSYNC_CAN_PROPAGATE": true,
+    "SOC_MCPWM_TIMERS_PER_GROUP": 3,
+    "SOC_MCPWM_TRIGGERS_PER_OPERATOR": 2,
+    "SOC_MEMPROT_CPU_PREFETCH_PAD_SIZE": 16,
+    "SOC_MEMPROT_MEM_ALIGN_SIZE": 256,
+    "SOC_MEMPROT_SUPPORTED": true,
+    "SOC_MEMSPI_IS_INDEPENDENT": true,
+    "SOC_MEMSPI_SRC_FREQ_120M": true,
+    "SOC_MEMSPI_SRC_FREQ_20M_SUPPORTED": true,
+    "SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED": true,
+    "SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED": true,
+    "SOC_MMU_LINEAR_ADDRESS_REGION_NUM": 1,
+    "SOC_MMU_PERIPH_NUM": 1,
+    "SOC_MPI_SUPPORTED": true,
+    "SOC_MPU_MIN_REGION_SIZE": 536870912,
+    "SOC_MPU_REGIONS_MAX_NUM": 8,
+    "SOC_PCNT_CHANNELS_PER_UNIT": 2,
+    "SOC_PCNT_GROUPS": 1,
+    "SOC_PCNT_SUPPORTED": true,
+    "SOC_PCNT_THRES_POINT_PER_UNIT": 2,
+    "SOC_PCNT_UNITS_PER_GROUP": 4,
+    "SOC_PHY_COMBO_MODULE": true,
+    "SOC_PHY_DIG_REGS_MEM_SIZE": 21,
+    "SOC_PM_CPU_RETENTION_BY_RTCCNTL": true,
+    "SOC_PM_MODEM_RETENTION_BY_BACKUPDMA": true,
+    "SOC_PM_SUPPORT_BT_WAKEUP": true,
+    "SOC_PM_SUPPORT_CPU_PD": true,
+    "SOC_PM_SUPPORT_DEEPSLEEP_CHECK_STUB_ONLY": true,
+    "SOC_PM_SUPPORT_EXT0_WAKEUP": true,
+    "SOC_PM_SUPPORT_EXT1_WAKEUP": true,
+    "SOC_PM_SUPPORT_EXT_WAKEUP": true,
+    "SOC_PM_SUPPORT_MAC_BB_PD": true,
+    "SOC_PM_SUPPORT_MODEM_PD": true,
+    "SOC_PM_SUPPORT_RC_FAST_PD": true,
+    "SOC_PM_SUPPORT_RTC_PERIPH_PD": true,
+    "SOC_PM_SUPPORT_TAGMEM_PD": true,
+    "SOC_PM_SUPPORT_TOUCH_SENSOR_WAKEUP": true,
+    "SOC_PM_SUPPORT_VDDSDIO_PD": true,
+    "SOC_PM_SUPPORT_WIFI_WAKEUP": true,
+    "SOC_PSRAM_DMA_CAPABLE": true,
+    "SOC_RISCV_COPROC_SUPPORTED": true,
+    "SOC_RMT_CHANNELS_PER_GROUP": 8,
+    "SOC_RMT_GROUPS": 1,
+    "SOC_RMT_MEM_WORDS_PER_CHANNEL": 48,
+    "SOC_RMT_RX_CANDIDATES_PER_GROUP": 4,
+    "SOC_RMT_SUPPORTED": true,
+    "SOC_RMT_SUPPORT_APB": true,
+    "SOC_RMT_SUPPORT_DMA": true,
+    "SOC_RMT_SUPPORT_RC_FAST": true,
+    "SOC_RMT_SUPPORT_RX_DEMODULATION": true,
+    "SOC_RMT_SUPPORT_RX_PINGPONG": true,
+    "SOC_RMT_SUPPORT_TX_ASYNC_STOP": true,
+    "SOC_RMT_SUPPORT_TX_CARRIER_DATA_ONLY": true,
+    "SOC_RMT_SUPPORT_TX_LOOP_AUTO_STOP": true,
+    "SOC_RMT_SUPPORT_TX_LOOP_COUNT": true,
+    "SOC_RMT_SUPPORT_TX_SYNCHRO": true,
+    "SOC_RMT_SUPPORT_XTAL": true,
+    "SOC_RMT_TX_CANDIDATES_PER_GROUP": 4,
+    "SOC_RSA_MAX_BIT_LEN": 4096,
+    "SOC_RTCIO_HOLD_SUPPORTED": true,
+    "SOC_RTCIO_INPUT_OUTPUT_SUPPORTED": true,
+    "SOC_RTCIO_PIN_COUNT": 22,
+    "SOC_RTCIO_WAKE_SUPPORTED": true,
+    "SOC_RTC_CNTL_CPU_PD_DMA_BUS_WIDTH": 128,
+    "SOC_RTC_CNTL_CPU_PD_REG_FILE_NUM": 549,
+    "SOC_RTC_CNTL_TAGMEM_PD_DMA_BUS_WIDTH": 128,
+    "SOC_RTC_FAST_MEM_SUPPORTED": true,
+    "SOC_RTC_MEM_SUPPORTED": true,
+    "SOC_RTC_SLOW_CLK_SUPPORT_RC_FAST_D256": true,
+    "SOC_RTC_SLOW_MEM_SUPPORTED": true,
+    "SOC_SDMMC_HOST_SUPPORTED": true,
+    "SOC_SDMMC_NUM_SLOTS": 2,
+    "SOC_SDMMC_SUPPORT_XTAL_CLOCK": true,
+    "SOC_SDMMC_USE_GPIO_MATRIX": true,
+    "SOC_SDM_CHANNELS_PER_GROUP": 8,
+    "SOC_SDM_CLK_SUPPORT_APB": true,
+    "SOC_SDM_GROUPS": true,
+    "SOC_SDM_SUPPORTED": true,
+    "SOC_SECURE_BOOT_SUPPORTED": true,
+    "SOC_SECURE_BOOT_V2_RSA": true,
+    "SOC_SHA_DMA_MAX_BUFFER_SIZE": 3968,
+    "SOC_SHA_GDMA": true,
+    "SOC_SHA_SUPPORTED": true,
+    "SOC_SHA_SUPPORT_DMA": true,
+    "SOC_SHA_SUPPORT_RESUME": true,
+    "SOC_SHA_SUPPORT_SHA1": true,
+    "SOC_SHA_SUPPORT_SHA224": true,
+    "SOC_SHA_SUPPORT_SHA256": true,
+    "SOC_SHA_SUPPORT_SHA384": true,
+    "SOC_SHA_SUPPORT_SHA512": true,
+    "SOC_SHA_SUPPORT_SHA512_224": true,
+    "SOC_SHA_SUPPORT_SHA512_256": true,
+    "SOC_SHA_SUPPORT_SHA512_T": true,
+    "SOC_SPIRAM_SUPPORTED": true,
+    "SOC_SPIRAM_XIP_SUPPORTED": true,
+    "SOC_SPI_MAXIMUM_BUFFER_SIZE": 64,
+    "SOC_SPI_MAX_CS_NUM": 6,
+    "SOC_SPI_MAX_PRE_DIVIDER": 16,
+    "SOC_SPI_MEM_SUPPORT_AUTO_RESUME": true,
+    "SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND": true,
+    "SOC_SPI_MEM_SUPPORT_AUTO_WAIT_IDLE": true,
+    "SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE": true,
+    "SOC_SPI_MEM_SUPPORT_OPI_MODE": true,
+    "SOC_SPI_MEM_SUPPORT_SW_SUSPEND": true,
+    "SOC_SPI_MEM_SUPPORT_TIME_TUNING": true,
+    "SOC_SPI_MEM_SUPPORT_WRAP": true,
+    "SOC_SPI_PERIPH_NUM": 3,
+    "SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT": true,
+    "SOC_SPI_SLAVE_SUPPORT_SEG_TRANS": true,
+    "SOC_SPI_SUPPORT_CD_SIG": true,
+    "SOC_SPI_SUPPORT_CLK_APB": true,
+    "SOC_SPI_SUPPORT_CLK_XTAL": true,
+    "SOC_SPI_SUPPORT_CONTINUOUS_TRANS": true,
+    "SOC_SPI_SUPPORT_DDRCLK": true,
+    "SOC_SPI_SUPPORT_OCT": true,
+    "SOC_SPI_SUPPORT_SLAVE_HD_VER2": true,
+    "SOC_SUPPORTS_SECURE_DL_MODE": true,
+    "SOC_SUPPORT_COEXISTENCE": true,
+    "SOC_SUPPORT_SECURE_BOOT_REVOKE_KEY": true,
+    "SOC_SYSTIMER_ALARM_MISS_COMPENSATE": true,
+    "SOC_SYSTIMER_ALARM_NUM": 3,
+    "SOC_SYSTIMER_BIT_WIDTH_HI": 20,
+    "SOC_SYSTIMER_BIT_WIDTH_LO": 32,
+    "SOC_SYSTIMER_COUNTER_NUM": 2,
+    "SOC_SYSTIMER_FIXED_DIVIDER": true,
+    "SOC_SYSTIMER_INT_LEVEL": true,
+    "SOC_SYSTIMER_SUPPORTED": true,
+    "SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC": true,
+    "SOC_TEMP_SENSOR_SUPPORTED": true,
+    "SOC_TIMER_GROUPS": 2,
+    "SOC_TIMER_GROUP_COUNTER_BIT_WIDTH": 54,
+    "SOC_TIMER_GROUP_SUPPORT_APB": true,
+    "SOC_TIMER_GROUP_SUPPORT_XTAL": true,
+    "SOC_TIMER_GROUP_TIMERS_PER_GROUP": 2,
+    "SOC_TIMER_GROUP_TOTAL_TIMERS": 4,
+    "SOC_TOUCH_PAD_MEASURE_WAIT_MAX": 255,
+    "SOC_TOUCH_PAD_THRESHOLD_MAX": 2097151,
+    "SOC_TOUCH_PROXIMITY_CHANNEL_NUM": 3,
+    "SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED": true,
+    "SOC_TOUCH_SENSOR_NUM": 15,
+    "SOC_TOUCH_SENSOR_SUPPORTED": true,
+    "SOC_TOUCH_VERSION_2": true,
+    "SOC_TWAI_BRP_MAX": 16384,
+    "SOC_TWAI_BRP_MIN": 2,
+    "SOC_TWAI_CLK_SUPPORT_APB": true,
+    "SOC_TWAI_CONTROLLER_NUM": 1,
+    "SOC_TWAI_SUPPORTED": true,
+    "SOC_TWAI_SUPPORTS_RX_STATUS": true,
+    "SOC_UART_BITRATE_MAX": 5000000,
+    "SOC_UART_FIFO_LEN": 128,
+    "SOC_UART_NUM": 3,
+    "SOC_UART_REQUIRE_CORE_RESET": true,
+    "SOC_UART_SUPPORTED": true,
+    "SOC_UART_SUPPORT_APB_CLK": true,
+    "SOC_UART_SUPPORT_FSM_TX_WAIT_SEND": true,
+    "SOC_UART_SUPPORT_RTC_CLK": true,
+    "SOC_UART_SUPPORT_WAKEUP_INT": true,
+    "SOC_UART_SUPPORT_XTAL_CLK": true,
+    "SOC_ULP_FSM_SUPPORTED": true,
+    "SOC_ULP_HAS_ADC": true,
+    "SOC_ULP_SUPPORTED": true,
+    "SOC_USB_OTG_PERIPH_NUM": 1,
+    "SOC_USB_OTG_SUPPORTED": true,
+    "SOC_USB_SERIAL_JTAG_SUPPORTED": true,
+    "SOC_WIFI_CSI_SUPPORT": true,
+    "SOC_WIFI_FTM_SUPPORT": true,
+    "SOC_WIFI_GCMP_SUPPORT": true,
+    "SOC_WIFI_HW_TSF": true,
+    "SOC_WIFI_LIGHT_SLEEP_CLK_WIDTH": 12,
+    "SOC_WIFI_MESH_SUPPORT": true,
+    "SOC_WIFI_PHY_NEEDS_USB_WORKAROUND": true,
+    "SOC_WIFI_SUPPORTED": true,
+    "SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW": true,
+    "SOC_WIFI_WAPI_SUPPORT": true,
+    "SOC_XTAL_SUPPORT_40M": true,
+    "SOC_XT_WDT_SUPPORTED": true,
+    "SPIFFS_API_DBG": false,
+    "SPIFFS_CACHE": true,
+    "SPIFFS_CACHE_DBG": false,
+    "SPIFFS_CACHE_STATS": false,
+    "SPIFFS_CACHE_WR": true,
+    "SPIFFS_CHECK_DBG": false,
+    "SPIFFS_DBG": false,
+    "SPIFFS_FOLLOW_SYMLINKS": false,
+    "SPIFFS_GC_DBG": false,
+    "SPIFFS_GC_MAX_RUNS": 10,
+    "SPIFFS_GC_STATS": false,
+    "SPIFFS_MAX_PARTITIONS": 3,
+    "SPIFFS_META_LENGTH": 4,
+    "SPIFFS_OBJ_NAME_LEN": 32,
+    "SPIFFS_PAGE_CHECK": true,
+    "SPIFFS_PAGE_SIZE": 256,
+    "SPIFFS_TEST_VISUALISATION": false,
+    "SPIFFS_USE_MAGIC": true,
+    "SPIFFS_USE_MAGIC_LENGTH": true,
+    "SPIFFS_USE_MTIME": true,
+    "SPIRAM": true,
+    "SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY": false,
+    "SPIRAM_ALLOW_NOINIT_SEG_EXTERNAL_MEMORY": false,
+    "SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY": true,
+    "SPIRAM_BOOT_INIT": true,
+    "SPIRAM_CLK_IO": 30,
+    "SPIRAM_CS_IO": 26,
+    "SPIRAM_ECC_ENABLE": false,
+    "SPIRAM_FETCH_INSTRUCTIONS": true,
+    "SPIRAM_IGNORE_NOTFOUND": false,
+    "SPIRAM_MALLOC_ALWAYSINTERNAL": 16384,
+    "SPIRAM_MALLOC_RESERVE_INTERNAL": 32768,
+    "SPIRAM_MEMTEST": true,
+    "SPIRAM_MODE_OCT": true,
+    "SPIRAM_MODE_QUAD": false,
+    "SPIRAM_RODATA": true,
+    "SPIRAM_SPEED": 120,
+    "SPIRAM_SPEED_120M": true,
+    "SPIRAM_SPEED_40M": false,
+    "SPIRAM_SPEED_80M": false,
+    "SPIRAM_TRY_ALLOCATE_WIFI_LWIP": true,
+    "SPIRAM_TYPE_AUTO": true,
+    "SPIRAM_TYPE_ESPPSRAM64": false,
+    "SPIRAM_USE_CAPS_ALLOC": false,
+    "SPIRAM_USE_MALLOC": true,
+    "SPIRAM_USE_MEMMAP": false,
+    "SPI_FLASH_BROWNOUT_RESET": true,
+    "SPI_FLASH_BROWNOUT_RESET_XMC": true,
+    "SPI_FLASH_BYPASS_BLOCK_ERASE": false,
+    "SPI_FLASH_CHECK_ERASE_TIMEOUT_DISABLED": false,
+    "SPI_FLASH_DANGEROUS_WRITE_ABORTS": true,
+    "SPI_FLASH_DANGEROUS_WRITE_ALLOWED": false,
+    "SPI_FLASH_DANGEROUS_WRITE_FAILS": false,
+    "SPI_FLASH_ENABLE_COUNTERS": false,
+    "SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE": true,
+    "SPI_FLASH_ERASE_YIELD_DURATION_MS": 20,
+    "SPI_FLASH_ERASE_YIELD_TICKS": 1,
+    "SPI_FLASH_FORCE_ENABLE_XMC_C_SUSPEND": false,
+    "SPI_FLASH_HPM_AUTO": true,
+    "SPI_FLASH_HPM_DC_AUTO": true,
+    "SPI_FLASH_HPM_DC_DISABLE": false,
+    "SPI_FLASH_HPM_DIS": false,
+    "SPI_FLASH_HPM_ENA": false,
+    "SPI_FLASH_HPM_ON": true,
+    "SPI_FLASH_OVERRIDE_CHIP_DRIVER_LIST": false,
+    "SPI_FLASH_ROM_DRIVER_PATCH": true,
+    "SPI_FLASH_ROM_IMPL": false,
+    "SPI_FLASH_SIZE_OVERRIDE": false,
+    "SPI_FLASH_SUPPORT_BOYA_CHIP": true,
+    "SPI_FLASH_SUPPORT_GD_CHIP": true,
+    "SPI_FLASH_SUPPORT_ISSI_CHIP": true,
+    "SPI_FLASH_SUPPORT_MXIC_CHIP": true,
+    "SPI_FLASH_SUPPORT_MXIC_OPI_CHIP": true,
+    "SPI_FLASH_SUPPORT_TH_CHIP": true,
+    "SPI_FLASH_SUPPORT_WINBOND_CHIP": true,
+    "SPI_FLASH_UNDER_HIGH_FREQ": true,
+    "SPI_FLASH_VENDOR_BOYA_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_GD_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_ISSI_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_MXIC_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_TH_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_WINBOND_SUPPORTED": true,
+    "SPI_FLASH_VENDOR_XMC_SUPPORTED": true,
+    "SPI_FLASH_VERIFY_WRITE": false,
+    "SPI_FLASH_WRITE_CHUNK_SIZE": 8192,
+    "SPI_FLASH_YIELD_DURING_ERASE": true,
+    "SPI_MASTER_IN_IRAM": false,
+    "SPI_MASTER_ISR_IN_IRAM": true,
+    "SPI_SLAVE_IN_IRAM": false,
+    "SPI_SLAVE_ISR_IN_IRAM": true,
+    "TEMP_SENSOR_ENABLE_DEBUG_LOG": false,
+    "TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN": false,
+    "TWAI_ERRATA_FIX_LISTEN_ONLY_DOM": true,
+    "TWAI_ISR_IN_IRAM": false,
+    "UART_ISR_IN_IRAM": true,
+    "ULP_COPROC_ENABLED": false,
+    "UNITY_ENABLE_64BIT": false,
+    "UNITY_ENABLE_BACKTRACE_ON_FAIL": false,
+    "UNITY_ENABLE_COLOR": false,
+    "UNITY_ENABLE_DOUBLE": true,
+    "UNITY_ENABLE_FIXTURE": false,
+    "UNITY_ENABLE_FLOAT": true,
+    "UNITY_ENABLE_IDF_TEST_RUNNER": true,
+    "USB_HOST_CONTROL_TRANSFER_MAX_SIZE": 256,
+    "USB_HOST_DEBOUNCE_DELAY_MS": 250,
+    "USB_HOST_ENABLE_ENUM_FILTER_CALLBACK": false,
+    "USB_HOST_EXT_HUB_SUPPORT": false,
+    "USB_HOST_HW_BUFFER_BIAS_BALANCED": true,
+    "USB_HOST_HW_BUFFER_BIAS_IN": false,
+    "USB_HOST_HW_BUFFER_BIAS_PERIODIC_OUT": false,
+    "USB_HOST_RESET_HOLD_MS": 30,
+    "USB_HOST_RESET_RECOVERY_MS": 30,
+    "USB_HOST_SET_ADDR_RECOVERY_MS": 10,
+    "USB_OTG_SUPPORTED": true,
+    "VFS_MAX_COUNT": 8,
+    "VFS_SELECT_IN_RAM": true,
+    "VFS_SEMIHOSTFS_MAX_MOUNT_POINTS": 1,
+    "VFS_SUPPORT_DIR": true,
+    "VFS_SUPPORT_IO": true,
+    "VFS_SUPPORT_SELECT": true,
+    "VFS_SUPPORT_TERMIOS": true,
+    "VFS_SUPPRESS_SELECT_DEBUG_OUTPUT": true,
+    "WIFI_PROV_AUTOSTOP_TIMEOUT": 30,
+    "WIFI_PROV_BLE_FORCE_ENCRYPTION": false,
+    "WIFI_PROV_SCAN_MAX_ENTRIES": 16,
+    "WIFI_PROV_STA_ALL_CHANNEL_SCAN": true,
+    "WIFI_PROV_STA_FAST_SCAN": false,
+    "WL_SECTOR_SIZE": 4096,
+    "WL_SECTOR_SIZE_4096": true,
+    "WL_SECTOR_SIZE_512": false,
+    "WS_BUFFER_SIZE": 1024,
+    "WS_DYNAMIC_BUFFER": false,
+    "WS_TRANSPORT": true,
+    "XTAL_FREQ": 40,
+    "XTAL_FREQ_40": true
+}

+ 55 - 0
cmake-build-debug/kconfigs.in

@@ -0,0 +1,55 @@
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/app_trace/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/bt/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/driver/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/efuse/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp-tls/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_adc/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_coex/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_common/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_eth/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_event/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_gdbstub/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_http_client/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_http_server/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_https_ota/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_https_server/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_hw_support/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_lcd/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_netif/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_partition/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_phy/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_pm/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_psram/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_ringbuf/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_system/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_timer/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_wifi/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/espcoredump/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/fatfs/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/freertos/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/hal/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/heap/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/ieee802154/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/log/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/lwip/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/mbedtls/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/mqtt/esp-mqtt/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/newlib/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/nvs_flash/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/openthread/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/protocomm/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/pthread/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/soc/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/spi_flash/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/spiffs/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/tcp_transport/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/ulp/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/unity/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/usb/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/vfs/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/wear_levelling/Kconfig"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/wifi_provisioning/Kconfig"
+source "E:/01project/01/wire-controller/managed_components/espressif__cmake_utilities/Kconfig"
+source "E:/01project/01/wire-controller/managed_components/espressif__esp-modbus/Kconfig"
+source "E:/01project/01/wire-controller/managed_components/espressif__esp_lcd_touch/Kconfig"
+source "E:/01project/01/wire-controller/managed_components/lvgl__lvgl/Kconfig"

+ 5 - 0
cmake-build-debug/kconfigs_projbuild.in

@@ -0,0 +1,5 @@
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/bootloader/Kconfig.projbuild"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_app_format/Kconfig.projbuild"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esp_rom/Kconfig.projbuild"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/esptool_py/Kconfig.projbuild"
+source "D:/01app/ESPIDE/516/Espressif/frameworks/esp-idf-v5.1.6/components/partition_table/Kconfig.projbuild"

+ 3 - 0
copyui.bat

@@ -0,0 +1,3 @@
+echo "更新 UI"
+copy wire-controller-ui/generated main/ui
+echo "更新    UI完成"

+ 3 - 0
copyui.sh

@@ -0,0 +1,3 @@
+echo "更新 UI"
+cp -rf wire-controller-ui/generated main/ui
+echo "更新 UI完成"

+ 125 - 0
dependencies.lock

@@ -0,0 +1,125 @@
+dependencies:
+  espressif/cmake_utilities:
+    component_hash: 351350613ceafba240b761b4ea991e0f231ac7a9f59a9ee901f751bddc0bb18f
+    dependencies:
+    - name: idf
+      require: private
+      version: '>=4.1'
+    source:
+      registry_url: https://components.espressif.com
+      type: service
+    version: 0.5.3
+  espressif/esp-modbus:
+    component_hash: 260482d114dfc6d62e731214454dc1d5e8194689465ecc41ee48acc700a700dc
+    dependencies:
+    - name: idf
+      require: private
+      version: '>=5.0'
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    version: 2.0.2
+  espressif/esp_io_expander:
+    component_hash: fbc0de4082fc7c207dc98a93a0ed83d1a929a4ecee83cc567afb406f3ee6d4a6
+    dependencies:
+    - name: idf
+      require: private
+      version: '>=4.4.2'
+    source:
+      registry_url: https://components.espressif.com
+      type: service
+    version: 1.0.1
+  espressif/esp_lcd_panel_io_additions:
+    component_hash: 213d5c4a3c322a48c9f993d6bc2372206d34af95db34e87a3e02601bdcad7ce8
+    dependencies:
+    - name: idf
+      require: private
+      version: '>=4.4.2'
+    - name: espressif/esp_io_expander
+      registry_url: https://components.espressif.com
+      require: public
+      version: ^1
+    - name: espressif/cmake_utilities
+      registry_url: https://components.espressif.com
+      require: private
+      version: 0.*
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    version: 1.0.1
+  espressif/esp_lcd_st7701:
+    component_hash: a1a56fb9e3b43b89e2a0e73e4e0f332daf38f7fff9228223670fe9243cdd48a1
+    dependencies:
+    - name: idf
+      require: private
+      version: '>5.0.4,!=5.1.1'
+    - name: espressif/cmake_utilities
+      registry_url: https://components.espressif.com
+      require: private
+      version: 0.*
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    targets:
+    - esp32s3
+    - esp32p4
+    version: 1.1.0
+  espressif/esp_lcd_touch:
+    component_hash: 779b4ba2464a3ae85681e4b860caa5fdc35801458c23f3039ee761bae7f442a4
+    dependencies:
+    - name: idf
+      require: private
+      version: '>=4.4.2'
+    source:
+      registry_url: https://components.espressif.com
+      type: service
+    version: 1.1.2
+  espressif/esp_lcd_touch_ft5x06:
+    component_hash: abaec05f46a793549b60afdda9eff86e3c8e87782c8c169007911232388d2858
+    dependencies:
+    - name: espressif/esp_lcd_touch
+      registry_url: https://components.espressif.com
+      require: public
+      version: ^1.0.4
+    - name: idf
+      require: private
+      version: '>=4.4.2'
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    version: 1.0.7
+  espressif/esp_lcd_touch_gt911:
+    component_hash: f4c3a5b0970e6f8dd7810413cfb104d856f24c63420bb17f7a89ff37f68e30d8
+    dependencies:
+    - name: espressif/esp_lcd_touch
+      registry_url: https://components.espressif.com
+      require: public
+      version: ^1.1.0
+    - name: idf
+      require: private
+      version: '>=4.4.2'
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    version: 1.1.2
+  idf:
+    source:
+      type: idf
+    version: 5.1.6
+  lvgl/lvgl:
+    component_hash: 096c69af22eaf8a2b721e3913da91918c5e6bf1a762a113ec01f401aa61337a0
+    dependencies: []
+    source:
+      registry_url: https://components.espressif.com/
+      type: service
+    version: 9.2.2
+direct_dependencies:
+- espressif/esp-modbus
+- espressif/esp_lcd_panel_io_additions
+- espressif/esp_lcd_st7701
+- espressif/esp_lcd_touch_ft5x06
+- espressif/esp_lcd_touch_gt911
+- lvgl/lvgl
+manifest_hash: 4e1ce4788b5f6215fc5573ba96c1929a44098f22a5d126bef69c93afb35d7117
+target: esp32s3
+version: 2.0.0

+ 33 - 0
main/CMakeLists.txt

@@ -0,0 +1,33 @@
+
+
+set(UI_DIR ./ui)
+file(GLOB_RECURSE UI_SRCS
+        ${UI_DIR}/*.c
+        ${UI_DIR}/generated/*.c
+        ${UI_DIR}/generated/images/*.c
+        ${UI_DIR}/generated/guider_fonts/*.c
+        ${UI_DIR}/generated/guider_customer_fonts/*.c
+        ${UI_DIR}/custom/*.c)
+file(GLOB_RECURSE APP_SRCS "app/*.c")
+file(GLOB_RECURSE FRM_SRCS "framework/*.c")
+idf_component_register(SRCS "main.c"
+        "lcd/lcd_st7701.c"
+        "actions.c"
+        "lvgl_port.c" ${UI_SRCS} ${APP_SRCS} ${FRM_SRCS}
+        INCLUDE_DIRS
+        "."
+        "app/include"
+        "framework"
+        "lcd/include"
+        ${UI_DIR}
+        ${UI_DIR}/generated
+        ${UI_DIR}/generated/guider_customer_fonts
+        ${UI_DIR}/custom
+        ${UI_DIR}/generated/images
+        ${UI_DIR}/generated/guider_fonts
+        EMBED_TXTFILES ${project_dir}/server_cert/ssl.pem
+)
+
+idf_component_get_property(lvgl_lib lvgl__lvgl COMPONENT_LIB)
+target_compile_options(${lvgl_lib} PRIVATE -Wno-format)
+add_compile_definitions(LV_LVGL_H_INCLUDE_SIMPLE)

+ 418 - 0
main/actions.c

@@ -0,0 +1,418 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/18 11:34
+ * Description: 定义了UI 与 逻辑的交互
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_log.h>
+#include <string.h>
+#include <nvs_flash.h>
+#include <esp_app_desc.h>
+#include "misc/lv_types.h"
+#include "widgets/tabview/lv_tabview.h"
+#include "gui_guider.h"
+#include "main.h"
+#include "wifi.h"
+#include "actions.h"
+#include "fp_controller.h"
+#include "lvgl_port.h"
+#include "modbus_master.h"
+#include "system/miscellaneous_interface.h"
+
+LV_IMAGE_DECLARE(_orange_meter_RGB565A8_84x396);
+LV_IMAGE_DECLARE(_green_meter_RGB565A8_84x396);
+LV_IMAGE_DECLARE(_power_open_RGB565A8_36x36);
+LV_IMAGE_DECLARE(_nxh_off_RGB565A8_80x80);
+LV_IMAGE_DECLARE(_js_on_RGB565A8_80x80);
+LV_IMAGE_DECLARE(_auto_on_RGB565A8_80x80);
+LV_IMAGE_DECLARE(_xf_on_RGB565A8_80x80);
+const static char *TAG = "actions";
+extern void set_ac_mode(lv_ui *ui, uint16_t mode);
+//
+/**
+ * 点击管理密码登录按钮事件
+ * @param e
+ */
+void on_btn_check_manager_password(lv_event_t *e) {
+    const char *password = lv_textarea_get_text(guider_ui.SettingPage_ta_1);
+    if (strcmp(password, "0803") != 0) {
+        // 显示密码错误标签
+        lv_obj_remove_flag(guider_ui.SettingPage_lab_password_incorrect, LV_OBJ_FLAG_HIDDEN);
+    } else {
+        // 验证通过
+        lv_obj_add_flag(guider_ui.SettingPage_lab_password_incorrect, LV_OBJ_FLAG_HIDDEN);
+        // 隐藏密码输入 panel
+        lv_obj_add_flag(guider_ui.SettingPage_cont_1, LV_OBJ_FLAG_HIDDEN);
+        // 显示高级设置界面
+        guider_ui.SettingPage_del = true;
+        ui_load_scr_animation(&guider_ui, &guider_ui.FactorySettingPage, true,
+                              &guider_ui.SettingPage_del, setup_scr_FactorySettingPage,
+                              LV_SCR_LOAD_ANIM_MOVE_RIGHT, 200, 200, true, true);
+    }
+}
+/**
+ * 点击设置-开关机按钮事件
+ * @param e
+ */
+void on_ac_page_set_power(lv_event_t *e, uint8_t power) {
+    ac_status.power = power;
+    ac_set_power(true);
+}
+
+/**
+ * 点击设置-开关机按钮事件
+ * @param e
+ */
+void on_btn_power_click(lv_event_t *e) {
+    lv_obj_t *obj = lv_event_get_current_target(e);
+    if (lv_obj_has_state(obj, LV_STATE_CHECKED)) {
+        ac_status.power = 1;
+    } else {
+        ac_status.power = 0;
+    }
+    ac_set_power(true);
+}
+
+/**
+ * 点击设置-网络-查找网络按钮事件
+ * @param e
+ */
+void on_btn_scan_wifi_click(lv_event_t *e) {
+    lv_obj_clean(guider_ui.SettingPage_list_wifi);
+    app_wifi_scan();
+}
+/**
+ * 点击连接 wifi 按钮
+ * @param e
+ */
+void on_btn_connect_wifi(lv_event_t *e) {
+    app_connect_wifi();
+}
+
+/**
+ * 切换至主页面
+ * @param e
+ */
+void switch_screen_main_set(lv_event_t *e) {
+    lv_ui * ui = lv_event_get_user_data(e);
+// 设置温度及滑动和风速状态
+    lvgl_port_lock(-1);
+    // lv_label_set_text_fmt(ui->screen_main_label_humSet_vul, "%d%%",  ac_status.set_max_hum);
+    // lv_slider_set_value(ui->screen_main_slider_speedSet_sign, ac_status.fan_speed*20, LV_ANIM_ON);
+    // lv_label_set_text_fmt(ui->screen_main_label_spedSet_vul, "%d档",ac_status.fan_speed);
+    // lv_slider_set_value(ui->screen_main_slider_humSet_sign, ac_status.set_max_hum, LV_ANIM_ON);
+    set_ac_mode(ui, ac_status.mode);
+    ac_set_power(true);
+// 设置电源状态
+    lv_obj_add_state(ui->screen_main_imgbtn_power, ac_status.power == 1 ? LV_STATE_CHECKED : LV_STATE_DEFAULT);
+    lvgl_port_unlock();
+}
+/**
+ * 切换至设置页面
+ * @param e
+ */
+void switch_setting_page_set(lv_event_t *e) {
+    lv_ui * ui = lv_event_get_user_data(e);
+    lvgl_port_lock(-1);
+    if(system_setting.sound_on_off)
+        lv_obj_add_state(ui->SettingPage_sw_sound, LV_STATE_CHECKED);
+    else
+        lv_obj_remove_state(ui->SettingPage_sw_sound, LV_STATE_CHECKED);
+
+    if(system_setting.screen_auto_off)
+        lv_obj_add_state(ui->SettingPage_sw_1, LV_STATE_CHECKED);
+    else
+        lv_obj_remove_state(ui->SettingPage_sw_1, LV_STATE_CHECKED);
+    lv_slider_set_value(ui->SettingPage_slider_sound_level, system_setting.sound_volume, false);
+    lv_spinbox_set_value(ui->SettingPage_spinbox_2,system_setting.screen_off_minute);
+    lvgl_port_unlock();
+}
+//刷新ui
+void refresh_ui_error(lv_event_t *e)
+{
+    lv_ui * ui = lv_event_get_user_data(e);
+    char str[320]={0};
+    int index=0;
+    lvgl_port_lock(-1);
+    if(ac_status.error_code==0)
+    {
+        lv_label_set_text_static(ui->FactorySettingPage_label_detail_error, "NONE");
+    } else{
+        index=0;
+        for(int i=0;i<8;i++)
+        {
+            if(ac_status.error_code&(1<<i))
+            {
+                //sprintf(str,"%s:%s\n",xf_fault[i].code,xf_fault[i].description);
+                str[index++]='E';
+                str[index++]='0'+i+1;
+                str[index++]=':';
+                for(int j=0;j<strlen((const char*)xf_fault[i].description);j++)
+                {
+                    str[index++]=xf_fault[i].description[j];
+                }
+                str[index++]='\n';
+            }
+        }
+        str[index++]=0;
+        lv_label_set_text(ui->FactorySettingPage_label_detail_error, str);
+    }
+    lvgl_port_unlock();
+}
+/**
+ * 切换至高级设置页面
+ * @param e
+ */
+void switch_factory_setting_page_set(lv_event_t *e) {
+
+    lv_ui * ui = lv_event_get_user_data(e);
+    lvgl_port_lock(-1);
+    lv_spinbox_set_value(guider_ui.FactorySettingPage_lab_inner_addr, system_setting.inner_addr);
+    lvgl_port_unlock();
+    //refresh_ui_error(e);
+}
+
+
+/**
+ * 重置滤网剩余寿命
+ * @param e
+ */
+void on_btn_filter_life_remain_clear(lv_event_t *e) {
+    ac_status.filter_used_time=0;
+    ac_status.filter_life_remaining=100;
+    xf_set_filter_life_remain(true);
+}
+
+
+void on_setting_tabview_changed(lv_event_t *e) {
+
+}
+void on_fan_vol_refresh(lv_event_t *e) {
+
+    lv_label_set_text_fmt(guider_ui.FactorySettingPage_lab_inner_addr,"%d",system_setting.inner_addr);
+    lv_spinbox_set_value(guider_ui.FactorySettingPage_sp_temp_recoup,system_setting.fix_temp);
+    lv_spinbox_set_value(guider_ui.FactorySettingPage_sp_hum_recoup,system_setting.fix_hum);
+}
+void on_fan_vol_save(lv_event_t *e) {
+    lv_ui * ui = lv_event_get_user_data(e);
+    int32_t temp_fix = lv_spinbox_get_value(guider_ui.FactorySettingPage_sp_temp_recoup);
+    if ((temp_fix>=0)&&(temp_fix<99)) {
+        system_setting.fix_temp = (int8_t) temp_fix;
+    }
+    int32_t hum_fix = lv_spinbox_get_value(guider_ui.FactorySettingPage_sp_hum_recoup);
+    if ((hum_fix>=0)&&(hum_fix<99)) {
+        system_setting.fix_hum = (int8_t) hum_fix;
+    }
+    int32_t inner_addr=lv_spinbox_get_value(guider_ui.FactorySettingPage_lab_inner_addr);
+    if ((inner_addr>0)&&(inner_addr<255)) {
+        system_setting.inner_addr=inner_addr;
+    }
+    save_system_setting(&system_setting);
+}
+
+void on_reset_factory_setting(lv_event_t *e) {
+    // 清空nvs
+    nvs_flash_erase();
+    // 重启设备
+    esp_restart();
+}
+void on_set_xf_mode(lv_event_t *e) {
+    lv_obj_t *cont = (lv_obj_t *) lv_event_get_current_target(e);
+    lv_obj_t *act_cb = lv_event_get_target(e);
+    if (act_cb == cont) return;
+    lvgl_port_lock(-1);
+    lv_obj_add_state(act_cb, LV_STATE_CHECKED);
+    uint32_t count = lv_obj_get_child_count(cont);
+    // 遍历所有子控件
+    for (int i = 0; i < count; i++) {
+        lv_obj_t *child = lv_obj_get_child(cont, i);
+        if (child != act_cb) {
+            lv_obj_remove_state(child, LV_STATE_CHECKED);
+        }
+    }
+    lvgl_port_unlock();
+    if (act_cb == guider_ui.screen_main_imgbtn_cold) {
+        ac_status.mode = COLD;
+        lv_obj_set_style_arc_color(guider_ui.screen_main_arc_temp, lv_color_hex(0x2cbccc), LV_PART_INDICATOR|LV_STATE_DEFAULT);
+        lv_obj_set_style_border_color(guider_ui.screen_main_arc_temp, lv_color_hex(0x2cbccc), LV_PART_KNOB|LV_STATE_DEFAULT);
+    }
+    else if (act_cb == guider_ui.screen_main_imgbtn_heat) {
+        lv_obj_set_style_arc_color(guider_ui.screen_main_arc_temp, lv_color_hex(0xff4200), LV_PART_INDICATOR|LV_STATE_DEFAULT);
+        lv_obj_set_style_border_color(guider_ui.screen_main_arc_temp, lv_color_hex(0xff4200), LV_PART_KNOB|LV_STATE_DEFAULT);
+        ac_status.mode =HEAT ;
+    } else if (act_cb == guider_ui.screen_main_imgbtn_tf) {
+        lv_obj_set_style_arc_color(guider_ui.screen_main_arc_temp, lv_color_hex(0x00912c), LV_PART_INDICATOR|LV_STATE_DEFAULT);
+        lv_obj_set_style_border_color(guider_ui.screen_main_arc_temp, lv_color_hex(0x00912c), LV_PART_KNOB|LV_STATE_DEFAULT);
+        ac_status.mode = TF;
+    }
+    xf_set_mode(true);
+}
+
+static uint8_t addr = 1;
+void on_set_inner_addr(uint8_t num) {
+    if (num)
+        addr += 1;
+    else
+        addr -= 1;
+    if (addr + num > 255)
+        addr = 254;
+    if (addr + num < 1)
+        addr = 1;
+    lvgl_port_lock(0);
+    lv_label_set_text_fmt(guider_ui.FactorySettingPage_lab_inner_addr, "%d", addr);
+    lvgl_port_unlock();
+    // 保存到 nvs
+    system_setting.inner_addr = addr;
+    save_inner_addr(addr);
+}
+void on_set_beep_on_off(lv_event_t * e) {
+    lv_obj_t *obj = lv_event_get_current_target(e);
+    if (lv_obj_has_state(obj, LV_STATE_CHECKED)) {
+        system_setting.sound_on_off = 1;
+    } else {
+        system_setting.sound_on_off = 0;
+    }
+    save_system_setting(&system_setting);
+}
+
+void on_set_screen_auto_off(lv_event_t * e) {
+    lv_obj_t *obj = lv_event_get_current_target(e);
+    if (lv_obj_has_state(obj, LV_STATE_CHECKED)) {
+        system_setting.screen_auto_off = 1;
+    } else {
+        system_setting.screen_auto_off = 0;
+    }
+    save_system_setting(&system_setting);
+}
+
+void on_set_beep_volume(lv_event_t* e) {
+    const lv_obj_t *slider = lv_event_get_current_target(e);
+    uint32_t value = lv_slider_get_value(slider);
+    ESP_LOGD(TAG, "on_set_beep_volume;%d", (uint8_t) value);
+    system_setting.sound_volume = (uint8_t) value;
+    save_system_setting(&system_setting);
+}
+
+void on_set_screen_off_minute(lv_event_t * e) {
+    lv_obj_t *spbox = lv_event_get_current_target(e);
+    int32_t value =  lv_spinbox_get_value(spbox);
+    ESP_LOGD(TAG, "on_set_screen_off_minute;%d", (uint8_t) value);
+    system_setting.screen_off_minute = (uint8_t) value;
+    save_system_setting(&system_setting);
+}
+void setting_page_init(lv_ui *ui) {
+    static lv_style_t style_SettingPage_tabview_1_extra_btnm_items_default;
+    ui_init_style(&style_SettingPage_tabview_1_extra_btnm_items_default);
+
+    lv_style_set_text_color(&style_SettingPage_tabview_1_extra_btnm_items_default, lv_color_hex(0xffb204));
+    lv_style_set_text_font(&style_SettingPage_tabview_1_extra_btnm_items_default, &lv_font_Alibaba_PuHuiTi_Medium_16);
+    lv_style_set_text_opa(&style_SettingPage_tabview_1_extra_btnm_items_default, 255);
+    lv_obj_add_style(lv_tabview_get_tab_bar(ui->SettingPage_tabview_1),
+                     &style_SettingPage_tabview_1_extra_btnm_items_default, LV_PART_MAIN | LV_STATE_DEFAULT);
+    lv_label_set_text(ui->SettingPage_lab_wifi_status, get_wifi_status() == 1 ? "已连接" : "未连接");
+    // 填充“关于”页面信息
+    esp_app_desc_t * desc = esp_app_get_description();
+    lv_label_set_text(ui->SettingPage_lab_version, desc->version);
+
+    char device_serial[12];
+    get_device_serial(device_serial);
+    lv_qrcode_update(ui->SettingPage_qr_device_code, device_serial, 12);
+}
+void on_ota_failed_restart(lv_event_t *e) {
+    esp_restart();
+}
+void on_reset_wifi(lv_event_t *e) {
+    yx_data_clear(NVS_SSID_KEY);
+    yx_data_clear(NVS_PASSWORD_KEY);
+    esp_restart();
+}
+void on_restart_device(lv_event_t *e) {
+    esp_restart();
+}
+/**
+ * 空调页面-温度滑动条改变
+ * @param e
+ */
+void on_ac_page_arc_value_changed(lv_event_t * e) {
+    lv_obj_t *arc = lv_event_get_current_target(e);
+    int32_t value = lv_arc_get_value(arc)/10;
+    lvgl_port_lock(0);
+    lv_label_set_text_fmt(guider_ui.screen_main_label_temp_set, "%d", (uint16_t) value);
+    lvgl_port_unlock();
+}
+/**
+ * 空调页面-温度滑动条释放
+ * @param e
+ */
+void on_ac_page_arc_released(lv_event_t * e) {
+    lv_obj_t *arc = lv_event_get_current_target(e);
+    int32_t value = lv_arc_get_value(arc)/10;
+    lvgl_port_lock(0);
+    lv_label_set_text_fmt(guider_ui.screen_main_label_temp_set, "%d", (uint16_t) value);
+    lvgl_port_unlock();
+    ac_status.set_temp = (uint16_t) value;
+    ac_set_temp(true);
+}
+/**
+ * 空调页面-温度加按键
+ * @param e
+ */
+void on_set_temp_add(lv_event_t * e) {
+    if (ac_status.set_temp<30) {
+        ac_status.set_temp++;
+    }else {
+
+    }
+    lvgl_port_lock(0);
+    lv_arc_set_value(guider_ui.screen_main_arc_temp,ac_status.set_temp*10);
+    lv_label_set_text_fmt(guider_ui.screen_main_label_temp_set, "%d", (uint16_t) ac_status.set_temp);
+    lvgl_port_unlock();
+    ac_set_temp(true);
+}
+/**
+ * 空调页面-温度减按键
+ * @param e
+ */
+void on_set_temp_minus(lv_event_t * e) {
+    if (ac_status.set_temp>16) {
+        ac_status.set_temp--;
+    }else {
+
+    }
+    lvgl_port_lock(0);
+    lv_arc_set_value(guider_ui.screen_main_arc_temp,ac_status.set_temp*10);
+    lv_label_set_text_fmt(guider_ui.screen_main_label_temp_set, "%d", (uint16_t) ac_status.set_temp);
+    lvgl_port_unlock();
+    ac_set_temp(true);
+}
+/**
+ * 空调页面-风速按键容器
+ * @param e
+ */
+void on_set_speed(lv_event_t * e) {
+    lv_obj_t *cont = (lv_obj_t *) lv_event_get_current_target(e);
+    lv_obj_t *act_cb = lv_event_get_target(e);
+    char buf[5];
+    if (act_cb == cont) return;
+    lvgl_port_lock(-1);
+    lv_obj_add_state(act_cb, LV_STATE_CHECKED);
+    uint32_t count = lv_obj_get_child_count(cont);
+    // 遍历所有子控件
+    for (int i = 0; i < count; i++) {
+        lv_obj_t *child = lv_obj_get_child(cont, i);
+        if (child != act_cb) {
+            lv_obj_remove_state(child, LV_STATE_CHECKED);
+        }
+    }
+    lvgl_port_unlock();
+    if (act_cb == guider_ui.screen_main_imgbtn_speed1) {
+        ac_status.fan_speed = 1;
+    }
+    else if (act_cb == guider_ui.screen_main_imgbtn_speed2) {
+
+        ac_status.fan_speed =2 ;
+    } else if (act_cb == guider_ui.screen_main_imgbtn_speed3)
+    {    ac_status.fan_speed = 3;}
+    xf_set_fan_speed(true);
+}
+

+ 176 - 0
main/actions.h

@@ -0,0 +1,176 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/24 12:49
+ * Description: UI 事件交互
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_ACTIONS_H
+#define WIRE_CONTROLLER_ACTIONS_H
+#include "lvgl.h"
+
+/**
+ * 定义风阀配置界面选中事件传递的参数结构体
+ */
+typedef struct {
+    uint8_t ctrl_no; //v 控制器编号
+    uint8_t fan_valve_no;// 风阀编号
+}fan_valve_set_param_t;
+void switch_screen_main_set(lv_event_t *e) ;
+void switch_setting_page_set(lv_event_t *e);
+void switch_factory_setting_page_set(lv_event_t *e);
+void on_fan_vol_save(lv_event_t *e);
+void on_btn_filter_life_remain_clear(lv_event_t *e);
+void on_fan_vol_refresh(lv_event_t *e);
+void refresh_ui_error(lv_event_t *e);
+/**
+ * 设置-tabView 切换事件
+ * @param e
+ */
+ void on_setting_tabview_changed(lv_event_t *e);
+ /**
+  * 设置-wifi 按钮点击事件
+  * @param e
+  */
+ void on_btn_scan_wifi_click(lv_event_t *e);
+ /**
+  * 设置-wifi 按钮点击事件
+  * @param e
+  */
+ void on_btn_connect_wifi(lv_event_t* e);
+ /**
+  * 设置-高级配置-登录按钮事件
+  * @param e
+  */
+ void on_btn_check_manager_password(lv_event_t *e);
+ /**
+  * 高级配置-设置风阀事件
+  * @param e
+  * @param valve_index
+  */
+void on_set_fan_valve(lv_event_t * e, uint8_t valve_index);
+/**
+ * 高级设置-五恒模块配置事件
+ * @param e
+ */
+ void on_set_five_const_module(lv_event_t * e);
+ /**
+  * 高级设置-恢复出厂设置事件
+  * @param e
+  */
+ void on_reset_factory_setting(lv_event_t * e);
+ /**
+  * 设置内机地址
+  * @param num
+  */
+ void on_set_inner_addr(uint8_t num);
+ /**
+  * 空调页面-弧形滑动条值改变事件
+  * @param e
+  */
+ void on_ac_page_arc_value_changed(lv_event_t * e);
+ /**
+  * 空调页面-温度加按键时间
+  * @param e
+  */
+ void on_set_temp_add(lv_event_t * e);
+/**
+ * 空调页面-温度加按键时间
+ * @param e
+ */
+void on_set_temp_minus(lv_event_t * e);
+/**
+ * 空调页面-温度加按键时间
+ * @param e
+ */
+void on_set_speed(lv_event_t * e);
+/**
+ * 空调页面-温度加按键时间
+ * @param e
+ */
+ void on_ac_page_arc_released(lv_event_t * e);
+ /**
+  * 新风页面-模式选择事件
+  * @param e
+  */
+ void on_set_xf_mode(lv_event_t *e);
+/**
+ * 空调页面-设置风速
+ */
+ void on_set_ac_wind_speed(lv_event_t * e);
+ /**
+  * 空调页面-设置风速释放事件
+  * @param e
+  */
+void on_ac_set_fan_speed_released(lv_event_t *e);
+/**
+ * 风阀页面-风阀滑动条值改变事件
+ * @param e
+ */
+void on_fan_valve_value_changed(lv_event_t * e);
+/**
+ * 高级设置-风阀配置事件
+ * @param e
+ */
+void on_set_fan_valve_no_changed(lv_event_t * e);
+
+/**
+ * 空调界面-设置电源事件
+ * @param e
+ */
+void on_ac_page_set_power(lv_event_t *e, uint8_t power);
+/**
+ * 设置界面-触摸声音反馈开关事件
+ * @param e
+ */
+void on_set_beep_on_off(lv_event_t * e);
+/**
+ * 设置界面-触摸声音反馈音量事件
+ * @param e
+ */
+void on_set_beep_volume(lv_event_t * e);
+/**
+ * 设置界面-屏幕自动关闭事件
+ * @param e
+ */
+void on_set_screen_auto_off(lv_event_t * e);
+/**
+ * 设置界面-屏幕关闭时间事件
+ * @param e
+ */
+void on_set_screen_off_minute(lv_event_t * e);
+/**
+ * 点击设置-开关机按钮事件
+ * @param e
+ */
+void on_btn_power_click(lv_event_t *e);
+/**
+ * 滑块风挡值变化
+ * @param e
+ */
+void on_slider_speed_value_changed(lv_event_t *e);
+/**
+ * 滑块风挡释放
+ * @param e
+ */
+void on_slider_speed_released(lv_event_t *e);
+/**
+ * 滑块最大湿度值变化
+ * @param e
+ */
+void on_slider_hum_value_changed(lv_event_t *e);
+/**
+ * 滑块最大湿度值释放
+ * @param e
+ */
+
+void on_slider_hum_released(lv_event_t *e);
+/**
+ * 高级设置-重启设备事件
+ * @param e
+ */
+void on_restart_device(lv_event_t * e);
+void on_reset_wifi(lv_event_t *e);
+void setting_page_init(lv_ui *ui);
+void on_ota_failed_restart(lv_event_t *e);
+#endif //WIRE_CONTROLLER_ACTIONS_H
+

+ 121 - 0
main/app/beep.c

@@ -0,0 +1,121 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/22 10:24
+ * Description: 蜂鸣器模块
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include "freertos/FreeRTOS.h"
+#include <freertos/event_groups.h>
+#include "beep.h"
+#include "driver/ledc.h"
+#include "esp_err.h"
+#include "esp_timer.h"
+#include "main.h"
+#include "extend_io.h"
+#include "driver/gptimer.h"
+#include "soc/timer_group_struct.h"
+#define BEEP_BIT BIT0
+#define STOP_BEEP_BIT BIT1
+static EventGroupHandle_t beep_event_group;
+#include <driver/timer.h>
+esp_timer_handle_t esp_timer_handle1 = 0; //定时器句柄
+uint8_t beep_state = 0;
+// 用户自定义ISR
+static bool example_timer_on_alarm_cb(gptimer_handle_t timer, const gptimer_alarm_event_data_t *edata, void *user_ctx)
+{
+    uint32_t index=0;
+    if (beep_state==1) {
+        xEventGroupSetBits(beep_event_group, BEEP_BIT);
+        index++;
+        beep_state=2;
+    }else if (beep_state==2){
+        xEventGroupSetBits(beep_event_group, STOP_BEEP_BIT);
+        beep_state=1;
+    }
+    if (index>=1000) {
+        // esp_timer_stop(esp_timer_handle1);
+        xEventGroupSetBits(beep_event_group, STOP_BEEP_BIT);
+        gptimer_stop(timer);
+        beep_state=0;
+    }
+    return false;
+}
+gptimer_handle_t gptimer = NULL;
+void timer_init_lx1() {
+
+    gptimer_config_t timer_config = {
+        .clk_src = GPTIMER_CLK_SRC_DEFAULT, // 选择默认的时钟源
+        .direction = GPTIMER_COUNT_UP,      // 计数方向为向上计数
+        .resolution_hz = 1 * 1000 * 1000,   // 分辨率为 1 MHz,即 1 次滴答为 1 微秒
+    };
+    // 创建定时器实例
+    ESP_ERROR_CHECK(gptimer_new_timer(&timer_config, &gptimer));
+    gptimer_alarm_config_t alarm_config = {
+        .reload_count = 0,      // 当警报事件发生时,定时器会自动重载到 0
+        .alarm_count = 1600, // 设置实际的警报周期,因为分辨率是 1us,所以 1000000 代表 1s
+        .flags.auto_reload_on_alarm = true, // 使能自动重载功能
+    };
+    // 设置定时器的警报动作
+
+    ESP_ERROR_CHECK(gptimer_set_alarm_action(gptimer, &alarm_config));
+    beep_event_group = xEventGroupCreate();
+    gptimer_event_callbacks_t cbs = {
+        .on_alarm = example_timer_on_alarm_cb, // 当警报事件发生时,调用用户回调函数
+    };
+    // 注册定时器事件回调函数,允许携带用户上下文
+    ESP_ERROR_CHECK(gptimer_register_event_callbacks(gptimer, &cbs, NULL));
+    // 使能定时器
+    ESP_ERROR_CHECK(gptimer_enable(gptimer));
+    // 启动定时器
+
+}
+
+void beep() {
+    // if (beep_state==0) {
+    //     beep_state=1;
+    //     ESP_ERROR_CHECK(gptimer_start(gptimer));
+    // }
+}
+
+void beep_stop() {
+    // // xEventGroupSetBits(beep_event_group, STOP_BEEP_BIT);
+    // xEventGroupSetBits(beep_event_group, STOP_BEEP_BIT);
+    // gptimer_stop(gptimer);
+    // beep_state=0;
+}
+
+static void set_beep() {
+
+}
+
+static void set_beep_stop() {
+    // // Stop fading
+    // ESP_ERROR_CHECK(ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, 0));
+    // // Update duty to apply the new value
+    // ESP_ERROR_CHECK(ledc_update_duty(LEDC_MODE, LEDC_CHANNEL));
+}
+
+static void beep_task(void * arg) {
+    for(;;) {
+        EventBits_t bits = xEventGroupWaitBits(beep_event_group, BEEP_BIT | STOP_BEEP_BIT, pdTRUE, pdFALSE, portMAX_DELAY);
+        if(bits & BEEP_BIT) {
+            hc595_gpio_write(2,1);
+        }
+        if(bits & STOP_BEEP_BIT) {
+            hc595_gpio_write(2,0);
+        }
+    }
+}
+
+/**
+ * @brief 蜂鸣器模块初始化
+ */
+void beep_init(void) {
+    // timer_init_lx1();
+    // hc595_gpio_write(2,0);
+    beep_event_group = xEventGroupCreate();
+    // xTaskCreate(beep_task, "beep_task", 2048, NULL, 5, NULL);
+}
+
+
+

+ 94 - 0
main/app/extend_io.c

@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/gpio.h"
+#include "extend_io.h"
+
+#include <esp_log.h>
+static const char* TAG = "IO";
+
+uint8_t io_status=0;
+
+// 初始化GPIO
+void hc595_init() {
+    gpio_config_t io_conf = {
+            .pin_bit_mask = (1ULL << DATA_PIN) | (1ULL << CLOCK_PIN) | (1ULL << LATCH_PIN),
+            .mode = GPIO_MODE_OUTPUT,
+            .pull_up_en = GPIO_PULLUP_DISABLE,
+            .pull_down_en = GPIO_PULLDOWN_DISABLE,
+            .intr_type = GPIO_INTR_DISABLE
+    };
+    gpio_config(&io_conf);
+
+    // 初始状态置低
+    gpio_set_level(DATA_PIN, 0);
+    gpio_set_level(CLOCK_PIN, 0);
+    gpio_set_level(LATCH_PIN, 0);
+}
+
+// 发送数据到74HC595
+void hc595_send(uint8_t *data, size_t len) {
+    // 锁存引脚置低,准备发送数据
+    gpio_set_level(LATCH_PIN, 0);
+        for (int bit = 7; bit >= 0; bit--) {
+            // 设置数据位
+            gpio_set_level(DATA_PIN, (*data >> bit) & 0x01);
+
+            // 产生时钟上升沿
+            gpio_set_level(CLOCK_PIN, 1);
+            gpio_set_level(CLOCK_PIN, 0);
+        }
+
+    // 数据发送完成,锁存引脚置高更新输出
+    gpio_set_level(LATCH_PIN, 1);
+    // 保持最小脉冲宽度 (可省略)
+    vTaskDelay(pdMS_TO_TICKS(1));
+    gpio_set_level(LATCH_PIN, 0);
+}
+
+void HC595_Send_Byte(uint8_t byte) {
+    uint8_t i;
+    for (i = 0; i < 8; i ++)  //一个字节8位,传输8次,一次一位,循环8次,刚好移完8位
+    {
+        /****  步骤1:将数据传到DS引脚    ****/
+        if( byte & (0x0001<<i) )
+            HC595_Data_High();    //如果第八位是1,则与 595 DS连接的引脚输出高电平
+        else                    //否则输出低电平
+            HC595_Data_Low();
+
+        /*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/
+        HC595_SHCP_Low();   // SHCP拉低
+        //vTaskDelay(pdMS_TO_TICKS(1));                // 适当延时
+        HC595_SHCP_High();  // SHCP拉高, SHCP产生上升沿
+       // vTaskDelay(pdMS_TO_TICKS(1));
+        //byte <<= 1;		// 左移一位,将低位往高位移,通过	if (byte & 0x80)判断低位是否为1
+    }
+}
+
+
+/**
+ *74HC595输出锁存 使能
+**/
+void HC595_CS(void) {
+    /**  步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器  **/
+    HC595_STCP_Low();   // 将STCP拉低
+   vTaskDelay(pdMS_TO_TICKS(1));          // 适当延时
+    HC595_STCP_High();  // 再将STCP拉高,STCP即可产生一个上升沿
+    vTaskDelay(pdMS_TO_TICKS(1));
+}
+
+esp_err_t hc595_gpio_write(extend_gpio_num_t gpio_num, uint32_t level) {
+    if (level==1) {
+        io_status |= 1 << (7-gpio_num);
+
+        // io_status=0x0f;
+    }else {
+
+        io_status &= ~(1 << (7-gpio_num));
+
+        // io_status=0x00;
+    }
+    HC595_Send_Byte(io_status);
+    HC595_CS();
+    return ESP_OK;
+}

+ 670 - 0
main/app/fp_controller.c

@@ -0,0 +1,670 @@
+#include <sys/cdefs.h>
+/**
+ * @Author: 李建
+ * @Date: 2025/3/25 15:23
+ * Description: 空调控制器
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_log.h>
+#include "freertos/FreeRTOS.h"
+#include <freertos/task.h>
+#include <cJSON.h>
+#include <esp_timer.h>
+#include "fp_controller.h"
+#include "sub_device/command.h"
+#include "modbus_master.h"
+#include "system/miscellaneous_interface.h"
+#include "lvgl_port.h"
+#include "main.h"
+#include "esp_modbus_master.h"
+#include "mb_endianness_utils.h"
+#include "modbus_slave.h"
+#include "pwm0_10.h"
+#include "sht30.h"
+#include "relay.h"
+#include "gateway/access.h"
+#define FAN_RELAY 1
+// #define FAN_PWM 1
+static const char *TAG = "xf_controller";
+static uint8_t err_count = 0;// 通讯失败次数
+
+static SemaphoreHandle_t report_task_sem; // 上报任务信号量,用于实现操作完成上立即上报当前状态
+extern void set_ac_mode(lv_ui *ui, uint16_t mode);
+static TaskHandle_t cloud_report_handle;
+static TaskHandle_t report_trigger_handle;
+static TaskHandle_t status_task_handle;
+// 初始化空调参数
+ac_status_t ac_status = {
+        .power= 0,
+        .fan_speed=3,
+        .mode=1,
+        .set_temp = 16,
+        .filter_used_time=0,
+        .filter_life_remaining=100,
+        .error_code=0,
+};
+xf_fault_t xf_fault[9] = {
+
+ {
+            .code="E1",
+            .description="传感器故障",
+        },
+ {
+            .code="E2",
+            .description="高水位故障",
+        },
+ {
+            .code="E3",
+            .description="进水电磁阀故障",
+        },
+ {
+            .code="E4",
+            .description="送风风机故障",
+        },
+ {
+            .code="E5",
+            .description="排风风机故障",
+        },
+ {
+            .code="E6",
+            .description="排水泵故障",
+        },
+ {
+            .code="E7",
+            .description="通讯故障",
+        },
+ {
+            .code="E8",
+            .description="预留",
+ }
+
+};
+void read_xf_status(system_setting_t *setting) {
+    uint16_t *_power = nvs_get_uint16(NVS_POWER_CONTROLLER);
+    uint16_t *_mode = nvs_get_uint16(NVS_MODEL_CONTROLLER);
+    uint16_t *_fan_speed = nvs_get_uint16(NVS_FAN_SPEED_SET);
+    uint16_t *_filter_used_time = nvs_get_uint16(NVS_FILTER_USED_TIME);
+    uint16_t *_set_temp = nvs_get_uint16(NVS_AC_SET_TEMP_KEY);
+    uint16_t *_filter_life_remaining = nvs_get_uint16(NVS_FILTER_USED_TIME);
+    uint16_t *_tw_status = nvs_get_uint16(NVS_TW_STATUS);
+    uint16_t *_xf_mode = nvs_get_uint16(NVS_AC_SET_TEMP_KEY);
+    ac_status.power= _power == NULL ? 0 : *_power;
+    ac_status.mode = _mode == NULL ? 1 : *_mode;
+    ac_status.fan_speed = _fan_speed == NULL ? 3 : *_fan_speed;
+    ac_status.set_temp = _set_temp == NULL ? 16 : *_set_temp;
+    ac_status.filter_used_time = _filter_used_time == NULL ? 0 : *_filter_used_time;
+    ac_status.filter_life_remaining=_filter_life_remaining == NULL ? 0 : *_filter_life_remaining;
+    ac_status.tw_status=_tw_status == NULL ? 0 : *_tw_status;
+    ac_status.xf_mode=_xf_mode == NULL ? 0 : *_xf_mode;
+}
+
+esp_err_t ac_set_temp(bool saved) {
+    if (saved)
+        nvs_set_uint16(ac_status.set_temp, NVS_AC_SET_TEMP_KEY);
+    if (cloud_connected) {
+        xSemaphoreGive(report_task_sem);
+    }
+    modbus_set_reg(SLAVE_SET_TEMP_REG_ADDRESS, ac_status.set_temp);
+    return ESP_OK;
+
+}
+// 设置电源
+esp_err_t ac_set_power(bool saved) {
+    esp_err_t err = ESP_OK;
+    if(saved)
+        nvs_set_uint16(ac_status.power, NVS_POWER_CONTROLLER);
+    if (guider_ui.screen_main) {
+
+        if(ac_status.power==0)
+        {
+            lvgl_port_lock(-1);
+            // lv_obj_add_flag(guider_ui.screen_main_cont_humSet, LV_OBJ_FLAG_HIDDEN);
+            lv_obj_add_flag(guider_ui.screen_main_cont_mode, LV_OBJ_FLAG_HIDDEN);
+            lvgl_port_unlock();
+        }else{
+            lvgl_port_lock(-1);
+            // lv_obj_clear_flag(guider_ui.screen_main_cont_humSet, LV_OBJ_FLAG_HIDDEN);
+            lv_obj_clear_flag(guider_ui.screen_main_cont_mode, LV_OBJ_FLAG_HIDDEN);
+            set_ac_mode(&guider_ui, ac_status.mode);
+            lvgl_port_unlock();
+        }
+
+    }
+
+    if (cloud_connected) {
+        xSemaphoreGive(report_task_sem);
+    }
+    modbus_set_reg(SLAVE_POWER_REG_ADDRESS, ac_status.power);
+    return err;
+}
+void esp_timer_cb()
+{
+    if(ac_status.power==1)
+    {
+        ac_status.filter_used_time++;
+    }else{
+    }
+    if(ac_status.filter_used_time>=system_setting.filter_life_time)
+    {
+        ac_status.filter_used_time=system_setting.filter_life_time;
+    }
+    xf_set_filter_life_remain(true);
+}
+
+esp_timer_handle_t esp_timer_handle = 0; //定时器句柄
+void timer_init_lx() {
+    //定时器结构体初始化
+
+    esp_timer_create_args_t fw_timer = {
+            .callback = &esp_timer_cb, //定时器回调函数
+            .arg = NULL, //传递给回调函数的参数
+            .name = "esp_timer", //定时器名称
+    };
+    //创建定时器
+    esp_timer_create(&fw_timer, &esp_timer_handle);
+    //启动定时器,定时器周期为60*5秒
+    esp_timer_start_periodic(esp_timer_handle, 5*60000 * 1000);
+//    esp_timer_start_periodic(esp_timer_handle,  5000 * 1000);
+}
+//设置滤网剩余寿命
+void xf_set_filter_life_remain(bool saved) {
+    esp_err_t str=ESP_OK;
+    if(saved)
+        nvs_set_uint16(ac_status.filter_used_time, NVS_FILTER_USED_TIME);
+}
+//
+uint16_t get_fan_gear_vol(uint16_t value) {
+    switch (value) {
+        case 1:
+            return modbus_get_reg(AIR_FIRST_VOL_ADDRESS_REGISTER);
+        case 2:
+            return modbus_get_reg(AIR_SECOND_VOL_ADDRESS_REGISTER);
+        case 3:
+            return modbus_get_reg(AIR_THIRD_VOL_ADDRESS_REGISTER);
+        default: ;
+    }
+    return 0;
+}
+
+//设置新风风速
+esp_err_t xf_set_fan_speed(bool saved) {
+    esp_err_t err = ESP_OK;
+    if(saved)
+        nvs_set_uint16(ac_status.fan_speed, NVS_FAN_SPEED_SET);
+    if (cloud_connected) {
+        xSemaphoreGive(report_task_sem);
+    }
+    modbus_set_reg(SLAVE_FAN_LEVEL_REG_ADDRESS, ac_status.fan_speed);
+    return err;
+}
+
+//设置手动新风
+esp_err_t ac_set_xf_mode(bool saved) {
+    esp_err_t err = ESP_OK;
+    if(saved)
+        nvs_set_uint16(ac_status.xf_mode, NVS_XF_MODE_SET);
+    if (cloud_connected) {
+        xSemaphoreGive(report_task_sem);
+    }
+    modbus_set_reg(SLAVE_FRESH_MODE_ADDRESS_REGISTER, ac_status.xf_mode);
+    return err;
+}
+
+// 设置模式
+esp_err_t xf_set_mode(bool saved) {
+    esp_err_t err = ESP_OK;
+    if(saved)
+        nvs_set_uint16(ac_status.mode, NVS_MODEL_CONTROLLER);
+    if (cloud_connected) {
+        xSemaphoreGive(report_task_sem);
+    }
+    modbus_set_reg(SLAVE_WORK_MODE_REG_ADDRESS, ac_status.mode);
+    return err;
+}
+static void update_power_ui(bool on_off) {
+    // 同步更新 UI
+    if (guider_ui.screen_main) {
+        lvgl_port_lock(-1);
+        lv_obj_set_state(guider_ui.screen_main_imgbtn_power, LV_IMAGEBUTTON_STATE_CHECKED_RELEASED, on_off);
+        lvgl_port_unlock();
+    }
+}
+
+// 云端: 设置上报时间间隔
+static void cloud_set_report_duration(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        if (cJSON_IsNumber(value)) {
+            system_setting.report_data_duration = value->valueint;
+            save_system_setting(&system_setting);
+        }
+    }
+}
+static void cloud_set_power(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        ac_status.power = value->valueint;
+        ac_set_power(true);
+        update_power_ui(ac_status.power);
+        cJSON_Delete(data);
+    }
+}
+static void cloud_set_mode(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        ac_status.mode = value->valueint;
+        if (guider_ui.screen_main) {
+            lvgl_port_lock(-1);
+            set_ac_mode(&guider_ui, ac_status.mode);
+            lvgl_port_unlock();
+        }
+        xf_set_mode(true);
+        cJSON_Delete(data);
+    }
+}
+static void cloud_set_temp(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        ac_status.set_temp = value->valueint;
+        if (guider_ui.screen_main) {
+            lvgl_port_lock(-1);
+            lv_label_set_text_fmt(guider_ui.screen_main_label_temp_set, "%d",value->valueint);
+            lv_arc_set_value(guider_ui.screen_main_arc_temp,value->valueint*10);
+            lvgl_port_unlock();
+        }
+        ac_set_temp(true);
+        cJSON_Delete(data);
+    }
+}
+
+static void cloud_set_fan_level(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        ac_status.fan_speed = value->valueint;
+        if (guider_ui.screen_main) {
+            lvgl_port_lock(-1);
+            set_fan_level(&guider_ui,  ac_status.fan_speed);
+            lvgl_port_unlock();
+        }
+        xf_set_fan_speed(true);
+        cJSON_Delete(data);
+
+    }
+}
+static void cloud_set_xf_mode(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        ac_status.xf_mode = value->valueint;
+        if (system_setting.xf_have==1) {
+            if (guider_ui.screen_main) {
+                lvgl_port_lock(-1);
+                // if (ac_status.xf_mode==2) {
+                //     lv_obj_remove_flag(guider_ui.screen_main_lab_new_fan_mode, LV_OBJ_FLAG_HIDDEN);
+                // }else {
+                //     lv_obj_add_flag(guider_ui.screen_main_lab_new_fan_mode, LV_OBJ_FLAG_HIDDEN);
+                // }
+                lvgl_port_unlock();
+            }
+            ac_set_xf_mode(true);
+        }
+
+        cJSON_Delete(data);
+
+    }
+}
+
+esp_err_t set_fan_vol(uint8_t gear, uint16_t *value)
+{
+    uint16_t addr = SLAVE_FAV_FIRST_VOL;
+    switch (gear) {
+        case 1:
+            addr = SLAVE_FAV_FIRST_VOL;
+            break;
+        case 2:
+            addr = SLAVE_FAN_SECOND_VOL;
+            break;
+        case 3:
+            addr = SLAVE_FAN_THIRD_VOL;
+            break;
+        default:
+            break;
+    }
+     modbus_set_reg(addr,*value);
+        return ESP_OK;
+}
+//设置电压档位
+static void cloud_set_fan_vol(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        cJSON *gear = cJSON_GetObjectItemCaseSensitive(data, "gear");
+        set_fan_vol(gear->valueint, (uint16_t *) &value->valueint);
+        cJSON_Delete(data);
+    }
+
+}
+static void cloud_set_filter_life(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        cJSON *value = cJSON_GetObjectItemCaseSensitive(data, "value");
+        system_setting.filter_life_time = value->valueint;
+        save_system_setting(&system_setting);
+        cJSON_Delete(data);
+    }
+}
+
+static void cloud_reset_filter_life_remain(char *params) {
+    cJSON *data = cJSON_Parse(params);
+    if (data != NULL) {
+        ac_status.filter_used_time=0;
+        xf_set_filter_life_remain(true);
+        cJSON_Delete(data);
+    }
+
+}
+
+static void cloud_set_min_hum(char *params) {
+
+}
+
+//注册云端指令s
+void register_sparrow_commands(void) {
+    sparrow_command set_power_cmd = {
+            .name = "setPower",
+            .unpack = &cloud_set_power
+    };
+    register_sparrow_command(set_power_cmd);
+    // setMode
+    sparrow_command set_mode_cmd = {
+            .name = "setMode",
+            .unpack = &cloud_set_mode
+    };
+    register_sparrow_command(set_mode_cmd);
+    // setFanLevel
+    sparrow_command set_fan_level_cmd = {
+            .name = "setFanLevel",
+            .unpack = &cloud_set_fan_level,
+    };
+    register_sparrow_command(set_fan_level_cmd);
+    // setNewFan
+    sparrow_command set_filter_life_cmd = {
+            .name = "setFilterLife",
+            .unpack = &cloud_set_filter_life,
+    };
+    register_sparrow_command(set_filter_life_cmd);
+    // setFanVoltage
+    sparrow_command set_min_hum_cmd = {
+            .name = "setMinHumCmd",
+            .unpack = &cloud_set_min_hum,
+    };
+    register_sparrow_command(set_min_hum_cmd);
+    sparrow_command set_duration = {
+            .name = "setReportDuration",
+            .unpack = &cloud_set_report_duration
+    };
+    register_sparrow_command(set_duration);
+    sparrow_command reset_filter_life_remain = {
+            .name = "setReportDuration",
+            .unpack = &cloud_reset_filter_life_remain
+    };
+    register_sparrow_command(reset_filter_life_remain);
+    sparrow_command set_fan_vol = {
+        .name = "setFanVoltage",
+        .unpack = &cloud_set_fan_vol
+    };
+    register_sparrow_command(set_fan_vol);
+    sparrow_command set_xf_mode = {
+        .name = "setNewFan",
+        .unpack = &cloud_set_xf_mode
+    };
+    register_sparrow_command(set_xf_mode);
+    sparrow_command set_temp = {
+        .name = "setTemp",
+        .unpack = &cloud_set_temp
+    };
+    register_sparrow_command(set_temp);
+}
+LV_IMAGE_DECLARE(_power_open_RGB565A8_36x36);
+LV_IMAGE_DECLARE(_liang_RGB565A8_30x30);
+LV_IMAGE_DECLARE(_cha_RGB565A8_30x30);
+/**
+ * TODO:处理风故障信息
+ */
+void handle_err_code()
+{
+    uint8_t error_code[2] = {0};
+    esp_err_t err = ESP_OK;
+    //err = mm_get_param(CID_ERROR_CODE, error_code);
+    if (err == ESP_OK)
+    {
+//        ESP_LOGE(TAG, "error_code1:%d",*(uint16_t *)error_code);
+        if (guider_ui.screen_main)
+        {
+            if((*(uint16_t *)error_code&0x0ff)==0)
+            {
+                lvgl_port_lock(-1);
+                lv_obj_add_flag(guider_ui.screen_main_lab_err, LV_OBJ_FLAG_HIDDEN);
+                lvgl_port_unlock();
+            } else{
+                lvgl_port_lock(-1);
+                lv_obj_clear_flag(guider_ui.screen_main_lab_err, LV_OBJ_FLAG_HIDDEN);
+                lvgl_port_unlock();
+            }
+        }
+        ac_status.error_code=(uint8_t)(*(uint16_t *)error_code&0x0ff);
+//        ESP_LOGE(TAG, "error_code:%d",ac_status.error_code);
+    }
+
+}
+void Refresh_UI()
+{
+    //ac_status.filter_life_remaining=(100-100*ac_status.filter_used_time/system_setting.filter_life_time);
+    modbus_set_reg(SLAVE_ENV_TEMP_REG_ADDRESS,sht30Data.temperature);
+    modbus_set_reg(SLAVE_ENV_HUMIDITY_REG_ADDRESS,sht30Data.humidity);
+    if (guider_ui.screen_main) {
+        lvgl_port_lock(-1);
+        // if (ac_status.xf_mode==2) {
+        //     lv_obj_remove_flag(guider_ui.screen_main_lab_new_fan_mode, LV_OBJ_FLAG_HIDDEN);
+        // }else {
+        //     lv_obj_add_flag(guider_ui.screen_main_lab_new_fan_mode, LV_OBJ_FLAG_HIDDEN);
+        // }
+        // if(ac_status.filter_life_remaining<=10)
+        // {
+        //     lv_obj_remove_flag(guider_ui.screen_main_label_filter_error, LV_OBJ_FLAG_HIDDEN);
+        // }else{
+        //     lv_obj_add_flag(guider_ui.screen_main_label_filter_error, LV_OBJ_FLAG_HIDDEN);
+        // }
+        // lv_label_set_text_fmt(guider_ui.screen_main_label_lvxin, "%d%%", ac_status.filter_life_remaining);
+        lvgl_port_unlock();
+    }
+}
+void set_fan_speed(uint16_t value) {
+#ifdef FAN_RELAY
+    set_fan_relay( value);
+    #endif
+#ifdef FAN_PWM
+    pwm0_10_set_val(get_fan_gear_vol());
+    pwm0_10_start();
+    #endif
+}
+void user_main_control() {
+    uint16_t set_temp=0;
+    uint16_t env_temp=0;
+    set_temp=modbus_get_reg(SLAVE_SET_TEMP_REG_ADDRESS);
+    env_temp=modbus_get_reg(SLAVE_ENV_TEMP_REG_ADDRESS);
+    ESP_LOGE(TAG, "mode:%d.\n",modbus_get_reg(SLAVE_WORK_MODE_REG_ADDRESS));
+    if (modbus_get_reg(SLAVE_POWER_REG_ADDRESS)==1) {
+        set_fan_speed(modbus_get_reg(SLAVE_FAN_LEVEL_REG_ADDRESS));
+        switch (modbus_get_reg(SLAVE_WORK_MODE_REG_ADDRESS)) {
+            case COLD:
+                if (env_temp-set_temp>=1) {
+                     tw_valve_open();
+                }else if(env_temp-set_temp<-1){
+                    tw_valve_close();
+                }else {
+
+                }
+                break;
+            case HEAT:
+                if (env_temp-set_temp<-1) {
+                    //ESP_LOGE(TAG, "HEAT env_temp-set_temp<-1).\n");
+                    tw_valve_open();
+                }else if(env_temp-set_temp>=1) {
+                    //ESP_LOGE(TAG, " HEAT env_temp-set_temp>=1.\n");
+                    tw_valve_close();
+                }else {
+
+                }
+                break;
+            case TF:
+                tw_valve_close();
+                break;
+            default: ;
+        }
+
+    }else {
+        tw_valve_close();
+        set_fan_speed(0);
+        pwm0_10_set_val(0);
+        pwm0_10_stop();
+    }
+
+}
+#define SLAVE_POWER_REG_ADDRESS (0) // 电源
+#define SLAVE_WORK_MODE_REG_ADDRESS (1) // 工作模式
+#define SLAVE_FRESH_MODE_ADDRESS_REGISTER (2) // 新风模式寄存器
+#define SLAVE_FAN_LEVEL_REG_ADDRESS (4) // 风速档位
+#define SLAVE_TW_VALVE_STAT_ADDRESS (5) // 二通阀状态
+#define SLAVE_FAV_FIRST_VOL  (0x15) //  风机一档电压
+#define SLAVE_FAN_SECOND_VOL (0x16) //  风机二档电压
+#define SLAVE_FAN_THIRD_VOL (0x17) //  风机三档电压
+#define SLAVE_SET_TEMP_REG_ADDRESS (0x0E) // 设置温度
+#define SLAVE_ENV_TEMP_REG_ADDRESS (0x1B) // 环境温度
+#define SLAVE_ENV_HUMIDITY_REG_ADDRESS (0x1C) // 环境湿度
+#define SLAVE_COMMUNICATION_STATUS_REG_ADDRESS (8) // 通讯状态
+/**
+ * 状态同步任务
+ * @param arg
+ */
+_Noreturn static void status_sync_task(void *arg) {
+    esp_err_t err = ESP_OK;
+    modbus_set_reg(SLAVE_POWER_REG_ADDRESS,ac_status.power);
+    modbus_set_reg(SLAVE_WORK_MODE_REG_ADDRESS,ac_status.mode);
+    modbus_set_reg(SLAVE_FRESH_MODE_ADDRESS_REGISTER,ac_status.xf_mode);
+    modbus_set_reg(SLAVE_FAN_LEVEL_REG_ADDRESS,ac_status.fan_speed);
+    modbus_set_reg(SLAVE_TW_VALVE_STAT_ADDRESS,ac_status.tw_status);
+    modbus_set_reg(SLAVE_FAV_FIRST_VOL,system_setting.fan_first_vol);
+    modbus_set_reg(SLAVE_FAN_SECOND_VOL,system_setting.fan_second_vol);
+    modbus_set_reg(SLAVE_FAN_THIRD_VOL,system_setting.fan_third_vol);
+    modbus_set_reg(SLAVE_SET_TEMP_REG_ADDRESS,ac_status.set_temp);
+    for (;;) {
+        user_main_control();
+        Refresh_UI();
+        //ESP_LOGE(TAG, "status_sync_task.\n");
+        //handle_err_code();
+        vTaskDelay(3000 / portTICK_PERIOD_MS);
+    }
+}
+/**
+ * 云端上报任务
+ * @param arg
+ */
+_Noreturn static void cloud_report_task(void *arg) {
+    for (;;) {
+        if (xSemaphoreTake(report_task_sem, portMAX_DELAY) == pdTRUE) {
+            ESP_LOGD(TAG, "cloud report");
+            cJSON *data = cJSON_CreateObject();
+            cJSON_AddNumberToObject(data, "power", ac_status.power);
+            cJSON_AddNumberToObject(data, "temperature", (int) (sht30Data.temperature));
+            cJSON_AddNumberToObject(data, "humidity", (int) (sht30Data.humidity));
+            cJSON_AddNumberToObject(data, "mode", ac_status.mode);
+            cJSON_AddNumberToObject(data, "fan_speed", ac_status.fan_speed);
+            cJSON_AddNumberToObject(data, "set_temp", ac_status.set_temp);//设置温度
+            cJSON_AddNumberToObject(data, "tw_status", ac_status.tw_status);//二通阀状态
+            cJSON_AddNumberToObject(data, "xf_have", system_setting.xf_have);//是否有新风模块
+            cJSON_AddNumberToObject(data, "xf_mode", ac_status.xf_mode);//手动新风
+            cJSON_AddNumberToObject(data, "filter_life_remaining", ac_status.filter_life_remaining);
+            cJSON_AddNumberToObject(data, "set_filter_life_time", system_setting.filter_life_time);
+            cJSON_AddNumberToObject(data, "air_quality", (int)sht30Data.air_quality);
+            cJSON_AddNumberToObject(data, "co2", (int)sht30Data.co2);
+            cJSON_AddNumberToObject(data, "timer_status", system_setting.timer_status);
+            cJSON_AddNumberToObject(data, "duration", system_setting.duration);
+            cJSON *root = cJSON_CreateObject();
+            cJSON_AddStringToObject(root, "cmd", "status");
+            cJSON_AddItemToObject(root, "params", data);
+            publish_message_t msg = {
+                    .topic = "status",
+                    .data = root,
+            };
+            sparrow_publish_status(msg);
+        }
+
+    }
+//
+}
+
+_Noreturn static void report_trigger_task(void *arg) {
+    for (;;) {
+        if (cloud_connected) {
+            xSemaphoreGive(report_task_sem);
+        }
+        vTaskDelay(pdTICKS_TO_MS(system_setting.report_data_duration * 1000));
+    }
+}
+/**
+ * 云端上报任务
+ * @param arg
+ */
+_Noreturn static void cloud_fault_report_task(void *arg) {
+    for (;;) {
+        if (cloud_connected) {
+            if (xSemaphoreTake(report_task_sem, portMAX_DELAY) == pdFALSE) {
+                ESP_LOGD(TAG, "cloud report");
+                cJSON *data = cJSON_CreateArray();
+                cJSON *fault = cJSON_CreateObject();
+                for (int i = 0; i < 8; i++) {
+                    if (ac_status.error_code & (1 << i)) {
+                        cJSON_AddStringToObject(fault, "code", (const char *) xf_fault[i].code);
+                        cJSON_AddStringToObject(fault, "desc", (const char *) xf_fault[i].description);
+                        cJSON_AddItemToArray(data, fault);
+                    }
+                }
+                cJSON *root = cJSON_CreateObject();
+                cJSON_AddStringToObject(root, "cmd", "status");
+                cJSON_AddItemToObject(root, "params", data);
+                publish_message_t msg = {
+                        .topic = "status",
+                        .data = root,
+                };
+                sparrow_publish_status(msg);
+            }
+            vTaskDelay(60*1000 / portTICK_PERIOD_MS);
+        }
+    }
+}
+void ac_controller_init(system_setting_t *setting) {
+    register_sparrow_commands(); // 注册云端指令
+
+    report_task_sem = xSemaphoreCreateBinary();
+   // timer_init_lx();
+    // 启动状态同步任务
+    xTaskCreate(status_sync_task, "status_sync_task", 4 * 1024, NULL, 5, &status_task_handle);
+    // 启动云端上报任务,受信号量控制,无信号时任务不作操作,只有本地有操作或定时上报任务触发时才会上报。
+    xTaskCreate(cloud_report_task, "report_task", 6 * 1024, NULL, 5, &cloud_report_handle);
+    xTaskCreate(report_trigger_task, "trigger_task", 2 * 1024, NULL, 5, &report_trigger_handle);
+    //故障上报
+   // xTaskCreate(cloud_fault_report_task, "report_task", 6 * 1024, NULL, 5, &cloud_report_handle);
+}
+void stop_xf_controller() {
+    vTaskDelete(status_task_handle);
+    vTaskDelete(cloud_report_handle);
+    vTaskDelete(report_trigger_handle);
+    // 停止modbus 协议 stack
+    modbus_master_destroy();
+}

+ 22 - 0
main/app/include/beep.h

@@ -0,0 +1,22 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/22 10:24
+ * Description: 蜂鸣器模块
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_BEEP_H
+#define WIRE_CONTROLLER_BEEP_H
+
+#define LEDC_TIMER              LEDC_TIMER_0
+#define LEDC_MODE               LEDC_LOW_SPEED_MODE
+#define LEDC_OUTPUT_IO          (42) // Define the output GPIO
+#define LEDC_CHANNEL            LEDC_CHANNEL_0
+#define LEDC_DUTY_RES           LEDC_TIMER_12_BIT // Set duty resolution to 10 bits
+#define LEDC_DUTY               (50) // Set duty to 50%.
+#define LEDC_FREQUENCY          (2900) // Frequency in Hertz. Set frequency at 4 kHz
+
+void beep_init(void);
+void beep();
+void beep_stop();
+
+#endif //WIRE_CONTROLLER_BEEP_H

+ 39 - 0
main/app/include/extend_io.h

@@ -0,0 +1,39 @@
+/**
+ * @Author: DELL
+ * @Date: 2025/5/22 上午9:18
+ * Description: 
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_EXTEND_IO_H
+#define WIRE_CONTROLLER_EXTEND_IO_H
+
+#pragma once
+#include "esp_err.h"
+#include "driver/gpio.h"
+typedef enum {
+    GPIO_NUM_Q0 = 0,     /*!< GPIO0, input and output */
+    GPIO_NUM_Q1 = 1,     /*!< GPIO1, input and output */
+    GPIO_NUM_Q2 = 2,     /*!< GPIO2, input and output */
+    GPIO_NUM_Q3 = 3,     /*!< GPIO3, input and output */
+    GPIO_NUM_Q4 = 4,     /*!< GPIO4, input and output */
+    GPIO_NUM_Q5 = 5,     /*!< GPIO5, input and output */
+    GPIO_NUM_Q6 = 6,     /*!< GPIO6, input and output */
+    GPIO_NUM_Q7 = 7,     /*!< GPIO7, input and output */
+/** @endcond */
+} extend_gpio_num_t;
+// 74HC595引脚定义 (根据实际电路修改)
+#define DATA_PIN    40  // DS (串行数据输入)
+#define CLOCK_PIN   42  // SHCP (移位寄存器时钟)
+#define LATCH_PIN   41  // STCP (存储寄存器时钟)
+
+#define HC595_SHCP_Low()      gpio_set_level(CLOCK_PIN, 0)
+#define HC595_SHCP_High()     gpio_set_level( CLOCK_PIN, 1 )
+#define HC595_STCP_Low()      gpio_set_level( LATCH_PIN, 0 )
+#define HC595_STCP_High()     gpio_set_level( LATCH_PIN, 1 )
+#define HC595_Data_Low()      gpio_set_level( DATA_PIN, 0 )
+#define HC595_Data_High()     gpio_set_level( DATA_PIN, 1 )
+
+void extend_io_init();
+void hc595_init();
+esp_err_t hc595_gpio_write(extend_gpio_num_t gpio_num, uint32_t level) ;
+#endif //WIRE_CONTROLLER_EXTEND_IO_H

+ 115 - 0
main/app/include/fp_controller.h

@@ -0,0 +1,115 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/25 15:23
+ * Description: 空调控制器
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_XF_CONTROLLER_H
+#define WIRE_CONTROLLER_XF_CONTROLLER_H
+
+#include "stdint.h"
+#include "setting.h"
+#include "esp_err.h"
+#include "gui_guider.h"
+
+#define NVS_POWER_CONTROLLER "power" // 电源
+#define NVS_MODEL_CONTROLLER "model" // 工作模式
+#define NVS_FAN_SPEED_SET "fan_speed" // 风速挡位
+#define NVS_XF_MODE_SET "xf_mode" // 新风模式
+#define NVS_AC_SET_TEMP_KEY "AC_SET_TEMP"//
+#define NVS_FILTER_USED_TIME "filter" //滤芯已使用时间
+#define NVS_TW_STATUS "tw_status" //滤芯已使用时间
+#define NVS_XF_MODE "xf_mode" //滤芯已使用时间
+
+#define NVS_MAX_HUM_SET  "set_max_hum" // 自动模式下最大湿度
+#define NVS_MIN_HUM_SET  "set_min_hum" // 自动模式下最小湿度
+// 风口序号
+enum {
+    FAN_VALVE_1 = 1,
+    FAN_VALVE_2,
+    FAN_VALVE_3,
+    FAN_VALVE_4,
+    FAN_VALVE_5,
+};
+
+/**
+ * 定义保存空调设置参数的结构体
+ */
+typedef struct {
+    uint16_t power; // 电源状态
+    uint16_t mode;
+    uint16_t fan_speed;
+    uint16_t set_temp;
+    uint16_t filter_used_time;
+    uint16_t set_max_hum;
+    uint8_t filter_life_remaining;
+    uint8_t error_code;
+    uint8_t tw_status;
+    uint8_t xf_mode;
+}ac_status_t;
+
+typedef struct {
+    uint8_t code[3];
+    uint8_t description[32];
+}xf_fault_t;
+enum {
+    COLD = 0,
+    HEAT=1,
+    TF=3,
+};
+extern xf_fault_t xf_fault[9];
+void stop_xf_controller();
+// 保存当前空调状态
+extern ac_status_t ac_status;
+
+/**
+ * 控制器初始化
+ * @param setting 系统设置参数
+ */
+void ac_controller_init(system_setting_t * setting);
+/**
+ * 设置滤网剩余寿命
+ * @param saved 是否保存到 nvs 中
+ */
+void xf_set_filter_life_remain(bool saved);
+/**
+ * 设置风档
+ * @param saved 是否保存到 nvs 中
+ */
+esp_err_t xf_set_fan_speed(bool saved);
+/**
+ * 设置电源
+ * @param saved 是否保存到 nvs 中
+ */
+esp_err_t ac_set_power(bool saved);
+/**
+ * 设置温度
+ * @param saved 是否保存到 nvs 中
+ */
+esp_err_t ac_set_temp(bool saved);
+/**
+ * 设置模式
+ * @param saved 是否保存到 nvs 中
+ */
+esp_err_t xf_set_mode(bool saved);
+/**
+ * 设置对应风阀开度
+ * @param no 风阀序号
+ * @param degree 风阀开度
+ */
+esp_err_t ac_set_fan_valve(uint8_t no, uint16_t degree);
+/**
+ * 新风模式(手动新风)
+ * @param no
+ * @param degree
+ */
+esp_err_t ac_set_xf_mode(bool saved);
+/**
+ * 注册云端指令
+ */
+void register_sparrow_commands(void);
+esp_err_t xf_set_max_hum(bool saved);
+extern void set_fan_level(lv_ui *ui, uint16_t speed);
+void read_xf_status(system_setting_t *setting);
+void timer_init_lx();
+#endif //WIRE_CONTROLLER_XF_CONTROLLER_H

+ 96 - 0
main/app/include/modbus_master.h

@@ -0,0 +1,96 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/27 15:35
+ * Description: 485主站
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_MODBUS_MASTER_H
+#define WIRE_CONTROLLER_MODBUS_MASTER_H
+
+#include "esp_err.h"
+
+#define MB_PORT_NUM     2   // Number of UART port used for Modbus connection
+#define MB_DEV_SPEED    9600  // The communication speed of the UART
+#define MB_GPIO_RX 2 // uart rx gpio port
+#define MB_GPIO_TX 1 // uart tx gpio port
+
+#define POWER_ADDRESS_REGISTER 1 // 电源地址
+#define MODE_ADDRESS_REGISTER 2 // 运行模式
+#define FAN_SPEED_ADDRESS_REGISTER 3 // 风机档位
+#define EXTERNAL_TEMPERATURE_ADDRESS_REGISTER 4 // 外部传感器温度
+#define EXTERNAL_HUMIDITY_ADDRESS_REGISTER 5 // 外部传感器湿度
+#define RETURN_AIR_TEMPERATURE_ADDRESS_REGISTER 6 // 回风温度
+#define RETURN_AIR_HUMIDITY_ADDRESS_REGISTER 7 // 回风湿度
+#define RETURN_AIR_PM25_ADDRESS_REGISTER 8 // 回风PM2.5
+#define RETURN_AIR_CO2_ADDRESS_REGISTER 9 // 回风CO2
+#define SELECT_POSITION_ADDRESS_REGISTER 10 // 选择位置
+#define MIN_HUMIDITY_ADDRESS_REGISTER 11 // 最小湿度
+#define MAX_HUMIDITY_ADDRESS_REGISTER 12 // 最大湿度
+#define AIR_FIRST_VOL_ADDRESS_REGISTER 13 //  低
+#define AIR_SECOND_VOL_ADDRESS_REGISTER 14 //  中
+#define AIR_THIRD_VOL_ADDRESS_REGISTER 15 //  高
+#define ERROR_CODE_ADDRESS_REGISTER 32 // 错误码
+
+
+// 定义协议 CID 表
+enum {
+    // 开关机
+    CID_POWER = 0,
+    // 工作模式
+    CID_MODE,
+    // 送风风速
+    CID_FAN_SPEED,
+    // 外部温度
+    CID_EXTERNAL_TEMPERATURE,
+    // 外部湿度
+    CID_EXTERNAL_HUMIDITY,
+    // 回风湿度
+    CID_RETURN_AIR_TEMPERATURE,
+    // 回风湿度
+    CID_RETURN_AIR_HUMIDITY,
+    // 回风PM2.5
+    CID_RETURN_AIR_PM25,
+    // 回风CO2
+    CID_RETURN_AIR_CO2,
+    // 选择位置
+    CID_SELECT_POSITION,
+    // 最小湿度
+    CID_MIN_HUMIDITY,
+    // 最大湿度
+    CID_MAX_HUMIDITY,
+    // 排风一档
+    CID_AIR_EXHAUST_FIRST_VOL,
+    // 排风二档
+    CID_AIR_EXHAUST_SECOND_VOL,
+    // 排风三档
+    CID_AIR_EXHAUST_THIRD_VOL,
+    // 排风四档
+    CID_AIR_EXHAUST_FOURTH_VOL,
+    // 排风五档
+    CID_AIR_EXHAUST_FIFTH_VOL,
+    // 送风一档
+    CID_AIR_SUPPLY_FIRST_VOL,
+    // 送风二档
+    CID_AIR_SUPPLY_SECOND_VOL,
+    // 送风三档
+    CID_AIR_SUPPLY_THIRD_VOL,
+    // 送风四档
+    CID_AIR_SUPPLY_FOURTH_VOL,
+    // 送风五档
+    CID_AIR_SUPPLY_FIFTH_VOL,
+    // 故障码
+    CID_ERROR_CODE,
+    //预留
+    CID_RESERVE,
+
+};
+
+
+
+
+void modbus_master_init();
+
+esp_err_t mm_set_param(uint16_t cid, uint8_t *value);
+esp_err_t mm_get_param(uint16_t cid, uint8_t *value) ;
+void modbus_master_destroy();
+#endif //WIRE_CONTROLLER_MODBUS_MASTER_H

+ 40 - 0
main/app/include/modbus_slave.h

@@ -0,0 +1,40 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/8/21 10:45
+ * Description: MODBUS 从站
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef ROOM_WIRE_CONTROLLER_MODBUS_SLAVE_H
+#define ROOM_WIRE_CONTROLLER_MODBUS_SLAVE_H
+#include "main.h"
+
+#define MB_PORT_NUM     2   // Number of UART port used for Modbus connection
+#define MB_DEV_SPEED    9600  // The communication speed of the UART
+#define MB_GPIO_RX 2 // uart rx gpio port
+#define MB_GPIO_TX 1 // uart tx gpio port
+
+#define MB_REG_HOLDING_START_AREA0  (0)
+#define MB_REG_HOLD_CNT             (30)
+
+#define SLAVE_POWER_REG_ADDRESS (0) // 电源
+#define SLAVE_WORK_MODE_REG_ADDRESS (1) // 工作模式
+#define SLAVE_FRESH_MODE_ADDRESS_REGISTER (2) // 新风模式寄存器
+#define SLAVE_FAN_LEVEL_REG_ADDRESS (4) // 风速档位
+#define SLAVE_TW_VALVE_STAT_ADDRESS (5) // 二通阀状态
+#define SLAVE_FAV_FIRST_VOL  (0x15) //  风机一档电压
+#define SLAVE_FAN_SECOND_VOL (0x16) //  风机二档电压
+#define SLAVE_FAN_THIRD_VOL (0x17) //  风机三档电压
+#define SLAVE_SET_TEMP_REG_ADDRESS (0x0E) // 设置温度
+#define SLAVE_ENV_TEMP_REG_ADDRESS (0x1B) // 环境温度
+#define SLAVE_ENV_HUMIDITY_REG_ADDRESS (0x1C) // 环境湿度
+
+#define SLAVE_COMMUNICATION_STATUS_REG_ADDRESS (8) // 通讯状态
+
+
+void modbus_slave_init();
+
+uint16_t modbus_get_reg(uint16_t address);
+void modbus_set_reg(uint16_t address, uint16_t value);
+void change_slave_id(uint16_t id);
+
+#endif //ROOM_WIRE_CONTROLLER_MODBUS_SLAVE_H

+ 21 - 0
main/app/include/ota.h

@@ -0,0 +1,21 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/26 14:21
+ * Description: OTA功能实现
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_OTA_H
+#define WIRE_CONTROLLER_OTA_H
+
+typedef struct {
+    char version[64];
+    char url[256];
+    uint32_t fileSize;
+} ota_info_t;
+
+/**
+ * 初始化OTA组件
+ */
+void ota_init(void);
+
+#endif //WIRE_CONTROLLER_OTA_H

+ 16 - 0
main/app/include/pwm0_10.h

@@ -0,0 +1,16 @@
+//
+// Created by lxd on 2025/9/15.
+//
+
+#ifndef WIRE_CONTROLLER_PWM0_10_H
+#define WIRE_CONTROLLER_PWM0_10_H
+#include <stdint.h>
+#include <stdbool.h>
+void pwm0_10_init();
+
+void pwm0_10_start();
+
+void pwm0_10_stop();
+
+void pwm0_10_set_val(uint16_t val);
+#endif //WIRE_CONTROLLER_PWM0_10_H

+ 18 - 0
main/app/include/relay.h

@@ -0,0 +1,18 @@
+//
+// Created by lxd on 2025/9/15.
+//
+
+#ifndef WIRE_CONTROLLER_TW_VALVE_H
+#define WIRE_CONTROLLER_TW_VALVE_H
+#include "main.h"
+#define TW_GPIO     3
+#define LOW_GPIO    4
+#define MID_GPIO    5
+#define HIGH_GPIO   6
+
+
+void tw_valve_init(void) ;
+void tw_valve_open(void) ;
+void tw_valve_close(void);
+void set_fan_relay(uint16_t value);
+#endif //WIRE_CONTROLLER_TW_VALVE_H

+ 83 - 0
main/app/include/setting.h

@@ -0,0 +1,83 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/5/2 11:48
+ * Description: 系统设置功能
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_SETTING_H
+#define WIRE_CONTROLLER_SETTING_H
+
+#include <stdint.h>
+#include <stdbool.h>
+
+//#define NVS_POWER_CONTROLLER "power" // 电源
+#define NVS_INNER_ADDR "inner_addr" // 内机地址
+#define NVS_XF_HAVE_ADDR "xf_have" // 是否有新风
+
+#define NVS_MIN_HUM "min_hum" // 最小湿度
+#define FILTER_LIFE_TIME "filter_life_time" //滤芯最大使用寿命
+
+#define NVS_FAV_FIRST_VOL  "fan_first_vol" //  风机一档电压
+#define NVS_FAN_SECOND_VOL "fan_second_vol" //  风机二档电压
+#define NVS_FAN_THIRD_VOL "fan_third_vol" //  风机三档电压
+#define NVS_REPORT_DATA_DURATION "report_dur" // 上报数据间隔
+
+#define NVS_SOUND_ON_OFF_KEY "S_ON_OFF"
+#define NVS_SCREEN_AUTO_OFF_KEY "SCREEN_A_O"
+#define NVS_SOUND_VOLUME_KEY "S_VOLUME"
+#define NVS_SCREEN_OFF_MINUTE_KEY "SCREEN_O_M"
+#define NVS_SCREEN_ON_OFF "scr_on_off" // 屏幕当前状态
+#define NVS_FIX_TEMP_KEY "FIX_TEMP"
+#define NVS_FIX_HUM_KEY "FIX_HUM"
+/**
+ * 定义系统设定参数结构体
+ */
+typedef struct {
+    uint8_t filter_life_remaining;
+    uint16_t filter_life_time;
+
+    uint16_t fan_first_vol;
+    uint16_t fan_second_vol;
+    uint16_t fan_third_vol;
+    uint8_t sound_on_off; // 声音开关
+    uint8_t screen_auto_off; // 是否自动关屏
+    uint8_t sound_volume; // 声音音量大小
+    uint8_t screen_off_minute; // 屏幕自动关屏时间
+    uint8_t timer_status;    // 定时器状态
+    uint8_t duration;        // 定时器时间
+    uint8_t report_data_duration;
+    uint8_t inner_addr;
+    int8_t fix_temp; // 温度修正值(-5,5)
+    int8_t fix_hum; // 湿度修正值(-5,5)
+    uint8_t xf_have;//是否有新风模块
+} system_setting_t;
+
+/**
+ * 读取系统设定参数
+ * @param setting
+ */
+void read_system_setting(system_setting_t *setting);
+
+/**
+ * 保存系统配置
+ */
+void save_system_setting(system_setting_t * setting);
+
+/**
+ * 保存风阀配置信息
+ * @param setting
+ * @param ctrl_no 控制编号 (1-5)
+ * @param fan_valve_no 风阀编号(1-5)
+ * @param value 0或1,代表关联与取消关联
+ */
+void save_fan_valve_setting(system_setting_t *setting, uint8_t ctrl_no, uint8_t fan_valve_no, uint8_t value);
+/**
+ * 熄屏计时器初始化
+ */
+void screen_off_timer_init( system_setting_t * setting);
+/**
+ * 重置屏幕熄灭
+ */
+bool reset_screen_off();
+void save_inner_addr(uint8_t addr);
+#endif //WIRE_CONTROLLER_SETTING_H

+ 77 - 0
main/app/include/sht30.h

@@ -0,0 +1,77 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/22 13:48
+ * Description: 温湿度传感器
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_SHT30_H
+#define WIRE_CONTROLLER_SHT30_H
+
+
+#define I2C_MASTER_SCL_IO           GPIO_NUM_38      /*!< GPIO number used for I2C master clock */
+#define I2C_MASTER_SDA_IO           GPIO_NUM_39      /*!< GPIO number used for I2C master data  */
+#define I2C_MASTER_NUM              0                          /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
+#define I2C_MASTER_FREQ_HZ          400000                     /*!< I2C master clock frequency */
+#define I2C_MASTER_TX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
+#define I2C_MASTER_RX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
+#define SHT3X_TICKS_TO_WAIT           (100 / portTICK_PERIOD_MS)    // I2C读写的超时等待时间
+
+#define SHT3X_I2C_BUS                 I2C_NUM_1 // SHT30所在的I2C总线
+
+#define SHT3X_SLAVE_ADDRESS           0x44    // SHT30在I2C总线上的从机器件地址
+
+
+// SHT30命令列表
+typedef enum
+{
+    /* 软件复位命令 */
+
+    SOFT_RESET_CMD = 0x30A2,
+    /*
+    单次测量模式
+    命名格式:Repeatability_CS_CMD
+    CS:Clock stretching
+    */
+    HIGH_ENABLED_CMD    = 0x2C06,
+    MEDIUM_ENABLED_CMD  = 0x2C0D,
+    LOW_ENABLED_CMD     = 0x2C10,
+    HIGH_DISABLED_CMD   = 0x2400,
+    MEDIUM_DISABLED_CMD = 0x240B,
+    LOW_DISABLED_CMD    = 0x2416,
+
+    /*
+    周期测量模式
+    命名格式:Repeatability_MPS_CMD
+    MPS:measurement per second
+    */
+    HIGH_0_5_CMD   = 0x2032,
+    MEDIUM_0_5_CMD = 0x2024,
+    LOW_0_5_CMD    = 0x202F,
+    HIGH_1_CMD     = 0x2130,
+    MEDIUM_1_CMD   = 0x2126,
+    LOW_1_CMD      = 0x212D,
+    HIGH_2_CMD     = 0x2236,
+    MEDIUM_2_CMD   = 0x2220,
+    LOW_2_CMD      = 0x222B,
+    HIGH_4_CMD     = 0x2334,
+    MEDIUM_4_CMD   = 0x2322,
+    LOW_4_CMD      = 0x2329,
+    HIGH_10_CMD    = 0x2737,
+    MEDIUM_10_CMD  = 0x2721,
+    LOW_10_CMD     = 0x272A,
+    /* 周期测量模式读取数据命令 */
+    READOUT_FOR_PERIODIC_MODE = 0xE000,
+} SHT30_CMD;
+/**
+ * 包含数据的结构体
+ */
+typedef struct {
+    float temperature;
+    float humidity;
+    int air_quality;
+    int co2;
+}sht30_data_t;
+extern sht30_data_t sht30Data;
+void sht30_init();
+
+#endif //WIRE_CONTROLLER_SHT30_H

+ 11 - 0
main/app/include/time_sync.h

@@ -0,0 +1,11 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/24 10:09
+ * Description: 时钟同步任务
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_TIME_SYNC_H
+#define WIRE_CONTROLLER_TIME_SYNC_H
+void initialize_sntp(void);
+void time_sync_start(void);
+#endif //WIRE_CONTROLLER_TIME_SYNC_H

+ 40 - 0
main/app/include/wifi.h

@@ -0,0 +1,40 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/18 10:23
+ * Description: wifi 相关操作
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_WIFI_H
+#define WIRE_CONTROLLER_WIFI_H
+
+
+#define DEFAULT_SCAN_LIST_SIZE   10                // 最大扫描wifi个数
+// wifi事件
+#define WIFI_CONNECTED_BIT    BIT0
+#define WIFI_FAIL_BIT         BIT1
+#define WIFI_START_BIT        BIT2
+// 平台事件组
+#define MQTT_CONNECTED    BIT0
+#define MQTT_DISCONNECTED         BIT1
+
+// wifi最大重连次数
+#define EXAMPLE_ESP_MAXIMUM_RETRY  5
+#define EXAMPLE_ESP_WIFI_SSID "test"
+#define EXAMPLE_ESP_WIFI_PASS "YXLJ0803"
+#define NVS_SSID_KEY  "wifi_ssid" // nvs 保存ssid的key
+#define NVS_PASSWORD_KEY  "wifi_password" // nvs 保存wifi密码的key
+
+
+// 定义一个wifi连接成功的 回调函数
+typedef void (*wifi_connect_cb)(void);
+
+// 搜索附近的 wifi 信号
+void app_wifi_scan(void);
+// 初始化 wifi 组件
+void app_wifi_init( wifi_connect_cb cb);
+// 连接到指定 wifi 节点
+void app_connect_wifi(void);
+// 获取wifi连接状态
+int get_wifi_status(void);
+
+#endif //WIRE_CONTROLLER_WIFI_H

+ 188 - 0
main/app/modbus_master.c

@@ -0,0 +1,188 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/27 15:35
+ * Description: 实现485主站
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_err.h>
+#include "modbus_master.h"
+#include "mbcontroller.h"
+
+#define OPTS(min_val, max_val, step_val) { .opt1 = min_val, .opt2 = max_val, .opt3 = step_val }
+static const char *TAG = "MODBUS_MASTER";
+
+enum {
+    // 分风箱主板从站号
+    MB_DEVICE_XFJS_ADDR = 10,
+
+};
+static void *master_handle = NULL;
+// The number of parameters that intended to be used in the particular control process
+#define MASTER_MAX_CIDS num_device_parameters
+
+// Number of reading of parameters from slave
+#define MASTER_MAX_RETRY                (10)
+
+// Timeout to update cid over Modbus
+#define UPDATE_CIDS_TIMEOUT_MS          (500)
+#define UPDATE_CIDS_TIMEOUT_TICS        (UPDATE_CIDS_TIMEOUT_MS / portTICK_PERIOD_MS)
+
+// Timeout between polls
+#define POLL_TIMEOUT_MS                 (1)
+#define POLL_TIMEOUT_TICS               (POLL_TIMEOUT_MS / portTICK_PERIOD_MS)
+// The macro to get offset for parameter in the appropriate structure
+#define HOLD_OFFSET(field) ((uint16_t)(offsetof(holding_reg_params_t, field) + 1))
+#define INPUT_OFFSET(field) ((uint16_t)(offsetof(input_reg_params_t, field) + 1))
+// Discrete offset macro
+
+#define STR(fieldname) ((const char *)( fieldname ))
+
+
+const mb_parameter_descriptor_t device_parameters[] = {
+        // { CID, Param Name, Units, Modbus Slave Addr, Modbus Reg Type, Reg Start, Reg Size, Instance Offset, Data Type, Data Size, Parameter Options, Access Mode}
+        {CID_POWER,        STR("power"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                POWER_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_MODE,        STR("mode"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                MODE_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_FAN_SPEED,   STR("fan_speed"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                FAN_SPEED_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_EXTERNAL_TEMPERATURE,   STR("external_temperature"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                EXTERNAL_TEMPERATURE_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_EXTERNAL_HUMIDITY,   STR("external_humidity"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                EXTERNAL_HUMIDITY_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_RETURN_AIR_TEMPERATURE,   STR("return_air_temperature"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                RETURN_AIR_TEMPERATURE_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_RETURN_AIR_HUMIDITY,   STR("return_air_humidity"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                RETURN_AIR_HUMIDITY_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_RETURN_AIR_PM25,   STR("return_air_pm25"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                RETURN_AIR_PM25_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_RETURN_AIR_CO2,   STR("return_air_co2"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                RETURN_AIR_CO2_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_SELECT_POSITION,   STR("select_position"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                SELECT_POSITION_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_MIN_HUMIDITY,   STR("min_humidity"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                MIN_HUMIDITY_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_MAX_HUMIDITY,   STR("max_humidity"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                MAX_HUMIDITY_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+        {CID_ERROR_CODE,   STR("error_code"),        STR(""), MB_DEVICE_XFJS_ADDR, MB_PARAM_HOLDING,
+                ERROR_CODE_ADDRESS_REGISTER,        1, 0, PARAM_TYPE_U16, 2, OPTS(0, 0, 0), PAR_PERMS_READ_WRITE},
+
+
+};
+
+// Calculate number of parameters in the table
+const uint16_t num_device_parameters = (sizeof(device_parameters) / sizeof(device_parameters[0]));
+
+
+IRAM_ATTR static esp_err_t master_init() {
+    // Initialize Modbus controller
+    mb_communication_info_t comm = {
+            .ser_opts.port = MB_PORT_NUM,
+            .ser_opts.mode = MB_RTU,
+            .ser_opts.baudrate = MB_DEV_SPEED,
+            .ser_opts.parity = MB_PARITY_NONE,
+            .ser_opts.response_tout_ms = 400,
+            .ser_opts.data_bits = UART_DATA_8_BITS,
+            .ser_opts.stop_bits = UART_STOP_BITS_1
+    };
+    ESP_LOGI(TAG, "Modbus controller initialized...");
+    esp_err_t err = mbc_master_create_serial(&comm, &master_handle);
+    MB_RETURN_ON_FALSE((master_handle != NULL), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller initialization fail.");
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller initialization fail, returns(0x%x).", (int) err);
+
+    // Set UART pin numbers
+    err = uart_set_pin(MB_PORT_NUM, MB_GPIO_TX, MB_GPIO_RX,
+                       UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb serial set pin failure, uart_set_pin() returned (0x%x).", (int) err);
+
+    err = mbc_master_start(master_handle);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller start fail, returned (0x%x).", (int) err);
+
+    // Set driver mode to Half Duplex
+    err = uart_set_mode(MB_PORT_NUM, UART_MODE_UART);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb serial set mode failure, uart_set_mode() returned (0x%x).", (int) err);
+
+    vTaskDelay(5);
+    err = mbc_master_set_descriptor(master_handle, &device_parameters[0], num_device_parameters);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller set descriptor fail, returns(0x%x).", (int) err);
+    ESP_LOGI(TAG, "Modbus master stack initialized...");
+    return err;
+}
+
+//static void *master_get_param_data(const mb_parameter_descriptor_t *param_descriptor)
+//{
+//    assert(param_descriptor != NULL);
+//    void *instance_ptr = NULL;
+//    if (param_descriptor->param_offset != 0) {
+//        switch(param_descriptor->mb_param_type)
+//        {
+//            case MB_PARAM_HOLDING:
+//                instance_ptr = ((void *)&holding_reg_params + param_descriptor->param_offset - 1);
+//                break;
+//            default:
+//                instance_ptr = NULL;
+//                break;
+//        }
+//    } else {
+//        ESP_LOGE(TAG, "Wrong parameter offset for CID #%u", (unsigned)param_descriptor->cid);
+//        assert(instance_ptr != NULL);
+//    }
+//    return instance_ptr;
+//}
+void modbus_master_task(void *arg) {
+    vTaskDelay(5000 / portTICK_PERIOD_MS);
+    ESP_LOGI(TAG, "Modbus master task started...");
+    esp_err_t err = ESP_OK;
+    uint8_t temp_data[2] = {0}; // temporary buffer to hold maximum CID size
+    uint8_t type = 0;
+    const mb_parameter_descriptor_t *param_descriptor = NULL;
+    for (;;) {
+        for (uint16_t cid = 0; (err != ESP_ERR_NOT_FOUND) && cid < 1; cid++) {
+            err = mbc_master_get_cid_info(master_handle, cid, &param_descriptor);
+            if ((err != ESP_ERR_NOT_FOUND) && (param_descriptor != NULL)) {
+                err = mbc_master_get_parameter(master_handle, param_descriptor->cid, (uint8_t *) temp_data, &type);
+                if (err == ESP_OK) {
+                    ESP_LOGI(TAG, "Characteristic #%d %s (%s) value = %d read successful.",
+                             param_descriptor->cid,
+                             (char *) param_descriptor->param_key,
+                             (char *) param_descriptor->param_units,
+                             *(uint16_t *) temp_data);
+
+                } else {
+                    ESP_LOGE(TAG, "Characteristic #%d (%s) read fail, err = 0x%x (%s).",
+                             param_descriptor->cid,
+                             (char *) param_descriptor->param_key,
+                             (int) err,
+                             (char *) esp_err_to_name(err));
+                }
+            }
+            vTaskDelay(1000 / portTICK_PERIOD_MS);
+        }
+        vTaskDelay(5000 / portTICK_PERIOD_MS);
+    }
+}
+
+ void modbus_master_init() {
+    ESP_LOGI(TAG, "Modbus master init...");
+    ESP_ERROR_CHECK(master_init());
+    vTaskDelay(10);
+    //xTaskCreatePinnedToCore(modbus_master_task, "modbus_master_task", 4 * 1024, NULL, 5, NULL, 1);
+}
+
+esp_err_t mm_set_param(uint16_t cid, uint8_t *value) {
+    uint8_t type = PARAM_TYPE_U16;
+    return mbc_master_set_parameter(master_handle, cid, value, &type);
+}
+esp_err_t mm_get_param(uint16_t cid, uint8_t *value) {
+    uint8_t type = PARAM_TYPE_U16;
+    return mbc_master_get_parameter(master_handle, cid, value, &type);
+}
+void modbus_master_destroy() {
+    mbc_master_delete(master_handle);
+}

+ 137 - 0
main/app/modbus_slave.c

@@ -0,0 +1,137 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/8/21 10:45
+ * Description: MODBUS 从站
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_attr.h>
+#include "modbus_slave.h"
+#include "esp_modbus_common.h"
+#include "esp_modbus_slave.h"
+#include "mb_endianness_utils.h"
+#include "lvgl_port.h"
+
+#define MB_PAR_INFO_GET_TOUT                (10)
+#define MB_READ_MASK                        (MB_EVENT_INPUT_REG_RD \
+                                                | MB_EVENT_HOLDING_REG_RD \
+                                                | MB_EVENT_DISCRETE_RD \
+                                                | MB_EVENT_COILS_RD)
+#define MB_WRITE_MASK                       (MB_EVENT_HOLDING_REG_WR \
+                                                | MB_EVENT_COILS_WR)
+#define MB_READ_WRITE_MASK                  (MB_READ_MASK | MB_WRITE_MASK)
+#define MB_READ_WRITE_MASK                  (MB_READ_MASK | MB_WRITE_MASK)
+static uint16_t holding_reg_area[MB_REG_HOLD_CNT] = {0};
+#define MB_SLAVE_ADDR (1)
+static const char *TAG = "MODBUS_SLAVE";
+mb_param_info_t reg_info;
+static void *mbc_slave_handle = NULL;
+static uint8_t communication_status = 0; // 通讯状态累加值
+static void setup_modbus_regs() {
+    holding_reg_area[SLAVE_FAN_LEVEL_REG_ADDRESS] = 2;
+}
+
+IRAM_ATTR static esp_err_t slave_init() {
+    mb_register_area_descriptor_t reg_area = {0};
+    // Initialize Modbus controller
+    mb_communication_info_t comm_config = {
+            .ser_opts.port = MB_PORT_NUM,
+            .ser_opts.mode = MB_RTU,
+            .ser_opts.baudrate = MB_DEV_SPEED,
+            .ser_opts.parity = MB_PARITY_NONE,
+            .ser_opts.uid = system_setting.inner_addr,
+            .ser_opts.data_bits = UART_DATA_8_BITS,
+            .ser_opts.stop_bits = UART_STOP_BITS_1
+    };
+    ESP_LOGI(TAG, "Modbus controller initialized...");
+    esp_err_t err = mbc_slave_create_serial(&comm_config, &mbc_slave_handle); // Initialization of Modbus controller
+    MB_RETURN_ON_FALSE((mbc_slave_handle != NULL), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller initialization fail.");
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller initialization fail, returns(0x%x).", (int) err);
+
+    reg_area.type = MB_PARAM_HOLDING;                               // Set type of register area
+    reg_area.start_offset = MB_REG_HOLDING_START_AREA0;             // Offset of register area in Modbus protocol
+    reg_area.address = (void *) &holding_reg_area[0];                 // Set pointer to storage instance
+    reg_area.size = sizeof(holding_reg_area) << 1;                  // Set the size of register storage area in bytes
+    err = mbc_slave_set_descriptor(mbc_slave_handle, reg_area);
+
+    // setup modbus regs
+    setup_modbus_regs();
+    // Set UART pin numbers
+    err = uart_set_pin(MB_PORT_NUM, MB_GPIO_TX, MB_GPIO_RX,
+                       UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb serial set pin failure, uart_set_pin() returned (0x%x).", (int) err);
+
+    // Set driver mode to Half Duplex
+    err = uart_set_mode(MB_PORT_NUM, UART_MODE_UART);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb serial set mode failure, uart_set_mode() returned (0x%x).", (int) err);
+    vTaskDelay(5);
+    err = mbc_slave_start(mbc_slave_handle);
+    MB_RETURN_ON_FALSE((err == ESP_OK), ESP_ERR_INVALID_STATE, TAG,
+                       "mb controller start fail, returned (0x%x).", (int) err);
+    ESP_LOGI(TAG, "Modbus slave stack initialized...");
+    return err;
+}
+
+void modbus_slave_task(void *pv) {
+    for (;;) {
+        (void) mbc_slave_check_event(mbc_slave_handle, MB_READ_WRITE_MASK);
+        ESP_ERROR_CHECK(mbc_slave_get_param_info(mbc_slave_handle, &reg_info, MB_PAR_INFO_GET_TOUT));
+        const char *rw_str = (reg_info.type & MB_READ_MASK) ? "READ" : "WRITE";
+        if (reg_info.type & MB_EVENT_HOLDING_REG_RD) {
+            communication_status = 0;
+            (void) mbc_slave_lock(mbc_slave_handle);
+            holding_reg_area[SLAVE_COMMUNICATION_STATUS_REG_ADDRESS] = 1;
+            (void) mbc_slave_unlock(mbc_slave_handle);
+        }
+    }
+}
+
+static void communication_status_check_task(void *pv) {
+    for (;;) {
+    if (communication_status == 0 && guider_ui.screen_main) {
+        lvgl_port_lock(0);
+        lv_obj_remove_flag(guider_ui.screen_main_label_xf_conn, LV_OBJ_FLAG_HIDDEN);
+        system_setting.xf_have=1;
+        lvgl_port_unlock();
+    }
+    communication_status++;
+    if (communication_status > 30) {
+        communication_status = 30;
+    }
+    if (communication_status >= 30) {
+        holding_reg_area[SLAVE_COMMUNICATION_STATUS_REG_ADDRESS] = 0;
+        lvgl_port_lock(0);
+        lv_obj_add_flag(guider_ui.screen_main_label_xf_conn, LV_OBJ_FLAG_HIDDEN);
+        system_setting.xf_have=0;
+        lvgl_port_unlock();
+    }
+    vTaskDelay(pdTICKS_TO_MS(1000));
+    }
+}
+
+void modbus_slave_init() {
+    ESP_LOGI(TAG, "Modbus slave init...");
+    ESP_ERROR_CHECK(slave_init());
+    vTaskDelay(10);
+    xTaskCreate(modbus_slave_task, "modbus_slave_task", 4 * 1024, NULL, 5, NULL);
+    xTaskCreate(communication_status_check_task, "check_task", 2 * 1024, NULL, 5, NULL);
+}
+
+uint16_t modbus_get_reg(uint16_t address) {
+    uint16_t value = 0;
+    if (address < MB_REG_HOLD_CNT) {
+       // ESP_LOGE(TAG, "Modbus slave address %d\n",address);
+        value = holding_reg_area[address];
+    }
+    return value;
+}
+
+
+void modbus_set_reg(uint16_t address, uint16_t value) {
+    if (address < MB_REG_HOLD_CNT) {
+        holding_reg_area[address] = value;
+    }
+}

+ 161 - 0
main/app/ota.c

@@ -0,0 +1,161 @@
+#include <sys/queue.h>
+#include <sys/cdefs.h>
+/**
+ * @Author: 李建
+ * @Date: 2025/3/26 14:21
+ * Description: OTA功能实现
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_err.h>
+#include <esp_http_client.h>
+#include <esp_log.h>
+#include <esp_https_ota.h>
+
+#include <cJSON.h>
+#include "ota.h"
+#include "stdint.h"
+#include "sub_device/command.h"
+#include "system/miscellaneous_interface.h"
+#include "display/lv_display.h"
+#include "lvgl_port.h"
+#include "main.h"
+#include "fp_controller.h"
+#include "lcd_st7701.h"
+
+
+extern const uint8_t server_cert_pem_start[] asm("_binary_ssl_pem_start");
+extern const uint8_t server_cert_pem_end[] asm("_binary_ssl_pem_end");
+static const char *TAG = "ota";
+uint32_t downloaded_size = 0;
+static ota_info_t ota_info;
+uint32_t old_progress = 0;
+uint32_t progress = 0;
+static bool isUpdating = false;
+
+static esp_err_t http_event_handler(esp_http_client_event_t *evt) {
+    switch (evt->event_id) {
+        case HTTP_EVENT_ERROR:
+            ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
+            lvgl_port_lock(-1);
+            lv_obj_remove_flag(guider_ui.OTAPage_btn_exit, LV_OBJ_FLAG_HIDDEN);
+            lvgl_port_unlock();
+            break;
+        case HTTP_EVENT_ON_CONNECTED:
+            ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED");
+            break;
+        case HTTP_EVENT_HEADER_SENT:
+            ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT");
+            break;
+        case HTTP_EVENT_ON_HEADER:
+            ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value);
+            break;
+        case HTTP_EVENT_ON_DATA:
+            downloaded_size += evt->data_len;
+            progress = (downloaded_size * 100) / ota_info.fileSize;
+            if(progress != old_progress) {
+                ESP_LOGI(TAG, "progress=%lu%%", progress);
+                old_progress = progress;
+            }
+
+            break;
+        case HTTP_EVENT_ON_FINISH:
+            ESP_LOGI(TAG, "HTTP_EVENT_ON_FINISH");
+            break;
+        case HTTP_EVENT_DISCONNECTED:
+            ESP_LOGD(TAG, "HTTP_EVENT_DISCONNECTED");
+            break;
+        case HTTP_EVENT_REDIRECT:
+            ESP_LOGD(TAG, "HTTP_EVENT_REDIRECT");
+            break;
+    }
+    return ESP_OK;
+}
+
+_Noreturn void ota_task(void *pv) {
+    ESP_LOGI(TAG, "Starting OTA example task, %ld,%ld",esp_get_free_internal_heap_size(), esp_get_minimum_free_heap_size());
+
+    esp_http_client_config_t config = {
+            .url = ota_info.url,
+            .cert_pem = (char *) server_cert_pem_start,
+            .event_handler = http_event_handler,
+            .keep_alive_enable = true,
+    };
+#ifdef CONFIG_EXAMPLE_SKIP_COMMON_NAME_CHECK
+    config.skip_cert_common_name_check = true;
+#endif
+    esp_https_ota_config_t ota_config = {
+            .http_config = &config,
+    };
+    ESP_LOGI(TAG, "Attempting to download update from %s", config.url);
+    esp_err_t ret = esp_https_ota(&ota_config);
+    if (ret == ESP_OK) {
+        ESP_LOGI(TAG, "OTA Succeed, Rebooting...");
+        // vTaskDelay( pdTICKS_TO_MS(3000));
+        esp_restart();
+    } else {
+        ESP_LOGE(TAG, "Firmware upgrade failed");
+        lvgl_port_lock(-1);
+        lv_obj_remove_flag(guider_ui.OTAPage_btn_exit, LV_OBJ_FLAG_HIDDEN);
+        lvgl_port_unlock();
+    }
+    while (1) {
+        vTaskDelay(1000 / portTICK_PERIOD_MS);
+    }
+}
+
+_Noreturn static void progress_task(void * pv) {
+    while (1) {
+        lvgl_port_lock(-1);
+        lv_bar_set_value(guider_ui.OTAPage_bar_ota_progress, (int32_t) progress, false);
+        lvgl_port_unlock();
+        vTaskDelay(100 / portTICK_PERIOD_MS);
+    }
+}
+
+static void start_ota() {
+    lcd_st7701_backlight_on();
+    ui_load_scr_animation(&guider_ui, &guider_ui.OTAPage, guider_ui.OTAPage_del,
+                          &guider_ui.screen_main_del, setup_scr_OTAPage,
+                          LV_SCR_LOAD_ANIM_MOVE_LEFT, 200, 0, false, false);
+    lv_label_set_text(guider_ui.OTAPage_lab_ota_remote_version, ota_info.version);
+    esp_app_desc_t * desc = esp_app_get_description();
+    lv_label_set_text(guider_ui.OTAPage_lab_ota_current_version, desc->version);
+    if(xTaskCreate(&ota_task, "ota_task", 8192, NULL, 5, NULL)!=pdTRUE)
+    {
+        ESP_LOGE(TAG, "create ota_task failed");
+        lvgl_port_lock(-1);
+        lv_obj_remove_flag(guider_ui.OTAPage_btn_exit, LV_OBJ_FLAG_HIDDEN);
+        lvgl_port_unlock();
+    }
+    xTaskCreate(&progress_task, "update_task", 1024 * 2, NULL, 5, NULL);
+}
+
+/**
+ * 设备OTA升级
+ * @param params
+ */
+void on_dev_upgrade(char *params) {
+    if(isUpdating)return;
+    cJSON *root = cJSON_Parse(params);
+    cJSON *file_size = cJSON_GetObjectItemCaseSensitive(root, "file_size");
+    cJSON *url = cJSON_GetObjectItemCaseSensitive(root, "url");
+    cJSON *version = cJSON_GetObjectItemCaseSensitive(root, "version");
+
+    ota_info.fileSize = file_size->valueint;
+    snprintf(ota_info.url, sizeof(ota_info.url), "%s", url->valuestring);
+    snprintf(ota_info.version, sizeof(ota_info.version), "%s", version->valuestring);
+    stop_xf_controller();
+    start_ota();
+    cJSON_Delete(root);
+    ESP_LOGI(TAG, "OTA info: fileSize=%lu, url=%s, version=%s", ota_info.fileSize, ota_info.url, ota_info.version);
+    isUpdating = true;
+}
+
+// 初始化平台OTA功能指令
+void ota_init() {
+    sparrow_command ota_cmd = {
+            .name = "devUpgrade",
+            .unpack = &on_dev_upgrade,
+    };
+    register_sparrow_command(ota_cmd);
+}

+ 21 - 0
main/app/pwm0_10.c

@@ -0,0 +1,21 @@
+//
+// Created by lxd on 2025/9/15.
+//
+
+#include "include/pwm0_10.h"
+
+void pwm0_10_init() {
+
+}
+
+void pwm0_10_start() {
+
+}
+
+void pwm0_10_stop() {
+
+}
+
+void pwm0_10_set_val(uint16_t val) {
+
+}

+ 44 - 0
main/app/relay.c

@@ -0,0 +1,44 @@
+//
+// Created by lxd on 2025/9/15.
+//
+
+#include "include/relay.h"
+#include"extend_io.h"
+#include <esp_log.h>
+static const char* TAG = "RELAY";
+void relay_init(void) {
+
+    hc595_gpio_write(TW_GPIO, 0);
+    hc595_gpio_write(LOW_GPIO, 0);
+    hc595_gpio_write(MID_GPIO, 0);
+    hc595_gpio_write(HIGH_GPIO, 0);
+}
+
+void tw_valve_open(void) {
+    ESP_LOGE(TAG, "tw_valve_open.\n");
+    hc595_gpio_write(TW_GPIO, 1);
+}
+
+void tw_valve_close(void) {
+    ESP_LOGE(TAG, "tw_valve_close.\n");
+    hc595_gpio_write(TW_GPIO, 0);
+}
+void set_fan_relay(uint16_t value) {
+    if (value==1) {
+        hc595_gpio_write(LOW_GPIO, 1);
+        hc595_gpio_write(MID_GPIO, 0);
+        hc595_gpio_write(HIGH_GPIO, 0);
+    }else if (value==2) {
+        hc595_gpio_write(LOW_GPIO, 0);
+        hc595_gpio_write(MID_GPIO, 1);
+        hc595_gpio_write(HIGH_GPIO, 0);
+    }else if (value==3) {
+        hc595_gpio_write(LOW_GPIO, 0);
+        hc595_gpio_write(MID_GPIO, 0);
+        hc595_gpio_write(HIGH_GPIO, 1);
+    }else {
+        hc595_gpio_write(LOW_GPIO, 0);
+        hc595_gpio_write(MID_GPIO, 0);
+        hc595_gpio_write(HIGH_GPIO, 0);
+    }
+}

+ 177 - 0
main/app/setting.c

@@ -0,0 +1,177 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/5/2 11:48
+ * Description: 系统设置功能
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_log.h>
+#include <esp_timer.h>
+#include "setting.h"
+#include "lvgl.h"
+#include "system/miscellaneous_interface.h"
+#include "lcd_st7701.h"
+#include "gui_guider.h"
+#define DEFAULT_REPORT_DURATION 30
+#define DEFAULT_MIN_HUM 30
+#define FILTER_LIFE_TIME_VALVE 51840//六个月,每五分钟计数加一
+
+void save_inner_addr(uint8_t addr) {
+    nvs_set_uint8(addr, NVS_INNER_ADDR);
+}
+static const char *TAG = "system_setting";
+lv_timer_t * screen_timer;
+static uint8_t screen_on_off_status;// 当前屏幕亮或灭的状态
+void read_system_setting(system_setting_t *setting) {
+    uint8_t air_exhaust_fan_vol[3]={20,40,49};
+
+    uint32_t *filter_life_time_valve = nvs_get_uint32(FILTER_LIFE_TIME);
+    uint8_t *fan_first_vol = nvs_get_uint8(NVS_FAV_FIRST_VOL);
+    uint8_t *fan_second_vol = nvs_get_uint8(NVS_FAN_SECOND_VOL);
+    uint8_t *fan_third_vol = nvs_get_uint8(NVS_FAN_THIRD_VOL);
+    uint8_t *report_duration = nvs_get_uint8(NVS_REPORT_DATA_DURATION);
+    int8_t *fix_hum = nvs_get_int8(NVS_FIX_HUM_KEY);
+    int8_t *fix_temp = nvs_get_int8(NVS_FIX_TEMP_KEY);
+    if (fix_hum == NULL) {
+        nvs_set_int8(9, NVS_FIX_HUM_KEY);
+        setting->fix_hum = 9;
+    } else {
+        setting->fix_hum = *fix_hum;
+    }
+    if (fix_temp == NULL) {
+        nvs_set_int8(-3, NVS_FIX_TEMP_KEY);
+        setting->fix_temp = -3;
+    } else {
+        setting->fix_temp = *fix_temp;
+    }
+    uint8_t *screen_auto_off = nvs_get_uint8(NVS_SCREEN_AUTO_OFF_KEY);
+    if (screen_auto_off == NULL) {
+        nvs_set_uint8(1, NVS_SCREEN_AUTO_OFF_KEY);
+        setting->screen_auto_off = 1;
+    } else {
+        setting->screen_auto_off = *screen_auto_off;
+    }
+    uint8_t *screen_off_minute = nvs_get_uint8(NVS_SCREEN_OFF_MINUTE_KEY);
+    if (screen_off_minute == NULL) {
+        nvs_set_uint8(1, NVS_SCREEN_OFF_MINUTE_KEY);
+        setting->screen_off_minute = 1;
+    } else {
+        setting->screen_off_minute = *screen_off_minute;
+    }
+    uint8_t *sound_on_off = nvs_get_uint8(NVS_SOUND_ON_OFF_KEY);
+    if (sound_on_off == NULL) {
+        nvs_set_uint8(1, NVS_SOUND_ON_OFF_KEY);
+        setting->sound_on_off = 1;
+    } else {
+        setting->sound_on_off = *sound_on_off;
+    }
+    uint8_t *sound_volume = nvs_get_uint8(NVS_SOUND_VOLUME_KEY);
+    if (sound_volume == NULL) {
+        nvs_set_uint8(50, NVS_SOUND_VOLUME_KEY);
+        setting->sound_volume = 50;
+    } else {
+        setting->sound_volume = *sound_volume;
+    }
+    if (fan_first_vol == NULL) {
+         nvs_set_uint32(air_exhaust_fan_vol[0], NVS_FAV_FIRST_VOL);
+        setting->fan_first_vol = air_exhaust_fan_vol[0];
+    } else {
+        setting->fan_first_vol = *fan_first_vol;
+    }
+    if (fan_second_vol == NULL) {
+        nvs_set_uint32(air_exhaust_fan_vol[1], NVS_FAN_SECOND_VOL);
+        setting->fan_second_vol = air_exhaust_fan_vol[1];
+    } else {
+        setting->fan_second_vol = *fan_second_vol;
+    }
+    if (fan_third_vol == NULL) {
+        nvs_set_uint32(air_exhaust_fan_vol[2], NVS_FAN_THIRD_VOL);
+        setting->fan_third_vol = air_exhaust_fan_vol[2];
+    } else {
+        setting->fan_third_vol = *fan_third_vol;
+    }
+
+    if (filter_life_time_valve == NULL) {
+        nvs_set_uint32(FILTER_LIFE_TIME_VALVE, FILTER_LIFE_TIME);
+        setting->filter_life_time = FILTER_LIFE_TIME_VALVE;
+    } else {
+        setting->filter_life_time = *filter_life_time_valve;
+    }
+    setting->filter_life_time = FILTER_LIFE_TIME_VALVE;
+    if (report_duration == NULL) {
+        nvs_set_uint8(DEFAULT_REPORT_DURATION, NVS_REPORT_DATA_DURATION);
+        setting->report_data_duration = DEFAULT_REPORT_DURATION;
+    } else {
+        setting->report_data_duration = *report_duration;
+    }
+    uint8_t *inner_addr = nvs_get_uint8(NVS_INNER_ADDR);
+    if (inner_addr == NULL) {
+        nvs_set_uint8(1, NVS_INNER_ADDR);
+        setting->inner_addr = 1;
+    } else {
+        setting->inner_addr = *inner_addr;
+    }
+    uint8_t *xf_have = nvs_get_uint8(NVS_XF_HAVE_ADDR);
+    if (xf_have == NULL) {
+        nvs_set_uint8(0, NVS_XF_HAVE_ADDR);
+        setting->xf_have = 1;
+    } else {
+        setting->xf_have = *xf_have;
+    }
+}
+
+void save_system_setting(system_setting_t *setting) {
+    nvs_set_uint32(setting->filter_life_time, FILTER_LIFE_TIME);
+    nvs_set_uint8(setting->report_data_duration, NVS_REPORT_DATA_DURATION);
+    nvs_set_uint8(setting->inner_addr, NVS_INNER_ADDR);
+    nvs_set_uint8(setting->fix_temp, NVS_FIX_TEMP_KEY);
+    nvs_set_uint8(setting->fix_hum, NVS_FIX_HUM_KEY);
+    nvs_set_uint8(setting->fan_first_vol, NVS_FAV_FIRST_VOL);
+    nvs_set_uint8(setting->fan_second_vol, NVS_FAN_SECOND_VOL);
+    nvs_set_uint8(setting->fan_third_vol, NVS_FAN_THIRD_VOL);
+    nvs_set_uint8(setting->xf_have, NVS_XF_HAVE_ADDR);
+
+    nvs_set_uint8(setting->sound_on_off, NVS_SOUND_ON_OFF_KEY);
+    nvs_set_uint8(setting->sound_volume, NVS_SOUND_VOLUME_KEY);
+    nvs_set_uint8(setting->screen_auto_off, NVS_SCREEN_AUTO_OFF_KEY);
+    nvs_set_uint8(setting->screen_off_minute, NVS_SCREEN_OFF_MINUTE_KEY);
+}
+
+static uint8_t set_bits(uint8_t num, uint8_t bit, uint8_t value) {
+    if (bit > 7)
+        return num;
+    if (value)
+        return num | (1 << bit);
+    else
+        return num & ~(1 << bit);
+}
+
+static void screen_off_timer_cb(lv_timer_t * timer) {
+
+    lcd_st7701_backlight_off();
+    lv_screen_load_anim(guider_ui.screen_main, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 100, 0, false);
+    screen_on_off_status = 0;
+    nvs_set_uint8(1, NVS_SCREEN_ON_OFF);
+    lv_timer_pause(screen_timer);
+}
+
+bool reset_screen_off(){
+
+    if(screen_timer==NULL)return false;
+    lv_timer_reset(screen_timer);
+    if(screen_on_off_status==0)
+    {
+
+        lcd_st7701_backlight_on();
+        nvs_set_uint8(0, NVS_SCREEN_ON_OFF);
+        screen_on_off_status = 1;
+        lv_timer_resume(screen_timer);
+        return true;
+    }
+    return false;
+}
+
+void screen_off_timer_init(system_setting_t* setting) {
+    ESP_LOGD(TAG, "screen_off_timer_init");
+    screen_timer = lv_timer_create(screen_off_timer_cb, 1000 * 60 * setting->screen_off_minute, NULL);
+}
+

+ 269 - 0
main/app/sht30.c

@@ -0,0 +1,269 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/4/22 13:48
+ * Description: 温湿度传感器
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <esp_log.h>
+#include "sht30.h"
+#include "driver/i2c.h"
+#include "main.h"
+#include "lvgl_port.h"
+#include "wifi.h"
+#include "esp_wifi.h"
+#include "lcd_st7701.h"
+
+sht30_data_t sht30Data = {0};
+static const char* TAG = "SHT30";
+
+#define DRIFT_RATE 0.1524  // 根据历史数据计算的漂移率 (°C/hour)
+#define ACK_CHECK_EN   0x1     /*!< I2C master will check ack from slave*/
+#define ACK_CHECK_DIS  0x0     /*!< I2C master will not check ack from slave */
+#define ACK_VAL    0x0         /*!< I2C ack value */
+#define NACK_VAL   0x1         /*!< I2C nack value */
+int current_seconds;
+// 温度修正函数
+static double correct_temperature(double current_temp) {
+    static const int start_seconds = 0;
+    // 计算经过时间(秒)
+    double elapsed_seconds = (double) (current_seconds - start_seconds);
+    // 计算修正量(漂移率 × 经过分钟数)
+    double correction = DRIFT_RATE * (elapsed_seconds / 60.0);
+    // 应用修正
+    return current_temp - correction;
+}
+static esp_err_t i2c_master_init(void)
+{
+    int i2c_master_port = I2C_MASTER_NUM;
+
+    i2c_config_t conf = {
+            .mode = I2C_MODE_MASTER,
+            .sda_io_num = I2C_MASTER_SDA_IO,
+            .scl_io_num = I2C_MASTER_SCL_IO,
+            .sda_pullup_en = GPIO_PULLUP_ENABLE,
+            .scl_pullup_en = GPIO_PULLUP_ENABLE,
+            .master.clk_speed = I2C_MASTER_FREQ_HZ,
+    };
+
+    i2c_param_config(i2c_master_port, &conf);
+
+    return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
+}
+esp_err_t i2c_master_write_slave_reg(i2c_port_t i2c_num, uint8_t slave_addr, uint8_t reg_addr, uint8_t *data_wr, size_t size, TickType_t ticks_to_wait)
+{
+    i2c_cmd_handle_t cmd = i2c_cmd_link_create();
+    i2c_master_start(cmd);
+    i2c_master_write_byte(cmd, (slave_addr << 1) | I2C_MASTER_WRITE, ACK_CHECK_EN);
+    i2c_master_write_byte(cmd, reg_addr, ACK_CHECK_EN);
+    i2c_master_write(cmd, data_wr, size, ACK_CHECK_EN);
+    i2c_master_stop(cmd);
+    esp_err_t ret = i2c_master_cmd_begin(i2c_num, cmd, ticks_to_wait);
+    i2c_cmd_link_delete(cmd);
+    return ret;
+}
+esp_err_t i2c_master_read_slave_reg_16bit(i2c_port_t i2c_num, uint8_t slave_addr, uint16_t reg_addr, uint8_t *data_rd, size_t size, TickType_t ticks_to_wait)
+{
+    if (size == 0) {
+        return ESP_OK;
+    }
+    i2c_cmd_handle_t cmd = i2c_cmd_link_create();
+    i2c_master_start(cmd);
+    i2c_master_write_byte(cmd, (slave_addr << 1) | I2C_MASTER_WRITE, ACK_CHECK_EN);
+    i2c_master_write_byte(cmd, reg_addr>>8, ACK_CHECK_EN);
+    i2c_master_write_byte(cmd, reg_addr, ACK_CHECK_EN);
+    i2c_master_start(cmd);
+    i2c_master_write_byte(cmd, (slave_addr << 1) | I2C_MASTER_READ, ACK_CHECK_EN);
+    if (size > 1) {
+        i2c_master_read(cmd, data_rd, size - 1, ACK_VAL);
+    }
+    i2c_master_read_byte(cmd, data_rd + size - 1, NACK_VAL);
+    i2c_master_stop(cmd);
+    esp_err_t ret = i2c_master_cmd_begin(i2c_num, cmd, ticks_to_wait);
+    i2c_cmd_link_delete(cmd);
+    return ret;
+}
+/**
+ * @brief    向SHT3x发送一条指令(16bit)
+ *
+ * @param    cmd —— SHT3x指令(在SHT3x_MODE中枚举定义)
+ *
+ * @retval    成功返回HAL_OK(ESP_OK)
+*/
+static uint8_t SHT3X_Send_Cmd(SHT30_CMD cmd)
+{
+    uint8_t cmd_buffer[2];
+    cmd_buffer[0] = cmd >> 8;
+    cmd_buffer[1] = cmd;
+    return i2c_master_write_slave_reg(SHT3X_I2C_BUS, SHT3X_SLAVE_ADDRESS, cmd_buffer[0], cmd_buffer+1, 1, SHT3X_TICKS_TO_WAIT);
+}
+
+void sht3x_reset(void)
+{
+    SHT3X_Send_Cmd(SOFT_RESET_CMD);
+    vTaskDelay(20 / portTICK_PERIOD_MS);
+}
+
+esp_err_t sht3x_init(void)
+{
+    return SHT3X_Send_Cmd(MEDIUM_2_CMD);
+}
+
+esp_err_t sht3x_read_th_raw_dat(uint8_t* dat)
+{
+    return i2c_master_read_slave_reg_16bit(SHT3X_I2C_BUS, SHT3X_SLAVE_ADDRESS, READOUT_FOR_PERIODIC_MODE, dat, 6, SHT3X_TICKS_TO_WAIT);
+}
+#define CRC8_POLYNOMIAL 0x31
+
+static uint8_t SHT3X_CheckCrc8(uint8_t* const message, uint8_t initial_value)
+{
+    uint8_t  remainder;        //余数
+    uint8_t  i = 0, j = 0;  //循环变量
+
+    /* 初始化 */
+    remainder = initial_value;
+
+    for(j = 0; j < 2;j++)
+    {
+        remainder ^= message[j];
+
+        /* 从最高位开始依次计算  */
+        for (i = 0; i < 8; i++)
+        {
+            if (remainder & 0x80)
+            {
+                remainder = (remainder << 1)^CRC8_POLYNOMIAL;
+            }
+            else
+            {
+                remainder = (remainder << 1);
+            }
+        }
+    }
+
+    /* 返回计算的CRC码 */
+    return remainder;
+}
+
+/**
+ * @brief    将SHT30接收的6个字节数据进行CRC校验,并转换为温度值和湿度值
+ *
+ * @param    dat  —— 存储接收数据的地址(6个字节数组)
+ *
+ * @retval    校验成功  —— 返回0
+ *            校验失败  —— 返回1,并设置温度值和湿度值为0
+*/
+uint8_t sht3x_dat2float(uint8_t* const dat, float* temperature, float* humidity)
+{
+    uint16_t recv_temperature = 0;
+    uint16_t recv_humidity = 0;
+
+    /* 校验温度数据和湿度数据是否接收正确 */
+    if(SHT3X_CheckCrc8(dat, 0xFF) != dat[2] || SHT3X_CheckCrc8(&dat[3], 0xFF) != dat[5])
+        return 1;
+
+    /* 转换温度数据 */
+    recv_temperature = ((uint16_t)dat[0]<<8)|dat[1];
+    *temperature = -45 + 175*((float)recv_temperature/65535)-system_setting.fix_temp;
+
+    /* 转换湿度数据 */
+    recv_humidity = ((uint16_t)dat[3]<<8)|dat[4];
+    *humidity = 100 * ((float)recv_humidity / 65535)+system_setting.fix_hum;
+
+    return 0;
+}
+LV_IMAGE_DECLARE(_WiFiqiang_RGB565A8_30x30);
+LV_IMAGE_DECLARE(_WiFizhong_RGB565A8_30x30);
+
+void ui_wifi_lab_refresh() {
+    int  rssi=0;
+    if(get_wifi_status())
+    {
+        esp_err_t ret= esp_wifi_sta_get_rssi(&rssi);
+        ESP_LOGE(TAG,"rssi %d",rssi);
+        if(ret==ESP_OK)
+        {
+            lvgl_port_lock(-1);
+            if(rssi>=-50)
+            {
+                lv_obj_set_style_bg_image_src(guider_ui.screen_main_label_wifi, &_WiFiqiang_RGB565A8_30x30,
+                                              LV_PART_MAIN | LV_STATE_DEFAULT);
+            }else if( (rssi<-50)&&(rssi>=-80))
+            {
+                lv_obj_set_style_bg_image_src(guider_ui.screen_main_label_wifi, &_WiFizhong_RGB565A8_30x30,
+                                              LV_PART_MAIN | LV_STATE_DEFAULT);
+            } else if (rssi<-80)
+            {
+                lv_obj_set_style_bg_image_src(guider_ui.screen_main_label_wifi, &_WiFiruo_RGB565A8_30x30,
+                                              LV_PART_MAIN | LV_STATE_DEFAULT);
+            }
+            lvgl_port_unlock();
+        }
+
+    }else{
+
+    }
+
+}
+void i2c_sht3x_task(void* arg)
+{
+    // 配置I2C0-主机模式,400K,指定 SCL-5,SDA-4
+    //ESP_ERROR_CHECK(i2c_master_init());
+
+    uint8_t recv_dat[6] = {0};
+    ESP_LOGI(TAG, "esp32 sht3x project starting ……");
+
+    sht3x_reset(); // 复位SHT3X
+    if(sht3x_init() == ESP_OK) // 初始化SHT3X(周期测量模式)
+        ESP_LOGI(TAG, "sht3x init ok.\n");
+    else
+        ESP_LOGE(TAG, "sht3x init fail.\n");
+    vTaskDelay(1000 / portTICK_PERIOD_MS); //延时1s 等待SHT3X传感器内部采样完成
+    char temp_buf[32];
+    char hum_buf[32];
+    for (;;)
+    {
+        if(sht3x_read_th_raw_dat(recv_dat) == ESP_OK) // 从SHT3X读取一次数据(周期测量模式下)
+        {
+            // 将SHT3X接收的6个字节数据进行CRC校验,并转换为温度值和湿度值
+            if(sht3x_dat2float(recv_dat, &sht30Data.temperature, &sht30Data.humidity) == 0)
+            {
+                //ESP_LOGI(TAG, "temperature = %.2f ℃,humidity = %.2f %%RH", temperature, humidity);
+                sht30Data.temperature = correct_temperature(sht30Data.temperature);
+                snprintf(temp_buf, sizeof(temp_buf), "%.1f", sht30Data.temperature);
+                snprintf(hum_buf, sizeof(hum_buf), "%.1f", sht30Data.humidity);
+                ui_wifi_lab_refresh();
+                if(guider_ui.screen_main) {
+                    lvgl_port_lock(-1);
+                    lv_label_set_text_static(guider_ui.screen_main_label_temp, temp_buf);
+                    lv_label_set_text_static(guider_ui.screen_main_label_hum_vul2,hum_buf);
+                    lv_label_set_text_static(guider_ui.screen_main_label_temp_2, temp_buf);
+                    lv_label_set_text_static(guider_ui.screen_main_label_hum_2,hum_buf);
+                    lvgl_port_unlock();
+                }
+
+            }
+            else
+            {
+                ESP_LOGE(TAG, "crc check fail.\n");
+            }
+        }
+        else
+        {
+            ESP_LOGE(TAG, "read data from sht3x fail.\n");
+        }
+        if (lcd_st7701_get_blacklight() == false) // 如果当前背光引脚为低电平
+        {
+            current_seconds -= 3;
+            if (current_seconds < 0) current_seconds = 0;
+        } else
+            current_seconds += 3;
+        ui_wifi_lab_refresh();
+        vTaskDelay(5000 / portTICK_PERIOD_MS);
+        vTaskDelay(5000 / portTICK_PERIOD_MS);
+    }
+}
+
+
+void sht30_init() {
+    xTaskCreate(i2c_sht3x_task, "i2c_sht3x_task", 6 * 1024, NULL, 3, NULL);
+}

+ 73 - 0
main/app/time_sync.c

@@ -0,0 +1,73 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/24 10:09
+ * Description: 时钟同步任务
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include <freertos/FreeRTOS.h>
+#include <esp_log.h>
+#include <esp_netif_sntp.h>
+#include <time.h>
+#include <freertos/task.h>
+#include "time_sync.h"
+#include "lvgl_port.h"
+#include "main.h"
+
+static const char *TAG = "time_sync";
+
+// SNTP同步时间函数
+void initialize_sntp(void)
+{
+    ESP_LOGI(TAG, "Initializing SNTP");
+
+    esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org");
+    config.servers[1] = "ntp1.aliyun.com";
+    config.servers[2] = "ntp.ntsc.ac.cn";
+    esp_netif_sntp_init(&config);
+
+    // 将时区设置为中国标准时间
+    setenv("TZ", "CST-8", 1);
+    tzset();
+
+    if (esp_netif_sntp_sync_wait(pdMS_TO_TICKS(60000)) != ESP_OK) {
+        printf("Failed to update system time within 60s timeout");
+    }
+}
+
+static void timer_Task(void *pvParameter)
+{
+    time_t now;
+    struct tm timeinfo;
+    char strftime_buf[32];
+    char strfdata_buf[32];
+    char strfweek_buf[12];
+    char weekday[][4] = {"日", "一", "二", "三", "四", "五", "六"};
+    initialize_sntp();
+    while(1)
+    {
+        time(&now);
+        localtime_r(&now, &timeinfo);
+        // strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
+
+        // 如果时间已同步(年份大于 2020)
+        if (timeinfo.tm_year > (2020 - 1900)) {
+//            snprintf(strfdata_buf, sizeof(strfdata_buf), "%d/%02d/%02d", timeinfo.tm_year + 1900, timeinfo.tm_mon + 1, timeinfo.tm_mday);
+//            sniprintf(strftime_buf, sizeof(strftime_buf), "%02d:%02d", timeinfo.tm_hour, timeinfo.tm_min);
+//            sniprintf(strfweek_buf, sizeof(strfweek_buf), "星期%s", weekday[timeinfo.tm_wday]);
+//            lvgl_port_lock(-1);
+//            lv_label_set_text_static(guider_ui.screen_lab_time, strftime_buf);
+//            lv_label_set_text_static(guider_ui.screen_lab_date, strfdata_buf);
+//            lv_label_set_text_static(guider_ui.screen_lab_week, strfweek_buf);
+//            lvgl_port_unlock();
+        } else {
+            ESP_LOGI(TAG, "Waiting for time synchronization...");
+        }
+        vTaskDelay(pdMS_TO_TICKS(1000));
+    }
+    vTaskDelete(NULL); // 在任务内部删除自身
+}
+
+void time_sync_start(void)
+{
+    xTaskCreate(timer_Task,   "timer_Task",    1024 * 2,NULL, 5, NULL);
+}

+ 368 - 0
main/app/wifi.c

@@ -0,0 +1,368 @@
+#include <sys/cdefs.h>
+/**
+ * @Author: 李建
+ * @Date: 2025/3/18 10:23
+ * Description: wifi 相关操作
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include <freertos/event_groups.h>
+#include <esp_wifi_types.h>
+#include <esp_netif.h>
+#include <esp_event.h>
+#include <esp_wifi_default.h>
+#include <esp_wifi.h>
+#include <esp_log.h>
+#include <string.h>
+#include "wifi.h"
+#include "lvgl_port.h"
+#include "framework/system/miscellaneous_interface.h"
+#include "main.h"
+#include "framework.h"
+#include "framework_compat.h"
+
+bool wifi_scan_status;
+
+bool get_var_wifi_scan_status() {
+    return wifi_scan_status;
+}
+
+static wifi_connect_cb cb;
+
+void set_var_wifi_scan_status(bool value) {
+    wifi_scan_status = value;
+}
+
+#define DEFAULT_SCAN_LIST_SIZE   10                // 最大扫描wifi个数
+// wifi事件组
+static EventGroupHandle_t s_wifi_event_group;
+// wifi事件
+#define WIFI_CONNECTED_BIT    BIT0
+#define WIFI_FAIL_BIT         BIT1
+#define WIFI_START_BIT        BIT2
+
+#define NVS_SSID_KEY  "wifi_ssid" // nvs 保存ssid的key
+#define NVS_PASSWORD_KEY  "wifi_password" // nvs 保存wifi密码的key
+EventGroupHandle_t frame_work_event_group;
+// wifi最大重连次数
+static uint8_t ESP_MAXIMUM_RETRY = 0;
+
+static bool wifi_is_connected = false;
+
+static const char *TAG = "wifi-setting";
+// wifi账号队列
+static QueueHandle_t xQueueWifiAccount = NULL;
+static int s_retry_num = 0;
+static bool is_scanning =false;
+static int wifi_connect_state = 0; // 0:手动 1:自动
+// 队列要传输的内容
+typedef struct {
+    char wifi_ssid[32];  // 获取wifi名称
+    char wifi_password[64]; // 获取wifi密码
+} wifi_account_t;
+
+// 读取本地存储的wifi账号和密码,并尝试连接
+static void connect_wifi(void) {
+    char *ssid = yx_data_get(NVS_SSID_KEY);
+    char *pwd = yx_data_get(NVS_PASSWORD_KEY);
+    if (ssid && pwd) {
+        ESP_LOGI(TAG, "Found saved WiFi config - SSID: %s", ssid);
+        wifi_connect_state = 1;  // 标记为自动连接状态
+        // 发送连接信息
+        wifi_account_t wifi_account;
+        strcpy(wifi_account.wifi_ssid, ssid);
+        strcpy(wifi_account.wifi_password, pwd);
+        xQueueSend(xQueueWifiAccount, &wifi_account, 0);
+    }
+}
+
+static void event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {
+    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
+        xEventGroupSetBits(s_wifi_event_group, WIFI_START_BIT);
+    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
+        if(ESP_MAXIMUM_RETRY ==0) { // 自动连接时,无限重试
+            esp_wifi_connect();
+        } else {
+            // 手动连接时,限制次数
+            if (s_retry_num < ESP_MAXIMUM_RETRY) {
+                esp_wifi_connect();
+                s_retry_num++;
+                ESP_LOGI(TAG, "retry to connect to the AP");
+            } else {
+                xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
+                s_retry_num = 0;
+            }
+        }
+        ESP_LOGI(TAG, "connect to the AP fail");
+        wifi_is_connected = false;
+        yxlj_framework_deinit();
+        lvgl_port_lock(-1);
+        lv_obj_add_flag(guider_ui.screen_main_label_wifi, LV_OBJ_FLAG_HIDDEN);
+        lvgl_port_unlock();
+    } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
+        ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
+        ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
+        wifi_is_connected = true;
+        s_retry_num = 0;
+        lvgl_port_lock(-1);
+        // 显示wifi图标
+        lv_obj_clear_flag(guider_ui.screen_main_label_wifi, LV_OBJ_FLAG_HIDDEN);
+        lvgl_port_unlock();
+        yxlj_framework_init();
+        xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
+    }
+}
+
+// 扫描附近wifi
+static void wifi_scan(wifi_ap_record_t ap_info[], uint16_t *ap_number) {
+    uint16_t ap_count = 0;
+    memset(ap_info, 0, *ap_number * sizeof(wifi_ap_record_t));
+    esp_wifi_scan_start(NULL, true);
+    ESP_LOGI(TAG, "Max AP number ap_info can hold = %u", *ap_number);
+    ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));  // 获取扫描到的wifi数量
+    ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(ap_number, ap_info)); // 获取真实的获取到wifi数量和信息
+    ESP_LOGI(TAG, "Total APs scanned = %u, actual AP number ap_info holds = %u", ap_count, *ap_number);
+    is_scanning = false;
+}
+
+/**
+ * 点击列表项的事件回调
+ * @param e
+ */
+static void list_btn_cb(lv_event_t *e) {
+    // 隐藏扫描的列表
+    lv_obj_add_flag(guider_ui.SettingPage_list_wifi, LV_OBJ_FLAG_HIDDEN);
+    // 获取点击到的WiFi名称
+    const char *wifi_name = NULL;
+    lv_event_code_t code = lv_event_get_code(e);
+    lv_obj_t *obj = lv_event_get_target(e);
+    if (code == LV_EVENT_CLICKED) {
+        wifi_name = lv_list_get_btn_text(guider_ui.SettingPage_list_wifi, obj);
+        ESP_LOGI(TAG, "WLAN Name: %s", wifi_name);
+    }
+    lvgl_port_lock(0);
+    lv_obj_clear_flag(guider_ui.SettingPage_p_wifi_connect, LV_OBJ_FLAG_HIDDEN);
+    lv_label_set_text(guider_ui.SettingPage_lab_wifi_ssid, wifi_name);
+    lv_obj_align(guider_ui.SettingPage_lab_wifi_ssid, LV_ALIGN_TOP_MID, 0, 10);
+    lvgl_port_unlock();
+
+}
+
+/**
+ * wifi连接任务
+ * @param arg
+ */
+void wifi_connect_task(void *arg) {
+    wifi_account_t wifi_account;
+    while (true) {
+        if (xQueueReceive(xQueueWifiAccount, &wifi_account, portMAX_DELAY)) {
+            wifi_config_t wifi_config = {
+                    .sta = {
+                            .threshold.authmode = WIFI_AUTH_WPA_WPA2_PSK,
+                            .sae_pwe_h2e = WPA3_SAE_PWE_BOTH,
+                            .sae_h2e_identifier = "",
+                            .pmf_cfg = {
+                                    .capable = true,
+                                    .required = false},
+                    },
+            };
+
+            // 不管是自动连接还是手动连接,都需要设置WiFi配置
+            strcpy((char *) wifi_config.sta.ssid, wifi_account.wifi_ssid);
+            strcpy((char *) wifi_config.sta.password, wifi_account.wifi_password);
+
+            ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
+            ESP_LOGI(TAG, "trying to connect to ap SSID:%s password:%s",
+                     wifi_config.sta.ssid, wifi_config.sta.password);
+            ESP_ERROR_CHECK(esp_wifi_connect());
+            EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
+                                                   WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
+                                                   pdTRUE,
+                                                   pdFALSE,
+                                                   portMAX_DELAY);
+
+            if (bits & WIFI_CONNECTED_BIT) {
+                ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
+                         wifi_config.sta.ssid, wifi_config.sta.password);
+                if(wifi_connect_state == 0) {
+                    yx_data_set(NVS_SSID_KEY,
+                                (char *) wifi_config.sta.ssid);
+                    yx_data_set(NVS_PASSWORD_KEY,
+                                (char *) wifi_config.sta.password);
+                    ESP_MAXIMUM_RETRY = 0;
+                    lvgl_port_lock(-1);
+                    lv_label_set_text_static(guider_ui.SettingPage_lab_wifi_status, "连接成功");
+                    lv_obj_set_style_text_color(guider_ui.SettingPage_lab_wifi_status, lv_color_hex(0x00ff00), LV_PART_MAIN);
+                    lv_obj_add_flag(guider_ui.SettingPage_sp_wifi_scan, LV_OBJ_FLAG_HIDDEN);
+                    lv_obj_remove_state(guider_ui.SettingPage_btn_2, LV_STATE_DISABLED);
+                    lvgl_port_unlock();
+                } else {
+                    if(guider_ui.screen_main){
+                        lvgl_port_lock(-1);
+                        // 显示wifi图标
+                        lv_obj_clear_flag(guider_ui.screen_main_label_wifi, LV_OBJ_FLAG_HIDDEN);
+                        lvgl_port_unlock();
+                    }
+                }
+                lvgl_port_lock(-1);
+                // 显示wifi图标
+                lv_obj_clear_flag(guider_ui.screen_main_label_wifi, LV_OBJ_FLAG_HIDDEN);
+                lvgl_port_unlock();
+                ESP_LOGI(TAG, "Wi-Fi connected, deleting wifi_connect_task task");
+                // 执行回调
+                if(cb != NULL) {
+                    cb();
+                }
+                vTaskDelete(NULL);
+            } else if (bits & WIFI_FAIL_BIT) {
+                ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
+                         wifi_config.sta.ssid, wifi_config.sta.password);
+                if(wifi_connect_state == 0)
+                {
+                    lvgl_port_lock(-1);
+                    lv_label_set_text(guider_ui.SettingPage_lab_wifi_status, "连接失败");
+                    lv_obj_set_style_text_color(guider_ui.SettingPage_lab_wifi_status, lv_color_hex(0xff0000), LV_PART_MAIN);
+                    lv_obj_add_flag(guider_ui.SettingPage_sp_wifi_scan, LV_OBJ_FLAG_HIDDEN);
+                    lv_obj_remove_state(guider_ui.SettingPage_btn_2, LV_STATE_DISABLED);
+                    lvgl_port_unlock();
+                }
+                lvgl_port_lock(-1);
+                lv_obj_add_flag(guider_ui.screen_main_label_wifi, LV_OBJ_FLAG_HIDDEN);
+                lvgl_port_unlock();
+            }
+        }
+    }
+}
+
+
+_Noreturn static void monitor_mqtt_task(void * pv) {
+    for(;;) {
+        EventBits_t bits = xEventGroupWaitBits(frame_work_event_group,
+                                               MQTT_DISCONNECTED,
+                                               pdTRUE,
+                                               pdFALSE,
+                                               portMAX_DELAY);
+        if(bits & MQTT_DISCONNECTED) {
+            if(get_wifi_status()) {
+                yxlj_framework_init();
+            }
+        }
+    }
+}
+
+/**
+ * wifi功能初始化
+ */
+
+void app_wifi_init(wifi_connect_cb _cb) {
+    cb = _cb;
+    s_wifi_event_group = xEventGroupCreate();
+    ESP_ERROR_CHECK(esp_event_loop_create_default());//创建一个默认系统事件调度循环,之后可以注册回调函数来处理系统的一些事件
+    esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();//使用默认配置创建STA对象
+    assert(sta_netif);
+
+    //初始化WIFI
+    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+    ESP_ERROR_CHECK(esp_wifi_init(&cfg));
+
+
+    esp_event_handler_instance_t instance_any_id;
+    esp_event_handler_instance_t instance_got_ip;
+    //注册事件
+    ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
+                                                        ESP_EVENT_ANY_ID,
+                                                        &event_handler,
+                                                        NULL,
+                                                        &instance_any_id));
+    ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
+                                                        IP_EVENT_STA_GOT_IP,
+                                                        &event_handler,
+                                                        NULL,
+                                                        &instance_got_ip));
+    ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
+    ESP_ERROR_CHECK(esp_wifi_start());
+    ESP_ERROR_CHECK(esp_wifi_set_ps(WIFI_PS_NONE));
+
+    // 创建wifi连接任务
+    xQueueWifiAccount = xQueueCreate(2, sizeof(wifi_account_t));
+    frame_work_event_group = xEventGroupCreate();
+    xTaskCreatePinnedToCore(wifi_connect_task, "wifi_connect_task", 3 * 1024, NULL, 5, NULL, 1);
+    xTaskCreate(monitor_mqtt_task, "monitor_task", 1024, NULL, 5, NULL);
+    // 尝试连接wifi
+    connect_wifi();
+}
+
+void app_connect_wifi() {
+    ESP_LOGI(TAG, "OK Clicked");
+    s_retry_num = 0;
+    wifi_connect_state = 0;
+    ESP_MAXIMUM_RETRY = 5;
+    xEventGroupClearBits(s_wifi_event_group, WIFI_FAIL_BIT | WIFI_CONNECTED_BIT | WIFI_START_BIT);
+    const char *wifi_ssid = lv_label_get_text(guider_ui.SettingPage_lab_wifi_ssid);
+    const char *wifi_password = lv_textarea_get_text(guider_ui.SettingPage_txt_wifi_password);
+    if (*wifi_password != '\0') // 判断是否为空字符串
+    {
+        wifi_account_t wifi_account;
+        strcpy(wifi_account.wifi_ssid, wifi_ssid);
+        strcpy(wifi_account.wifi_password, wifi_password);
+        ESP_LOGI(TAG, "connect to ap SSID:%s password:%s",
+                 wifi_account.wifi_ssid, wifi_account.wifi_password);
+        ESP_ERROR_CHECK( esp_wifi_disconnect());
+        lvgl_port_lock(-1);
+        lv_label_set_text(guider_ui.SettingPage_lab_wifi_status, "正在连接");
+        lvgl_port_unlock();
+        // 发送WiFi账号密码信息到队列
+        wifi_connect_state = 0;
+        xQueueSend(xQueueWifiAccount, &wifi_account, portMAX_DELAY);
+    }
+}
+
+void app_wifi_scan(void) {
+    if(is_scanning)return;
+    is_scanning = true;
+    // 扫描WLAN信息
+    wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
+    uint16_t ap_number = DEFAULT_SCAN_LIST_SIZE;
+    wifi_scan(ap_info, &ap_number); // 扫描附近wifi
+    // 先读取保存的ssid和密码来连接
+    char *ssid = yx_data_get(NVS_SSID_KEY);
+    char *pwd = yx_data_get(NVS_PASSWORD_KEY);
+    if (ssid && pwd) {
+        ESP_LOGI(TAG, "Found saved WiFi config - SSID: %s", ssid);
+    }
+    lv_obj_clear_flag(guider_ui.SettingPage_sp_wifi_scan, LV_OBJ_FLAG_HIDDEN);
+    // 显示wifi信息
+    lv_obj_t *btn;
+
+    for (int i = 0; i < ap_number; i++) {
+        bool found = false;
+        ESP_LOGI(TAG, "Comparing with scanned SSID: %s", (char *) ap_info[i].ssid);
+        if (ssid && strcmp((char *) ap_info[i].ssid, ssid) == 0) {
+            found = true;
+        }
+
+        ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid);  // 终端输出wifi名称
+        ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi);  // 终端输出wifi信号质量
+        // 添加wifi列表
+        btn = lv_list_add_btn(guider_ui.SettingPage_list_wifi, LV_SYMBOL_WIFI, (const char *) ap_info[i].ssid);
+        if (found)
+            lv_obj_set_style_text_color(btn, lv_color_hex(0x00FF00), LV_PART_MAIN);
+        lv_obj_add_event_cb(btn, list_btn_cb, LV_EVENT_CLICKED, NULL); // 添加点击回调函数
+    }
+    lv_obj_add_flag(guider_ui.SettingPage_sp_wifi_scan, LV_OBJ_FLAG_HIDDEN);
+    lv_obj_clear_flag(guider_ui.SettingPage_list_wifi, LV_OBJ_FLAG_HIDDEN);
+    lvgl_port_unlock();
+}
+
+/*
+ * wifi连接状态查询
+ * 返回:1:连接 0:未连接
+ */
+int get_wifi_status() {
+
+    if (wifi_is_connected) {
+        return 1;
+    } else
+        return 0;
+}

+ 26 - 0
main/framework/channel.c

@@ -0,0 +1,26 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#include "channel.h"
+#include <stdio.h>
+#define MAX_CHAN_LEN 8
+
+struct sparrow_channel
+{
+    sparrow_channel_port name;
+    channel_recv_callback sub_device_cb;
+};
+
+static struct sparrow_channel channels[MAX_CHAN_LEN];
+
+void register_sub_device_channel_recv(sparrow_channel_port name, channel_recv_callback callback) {
+    channels[name].sub_device_cb = callback;
+}
+
+void channel_send_to_sub_device(sparrow_channel_port name, char * payload, sparrow_topic_type topicType ) {
+    if(channels[name].sub_device_cb != NULL) {
+        channels[name].sub_device_cb(payload, topicType);
+    }
+}
+

+ 28 - 0
main/framework/channel.h

@@ -0,0 +1,28 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#ifndef TEST_CHANNEL_H
+#define TEST_CHANNEL_H
+
+// 定义虚拟通道,用来区分处理不同的消息
+typedef enum {
+    SPARROW_CHANNEL_PORT_0 = 0,
+    SPARROW_CHANNEL_PORT_1,
+}sparrow_channel_port;
+
+// 根据主题类型定义
+typedef enum {
+    SPARROW_TOPIC_STATUS = 0,
+    SPARROW_TOPIC_COMMAND,
+    SPARROW_TOPIC_EVENT,
+    SPARROW_TOPIC_TYPE_UNKNOWN
+}sparrow_topic_type;
+
+// 定义 通道收到消息时的回调函数
+typedef void (* channel_recv_callback)(char * payload, sparrow_topic_type topicType);
+// 注册子设备通道消息回调
+void register_sub_device_channel_recv(sparrow_channel_port name, channel_recv_callback callback);
+// 通道发送消息到子设备
+void channel_send_to_sub_device(sparrow_channel_port name, char * payload, sparrow_topic_type topicType);
+#endif //TEST_CHANNEL_H

+ 89 - 0
main/framework/framework.c

@@ -0,0 +1,89 @@
+/**
+ * @Author: 李建
+ * @Date: 2023/12/20 12:43:30
+ * @LastEditors: 李建
+ * @LastEditTime: 2023/12/20 12:43:30
+ * Description: 云平台接入框架
+ * Copyright: Copyright (©)}) 2023  YXLJ@2024. All rights reserved.
+ */
+
+#include "framework.h"
+#include "esp_log.h"
+#include "esp_system.h"
+#include "channel.h"
+#include "sub_device/command.h"
+#include <cJSON.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include <freertos/event_groups.h>
+#include "gateway/gateway.h"
+
+static const char *TAG = "FRAMEWORK";
+TaskHandle_t access_task_handle;
+bool is_framework_init = false;
+
+/**
+ * 处理云端状态消息
+*/
+static void status_message_process(char *payload) {
+}
+
+// 处理云端事件消息
+static void event_message_process(char *payload) {
+}
+
+// 处理云端指令消息
+static void command_message_process(char *payload) {
+    cJSON *root = cJSON_Parse(payload);
+    cJSON *cmd = cJSON_GetObjectItemCaseSensitive(root, "cmd");
+    cJSON *params = cJSON_GetObjectItem(root, "params");
+    if (!root || !cmd || !params)
+        return;
+    sparrow_command *spCmd = find_sparrow_command(cmd->valuestring);
+    if (NULL != spCmd) {
+        spCmd->unpack(cJSON_PrintUnformatted(params));
+    } else {
+        ESP_LOGI(TAG, "%s is not found!", cmd->valuestring);
+    }
+    cJSON_Delete(root);
+}
+
+// 处理收到的云平台的消息包
+void sub_device_recv_callback(char *payload, sparrow_topic_type topicType) {
+
+    if (NULL == payload) {
+        return;
+    }
+    switch (topicType) {
+        case SPARROW_TOPIC_STATUS:
+            status_message_process(payload);
+            break;
+        case SPARROW_TOPIC_COMMAND:
+            command_message_process(payload);
+            break;
+        case SPARROW_TOPIC_EVENT:
+            event_message_process(payload);
+            break;
+        default:
+            break;
+    }
+}
+
+void yxlj_framework_deinit() {
+    //vEventGroupDelete(frame_work_event_group);
+    if(access_task_handle != 0) {
+        vTaskDelete(access_task_handle);
+    }
+}
+
+void yxlj_framework_init() {
+    ESP_LOGI(TAG, "Init...");
+    ESP_LOGI(TAG, "Free memory: %"PRIu32" bytes", esp_get_free_heap_size());
+    ESP_LOGI(TAG, "IDF version: %s", esp_get_idf_version());
+    vTaskDelay(3000 / portTICK_PERIOD_MS); // 增加延迟注册 防止初始化过快
+    yxlj_gateway_init();
+    if (!is_framework_init) {
+        register_sub_device_channel_recv(SPARROW_CHANNEL_PORT_1, sub_device_recv_callback);
+        is_framework_init = true;
+    }
+}

+ 15 - 0
main/framework/framework.h

@@ -0,0 +1,15 @@
+/**
+ * @Author: 李建
+ * @Date: 2023/12/20 12:43:12
+ * @LastEditors: 李建
+ * @LastEditTime: 2023/12/20 12:43:12
+ * Description: 云平台接入框架
+ * Copyright: Copyright (©)}) 2023  YXLJ@2024. All rights reserved.
+ */
+#ifndef __SPARROW_FRAMEWORK_H__
+#define __SPARROW_FRAMEWORK_H__
+// 初始化框架
+void yxlj_framework_init();
+// 反初始化
+void yxlj_framework_deinit();
+#endif

+ 51 - 0
main/framework/framework_compat.c

@@ -0,0 +1,51 @@
+#include "framework_compat.h"
+#include "esp_log.h"
+#include <stdio.h>
+
+static void *g_event_monitor = NULL;
+
+int iotx_event_regist_cb(void (*monitor_cb)(int event))
+{
+    g_event_monitor = (void *)monitor_cb;
+    return 0;
+}
+
+int iotx_event_post(int event)
+{
+    if (g_event_monitor == NULL)
+    {
+        return -1;
+    }
+    ((void (*)(int))g_event_monitor)(event);
+    return 0;
+}
+
+typedef struct
+{
+    int eventid;
+    void *callback;
+} impl_event_map_t;
+
+static impl_event_map_t g_impl_event_map[] = {
+    {IOT_CONNECT_CLOUD_FAILT, NULL},
+    {IOT_CONNECT_CLOUD_SUCCESS, NULL},
+    {IOT_LOGIN_FAILT, NULL},
+    {IOT_LOGIN_SUCCESS, NULL},
+    {IOT_REGISTER_FAILT, NULL},
+    {IOT_REGISTER_SUCCESS, NULL}};
+
+void *iotx_event_callback(int evt)
+{
+    if (evt < 0 || evt >= sizeof(g_impl_event_map) / sizeof(impl_event_map_t))
+    {
+        return NULL;
+    }
+    return g_impl_event_map[evt].callback;
+}
+
+DEFINE_EVENT_CALLBACK(IOT_CONNECT_CLOUD_FAILT, void(*callback)(void));
+DEFINE_EVENT_CALLBACK(IOT_CONNECT_CLOUD_SUCCESS, void(*callback)(void));
+DEFINE_EVENT_CALLBACK(IOT_LOGIN_FAILT, void(*callback)(void));
+DEFINE_EVENT_CALLBACK(IOT_LOGIN_SUCCESS, void(*callback)(void));
+DEFINE_EVENT_CALLBACK(IOT_REGISTER_FAILT, void(*callback)(void));
+DEFINE_EVENT_CALLBACK(IOT_REGISTER_SUCCESS, void(*callback)(void));

+ 30 - 0
main/framework/framework_compat.h

@@ -0,0 +1,30 @@
+#ifndef _INFRA_COMPAT_H_
+#define _INFRA_COMPAT_H_
+
+
+
+
+enum iot_event_t {
+    IOT_REGISTER_SUCCESS = 0,
+    IOT_LOGIN_SUCCESS,
+    IOT_CONNECT_CLOUD_SUCCESS,
+    IOT_REGISTER_FAILT,
+    IOT_LOGIN_FAILT,
+    IOT_CONNECT_CLOUD_FAILT,
+};
+int iotx_event_post(int event);
+// 注册事件回调
+int iotx_event_regist_cb(void (*monitor_cb)(int event));
+#define IOT_RegisterCallback(evt, cb)           iotx_register_for_##evt(cb);
+#define DECLARE_EVENT_CALLBACK(evt, cb)         int iotx_register_for_##evt(cb);
+#define DEFINE_EVENT_CALLBACK(evt, cb)          int iotx_register_for_##evt(cb) { \
+        if (evt < 0 || evt >= sizeof(g_impl_event_map)/sizeof(impl_event_map_t)) {return -1;} \
+        g_impl_event_map[evt].callback = (void *)callback;return 0;}
+
+DECLARE_EVENT_CALLBACK(IOT_REGISTER_SUCCESS, void(*cb)(void))
+DECLARE_EVENT_CALLBACK(IOT_LOGIN_SUCCESS, void(*cb)(void))
+DECLARE_EVENT_CALLBACK(IOT_CONNECT_CLOUD_SUCCESS, void(*cb)(void))
+DECLARE_EVENT_CALLBACK(IOT_REGISTER_FAILT, void(*cb)(void))
+DECLARE_EVENT_CALLBACK(IOT_LOGIN_FAILT, void(*cb)(void))
+DECLARE_EVENT_CALLBACK(IOT_REGISTER_FAILT, void(*cb)(void))
+#endif

+ 238 - 0
main/framework/gateway/access.c

@@ -0,0 +1,238 @@
+#include <sys/cdefs.h>
+//
+// Created by 李建 on 2023/12/6.
+//
+#include "access.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "esp_log.h"
+#include <cJSON.h>
+#include "../system/miscellaneous_interface.h"
+#include "mqtt_client.h"
+#include <string.h>
+#include <freertos/event_groups.h>
+#include "../sub_device/zero_device.h"
+#include "../channel.h"
+#include "../framework_compat.h"
+#include "login.h"
+
+
+static const char *TAG = "ACCESS";
+esp_mqtt_client_handle_t client;
+extern EventGroupHandle_t frame_work_event_group;
+static bool connected = false;
+
+static void log_error_if_nonzero(const char *message, int error_code) {
+    if (error_code != 0) {
+        ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code);
+    }
+}
+
+// 处理收到的publish 消息
+static void mqtt_data_callback(char *topic, char *payload) {
+    cJSON *root = cJSON_Parse(payload);
+    cJSON *data = cJSON_GetObjectItem(root, "data");
+    cJSON *subDevice = cJSON_GetObjectItemCaseSensitive(root, "subDeviceId");
+    sparrow_topic_type topicType = SPARROW_TOPIC_TYPE_UNKNOWN;
+    char *str = strtok(topic, "/");
+    while (str != NULL) {
+        if (strcmp(str, "status") == 0) {
+            topicType = SPARROW_TOPIC_STATUS;
+            break;
+        } else if (strcmp(str, "event") == 0) {
+            topicType = SPARROW_TOPIC_EVENT;
+            break;
+        } else if (strcmp(str, "command") == 0) {
+            topicType = SPARROW_TOPIC_COMMAND;
+            break;
+        }
+        str = strtok(NULL, "/");
+    }
+    ESP_LOGE(TAG, "type :%d", topicType);
+    if (strcmp(subDevice->valuestring, "01") == 0) {
+        channel_send_to_sub_device(SPARROW_CHANNEL_PORT_0, cJSON_PrintUnformatted(data), topicType);
+    } else {
+        channel_send_to_sub_device(SPARROW_CHANNEL_PORT_1, cJSON_PrintUnformatted(data), topicType);
+    }
+
+    cJSON_Delete(root);
+}
+
+static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) {
+    ESP_LOGE(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id);
+    esp_mqtt_event_handle_t event = event_data;
+    MQTT_t *mqttBuf = handler_args;
+    mqttBuf->event_id = event->event_id;
+    mqttBuf->return_code = event->error_handle->connect_return_code;
+    switch ((esp_mqtt_event_id_t) event_id) {
+        case MQTT_EVENT_CONNECTED:
+            ESP_LOGE(TAG, "MQTT_EVENT_CONNECTED");
+            connected = true;
+            xTaskNotifyGive(mqttBuf->taskHandle);
+            break;
+        case MQTT_EVENT_DISCONNECTED:
+            ESP_LOGE(TAG, "MQTT_EVENT_DISCONNECTED");
+            connected = false;
+            xTaskNotifyGive(mqttBuf->taskHandle);
+            break;
+        case MQTT_EVENT_SUBSCRIBED:
+            ESP_LOGE(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
+            break;
+        case MQTT_EVENT_UNSUBSCRIBED:
+            ESP_LOGE(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
+            break;
+        case MQTT_EVENT_PUBLISHED:
+            ESP_LOGE(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
+            break;
+        case MQTT_EVENT_DATA:
+            ESP_LOGE(TAG, "MQTT_EVENT_DATA");
+            mqtt_data_callback(event->topic, event->data);
+            break;
+        case MQTT_EVENT_ERROR:
+            ESP_LOGE(TAG, "MQTT_EVENT_ERROR");
+            if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) {
+                log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err);
+                log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err);
+                log_error_if_nonzero("captured as transport's socket errno",
+                                     event->error_handle->esp_transport_sock_errno);
+                ESP_LOGE(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno));
+            }
+            xTaskNotifyGive(mqttBuf->taskHandle);
+            break;
+        default:
+            ESP_LOGE(TAG, "Other event id:%d", event->event_id);
+            xTaskNotifyGive(mqttBuf->taskHandle);
+            break;
+    }
+}
+
+/**
+ * 设备上报属性
+ * @param pub
+ */
+void sparrow_publish_status(publish_message_t pub) {
+    // 构造请求协议
+    char str_device_serial[16];
+    get_device_serial(str_device_serial);
+    cJSON *root = cJSON_CreateObject();
+    cJSON_AddStringToObject(root, "action", "devSend");
+    cJSON_AddNumberToObject(root, "msgId", 0);
+    cJSON_AddStringToObject(root, "deviceCode", str_device_serial);
+    cJSON_AddStringToObject(root, "subDeviceId", "");
+    cJSON_AddNumberToObject(root, "timestamp", get_sys_time_ms());
+    cJSON_AddItemToObject(root, "data", pub.data);
+    char *payload = cJSON_PrintUnformatted(root);
+    if (payload) {
+        char topic[300];
+        sprintf(topic, "%s%s", TOPIC_PUB_STATUS, str_device_serial);
+        if (connected) esp_mqtt_client_publish(client, topic, payload, 0, 1, false);
+        cJSON_Delete(root);
+    }
+    free(payload);
+}
+
+/**
+ * 设备上报事件
+ * @param pub
+ */
+void sparrow_publish_event(publish_message_t pub) {
+
+}
+
+/**
+ * 设备上报指令响应
+ * @param pub
+ */
+void sparrow_publish_command(publish_message_t pub) {
+
+}
+
+void device_access_task(void *pv) {
+    ESP_LOGI(TAG, "begin device access cloud...");
+    char *addr = yx_data_get(DATANAME_ACCESS_ADDR);
+    char *strDeviceId = yx_data_get(DATANAME_DEVICE_ID);
+    char *accessToken = yx_data_get(DATANAME_ACCESS_TOKEN);
+    char uri[128] = "";
+    sprintf(uri, "mqtt://%s", addr);
+    char device_id_hex[10];
+    sprintf(device_id_hex, "%X", (int) atol(strDeviceId));
+    char device_serial[16];
+    get_device_serial(device_serial);
+    const esp_mqtt_client_config_t mqtt_cfg = {
+            .broker.address.uri = uri,
+            .session.protocol_ver = MQTT_PROTOCOL_V_3_1,
+            .credentials.client_id = device_serial,
+            .credentials.username = device_id_hex,
+            .credentials.authentication.password = accessToken,
+            .session.keepalive = 120,
+            .network.timeout_ms = 30 * 1000,
+            .network.reconnect_timeout_ms = 3 * 1000,
+            .network.disable_auto_reconnect = true // 禁用自动重连
+    };
+    MQTT_t mqttBuf = {
+            .taskHandle = xTaskGetCurrentTaskHandle(),
+    };
+    client = esp_mqtt_client_init(&mqtt_cfg);
+    esp_mqtt_client_register_event(client, MQTT_EVENT_ANY, mqtt_event_handler, &mqttBuf);
+    esp_err_t err = esp_mqtt_client_start(client);
+    if(err != ESP_OK) {
+        esp_mqtt_client_disconnect(client);
+        esp_mqtt_client_destroy(client);
+        xEventGroupSetBits(frame_work_event_group, MQTT_DISCONNECTED);
+        vTaskDelete(NULL);
+    }
+    free(addr);
+    free(strDeviceId);
+    free(accessToken);
+    for (;;) {
+        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
+        // 如果连接报错而且是没有认证授权,执行登录
+        if (mqttBuf.event_id == MQTT_EVENT_ERROR) {
+            iotx_event_post(IOT_CONNECT_CLOUD_FAILT);
+            xEventGroupSetBits(frame_work_event_group, MQTT_DISCONNECTED);
+            if (mqttBuf.return_code == MQTT_CONNECTION_REFUSE_NOT_AUTHORIZED) {
+                ESP_LOGE(TAG, "access error: MQTT_CONNECTION_REFUSE_NOT_AUTHORIZED, 3 sec retry");
+                if (client != NULL) {
+                    esp_mqtt_client_disconnect(client);
+                    esp_mqtt_client_destroy(client);
+                    client = NULL;
+                }
+                vTaskDelay(3000 / portTICK_PERIOD_MS);
+                // 开始登录,如果创建任务失败,直接重启
+                if (xTaskCreate(&device_login_task, "login task",
+                                1024 * 4, NULL, 5, NULL) != pdPASS) {
+                    ESP_LOGE(TAG, "start login task fail");
+                    esp_restart();
+                    // 84:fc:e6:6a:a3:98
+                }
+                break;
+            } else {
+                ESP_LOGE(TAG, "mqtt error:%d", mqttBuf.return_code);
+                break;
+            }
+        } else if (mqttBuf.event_id == MQTT_EVENT_CONNECTED) {
+            // 订阅主题
+            char str_device_serial[16];
+            get_device_serial(str_device_serial);
+            char topic[300];
+            sprintf(topic, "%s%s", TOPIC_SUB_COMMAND, str_device_serial);
+            esp_mqtt_client_subscribe(client, topic, 1);
+            sprintf(topic, "%s%s", TOPIC_SUB_EVENT, str_device_serial);
+            esp_mqtt_client_subscribe(client, topic, 1);
+            sprintf(topic, "%s%s", TOPIC_SUB_STATUS, str_device_serial);
+            esp_mqtt_client_subscribe(client, topic, 1);
+            iotx_event_post(IOT_CONNECT_CLOUD_SUCCESS);
+            publish_app_version();
+            xEventGroupSetBits(frame_work_event_group, MQTT_CONNECTED);
+        } else if (mqttBuf.event_id == MQTT_EVENT_DISCONNECTED) {
+            xEventGroupSetBits(frame_work_event_group, MQTT_DISCONNECTED);
+            iotx_event_post(IOT_CONNECT_CLOUD_FAILT);
+            break;
+        }
+    }
+    ESP_LOGI(TAG, "delete access task");
+    esp_mqtt_client_disconnect(client);
+    esp_mqtt_client_destroy(client);
+    xEventGroupSetBits(frame_work_event_group, MQTT_DISCONNECTED);
+    vTaskDelete(NULL);
+}

+ 43 - 0
main/framework/gateway/access.h

@@ -0,0 +1,43 @@
+#include <sys/cdefs.h>
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#ifndef TEST_ACCESS_H
+#define TEST_ACCESS_H
+#include "gateway_defs.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include <cJSON.h>
+
+
+#define MQTT_CONNECTED    BIT0
+#define MQTT_DISCONNECTED         BIT1
+
+typedef struct
+{
+    TaskHandle_t taskHandle;
+    int32_t event_id;
+    uint8_t return_code;
+} MQTT_t;
+
+typedef struct
+{
+    char *topic; // 发布的主题
+    cJSON *data; // 上报的data字段
+} publish_message_t;
+// device access the mqtt server
+_Noreturn void device_access_task(void *pv);
+/**
+ * 设备上报状态
+*/
+void sparrow_publish_status(publish_message_t message);
+/**
+ * 设备上报事件
+*/
+void sparrow_publish_event(publish_message_t message);
+/**
+ * 设备上报指令响应
+*/
+void sparrow_publish_command(publish_message_t message);
+#endif // TEST_ACCESS_H

+ 29 - 0
main/framework/gateway/gateway.c

@@ -0,0 +1,29 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:54:41 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:54:41 PM
+ * Description: 网关组件,负责执行接入平台的任务
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+#include "gateway.h"
+#include "esp_log.h"
+#include "gateway_defs.h"
+#include "register.h"
+#include "../sub_device/zero_device.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+
+static const char *TAG = "GATEWAY";
+bool is_zero_init = false;
+
+void yxlj_gateway_init() {
+    ESP_LOGI(TAG, "gateway init....");
+    if (!is_zero_init) sparrow_zero_device_init();
+    // start device register task;
+    BaseType_t result = xTaskCreate(&device_register_task, "register task", 1024 * 4, NULL, 1, NULL);
+    if(result != pdPASS) {
+        ESP_LOGE(TAG, "gateway init fault....");
+        esp_restart();
+    }
+}

+ 22 - 0
main/framework/gateway/gateway.h

@@ -0,0 +1,22 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:54:32 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:54:32 PM
+ * Description: 网关组件
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+#ifndef __GATEWAY_H__
+#define __GATEWAY_H__
+
+// gateway status enum
+typedef enum {
+    GATEWAY_INIT = 0,
+    GATEWAY_REGISTER,
+    GATEWAY_LOGIN,
+    GATEWAY_ACCESS,
+} GATEWAY_STATUS;
+
+void yxlj_gateway_init();
+
+#endif

+ 71 - 0
main/framework/gateway/gateway_defs.h

@@ -0,0 +1,71 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:55:16 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:55:16 PM
+ * Description: 网关组件的相关配置 
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+#ifndef __GATEWAY_DEFS_H__
+#define __GATEWAY_DEFS_H__
+
+#include <stdint.h>
+
+// 定义存储中的数据字段,设备 Id
+#define DATANAME_DEVICE_ID "device_id"
+// 设备密钥字段
+#define DATANAME_DEVICE_SECRET "device_secret"
+// 设备key 数据字段 
+#define DATANAME_DEVICE_KEY "device_key"
+// 设备访问mqtt的token
+#define DATANAME_ACCESS_TOKEN "access_token"
+// 设备访问的 mqtt 的 addr
+#define DATANAME_ACCESS_ADDR "access_addr"
+
+// mqtt keepalivetime
+#define YXLJ_KEEPALIVE_TIME  30
+// device module
+#define YXLJ_DEVICE_MODULE "esp32s3"
+// sdk version
+#define YXLJ_SDK_VERSION "1.0.1"
+
+#define YXLJ_PRODUCT_KEY "f54840852c844cb42279e6ed9b8299dbfc24386ab59cc5314fe8c35cd4e43a483d088902f9fb7c0001ebce3a31e586c9" // 生产环境
+
+#define SPARROW_SERVER_URL "http://114.115.211.247:8082" // 生产环境
+
+typedef void(*gateway_callback)(int8_t result);
+
+#define REGISTER_OK      0
+#define LOGIN_OK         1
+#define REGISTER_FAIL   -1
+#define NOT_REGISTERED  -2
+#define LOGIN_FAIL      -3
+#define ACCESS_ERR      -4
+
+/**
+ * 属性监听主题
+ */
+#define TOPIC_SUB_STATUS "$thing/down/status/" YXLJ_PRODUCT_KEY "/"
+/**
+ * 指令监听主题前缀
+ */
+#define TOPIC_SUB_COMMAND "$thing/down/command/" YXLJ_PRODUCT_KEY "/"
+/**
+ * 事件响应监听主题前缀
+ */
+#define TOPIC_SUB_EVENT "$thing/down/event/" YXLJ_PRODUCT_KEY "/"
+/**
+ * 属性上报主题前缀
+ */
+#define TOPIC_PUB_STATUS "$thing/up/status/" YXLJ_PRODUCT_KEY "/"
+/**
+ * 指令上报主题前缀
+ */
+#define TOPIC_PUB_COMMAND "$thing/up/command/" YXLJ_PRODUCT_KEY "/"
+/**
+ * 事件上报主题前缀
+ */
+#define TOPIC_PUB_EVENT "$thing/up/event/" YXLJ_PRODUCT_KEY "/"
+
+
+#endif

+ 124 - 0
main/framework/gateway/login.c

@@ -0,0 +1,124 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:54:23 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:54:23 PM
+ * Description: 设备登录任务
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+#include "login.h"
+#include "esp_log.h"
+#include "gateway_defs.h"
+#include "../system/net_http.h"
+#include "../system/miscellaneous_interface.h"
+#include <stdio.h>
+#include <cJSON.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "access.h"
+#include "register.h"
+
+#define MAX_RETRY_COUNT 5
+
+static const char *TAG = "LOGIN";
+extern esp_err_t call_result;
+extern TaskHandle_t access_task_handle;
+void login_callback(char *response, void *user_data)
+{
+    call_result = ESP_FAIL;
+    if (response != NULL)
+    {
+        // {"code":0,"message":"","data":{"access_token":"898cc4fe52f21444","access_addr":"123.232.116.162:18106"}}
+        cJSON *root = cJSON_Parse(response);
+        cJSON *code = cJSON_GetObjectItemCaseSensitive(root, "code");
+        if (code != NULL)
+        {
+            if (cJSON_IsNumber(code) && code->valueint == 0)
+            {
+                cJSON *data = cJSON_GetObjectItem(root, "data");
+                cJSON *accessToken = cJSON_GetObjectItemCaseSensitive(data, "access_token");
+                cJSON *accessAddr = cJSON_GetObjectItemCaseSensitive(data, "access_addr");
+                yx_data_set(DATANAME_ACCESS_ADDR, accessAddr->valuestring);
+                yx_data_set(DATANAME_ACCESS_TOKEN, accessToken->valuestring);
+                ESP_LOGI(TAG, "device login success, addr:%s, token:%s", accessAddr->valuestring, accessToken->valuestring);
+                call_result = ESP_OK;
+            }
+        }
+        cJSON_Delete(root);
+    }
+    
+    xTaskNotifyGive((TaskHandle_t)user_data);
+}
+
+void device_login_task(void *pv)
+{
+    uint8_t count = 0;
+    for (;;)
+    {
+        vTaskDelay(1);
+        if(count++ > MAX_RETRY_COUNT) {
+            // 如果登录失败5次则重新进入注册流程
+            ESP_LOGE(TAG, "login failed 5 times, now start register");
+            xTaskCreate(&device_register_task,
+                        "register_task",
+                        4096,
+                        NULL,
+                        5,
+                        NULL);
+            vTaskDelay(1000 / portTICK_PERIOD_MS);
+            break;
+        }
+//        if (!net_connect_check())
+//        {
+//            break;
+//        }
+        char *str_device_id = NULL;
+        char *str_device_secret = NULL;
+
+        str_device_id = yx_data_get(DATANAME_DEVICE_ID);
+        str_device_secret = yx_data_get(DATANAME_DEVICE_SECRET);
+        if (str_device_id == NULL || str_device_secret == NULL)
+        {
+            ESP_LOGE(TAG, "login failed! device is not register");
+            return;
+        }
+
+        int device_id = atol(str_device_id);
+        cJSON *req = cJSON_CreateObject();
+        cJSON *deviceId = cJSON_CreateNumber(device_id);
+        cJSON *secret = cJSON_CreateString(str_device_secret);
+        cJSON *protocol = cJSON_CreateString("mqttX");
+
+        cJSON_AddItemToObject(req, "device_id", deviceId);
+        cJSON_AddItemToObject(req, "device_secret", secret);
+        cJSON_AddItemToObject(req, "protocol", protocol);
+        free(str_device_id);
+        free(str_device_secret);
+        // http request
+        char post_url[128] = "";
+        sprintf(post_url, "%s/v1/devices/authentication", SPARROW_SERVER_URL);
+        net_http_config_t config = {
+            .url = post_url,
+            .user_data = xTaskGetCurrentTaskHandle(),
+            .callback = login_callback,
+        };
+        net_http_post(cJSON_Print(req), config);
+        cJSON_Delete(req);
+        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
+        if (call_result == ESP_OK)
+        {
+            BaseType_t result =  xTaskCreate(&device_access_task, "access task", 1024 * 4, NULL, 1, &access_task_handle);
+            if(result != pdPASS) {
+                ESP_LOGE(TAG, "device login fault....");
+                esp_restart();
+            }
+            break;
+        }
+        else
+        {
+            ESP_LOGE(TAG, "device login faild, after 3 seconds retry");
+            vTaskDelay(3000 / portTICK_PERIOD_MS);
+        }
+    }
+    vTaskDelete(NULL);
+}

+ 15 - 0
main/framework/gateway/login.h

@@ -0,0 +1,15 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:54:12 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:54:12 PM
+ * Description: 设备登录任务
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+#ifndef __SPARROW_LOGIN_H__
+#define __SPARROW_LOGIN_H__
+
+#include "gateway_defs.h"
+// 设备登录任务
+void device_login_task(void *pv);
+#endif

+ 120 - 0
main/framework/gateway/register.c

@@ -0,0 +1,120 @@
+#include <stdio.h>
+#include "register.h"
+#include "gateway_defs.h"
+#include "esp_log.h"
+#include "../system/miscellaneous_interface.h"
+#include "../system/net_http.h"
+#include <cJSON.h>
+#include <esp_app_desc.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "login.h"
+
+static const char *TAG = "REGISTER";
+
+#define RETRY_TIMES 15 // 注册重试次数
+
+esp_err_t call_result;
+void http_register_callback(char *response, void *user_data)
+{
+    call_result = ESP_FAIL;
+    if (response != NULL)
+    {
+        // parse response
+        /**
+         * {"code":0,"message":"","data":{"device_id":1033,"device_secret":"Ppmr7KXyotOZCdI6oRIN9n8uxacNXUnv","device_key":"69617ac8eb0024e8d1062400f0c8e2d34bc5700ba626b96a2107f18d55951f7d9a4c8cd2259f7df389075c74067ffd70","device_identifier":"08D1F9E77840"}}
+         */
+        cJSON *root = cJSON_Parse(response);
+        cJSON *code = cJSON_GetObjectItemCaseSensitive(root, "code");
+        if (code != NULL)
+        {
+            // if code is 0, main register success
+            if (cJSON_IsNumber(code) && code->valueint == 0)
+            {
+                // parse register data
+                cJSON *data = cJSON_GetObjectItem(root, "data");
+                cJSON *deviceId = cJSON_GetObjectItemCaseSensitive(data, "device_id");
+                cJSON *deviceKey = cJSON_GetObjectItemCaseSensitive(data, "device_key");
+                cJSON *deviceSecret = cJSON_GetObjectItemCaseSensitive(data, "device_secret");
+                ESP_LOGI(TAG, "device register success: id is %d, key is %s, secret is :%s", deviceId->valueint, deviceKey->valuestring, deviceSecret->valuestring);
+                char device_id[10] = {0};
+                sprintf(device_id, "%d", deviceId->valueint);
+                yx_data_set(DATANAME_DEVICE_ID, device_id);
+                yx_data_set(DATANAME_DEVICE_KEY, deviceKey->valuestring);
+                yx_data_set(DATANAME_DEVICE_SECRET, deviceSecret->valuestring);
+                ESP_LOGI(TAG, "save device info done...");
+                call_result = ESP_OK;
+            }
+        }
+        cJSON_Delete(root);
+    }
+    xTaskNotifyGive((TaskHandle_t)user_data);
+}
+
+void device_register_task(void *pv)
+{
+    uint8_t count = 0;
+    for (;;)
+    {
+        if(count++ > RETRY_TIMES) {
+            ESP_LOGE(TAG, "register failed, retry %d times", count);
+            esp_restart();
+        }
+        ESP_LOGI(TAG, "start device register...");
+        if(!net_connect_check()) {
+            break;
+        }
+//        // check is register
+//        char *deviceId = yx_data_get(DATANAME_DEVICE_ID);
+//        if (deviceId != NULL)
+//        {
+//            ESP_LOGI(TAG, "gateway is register, device_id is :%s, now start login", deviceId);
+//            xTaskCreate(&device_login_task, "login task", 1024 * 4, NULL, 1, NULL);
+//            break;
+//        }
+        char str_device_serial[16];
+        get_device_serial(str_device_serial);
+        cJSON *req = cJSON_CreateObject();
+        cJSON *productKey = cJSON_CreateString(YXLJ_PRODUCT_KEY);
+        cJSON *deviceCode = cJSON_CreateString(str_device_serial);
+        cJSON *deviceModule = cJSON_CreateString(YXLJ_DEVICE_MODULE);
+        esp_app_desc_t * desc = esp_app_get_description();
+        cJSON *version = cJSON_CreateString(desc->version);
+        cJSON *deviceType = cJSON_CreateNumber(1);
+
+        cJSON_AddItemToObject(req, "product_key", productKey);
+        cJSON_AddItemToObject(req, "device_code", deviceCode);
+        cJSON_AddItemToObject(req, "device_module", deviceModule);
+        cJSON_AddItemToObject(req, "device_type", deviceType);
+        cJSON_AddItemToObject(req, "version", version);
+        char url[128] = "";
+        sprintf(url, "%s/v1/devices/registration", SPARROW_SERVER_URL);
+
+        net_http_config_t config = {
+            .callback = http_register_callback,
+            .url = url,
+            .user_data = xTaskGetCurrentTaskHandle(), // 传递当前任务 handle,方便在回调中获取
+        };
+        net_http_post(cJSON_Print(req), config);
+        cJSON_Delete(req);
+        //free(deviceId);
+        // 等待信号
+        ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
+        if (call_result == ESP_OK)
+        {
+            ESP_LOGI(TAG, "device register success,now start login...");
+            BaseType_t result = xTaskCreate(&device_login_task, "login task", 1024 * 4, NULL, 1, NULL);
+            if(result != pdPASS){
+                ESP_LOGE(TAG, "device register fault....");
+                esp_restart();
+            }
+            break;
+        }
+        else
+        {
+            ESP_LOGI(TAG, "device register failed, after 3 sec retry...");
+            vTaskDelay(3000 / portTICK_PERIOD_MS);
+        }
+    }
+    vTaskDelete(NULL);
+}

+ 17 - 0
main/framework/gateway/register.h

@@ -0,0 +1,17 @@
+/**
+ * @Author: 李建
+ * @Date: 2023/12/13 22:58:51
+ * @LastEditors: 李建
+ * @LastEditTime: 2023/12/13 22:58:51
+ * Description: 网关注册:向云平台注册
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+
+#ifndef __YX_DEVICE_REGISTER_H
+#define __YX_DEVICE_REGISTER_H
+
+#include "gateway_defs.h"
+
+// 注册任务
+void device_register_task(void *pv);
+#endif

+ 25 - 0
main/framework/sub_device/command.c

@@ -0,0 +1,25 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#include "command.h"
+#include <string.h>
+
+#define MAX_COMMANDS 16
+static sparrow_command sparrowCommandList[MAX_COMMANDS];
+static int commandListIndex = 0;
+
+void register_sparrow_command(sparrow_command cmd) {
+    if(commandListIndex > MAX_COMMANDS - 1) return;
+    sparrowCommandList[commandListIndex++] = cmd;
+}
+
+sparrow_command * find_sparrow_command(char * name) {
+    for (int i =0;i < commandListIndex; i++) {
+        if(strcmp(sparrowCommandList[i].name, name) == 0) {
+            return &sparrowCommandList[i];
+        }
+    }
+    return NULL;
+}
+

+ 17 - 0
main/framework/sub_device/command.h

@@ -0,0 +1,17 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#ifndef TEST_COMMAND_H
+#define TEST_COMMAND_H
+
+typedef struct {
+    char * name;
+    void (*unpack)(char * params);
+}sparrow_command;
+// register a cloud command
+void register_sparrow_command(sparrow_command cmd);
+// find a cloud command
+sparrow_command * find_sparrow_command(char * name);
+
+#endif //TEST_COMMAND_H

+ 27 - 0
main/framework/sub_device/object.c

@@ -0,0 +1,27 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#include "object.h"
+#include <string.h>
+#define MAX_OBJECTS 16
+
+static sparrow_object sparrow_object_list[MAX_OBJECTS];
+static int object_index = 0;
+
+void register_sparrow_object(sparrow_object obj) {
+    if (object_index > MAX_OBJECTS - 1) return;
+    sparrow_object_list[object_index++] = obj;
+}
+
+sparrow_object * find_sparrow_object(char * name) {
+    for(int i = 0; i < object_index; i++)
+    {
+        if( strcmp(sparrow_object_list[i].name, name) == 0)
+        {
+            return &sparrow_object_list[i];
+        }
+    }
+    
+    return NULL;
+}

+ 20 - 0
main/framework/sub_device/object.h

@@ -0,0 +1,20 @@
+//
+// Created by 李建 on 2023/12/6.
+//
+
+#ifndef TEST_OBJECT_H
+#define TEST_OBJECT_H
+
+typedef struct {
+    char * name;
+    void (*pack)(char * data);
+    void (*unpack)(char * data);
+}sparrow_object;
+
+void register_sparrow_object(sparrow_object object);
+
+sparrow_object * find_sparrow_object(char * name);
+
+
+
+#endif //TEST_OBJECT_H

+ 170 - 0
main/framework/sub_device/zero_device.c

@@ -0,0 +1,170 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:22:32 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:22:32 PM
+ * Description: 网关通用命令处理,主要包含时间同步,软重启,上报最新状态 ,上报设备信息等
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+
+#include "zero_device.h"
+#include "command.h"
+#include "../channel.h"
+#include "esp_log.h"
+#include "esp_system.h"
+#include <cJSON.h>
+#include <mqtt_client.h>
+#include <esp_app_desc.h>
+#include "../gateway/access.h"
+#include "../system/miscellaneous_interface.h"
+
+static const char *TAG = "ZERO_DEVICE";
+extern esp_mqtt_client_handle_t client;
+
+/**
+ * 处理云端状态消息
+*/
+static void status_message_process(char *payload)
+{
+}
+// 处理云端事件消息
+static void event_message_process(char *payload)
+{
+}
+// 处理云端指令消息
+static void command_message_process(char *payload)
+{
+    cJSON *root = cJSON_Parse(payload);
+    cJSON *cmd = cJSON_GetObjectItemCaseSensitive(root, "cmd");
+    cJSON *params = cJSON_GetObjectItem(root, "params");
+    if (!root || !cmd || !params)
+        return;
+    sparrow_command *spCmd = find_sparrow_command(cmd->valuestring);
+    if (NULL != spCmd)
+    {
+        spCmd->unpack(cJSON_PrintUnformatted(params));
+    }
+    else
+    {
+        ESP_LOGI(TAG, "%s is not found!", cmd->valuestring);
+    }
+    cJSON_Delete(root);
+}
+
+/**
+ * 处理网关消息
+ */
+void zero_device_process(char *payload, sparrow_topic_type topicType)
+{
+    if (NULL == payload)
+    {
+        return;
+    }
+    switch (topicType)
+    {
+    case SPARROW_TOPIC_STATUS:
+        status_message_process(payload);
+        break;
+    case SPARROW_TOPIC_COMMAND:
+        command_message_process(payload);
+        break;
+    case SPARROW_TOPIC_EVENT:
+        event_message_process(payload);
+        break;
+    default:
+        break;
+    }
+}
+
+// 设备软重启处理
+void restart_process(char *params)
+{
+    esp_restart();
+}
+// 设备时间同步处理
+void timeSync_process(char *params)
+{
+    ESP_LOGI(TAG, "time sync");
+}
+
+//  上报最新状态处理
+void report_process(char *params)
+{
+}
+
+void publish_sys_info(void)
+{
+    gateway_sys_info info = {0};
+    get_sys_info(&info);
+    cJSON *root = cJSON_CreateObject();
+    cJSON_AddStringToObject(root, "cmd", "sysInfo");
+    cJSON *params = cJSON_CreateObject();
+    cJSON_AddStringToObject(params, "mac", info.mac);
+    cJSON_AddNumberToObject(params, "revision", info.revision);
+    cJSON_AddNumberToObject(params, "cores", info.cores);
+    cJSON_AddNumberToObject(params, "total", info.total);
+    cJSON_AddNumberToObject(params, "used", info.used);
+    cJSON_AddStringToObject(params, "version", info.version);
+    cJSON_AddStringToObject(params, "idf_version", info.idf_version);
+    cJSON_AddItemToObject(root, "params", params);
+    publish_message_t msg = {
+        .topic = "s",
+        .data = root,
+    };
+    sparrow_publish_status(msg);
+}
+
+void publish_app_version(void) {
+    char str_device_serial[16];
+    get_device_serial(str_device_serial);
+    cJSON *root = cJSON_CreateObject();
+    cJSON_AddStringToObject(root, "action", "reportFirmware");
+    cJSON_AddStringToObject(root, "deviceCode", str_device_serial);
+    esp_app_desc_t * desc = esp_app_get_description();
+    cJSON_AddStringToObject(root, "version", desc->version);
+    char * payload = cJSON_PrintUnformatted(root);
+    char topic[300];
+    sprintf(topic, "%s%s", TOPIC_PUB_STATUS, str_device_serial);
+    esp_mqtt_client_publish(client, topic, payload, 0, 1, false);
+    cJSON_Delete(root);
+    free(payload);
+}
+
+/**
+ * 上报设备信息。包含MAC地址,程序版本,IP地址
+ * 本地文件系统使用情况
+ */
+void system_info_progress(char *pv)
+{
+    publish_sys_info();
+}
+
+void sparrow_zero_device_init(void)
+{
+    // restart command
+    sparrow_command restart = {
+        .name = "restart",
+        .unpack = &restart_process,
+    };
+    // time sync command
+    sparrow_command timeSync = {
+        .name = "timeSync",
+        .unpack = &timeSync_process,
+    };
+    // report command
+    sparrow_command report = {
+        .name = "report",
+        .unpack = &report_process,
+    };
+    // get_sys_info command
+    sparrow_command get_sys_info = {
+        .name = "systemInfo",
+        .unpack = &system_info_progress,
+    };
+
+    register_sparrow_command(restart);
+    register_sparrow_command(timeSync);
+    register_sparrow_command(report);
+    register_sparrow_command(get_sys_info);
+    register_sub_device_channel_recv(SPARROW_CHANNEL_PORT_0, zero_device_process);
+}

+ 20 - 0
main/framework/sub_device/zero_device.h

@@ -0,0 +1,20 @@
+/**
+ * @Author: 李建
+ * @Date: 12/17/2023, 8:22:32 PM
+ * @LastEditors: 李建
+ * @LastEditTime: 12/17/2023, 8:22:32 PM
+ * Description: 网关通用命令处理,主要包含时间同步,软重启,上报最新状态 ,上报设备信息等
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+
+#ifndef TEST_ZERO_DEVICE_H
+#define TEST_ZERO_DEVICE_H
+
+#define ZERO_DEVICE_NAME "01"
+
+void sparrow_zero_device_init(void);
+
+void publish_sys_info(void);
+void publish_app_version(void);
+
+#endif //TEST_ZERO_DEVICE_H

+ 334 - 0
main/framework/system/miscellaneous_interface.c

@@ -0,0 +1,334 @@
+/**
+ * @Author: 李建
+ * @Date: 2023/12/14 11:20:56
+ * @LastEditors: 李建
+ * @LastEditTime: 2023/12/14 11:20:56
+ * Description: 存储
+ * Copyright: Copyright (©)}) 2023 永续绿建. All rights reserved.
+ */
+
+#include "miscellaneous_interface.h"
+#include "esp_mac.h"
+#include "esp_log.h"
+
+#include "esp_wifi.h"
+#include "nvs.h"
+#include "app/include/wifi.h"
+#include "esp_sntp.h"
+#include "esp_system.h"
+#include "esp_spiffs.h"
+#include "esp_app_desc.h"
+#include "esp_chip_info.h"
+
+static const char *TAG = "storage";
+
+uint64_t get_sys_time_ms() {
+    time_t timenow;
+    time(&timenow);
+    return (uint64_t) timenow * 1000;
+}
+
+bool net_connect_check() {
+    return get_wifi_status();
+}
+
+
+esp_err_t nvs_set_uint16(uint16_t code, const char *key) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail\n");
+        return err;
+    }
+    err = nvs_set_u16(handle, key, code);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 提交
+    err = nvs_commit(handle);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 记得关闭
+    nvs_close(handle);
+    return ESP_OK;
+}
+esp_err_t nvs_set_uint32(uint32_t code, const char *key) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail\n");
+        return err;
+    }
+    err = nvs_set_u32(handle, key, code);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 提交
+    err = nvs_commit(handle);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 记得关闭
+    nvs_close(handle);
+    return ESP_OK;
+}
+esp_err_t nvs_set_int8(int8_t code, const char *key) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail\n");
+        return err;
+    }
+    err = nvs_set_i8(handle, key, code);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 提交
+    err = nvs_commit(handle);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 记得关闭
+    nvs_close(handle);
+    return ESP_OK;
+}
+
+int8_t *nvs_get_int8(const char *key) {
+    nvs_handle handle;
+    esp_err_t err;
+    int8_t *code;
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "nvs open fail");
+        return NULL;
+    }
+    code = (int8_t *) malloc(sizeof(int8_t));
+    // 检查存在
+    err = nvs_get_i8(handle, key, code);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "get i8 error,err = %d,key = %s", err, key);
+        free(code);
+        return NULL;
+    }
+    printf("get code = %u from nvs", *code);
+    nvs_close(handle);
+    return code;
+}
+
+
+esp_err_t nvs_set_uint8(uint8_t code, const char *key) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail\n");
+        return err;
+    }
+    err = nvs_set_u8(handle, key, code);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 提交
+    err = nvs_commit(handle);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 记得关闭
+    nvs_close(handle);
+    return ESP_OK;
+}
+
+uint8_t *nvs_get_uint8(const char *key) {
+    nvs_handle handle;
+    esp_err_t err;
+    uint8_t *code;
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "nvs open fail");
+        return NULL;
+    }
+    code = (uint8_t *) malloc(sizeof(uint8_t));
+    // 检查存在
+    err = nvs_get_u8(handle, key, code);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "get u8 error,err = %d,key = %s", err, key);
+        free(code);
+        return NULL;
+    }
+    nvs_close(handle);
+    return code;
+}
+
+
+uint16_t *nvs_get_uint16(const char *key) {
+    nvs_handle handle;
+    esp_err_t err;
+    uint16_t *code;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "nvs open fail");
+        return NULL;
+    }
+    code = (uint16_t *) malloc(sizeof(uint16_t));
+    // 检查存在
+    err = nvs_get_u16(handle, key, code);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "get u8 error,err = %d,key = %s", err, key);
+        free(code);
+        return NULL;
+    }
+    printf("get code = %u from nvs", *code);
+    nvs_close(handle);
+
+    return code;
+}
+uint32_t *nvs_get_uint32(const char *key) {
+    nvs_handle handle;
+    esp_err_t err;
+    uint32_t *code;
+
+    err = nvs_open(AC_CODE_NAMESPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "nvs open fail");
+        return NULL;
+    }
+    code = (uint32_t *) malloc(sizeof(uint32_t));
+    // 检查存在
+    err = nvs_get_u32(handle, key, code);
+    if (err != ESP_OK) {
+        ESP_LOGI(TAG, "get u8 error,err = %d,key = %s", err, key);
+        free(code);
+        return NULL;
+    }
+    printf("get code = %lu from nvs", *code);
+    nvs_close(handle);
+
+    return code;
+}
+void get_device_serial(char *serial_buf) {
+    u_int8_t mapAddr[6];
+    esp_read_mac(mapAddr, ESP_MAC_WIFI_STA);
+    sprintf(serial_buf, "%02X%02X%02X%02X%02X%02X", mapAddr[0], mapAddr[1], mapAddr[2], mapAddr[3], mapAddr[4],
+            mapAddr[5]);
+}
+
+char *yx_data_get(char *key) {
+
+    nvs_handle_t nvsHandle;
+    ESP_ERROR_CHECK(nvs_open(YX_NVS_NAME_SPACE, NVS_READWRITE, &nvsHandle));
+    size_t required_size;
+    nvs_get_str(nvsHandle, key, NULL, &required_size);
+    if (required_size == 0)
+        return NULL;
+    char *result = malloc(required_size);
+    nvs_get_str(nvsHandle, key, result, &required_size);
+    nvs_close(nvsHandle);
+    return result;
+}
+
+/**
+ * 获取本地保存的按键原始码
+ * @param key 按键Id
+ * @param out_value 原始码数组
+ * @return
+ */
+esp_err_t nvs_get_study_code(const char *key, uint16_t *out_value, size_t *out_len) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(YX_NVS_NAME_SPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail\n");
+        return err;
+    }
+    err = nvs_get_blob(handle, key, out_value, out_len);
+    if (err != ESP_OK) {
+        return err;
+    }
+    nvs_close(handle);
+    return err;
+}
+
+/**
+ * 保存红外学习的按键原始数据
+ * @param code 原始码
+ * @param key 按键Id
+ * @param len 原始码长度
+ * @return
+ */
+esp_err_t nvs_save_study_code(uint16_t *code, size_t len, const char *key) {
+    esp_err_t err;
+    nvs_handle handle;
+
+    err = nvs_open(YX_NVS_NAME_SPACE, NVS_READWRITE, &handle);
+    if (err != ESP_OK) {
+        printf("nvs open fail, %s", esp_err_to_name(err));
+        return err;
+    }
+    printf("code len :%d\n", len);
+    err = nvs_set_blob(handle, key, code, len);
+    if (err != ESP_OK) {
+        printf("nvs set fail, %s", esp_err_to_name(err));
+        return err;
+    }
+    // 提交
+    err = nvs_commit(handle);
+    if (err != ESP_OK) {
+        return err;
+    }
+    // 记得关闭
+    nvs_close(handle);
+    return ESP_OK;
+}
+
+void yx_data_set(char *key, char *value) {
+    nvs_handle_t nvsHandle;
+    ESP_ERROR_CHECK(nvs_open(YX_NVS_NAME_SPACE, NVS_READWRITE, &nvsHandle));
+    ESP_ERROR_CHECK(nvs_set_str(nvsHandle, key, value));
+    ESP_ERROR_CHECK(nvs_commit(nvsHandle));
+    nvs_close(nvsHandle);
+}
+
+void yx_data_clear(char * key) {
+    nvs_handle_t nvsHandle;
+    ESP_ERROR_CHECK(nvs_open(YX_NVS_NAME_SPACE, NVS_READWRITE, &nvsHandle));
+    nvs_erase_key(nvsHandle, key);
+    nvs_commit(nvsHandle);
+    nvs_close(nvsHandle);
+}
+
+// 获取网关系统信息
+void get_sys_info(gateway_sys_info *info) {
+    if (info == NULL)
+        return;
+    size_t total = 0, used = 0;
+    esp_err_t ret = esp_spiffs_info(NULL, &total, &used);
+    if (ret == ESP_OK) {
+        info->used = used;
+        info->total = total;
+    }
+    u_int8_t mapAddr[6];
+    esp_read_mac(mapAddr, ESP_MAC_WIFI_STA);
+    char str_device_serial[21];
+    sprintf(str_device_serial, "%02X:%02X:%02X:%02X:%02X:%02X", mapAddr[0], mapAddr[1], mapAddr[2], mapAddr[3],
+            mapAddr[4], mapAddr[5]);
+
+    strcpy(info->mac, str_device_serial);
+    esp_chip_info_t chip_info = {0};
+    esp_chip_info(&chip_info);
+
+    info->cores = chip_info.cores;
+    info->revision = chip_info.revision;
+    const esp_app_desc_t *desc = esp_app_get_description();
+    strcpy(info->idf_version, desc->idf_ver);
+    strcpy(info->version, desc->version);
+}

+ 59 - 0
main/framework/system/miscellaneous_interface.h

@@ -0,0 +1,59 @@
+#ifndef __MISCELLANEOUS_INTERFACE_H__
+#define __MISCELLANEOUS_INTERFACE_H__
+
+#include <stdbool.h>
+#include "esp_err.h"
+// 网关存储命名空间
+#define YX_NVS_NAME_SPACE "YX_NVS_SPACE"
+// 默认空调码库KEY
+#define AC_DEFAULT "ac-code"
+// 空调码库存储命名空间
+#define IR_STORAGE_NAME_SPACE = "ir_data"
+
+#define SDK_VERSION_NAME  "version"
+
+#define AC_CODE_NAMESPACE "ac_code"
+
+uint64_t get_sys_time_ms();
+// 是否接入网络
+bool net_connect_check();
+
+// 获取设备唯一标识-mac
+void get_device_serial(char *serial_buf);
+
+// 根据 Key获取本地数据
+char *yx_data_get(char *key);
+/**
+ * 清除键值
+ * @param key
+ */
+void yx_data_clear(char * key);
+// 写入数据
+void yx_data_set(char *key, char *value);
+esp_err_t nvs_set_int8(int8_t code, const char *key);
+
+int8_t *nvs_get_int8(const char *key);
+esp_err_t nvs_set_uint8(uint8_t code, const char *key);
+
+uint8_t *nvs_get_uint8(const char *key);
+
+esp_err_t nvs_set_uint16(uint16_t code, const char *key);
+esp_err_t nvs_set_uint32(uint32_t code, const char *key);
+uint16_t *nvs_get_uint16(const char *key);
+uint32_t *nvs_get_uint32(const char *key);
+// 网关系统信息参数
+typedef struct gateway_sys_info {
+    char *ip_address; // IP 地址
+    char mac[21]; // MAC 地址
+    uint16_t revision; // chip revision number
+    uint8_t cores; // 内核芯数
+    char idf_version[32]; // idf 版本号
+    char version[32]; // 固件版本号
+    size_t total; // spiffs 总数
+    size_t used; // spiffs 已使用
+} gateway_sys_info;
+
+// 获取网关系统信息
+void get_sys_info(gateway_sys_info *info);
+
+#endif

+ 99 - 0
main/framework/system/net_http.c

@@ -0,0 +1,99 @@
+#include "net_http.h"
+#include "esp_log.h"
+#include "esp_http_client.h"
+#include "miscellaneous_interface.h"
+
+#define MAX_HTTP_OUTPUT_BUFFER 1024
+
+EXT_RAM_BSS_ATTR static char http_data[MAX_HTTP_OUTPUT_BUFFER] = {0}; //! 需要定义为全局静态变量,否则会导致任务的堆栈溢出
+
+#define HTTP_HEADER_CONTENT_TYPE "application/json"
+static const char *TAG = "HTTP_CLIENT";
+QueueHandle_t res_queue;
+
+esp_err_t _http_event_handler(esp_http_client_event_t *evt) {
+    // 缓存http响应的buffer
+    static char *output_buffer;
+    // 已经读取的字节数
+    static int output_len;
+    switch (evt->event_id) {
+        case HTTP_EVENT_ERROR:
+            ESP_LOGD(TAG, "HTTP_EVENT_ERROR");
+            break;
+        case HTTP_EVENT_ON_DATA:
+            // 如果配置了user_data buffer,则把响应复制到该buffer中
+            memcpy(http_data + output_len, evt->data, evt->data_len);
+            output_len += evt->data_len;
+            break;
+        case HTTP_EVENT_ON_FINISH:
+            ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH");
+            if (output_buffer != NULL) {
+                free(output_buffer);
+                output_buffer = NULL;
+            }
+            output_len = 0;
+            break;
+        case HTTP_EVENT_DISCONNECTED:
+            ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED");
+            if (output_buffer != NULL) {
+                free(output_buffer);
+                output_buffer = NULL;
+            }
+            output_len = 0;
+            break;
+        default:
+            break;
+    }
+
+    return ESP_OK;
+}
+
+void net_http_get(net_http_config_t p_config) {
+    esp_http_client_config_t config = {
+            .url = p_config.url,
+            .timeout_ms = 5000 * 2 * 2,
+            .user_data = (void *) http_data,
+            .disable_auto_redirect = true,
+            .method = HTTP_METHOD_GET,
+            .event_handler = _http_event_handler};
+    memset(http_data, 0, MAX_HTTP_OUTPUT_BUFFER); //清空http缓存区
+    esp_http_client_handle_t client = esp_http_client_init(&config);
+    esp_http_client_set_header(client, "Content-Type", HTTP_HEADER_CONTENT_TYPE);
+    esp_err_t err = esp_http_client_perform(client);
+    if (err == ESP_OK) {
+        if (p_config.callback != NULL) {
+            p_config.callback(http_data, p_config.user_data);
+        }
+    } else {
+        if (p_config.callback != NULL) {
+            p_config.callback(NULL, p_config.user_data);
+        }
+    }
+    esp_http_client_close(client);
+    esp_http_client_cleanup(client);
+}
+
+void net_http_post(const char *post_data, net_http_config_t p_config) {
+    esp_http_client_config_t config = {
+            .url = p_config.url,
+            .timeout_ms = 5000 * 2 * 2,
+            .user_data = (void *) http_data,
+            .event_handler = _http_event_handler};
+    memset(http_data, 0, MAX_HTTP_OUTPUT_BUFFER); //清空http缓存区
+    esp_http_client_handle_t client = esp_http_client_init(&config);
+    esp_http_client_set_method(client, HTTP_METHOD_POST);
+    esp_http_client_set_header(client, "Content-Type", HTTP_HEADER_CONTENT_TYPE);
+    ESP_ERROR_CHECK(esp_http_client_set_post_field(client, post_data, strlen(post_data)));
+    esp_err_t err = esp_http_client_perform(client);
+    if (err == ESP_OK) {
+        if (p_config.callback != NULL) {
+            p_config.callback(http_data, p_config.user_data);
+        }
+    } else {
+        if (p_config.callback != NULL) {
+            p_config.callback(NULL, p_config.user_data);
+        }
+    }
+    esp_http_client_close(client);
+    esp_http_client_cleanup(client);
+}

+ 24 - 0
main/framework/system/net_http.h

@@ -0,0 +1,24 @@
+/**
+ * @Author: 李建
+ * @Date: 2023/12/13 17:58:01
+ * @LastEditors: 李建
+ * @LastEditTime: 2023/12/13 17:58:01
+ * Description: http 请求
+ * Copyright: Copyright (©)}) 2023  YXLJ@2024. All rights reserved.
+ */
+#ifndef __NET_HTTP_CLIENT_H__
+#define __NET_HTTP_CLIENT_H__
+#include <stdio.h>
+
+#define BUFFER_SIZE_MAX  5000
+typedef void (* http_callback)(char* response, void * user_data);
+
+typedef struct {
+    void *user_data;
+    char *url;
+    http_callback callback;
+} net_http_config_t;
+
+void net_http_post(const char * post_data, net_http_config_t callback);
+void net_http_get(net_http_config_t callback);
+#endif

+ 88 - 0
main/framework/system/timer.c

@@ -0,0 +1,88 @@
+#include "timer.h"
+#include <stdio.h>
+#include "driver/gptimer.h"
+#include "esp_err.h"
+#include "esp_log.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/queue.h"
+
+static const char *TAG = "TIMER";
+static gptimer_handle_t gptimer = NULL;
+QueueHandle_t queue;
+typedef struct
+{
+    uint64_t event_count;
+} queue_callback_element_t;
+queue_callback_element_t item;
+
+bool example_timer_on_alarm_cb_v1(gptimer_handle_t timer, const gptimer_alarm_event_data_t *edata, void *user_data)
+{
+    BaseType_t high_task_awoken = pdFALSE;
+    QueueHandle_t queue = (QueueHandle_t)user_data;
+
+    queue_callback_element_t ele = {
+        .event_count = edata->alarm_value};
+    xQueueSendFromISR(queue, &ele, &high_task_awoken);
+    // return whether we need to yield at the end of ISR
+    return (high_task_awoken == pdTRUE);
+}
+
+void yx_timer_init(struct timer_param_s *params)
+{
+    // create queue
+    queue = xQueueCreate(1, sizeof(queue_callback_element_t));
+    if (!queue)
+    {
+        ESP_LOGE(TAG, "creating queue error");
+        return;
+    }
+    gptimer_config_t timer_config = {
+        // 初始化参数设置
+        .clk_src = GPTIMER_CLK_SRC_DEFAULT, // 选择时钟源
+        .direction = GPTIMER_COUNT_UP,      // 向上计数
+        .resolution_hz = 1 * 1000 * 1000,   // 1MHz, 1 tick = 1us  设置定时时间
+    };
+    ESP_LOGI(TAG, "Start timer, stop it at alarm event");
+    ESP_ERROR_CHECK(gptimer_new_timer(&timer_config, &gptimer)); // 创建一个通用定时器,返回任务句柄
+
+    gptimer_event_callbacks_t cbs = {
+        // 中断回调函数(alrm中断)
+        .on_alarm = example_timer_on_alarm_cb_v1,
+    };
+    ESP_LOGI(TAG, "Enable timer");
+    ESP_ERROR_CHECK(gptimer_register_event_callbacks(gptimer, &cbs, queue)); // 第一次调用这个函数需要在调用gptimer_enable之前
+    //ESP_ERROR_CHECK(gptimer_enable(gptimer));                                // 使能定时器中断
+
+    ESP_LOGI(TAG, "Start timer, auto-reload at alarm event");
+    gptimer_alarm_config_t alarm_config = {
+        .reload_count = 0,
+        .alarm_count = 1000000 * params->interval, // period = 5s
+        .flags.auto_reload_on_alarm = true,
+    };
+
+    ESP_ERROR_CHECK(gptimer_set_alarm_action(gptimer, &alarm_config));
+}
+
+void yx_timer_start(struct timer_param_s *params)
+{
+    gptimer_enable(gptimer);
+    ESP_ERROR_CHECK(gptimer_start(gptimer));
+    if (xQueueReceive(queue, &item, portMAX_DELAY))
+    {
+        if (params->timerCbFunc != NULL)
+        {
+            params->timerCbFunc();
+        }
+        vQueueDelete(queue);
+    }
+    else
+    {
+        ESP_LOGW(TAG, "Missed one count event");
+    }
+}
+
+void yx_timer_stop(struct timer_param_s *params)
+{
+    ESP_ERROR_CHECK(gptimer_stop(gptimer));
+    //gptimer_disable(gptimer);
+}

+ 19 - 0
main/framework/system/timer.h

@@ -0,0 +1,19 @@
+#ifndef __SYSTEM_TIMER_H__
+#define __SYSTEM_TIMER_H__
+#include <stdint.h>
+
+typedef void (*TimerCallbackFunc)(void);
+struct timer_param_s {
+    uint8_t timer_no;
+    uint16_t interval; // 定时时间(s)
+    uint32_t timerTick;
+    TimerCallbackFunc timerCbFunc;
+} ;
+
+void yx_timer_init(struct timer_param_s * params);
+
+void yx_timer_start(struct timer_param_s * params);
+
+void yx_timer_stop(struct timer_param_s * params);
+
+#endif

+ 7 - 0
main/idf_component.yml

@@ -0,0 +1,7 @@
+dependencies:
+  esp_lcd_touch_gt911: ^1.1.2
+  esp_lcd_st7701: "1.1.0"
+  lvgl/lvgl: "9.2.2"
+  esp_lcd_panel_io_additions: "1.0.1"
+  espressif/esp_lcd_touch_ft5x06: "^1.0.6"
+  espressif/esp-modbus: ^2.0.0

+ 178 - 0
main/lcd/include/lcd_st7701.h

@@ -0,0 +1,178 @@
+#pragma once
+
+#include "esp_err.h"
+#include "driver/gpio.h"
+
+// LCD分辨率定义
+#define LCD_H_RES (480)                                                                  // 水平分辨率
+#define LCD_V_RES (480)                                                                  // 垂直分辨率
+#define LCD_BIT_PER_PIXEL (18)                                                           // 每像素位数
+#define RGB_BIT_PER_PIXEL (16)                                                           // RGB每像素位数
+#define RGB_DATA_WIDTH (16)                                                              // RGB数据宽度
+#define RGB_BOUNCE_BUFFER_SIZE (LCD_H_RES * 10) // RGB反弹缓冲区大小
+
+// RGB接口引脚定义
+#define LCD_IO_RGB_DISP (-1)           // RGB显示引脚,未使用
+#define LCD_IO_RGB_VSYNC (GPIO_NUM_21) // RGB垂直同步信号引脚
+#define LCD_IO_RGB_HSYNC (GPIO_NUM_14) // RGB水平同步信号引脚
+#define LCD_IO_RGB_DE (GPIO_NUM_47)    // RGB数据使能引脚
+#define LCD_IO_RGB_PCLK (GPIO_NUM_48)  // RGB像素时钟引脚
+// RGB数据引脚定义,从DB0到DB15
+#define LCD_IO_RGB_DATA0 (GPIO_NUM_13)
+#define LCD_IO_RGB_DATA1 (GPIO_NUM_12)
+#define LCD_IO_RGB_DATA2 (GPIO_NUM_11)
+#define LCD_IO_RGB_DATA3 (GPIO_NUM_10)
+#define LCD_IO_RGB_DATA4 (GPIO_NUM_9)
+
+#define LCD_IO_RGB_DATA5 (GPIO_NUM_46)
+#define LCD_IO_RGB_DATA6 (GPIO_NUM_3)
+#define LCD_IO_RGB_DATA7 (GPIO_NUM_20)
+#define LCD_IO_RGB_DATA8 (GPIO_NUM_19)
+#define LCD_IO_RGB_DATA9 (GPIO_NUM_8)
+
+#define LCD_IO_RGB_DATA10 (GPIO_NUM_18)
+#define LCD_IO_RGB_DATA11 (GPIO_NUM_17)
+#define LCD_IO_RGB_DATA12 (GPIO_NUM_16)
+#define LCD_IO_RGB_DATA13 (GPIO_NUM_15)
+#define LCD_IO_RGB_DATA14 (GPIO_NUM_7)
+#define LCD_IO_RGB_DATA15 (GPIO_NUM_6)
+
+// SPI接口引脚定义
+#define LCD_IO_SPI_CS (GPIO_NUM_45)  // SPI片选引脚
+#define LCD_IO_SPI_SCL (GPIO_NUM_38) // SPI时钟引脚
+#define LCD_IO_SPI_SDA (GPIO_NUM_39) // SPI数据引脚
+#define LCD_IO_RST (-1)              // 复位引脚,未使用
+
+// 背光控制引脚定义
+#define PIN_NUM_BK_LIGHT 1             // 背光控制引脚
+#define LCD_BK_LIGHT_ON_LEVEL 1                    // 背光开启电平
+#define LCD_BK_LIGHT_OFF_LEVEL !LCD_BK_LIGHT_ON_LEVEL // 背光关闭电平
+
+// 触摸屏I2C接口定义
+#define TOUCH_HOST (I2C_NUM_1)       // 触摸屏I2C主机
+#define PIN_NUM_TOUCH_SCL (GPIO_NUM_4) // 触摸屏I2C时钟引脚
+#define PIN_NUM_TOUCH_SDA (GPIO_NUM_5) // 触摸屏I2C数据引脚
+#define PIN_NUM_TOUCH_RST (GPIO_NUM_NC)         // 触摸屏复位引脚,未使用
+#define PIN_NUM_TOUCH_INT (GPIO_NUM_NC)         // 触摸屏中断引脚,未使用
+
+#define LCD_CS_Clr()    gpio_set_level(LCD_IO_SPI_CS, 0)
+#define LCD_CS_Set()    gpio_set_level(LCD_IO_SPI_CS, 1)
+#define LCD_SCK_Clr()   gpio_set_level(LCD_IO_SPI_SCL, 0)
+#define LCD_SCK_Set()   gpio_set_level(LCD_IO_SPI_SCL, 1)
+#define LCD_SDA_Clr()   gpio_set_level(LCD_IO_SPI_SDA, 0)
+#define LCD_SDA_Set()   gpio_set_level(LCD_IO_SPI_SDA, 1)
+/**
+ * 获取背光状态
+ * @return  true 亮,false 灭
+ */
+bool lcd_st7701_get_blacklight();
+/**
+ * @brief 初始化LCD和触摸屏
+ * @return
+ *     - ESP_OK 成功
+ *     - ESP_FAIL 失败
+ */
+esp_err_t lcd_st7701_init(void);
+
+/**
+ * @brief 打开LCD背光
+ * @return
+ *     - ESP_OK 成功
+ *     - ESP_FAIL 失败
+ */
+esp_err_t lcd_st7701_backlight_on(void);
+
+/**
+ * @brief 关闭LCD背光
+ * @return
+ *     - ESP_OK 成功
+ *     - ESP_FAIL 失败
+ */
+esp_err_t lcd_st7701_backlight_off(void);
+
+//#pragma once
+//
+//#include "esp_err.h"
+//#include "driver/gpio.h"
+//
+//// LCD分辨率定义
+//#define LCD_H_RES (480)                                                                  // 水平分辨率
+//#define LCD_V_RES (480)                                                                  // 垂直分辨率
+//#define LCD_BIT_PER_PIXEL (18)                                                           // 每像素位数
+//#define RGB_BIT_PER_PIXEL (16)                                                           // RGB每像素位数
+//#define RGB_DATA_WIDTH (16)                                                              // RGB数据宽度
+//#define RGB_BOUNCE_BUFFER_SIZE (LCD_H_RES * 10) // RGB反弹缓冲区大小
+//
+//// RGB接口引脚定义
+//#define LCD_IO_RGB_DISP (-1)           // RGB显示引脚,未使用
+//#define LCD_IO_RGB_VSYNC (GPIO_NUM_48) // RGB垂直同步信号引脚
+//#define LCD_IO_RGB_HSYNC (GPIO_NUM_47) // RGB水平同步信号引脚
+//#define LCD_IO_RGB_DE (GPIO_NUM_45)    // RGB数据使能引脚
+//#define LCD_IO_RGB_PCLK (GPIO_NUM_38)  // RGB像素时钟引脚
+//// RGB数据引脚定义,从DB0到DB15
+//#define LCD_IO_RGB_DATA0  (GPIO_NUM_21)
+//#define LCD_IO_RGB_DATA1  (GPIO_NUM_14)
+//#define LCD_IO_RGB_DATA2  (GPIO_NUM_13)
+//#define LCD_IO_RGB_DATA3  (GPIO_NUM_12)
+//#define LCD_IO_RGB_DATA4  (GPIO_NUM_11)
+//#define LCD_IO_RGB_DATA5  (GPIO_NUM_10)
+//#define LCD_IO_RGB_DATA6  (GPIO_NUM_9 )
+//#define LCD_IO_RGB_DATA7  (GPIO_NUM_46)
+//#define LCD_IO_RGB_DATA8  (GPIO_NUM_3 )
+//#define LCD_IO_RGB_DATA9  (GPIO_NUM_20)
+//#define LCD_IO_RGB_DATA10 (GPIO_NUM_19)
+//#define LCD_IO_RGB_DATA11 (GPIO_NUM_8 )
+//#define LCD_IO_RGB_DATA12 (GPIO_NUM_16)
+//#define LCD_IO_RGB_DATA13 (GPIO_NUM_15)
+//#define LCD_IO_RGB_DATA14 (GPIO_NUM_7)
+//#define LCD_IO_RGB_DATA15 (GPIO_NUM_6)
+//
+//
+//// SPI接口引脚定义
+//#define LCD_IO_SPI_CS (GPIO_NUM_39)  // SPI片选引脚
+//#define LCD_IO_SPI_SCL (GPIO_NUM_21) // SPI时钟引脚
+//#define LCD_IO_SPI_SDA (GPIO_NUM_14) // SPI数据引脚
+//#define LCD_IO_RST (-1)              // 复位引脚,未使用
+//
+//// 背光控制引脚定义
+//#define PIN_NUM_BK_LIGHT (-1)                // 背光控制引脚
+//#define LCD_BK_LIGHT_ON_LEVEL (1)                     // 背光开启电平
+//#define LCD_BK_LIGHT_OFF_LEVEL !LCD_BK_LIGHT_ON_LEVEL // 背光关闭电平
+//
+//// 触摸屏I2C接口定义
+//#define TOUCH_HOST (I2C_NUM_1)         // 触摸屏I2C主机
+//#define PIN_NUM_TOUCH_SCL (GPIO_NUM_4) // 触摸屏I2C时钟引脚
+//#define PIN_NUM_TOUCH_SDA (GPIO_NUM_5) // 触摸屏I2C数据引脚
+//#define PIN_NUM_TOUCH_RST (GPIO_NUM_NC)         // 触摸屏复位引脚,未使用
+//#define PIN_NUM_TOUCH_INT (GPIO_NUM_NC)         // 触摸屏中断引脚,未使用
+//
+//#define LCD_CS_Clr()    gpio_set_level(LCD_IO_SPI_CS, 0)
+//#define LCD_CS_Set()    gpio_set_level(LCD_IO_SPI_CS, 1)
+//#define LCD_SCK_Clr()   gpio_set_level(LCD_IO_SPI_SCL, 0)
+//#define LCD_SCK_Set()   gpio_set_level(LCD_IO_SPI_SCL, 1)
+//#define LCD_SDA_Clr()   gpio_set_level(LCD_IO_SPI_SDA, 0)
+//#define LCD_SDA_Set()   gpio_set_level(LCD_IO_SPI_SDA, 1)
+//
+///**
+// * @brief 初始化LCD和触摸屏
+// * @return
+// *     - ESP_OK 成功
+// *     - ESP_FAIL 失败
+// */
+//esp_err_t lcd_st7701_init(void);
+//
+///**
+// * @brief 打开LCD背光
+// * @return
+// *     - ESP_OK 成功
+// *     - ESP_FAIL 失败
+// */
+//esp_err_t lcd_st7701_backlight_on(void);
+//
+///**
+// * @brief 关闭LCD背光
+// * @return
+// *     - ESP_OK 成功
+// *     - ESP_FAIL 失败
+// */
+//esp_err_t lcd_st7701_backlight_off(void);

+ 385 - 0
main/lcd/lcd_st7701.c

@@ -0,0 +1,385 @@
+#include "lcd_st7701.h"
+#include "esp_log.h"
+#include "esp_heap_caps.h"
+#include "driver/i2c.h"
+#include "driver/spi_master.h"
+#include "esp_lcd_panel_ops.h"
+#include "esp_lcd_panel_io.h"
+#include "esp_lcd_panel_io_additions.h"
+#include "esp_lcd_st7701.h"
+#include "esp_lcd_touch.h"
+#include "extend_io.h"
+
+#include "lvgl_port.h"
+
+
+static const char *TAG = "lcd_st7701";
+static bool backlight_status = false;
+#define SCREEN_FACTORY_YY // 鱼鹰屏
+// #define SCREEN_FACTORY_HM // 禾木屏
+
+#ifdef SCREEN_FACTORY_HM
+
+#include "esp_lcd_touch_gt911.h"
+
+#endif
+#ifdef SCREEN_FACTORY_YY
+
+#include "esp_lcd_touch_ft5x06.h"
+
+#endif
+
+// LCD初始化命令
+static const st7701_lcd_init_cmd_t lcd_init_cmds[] = {
+        //  {cmd, { data }, data_size, delay_ms}
+#ifdef SCREEN_FACTORY_HM
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x10}, 5, 0},
+        {0xC0, (uint8_t[]) {0x3B, 0x00}, 2, 0},
+        {0xC1, (uint8_t[]) {0x0D, 0x02}, 2, 0},
+        {0xC2, (uint8_t[]) {0x31, 0x05}, 2, 0},
+        {0xCD, (uint8_t[]) {0x08}, 1, 0},
+        {0xB0,
+         (uint8_t[]) {0x00, 0x11, 0x18, 0x0E, 0x11, 0x06, 0x07, 0x08, 0x07, 0x22, 0x04, 0x12, 0x0F, 0xAA, 0x31, 0x18},
+         16, 0},
+        {0xB1,
+         (uint8_t[]) {0x00, 0x11, 0x19, 0x0E, 0x12, 0x07, 0x08, 0x08, 0x08, 0x22, 0x04, 0x11, 0x11, 0xA9, 0x32, 0x18},
+         16, 0},
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x11}, 5, 0},
+        {0xB0, (uint8_t[]) {0x60}, 1, 0},
+        {0xB1, (uint8_t[]) {0x32}, 1, 0},
+        {0xB2, (uint8_t[]) {0x07}, 1, 0},
+        {0xB3, (uint8_t[]) {0x80}, 1, 0},
+        {0xB5, (uint8_t[]) {0x49}, 1, 0},
+        {0xB7, (uint8_t[]) {0x85}, 1, 0},
+        {0xB8, (uint8_t[]) {0x21}, 1, 0},
+        {0xC1, (uint8_t[]) {0x78}, 1, 0},
+        {0xC2, (uint8_t[]) {0x78}, 1, 0},
+        {0xE0, (uint8_t[]) {0x00, 0x1B, 0x02}, 3, 0},
+        {0xE1, (uint8_t[]) {0x08, 0xA0, 0x00, 0x00, 0x07, 0xA0, 0x00, 0x00, 0x00, 0x44, 0x44}, 11, 0},
+        {0xE2, (uint8_t[]) {0x11, 0x11, 0x44, 0x44, 0xED, 0xA0, 0x00, 0x00, 0xEC, 0xA0, 0x00, 0x00}, 12, 0},
+        {0xE3, (uint8_t[]) {0x00, 0x00, 0x11, 0x11}, 4, 0},
+        {0xE4, (uint8_t[]) {0x44, 0x44}, 2, 0},
+        {0xE5,
+         (uint8_t[]) {0x0A, 0xE9, 0xD8, 0xA0, 0x0C, 0xEB, 0xD8, 0xA0, 0x0E, 0xED, 0xD8, 0xA0, 0x10, 0xEF, 0xD8, 0xA0},
+         16, 0},
+        {0xE6, (uint8_t[]) {0x00, 0x00, 0x11, 0x11}, 4, 0},
+        {0xE7, (uint8_t[]) {0x44, 0x44}, 2, 0},
+        {0xE8,
+         (uint8_t[]) {0x09, 0xE8, 0xD8, 0xA0, 0x0B, 0xEA, 0xD8, 0xA0, 0x0D, 0xEC, 0xD8, 0xA0, 0x0F, 0xEE, 0xD8, 0xA0},
+         16, 0},
+        {0xEB, (uint8_t[]) {0x02, 0x00, 0xE4, 0xE4, 0x88, 0x00, 0x40}, 7, 0},
+        {0xEC, (uint8_t[]) {0x3C, 0x00}, 2, 0},
+        {0xED,
+         (uint8_t[]) {0xAB, 0x89, 0x76, 0x54, 0x02, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x20, 0x45, 0x67, 0x98, 0xBA},
+         16, 0},
+        {0x36, (uint8_t[]) {0x00}, 1, 0},
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x13}, 5, 0},
+        {0xE5, (uint8_t[]) {0xE4}, 1, 0},
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x00}, 5, 0},
+        {0x3A, (uint8_t[]) {0x60}, 1, 0},
+        {0x20, (uint8_t[]) {}, 0, 0},
+        {0x11, (uint8_t[]) {}, 0, 100},
+        {0x29, (uint8_t[]) {}, 0, 50}
+#endif
+#ifdef SCREEN_FACTORY_YY
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x13}, 5, 0},
+        {0xEF, (uint8_t[]) {0x08}, 1, 0},
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x10}, 5, 0},
+        {0xC0, (uint8_t[]) {0x3B, 0x00}, 2, 0},
+        {0xC1, (uint8_t[]) {0x0B, 0x02}, 2, 0},
+        {0xC2, (uint8_t[]) {0x37, 0x02}, 2, 0},
+        {0xCC, (uint8_t[]) {0x10}, 1, 0},
+        {0xB0,
+         (uint8_t[]) {0x00, 0x0F, 0x16, 0x0E, 0x11, 0x07, 0x09, 0x09, 0x08, 0x23, 0x05, 0x11, 0x0F, 0x28, 0x2D, 0x18},
+         16, 0},
+        {0xB1,
+         (uint8_t[]) {0x00, 0x0F, 0x16, 0x0E, 0x11, 0x07, 0x09, 0x08, 0x09, 0x23, 0x05, 0x11, 0x0F, 0x28, 0x2D, 0x18},
+         16, 0},
+        {0xFF, (uint8_t[]) {0x77, 0x01, 0x00, 0x00, 0x11}, 5, 0},
+        {0xB0, (uint8_t[]) {0x4D}, 1, 0},
+        {0xB1, (uint8_t[]) {0x33}, 1, 0},
+        {0xB2, (uint8_t[]) {0x87}, 1, 0},
+        {0xB5, (uint8_t[]) {0x4B}, 1, 0},
+        {0xB7, (uint8_t[]) {0x8C}, 1, 0},
+        {0xB8, (uint8_t[]) {0x20}, 1, 0},
+        {0xC1, (uint8_t[]) {0x78}, 1, 0},
+        {0xC2, (uint8_t[]) {0x78}, 1, 0},
+        {0xD0, (uint8_t[]) {0x88}, 1, 0},
+        {0xE0, (uint8_t[]) {0x00, 0x00, 0x02}, 3, 0},
+        {0xE1, (uint8_t[]) {0x02, 0xF0, 0x00, 0x00, 0x03, 0xF0, 0x00, 0x00, 0x00, 0x44, 0x44}, 11, 0},
+        {0xE2, (uint8_t[]) {0x10, 0x10, 0x40, 0x40, 0xF2, 0xF0, 0x00, 0x00, 0xF2, 0xF0, 0x00, 0x00}, 12, 0},
+        {0xE3, (uint8_t[]) {0x00, 0x00, 0x11, 0x11}, 4, 0},
+        {0xE4, (uint8_t[]) {0x44, 0x44}, 2, 0},
+        {0xE5,
+         (uint8_t[]) {0x07, 0xEF, 0xF0, 0xF0, 0x09, 0xF1, 0xF0, 0xF0, 0x03, 0xF3, 0xF0, 0xF0, 0x05, 0xED, 0xF0, 0xF0},
+         16, 0},
+        {0xE6, (uint8_t[]) {0x00, 0x00, 0x11, 0x11}, 4, 0},
+        {0xE7, (uint8_t[]) {0x44, 0x44}, 2, 0},
+        {0xE8,
+         (uint8_t[]) {0x08, 0xF0, 0xF0, 0xF0, 0x0A, 0xF2, 0xF0, 0xF0, 0x04, 0xF4, 0xF0, 0xF0, 0x06, 0xEE, 0xF0, 0xF0},
+         16, 0},
+        {0xEB, (uint8_t[]) {0x00, 0x00, 0xE4, 0xE4, 0x44, 0x88, 0x40}, 7, 0},
+        {0xEC, (uint8_t[]) {0x78, 0x00}, 2, 0},
+        {0xED,
+         (uint8_t[]) {0x20, 0xF9, 0x87, 0x76, 0x65, 0x54, 0x4F, 0xFF, 0xFF, 0xF4, 0x45, 0x56, 0x67, 0x78, 0x9F, 0x02},
+         16, 0},
+        {0xEF, (uint8_t[]) {0x10, 0x0D, 0x04, 0x08, 0x3F, 0x1F}, 6, 0},
+
+        // 退出睡眠模式和开启显示的命令保持不变
+        {0x11, (uint8_t[]) {0x00}, 0, 120}, // Sleep Out
+        {0x29, (uint8_t[]) {0x00}, 0, 0},   // Display On
+#endif
+};
+
+
+static void spi_soft_init(void) {
+    gpio_config_t io_conf1 = {
+            .mode = GPIO_MODE_OUTPUT,
+            .pin_bit_mask = 1ULL << LCD_IO_SPI_CS,
+    };
+    gpio_config(&io_conf1);
+    gpio_set_level(LCD_IO_SPI_CS, 1);
+
+    gpio_config_t io_conf2 = {
+            .mode = GPIO_MODE_OUTPUT,
+            .pin_bit_mask = 1ULL << LCD_IO_SPI_SCL,
+    };
+    gpio_config(&io_conf2);
+    gpio_set_level(LCD_IO_SPI_SCL, 1);
+
+    gpio_config_t io_conf3 = {
+            .mode = GPIO_MODE_OUTPUT,
+            .pin_bit_mask = 1ULL << LCD_IO_SPI_SDA,
+    };
+    gpio_config(&io_conf3);
+    gpio_set_level(LCD_IO_SPI_SDA, 1);
+}
+
+static void spi_soft_write_9bits(uint16_t data) {
+    uint8_t i;
+    LCD_CS_Clr();
+    for (i = 0; i < 9; i++) {
+        LCD_SCK_Clr();
+        if (data & 0x100) LCD_SDA_Set();
+        else
+            LCD_SDA_Clr();
+        LCD_SCK_Set();
+        data <<= 1;
+    }
+    LCD_CS_Set();;
+}
+
+static void st7701_write_cmd(uint8_t cmd) {
+    uint16_t temp = 0;
+    temp = temp | cmd;
+    spi_soft_write_9bits(temp);
+}
+
+static void st7701_write_data(uint8_t data) {
+    uint16_t temp = 0x100;
+    temp = temp | data;
+    spi_soft_write_9bits(temp);
+}
+
+
+IRAM_ATTR static bool
+rgb_lcd_on_vsync_event(esp_lcd_panel_handle_t panel, const esp_lcd_rgb_panel_event_data_t *edata, void *user_ctx) {
+    // 最小化中断处理时间
+    return lvgl_port_notify_rgb_vsync();
+}
+
+esp_err_t lcd_st7701_init(void) {
+
+    // 配置背光GPIO
+    // if (PIN_NUM_BK_LIGHT >= 0) {
+    //     gpio_config_t bk_gpio_config = {
+    //             .mode = GPIO_MODE_OUTPUT,
+    //             .pin_bit_mask = 1ULL << PIN_NUM_BK_LIGHT};
+    //     ESP_ERROR_CHECK(gpio_config(&bk_gpio_config));
+    // }
+
+    // 安装3线SPI面板IO
+    ESP_LOGI(TAG, "Install 3-wire SPI panel IO");
+    spi_line_config_t line_config = {
+            .cs_io_type = IO_TYPE_GPIO,
+            .cs_gpio_num = LCD_IO_SPI_CS,
+            .scl_io_type = IO_TYPE_GPIO,
+            .scl_gpio_num = LCD_IO_SPI_SCL,
+            .sda_io_type = IO_TYPE_GPIO,
+            .sda_gpio_num = LCD_IO_SPI_SDA,
+            .io_expander = NULL,
+    };
+    esp_lcd_panel_io_3wire_spi_config_t io_config = ST7701_PANEL_IO_3WIRE_SPI_CONFIG(line_config, 0);
+    esp_lcd_panel_io_handle_t io_handle = NULL;
+    ESP_ERROR_CHECK(esp_lcd_new_panel_io_3wire_spi(&io_config, &io_handle));
+    for (int i = 0; i < sizeof(lcd_init_cmds) / sizeof(lcd_init_cmds[0]); i++) {
+        st7701_write_cmd(lcd_init_cmds[i].cmd);
+        for (int n = 0; n < lcd_init_cmds[i].data_bytes; n++) {
+            st7701_write_data(((uint8_t *) lcd_init_cmds[i].data)[n]);
+        }
+        vTaskDelay(pdMS_TO_TICKS(lcd_init_cmds[i].delay_ms));
+    }
+    // 安装RGB面板
+    ESP_LOGI(TAG, "Install ST7701 panel driver");
+    esp_lcd_panel_handle_t lcd_handle = NULL;
+    esp_lcd_rgb_panel_config_t rgb_config = {
+            .clk_src = LCD_CLK_SRC_DEFAULT,
+            .psram_trans_align = 64,
+            .data_width = RGB_DATA_WIDTH,
+            .bits_per_pixel = RGB_BIT_PER_PIXEL,
+            .de_gpio_num = LCD_IO_RGB_DE,
+            .pclk_gpio_num = LCD_IO_RGB_PCLK,
+            .vsync_gpio_num = LCD_IO_RGB_VSYNC,
+            .hsync_gpio_num = LCD_IO_RGB_HSYNC,
+            .disp_gpio_num = LCD_IO_RGB_DISP,
+            .data_gpio_nums = {
+                    LCD_IO_RGB_DATA0,
+                    LCD_IO_RGB_DATA1,
+                    LCD_IO_RGB_DATA2,
+                    LCD_IO_RGB_DATA3,
+                    LCD_IO_RGB_DATA4,
+                    LCD_IO_RGB_DATA5,
+                    LCD_IO_RGB_DATA6,
+                    LCD_IO_RGB_DATA7,
+                    LCD_IO_RGB_DATA8,
+                    LCD_IO_RGB_DATA9,
+                    LCD_IO_RGB_DATA10,
+                    LCD_IO_RGB_DATA11,
+                    LCD_IO_RGB_DATA12,
+                    LCD_IO_RGB_DATA13,
+                    LCD_IO_RGB_DATA14,
+                    LCD_IO_RGB_DATA15,
+            },
+            .timings = ST7701_480_480_PANEL_60HZ_RGB_TIMING(),
+            .flags.fb_in_psram = 1,
+            .num_fbs = LVGL_PORT_LCD_RGB_BUFFER_NUMS,
+            .bounce_buffer_size_px = RGB_BOUNCE_BUFFER_SIZE,
+    };
+    rgb_config.timings.h_res = LCD_H_RES;
+    rgb_config.timings.v_res = LCD_V_RES;
+
+    st7701_vendor_config_t vendor_config = {
+            .rgb_config = &rgb_config,
+            .init_cmds = lcd_init_cmds,
+            .init_cmds_size = sizeof(lcd_init_cmds) / sizeof(lcd_init_cmds[0]),
+            .flags = {
+                    .auto_del_panel_io = 0,
+                    .mirror_by_cmd = 1,
+            },
+    };
+
+    const esp_lcd_panel_dev_config_t panel_config = {
+            .reset_gpio_num = LCD_IO_RST,
+            .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB,
+            .bits_per_pixel = LCD_BIT_PER_PIXEL,
+            .vendor_config = &vendor_config,
+    };
+
+    ESP_ERROR_CHECK(esp_lcd_new_panel_st7701(io_handle, &panel_config, &lcd_handle));
+    ESP_ERROR_CHECK(esp_lcd_panel_reset(lcd_handle));
+    ESP_ERROR_CHECK(esp_lcd_panel_init(lcd_handle));
+    esp_lcd_panel_disp_on_off(lcd_handle, true);
+
+
+    // 初始化I2C
+    ESP_LOGI(TAG, "Initialize I2C");
+    const i2c_config_t i2c_conf = {
+            .mode = I2C_MODE_MASTER,
+            .sda_io_num = PIN_NUM_TOUCH_SDA,
+            .scl_io_num = PIN_NUM_TOUCH_SCL,
+            .sda_pullup_en = GPIO_PULLUP_ENABLE,
+            .scl_pullup_en = GPIO_PULLUP_ENABLE,
+            .master.clk_speed = 400000,
+    };
+    ESP_ERROR_CHECK(i2c_param_config(TOUCH_HOST, &i2c_conf));
+    ESP_ERROR_CHECK(i2c_driver_install(TOUCH_HOST, i2c_conf.mode, 0, 0, 0));
+
+    // 初始化触摸控制器
+#ifdef SCREEN_FACTORY_HM
+    ESP_LOGI(TAG, "Initialize touch controller GT911");
+    esp_lcd_panel_io_handle_t tp_io_handle = NULL;
+    esp_lcd_panel_io_i2c_config_t tp_io_config = ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG();
+    ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c((esp_lcd_i2c_bus_handle_t) TOUCH_HOST, &tp_io_config, &tp_io_handle));
+#endif
+#ifdef SCREEN_FACTORY_YY
+    ESP_LOGI(TAG, "Initialize touch controller FT5x06");
+    esp_lcd_panel_io_handle_t tp_io_handle = NULL;
+    esp_lcd_panel_io_i2c_config_t tp_io_config = {
+            .dev_addr = ESP_LCD_TOUCH_IO_I2C_FT5x06_ADDRESS,
+            .control_phase_bytes = 1,
+            .dc_bit_offset = 0,
+            .lcd_cmd_bits = 8,
+            .flags = {
+                    .disable_control_phase = 1,
+            }};
+    ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c((esp_lcd_i2c_bus_handle_t) TOUCH_HOST, &tp_io_config, &tp_io_handle));
+
+#endif
+
+    esp_lcd_touch_config_t tp_cfg = {
+            .x_max = LCD_H_RES,
+            .y_max = LCD_V_RES,
+            .rst_gpio_num = PIN_NUM_TOUCH_RST,
+            .int_gpio_num = PIN_NUM_TOUCH_INT,
+            .levels = {
+                    .reset = 0,
+                    .interrupt = 0,
+            },
+            .flags = {
+                    .swap_xy = 0,
+                    .mirror_x = 0,
+                    .mirror_y = 0,
+            },
+    };
+
+    ESP_LOGI(TAG, "Create touch handle");
+    esp_lcd_touch_handle_t tp = NULL;
+#ifdef SCREEN_FACTORY_HM
+    ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, &tp));
+#endif
+#ifdef SCREEN_FACTORY_YY
+    ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_ft5x06(tp_io_handle, &tp_cfg, &tp));
+#endif
+    assert(tp != NULL);
+    // 初始化LVGL
+    ESP_ERROR_CHECK(lvgl_port_init(lcd_handle, tp));
+
+    // 注册RGB面板事件回调
+    esp_lcd_rgb_panel_event_callbacks_t cbs = {
+#if RGB_BOUNCE_BUFFER_SIZE > 0
+            .on_bounce_frame_finish = rgb_lcd_on_vsync_event,
+#else
+            .on_vsync = rgb_lcd_on_vsync_event,
+#endif
+    };
+    esp_lcd_rgb_panel_register_event_callbacks(lcd_handle, &cbs, NULL);
+
+    return ESP_OK;
+}
+
+esp_err_t lcd_st7701_backlight_on(void) {
+    if (PIN_NUM_BK_LIGHT >= 0) {
+        st7701_write_cmd(0x11);
+        vTaskDelay(120);
+        st7701_write_cmd(0x29);
+        ESP_LOGE(TAG, "Turn on LCD backlight");
+        backlight_status = true;
+        return hc595_gpio_write(PIN_NUM_BK_LIGHT, LCD_BK_LIGHT_ON_LEVEL);
+    }
+    return ESP_OK;
+}
+
+bool lcd_st7701_get_blacklight() {
+    return backlight_status;
+}
+esp_err_t lcd_st7701_backlight_off(void) {
+    if (PIN_NUM_BK_LIGHT >= 0) {
+        st7701_write_cmd(0x10);
+        vTaskDelay(120);
+        st7701_write_cmd(0x28);
+        ESP_LOGE(TAG, "Turn off LCD backlight");
+        backlight_status = false;
+        return hc595_gpio_write(PIN_NUM_BK_LIGHT, LCD_BK_LIGHT_OFF_LEVEL);
+    }
+    return ESP_OK;
+}

+ 581 - 0
main/lvgl_port.c

@@ -0,0 +1,581 @@
+/*
+ * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/semphr.h"
+#include "freertos/task.h"
+#include "esp_lcd_panel_ops.h"
+#include "esp_lcd_panel_rgb.h"
+#include "esp_lcd_touch.h"
+#include "esp_timer.h"
+#include "esp_log.h"
+#include "lvgl.h"
+#include "lvgl_port.h"
+#include "beep.h"
+#include "setting.h"
+
+static const char *TAG = "lv_port";
+static SemaphoreHandle_t lvgl_mux; // LVGL 互斥锁
+static TaskHandle_t lvgl_task_handle = NULL;
+static bool isPressed = false;
+static bool isReleased = false;
+
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE != 0
+static void *get_next_frame_buffer(esp_lcd_panel_handle_t panel_handle)
+{
+    static void *next_fb = NULL;
+    static void *fb[2] = {NULL};
+    if (next_fb == NULL)
+    {
+        ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &fb[0], &fb[1])); // 获取双缓冲区
+        next_fb = fb[1];
+    }
+    else
+    {
+        next_fb = (next_fb == fb[0]) ? fb[1] : fb[0]; // 切换缓冲区
+    }
+    return next_fb;
+}
+
+IRAM_ATTR static void rotate_copy_pixel(const uint16_t *from, uint16_t *to, uint16_t x_start, uint16_t y_start, uint16_t x_end, uint16_t y_end, uint16_t w, uint16_t h, uint16_t rotation)
+{
+    int from_index = 0;
+
+    int to_index = 0;
+    int to_index_const = 0;
+
+    switch (rotation)
+    {
+    case 90:
+        to_index_const = (w - x_start - 1) * h;
+        for (int from_y = y_start; from_y < y_end + 1; from_y++)
+        {
+            from_index = from_y * w + x_start;
+            to_index = to_index_const + from_y;
+            for (int from_x = x_start; from_x < x_end + 1; from_x++)
+            {
+                *(to + to_index) = *(from + from_index);
+                from_index += 1;
+                to_index -= h;
+            }
+        }
+        break;
+    case 180:
+        to_index_const = h * w - x_start - 1;
+        for (int from_y = y_start; from_y < y_end + 1; from_y++)
+        {
+            from_index = from_y * w + x_start;
+            to_index = to_index_const - from_y * w;
+            for (int from_x = x_start; from_x < x_end + 1; from_x++)
+            {
+                *(to + to_index) = *(from + from_index);
+                from_index += 1;
+                to_index -= 1;
+            }
+        }
+        break;
+    case 270:
+        to_index_const = (x_start + 1) * h - 1;
+        for (int from_y = y_start; from_y < y_end + 1; from_y++)
+        {
+            from_index = from_y * w + x_start;
+            to_index = to_index_const - from_y;
+            for (int from_x = x_start; from_x < x_end + 1; from_x++)
+            {
+                *(to + to_index) = *(from + from_index);
+                from_index += 1;
+                to_index += h;
+            }
+        }
+        break;
+    default:
+        break;
+    }
+}
+#endif /* EXAMPLE_LVGL_PORT_ROTATION_DEGREE */
+
+#if LVGL_PORT_AVOID_TEAR_ENABLE
+#if LVGL_PORT_DIRECT_MODE
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE != 0
+typedef struct
+{
+    uint16_t inv_p;
+    uint8_t inv_area_joined[LV_INV_BUF_SIZE];
+    lv_area_t inv_areas[LV_INV_BUF_SIZE];
+} lv_port_dirty_area_t;
+
+typedef enum
+{
+    FLUSH_STATUS_PART,
+    FLUSH_STATUS_FULL
+} lv_port_flush_status_t;
+
+typedef enum
+{
+    FLUSH_PROBE_PART_COPY,
+    FLUSH_PROBE_SKIP_COPY,
+    FLUSH_PROBE_FULL_COPY,
+} lv_port_flush_probe_t;
+
+static lv_port_dirty_area_t dirty_area;
+
+static void flush_dirty_save(lv_port_dirty_area_t *dirty_area)
+{
+    lv_disp_t *disp = _lv_refr_get_disp_refreshing(); // 获取正在刷新的显示设备
+    dirty_area->inv_p = disp->inv_p;                  // 保存无效区域的数量
+    for (int i = 0; i < disp->inv_p; i++)
+    {
+        dirty_area->inv_area_joined[i] = disp->inv_area_joined[i]; // 保存无效区域的合并状态
+        dirty_area->inv_areas[i] = disp->inv_areas[i];             // 保存无效区域的信息
+    }
+}
+
+/**
+ * @brief 探测无效区域以进行复制
+ *
+ * @note 此函数用于避免撕裂效果,仅在 LVGL 直接模式下有效。
+ *
+ */
+static lv_port_flush_probe_t flush_copy_probe(lv_disp_drv_t *drv)
+{
+    static lv_port_flush_status_t prev_status = FLUSH_STATUS_PART;
+    lv_port_flush_status_t cur_status;
+    lv_port_flush_probe_t probe_result;
+    lv_disp_t *disp_refr = _lv_refr_get_disp_refreshing(); // 获取正在刷新的显示设备
+
+    uint32_t flush_ver = 0;
+    uint32_t flush_hor = 0;
+    for (int i = 0; i < disp_refr->inv_p; i++)
+    {
+        if (disp_refr->inv_area_joined[i] == 0)
+        {
+            flush_ver = (disp_refr->inv_areas[i].y2 + 1 - disp_refr->inv_areas[i].y1); // 计算垂直方向的刷新长度
+            flush_hor = (disp_refr->inv_areas[i].x2 + 1 - disp_refr->inv_areas[i].x1); // 计算水平方向的刷新长度
+            break;
+        }
+    }
+    /* 检查当前是否为全屏刷新 */
+    cur_status = ((flush_ver == drv->ver_res) && (flush_hor == drv->hor_res)) ? (FLUSH_STATUS_FULL) : (FLUSH_STATUS_PART);
+
+    if (prev_status == FLUSH_STATUS_FULL)
+    {
+        if ((cur_status == FLUSH_STATUS_PART))
+        {
+            probe_result = FLUSH_PROBE_FULL_COPY; // 上次是全屏刷新,本次是部分刷新,需要复制整个屏幕
+        }
+        else
+        {
+            probe_result = FLUSH_PROBE_SKIP_COPY; // 上次和本次都是全屏刷新,跳过复制
+        }
+    }
+    else
+    {
+        probe_result = FLUSH_PROBE_PART_COPY; // 上次是部分刷新,本次也是部分刷新,只复制部分区域
+    }
+    prev_status = cur_status;
+
+    return probe_result;
+}
+
+static inline void *flush_get_next_buf(void *panel_handle)
+{
+    return get_next_frame_buffer(panel_handle); // 获取下一个帧缓冲区
+}
+
+/**
+ * @brief 复制无效区域
+ *
+ * @note 此函数用于避免撕裂效果,仅在 LVGL 直接模式下有效。
+ *
+ */
+static void flush_dirty_copy(void *dst, void *src, lv_port_dirty_area_t *dirty_area)
+{
+    lv_coord_t x_start, x_end, y_start, y_end;
+    for (int i = 0; i < dirty_area->inv_p; i++)
+    {
+        /* 刷新未合并的区域 */
+        if (dirty_area->inv_area_joined[i] == 0)
+        {
+            x_start = dirty_area->inv_areas[i].x1;
+            x_end = dirty_area->inv_areas[i].x2;
+            y_start = dirty_area->inv_areas[i].y1;
+            y_end = dirty_area->inv_areas[i].y2;
+
+            rotate_copy_pixel(src, dst, x_start, y_start, x_end, y_end, LV_HOR_RES, LV_VER_RES, EXAMPLE_LVGL_PORT_ROTATION_DEGREE);
+        }
+    }
+}
+
+static void flush_callback(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map)
+{
+    esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)drv->user_data;
+    const int offsetx1 = area->x1;
+    const int offsetx2 = area->x2;
+    const int offsety1 = area->y1;
+    const int offsety2 = area->y2;
+    void *next_fb = NULL;
+    lv_port_flush_probe_t probe_result = FLUSH_PROBE_PART_COPY;
+    lv_disp_t *disp = lv_disp_get_default();
+
+    /* 最后一个区域刷新后的操作 */
+    if (lv_disp_flush_is_last(drv))
+    {
+        /* 检查是否触发了 `full_refresh` 标志 */
+        if (drv->full_refresh)
+        {
+            /* 重置标志 */
+            drv->full_refresh = 0;
+
+            // 将整个屏幕的 LVGL 缓冲区数据旋转并复制到下一个帧缓冲区
+            next_fb = flush_get_next_buf(panel_handle);
+            rotate_copy_pixel((uint16_t *)color_map, next_fb, offsetx1, offsety1, offsetx2, offsety2, LV_HOR_RES, LV_VER_RES, EXAMPLE_LVGL_PORT_ROTATION_DEGREE);
+
+            /* 将当前 RGB 帧缓冲区切换到 `next_fb` */
+            esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, next_fb);
+
+            /* 等待当前帧缓冲区传输完成 */
+            ulTaskNotifyValueClear(NULL, ULONG_MAX);
+            ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
+
+            /* 异步更新另一个帧缓冲区的无效区域 */
+            flush_dirty_copy(flush_get_next_buf(panel_handle), color_map, &dirty_area);
+            flush_get_next_buf(panel_handle);
+        }
+        else
+        {
+            /* 探测当前无效区域的复制方法 */
+            probe_result = flush_copy_probe(drv);
+
+            if (probe_result == FLUSH_PROBE_FULL_COPY)
+            {
+                /* 保存当前无效区域以供下一个帧缓冲区使用 */
+                flush_dirty_save(&dirty_area);
+
+                /* 设置 LVGL 全刷新标志并提前设置刷新准备好 */
+                drv->full_refresh = 1;
+                disp->rendering_in_progress = false;
+                lv_disp_flush_ready(drv);
+
+                /* 强制刷新整个屏幕,将递归调用 `flush_callback` */
+                lv_refr_now(_lv_refr_get_disp_refreshing());
+            }
+            else
+            {
+                /* 更新当前无效区域以供下一个帧缓冲区使用 */
+                next_fb = flush_get_next_buf(panel_handle);
+                flush_dirty_save(&dirty_area);
+                flush_dirty_copy(next_fb, color_map, &dirty_area);
+
+                /* 将当前 RGB 帧缓冲区切换到 `next_fb` */
+                esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, next_fb);
+
+                /* 等待当前帧缓冲区传输完成 */
+                ulTaskNotifyValueClear(NULL, ULONG_MAX);
+                ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
+
+                if (probe_result == FLUSH_PROBE_PART_COPY)
+                {
+                    /* 异步更新另一个帧缓冲区的无效区域 */
+                    flush_dirty_save(&dirty_area);
+                    flush_dirty_copy(flush_get_next_buf(panel_handle), color_map, &dirty_area);
+                    flush_get_next_buf(panel_handle);
+                }
+            }
+        }
+    }
+
+    lv_disp_flush_ready(drv);
+}
+#endif
+
+#elif LVGL_PORT_FULL_REFRESH && LVGL_PORT_LCD_RGB_BUFFER_NUMS == 3
+
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 0
+static void *lvgl_port_rgb_last_buf = NULL;
+static void *lvgl_port_rgb_next_buf = NULL;
+static void *lvgl_port_flush_next_buf = NULL;
+#endif
+
+void flush_callback(lv_disp_drv_t *drv, const lv_area_t *area, lv_color_t *color_map)
+{
+    esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)drv->user_data;
+    const int offsetx1 = area->x1;
+    const int offsetx2 = area->x2;
+    const int offsety1 = area->y1;
+    const int offsety2 = area->y2;
+
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE != 0
+    void *next_fb = get_next_frame_buffer(panel_handle);
+
+    /* 将当前 LVGL 缓冲区中的无效区域旋转并复制到下一个 RGB 帧缓冲区 */
+    rotate_copy_pixel((uint16_t *)color_map, next_fb, offsetx1, offsety1, offsetx2, offsety2, LV_HOR_RES, LV_VER_RES, EXAMPLE_LVGL_PORT_ROTATION_DEGREE);
+
+    /* 将当前 RGB 帧缓冲区切换到 `next_fb` */
+    esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, next_fb);
+#else
+    drv->draw_buf->buf1 = color_map;
+    drv->draw_buf->buf2 = lvgl_port_flush_next_buf;
+    lvgl_port_flush_next_buf = color_map;
+
+    /* 将当前 RGB 帧缓冲区切换到 `color_map` */
+    esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, color_map);
+
+    lvgl_port_rgb_next_buf = color_map;
+#endif
+
+    lv_disp_flush_ready(drv);
+}
+#endif
+
+#else
+
+static void flush_callback(lv_display_t *disp, const lv_area_t *area, uint8_t *px_map)
+{
+    esp_lcd_panel_handle_t panel_handle = (esp_lcd_panel_handle_t)lv_display_get_user_data(disp);
+    const int offsetx1 = area->x1;
+    const int offsetx2 = area->x2;
+    const int offsety1 = area->y1;
+    const int offsety2 = area->y2;
+
+    /* 将颜色映射中的数据直接复制到 RGB 帧缓冲区 */
+    esp_lcd_panel_draw_bitmap(panel_handle, offsetx1, offsety1, offsetx2 + 1, offsety2 + 1, px_map);
+
+    lv_display_flush_ready(disp);
+}
+
+#endif /* LVGL_PORT_AVOID_TEAR_ENABLE */
+
+static lv_display_t *display_init(esp_lcd_panel_handle_t panel_handle)
+{
+
+    assert(panel_handle);
+
+    ESP_LOGD(TAG, "为 LVGL 缓冲区分配内存");
+
+    // 分配 LVGL 使用的绘图缓冲区
+    void *buf1 = NULL;
+    void *buf2 = NULL;
+    int buffer_size = 0;
+
+#if LVGL_PORT_AVOID_TEAR_ENABLE
+    // 为了避免撕裂效果,我们应该至少使用两个帧缓冲区:一个用于 LVGL 渲染,另一个用于 RGB 输出
+    buffer_size = LVGL_PORT_H_RES * LVGL_PORT_V_RES;
+#if (LVGL_PORT_LCD_RGB_BUFFER_NUMS == 3) && (EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 0) && LVGL_PORT_FULL_REFRESH
+    // 使用三个缓冲区和全刷新,我们总是有一个缓冲区可用于渲染,消除了等待 RGB 同步信号的需要
+    ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 3, &lvgl_port_rgb_last_buf, &buf1, &buf2));
+    lvgl_port_rgb_next_buf = lvgl_port_rgb_last_buf;
+    lvgl_port_flush_next_buf = buf2;
+#elif (LVGL_PORT_LCD_RGB_BUFFER_NUMS == 3) && (EXAMPLE_LVGL_PORT_ROTATION_DEGREE != 0)
+    // 这里我们使用三个帧缓冲区,一个用于 LVGL 渲染,另外两个用于 RGB 驱动(其中一个用于旋转)
+    void *fbs[3];
+    ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 3, &fbs[0], &fbs[1], &fbs[2]));
+    buf1 = fbs[2];
+#else
+    ESP_ERROR_CHECK(esp_lcd_rgb_panel_get_frame_buffer(panel_handle, 2, &buf1, &buf2));
+#endif
+#else
+    buffer_size = LVGL_PORT_H_RES * LVGL_PORT_BUFFER_HEIGHT;
+    buf1 = heap_caps_malloc(buffer_size * sizeof(lv_color_t), MALLOC_CAP_SPIRAM);
+    assert(buf1);
+    ESP_LOGI(TAG, "LVGL 缓冲区大小: %dKB", buffer_size * sizeof(lv_color_t) / 1024);
+#endif
+
+    // 创建显示设备
+    lv_display_t *disp = lv_display_create(LVGL_PORT_H_RES, LVGL_PORT_V_RES);
+    if (!disp)
+    {
+        ESP_LOGE(TAG, "创建显示设备失败");
+        return NULL;
+    }
+
+    // 设置显示缓冲区
+    lv_display_set_buffers(disp, buf1, buf2, buffer_size * sizeof(lv_color_t), LV_DISPLAY_RENDER_MODE_PARTIAL);
+
+    // 设置显示回调
+    lv_display_set_flush_cb(disp, flush_callback);
+
+    // 设置用户数据
+    lv_display_set_user_data(disp, panel_handle);
+
+#if LVGL_PORT_FULL_REFRESH
+    lv_display_set_render_mode(disp, LV_DISPLAY_RENDER_MODE_FULL);
+#elif LVGL_PORT_DIRECT_MODE
+    lv_display_set_render_mode(disp, LV_DISPLAY_RENDER_MODE_DIRECT);
+#endif
+
+    return disp;
+}
+
+static void touchpad_read(lv_indev_t *indev, lv_indev_data_t *data)
+{
+    esp_lcd_touch_handle_t tp = (esp_lcd_touch_handle_t)lv_indev_get_user_data(indev);
+    assert(tp);
+
+    uint16_t touchpad_x;
+    uint16_t touchpad_y;
+    uint8_t touchpad_cnt = 0;
+
+    esp_lcd_touch_read_data(tp);
+
+    bool touchpad_pressed = esp_lcd_touch_get_coordinates(tp, &touchpad_x, &touchpad_y, NULL, &touchpad_cnt, 1);
+    if (touchpad_pressed && touchpad_cnt > 0)
+    {
+        data->point.x = touchpad_x;
+        data->point.y = touchpad_y;
+        data->state = LV_INDEV_STATE_PRESSED;
+        if(!isReleased && !isPressed)
+        {
+            beep();
+            if(reset_screen_off()) {
+                data->continue_reading = true;
+                return;
+            }
+            isPressed = true;
+        }
+    }
+    else
+    {
+        if(isPressed) {
+            isReleased = false;
+            isPressed = false;
+        }
+        beep_stop();
+        data->state = LV_INDEV_STATE_RELEASED;
+    }
+}
+
+static lv_indev_t *indev_init(esp_lcd_touch_handle_t tp)
+{
+    assert(tp);
+
+    // 创建输入设备
+    lv_indev_t *indev = lv_indev_create();
+    if (!indev)
+    {
+        ESP_LOGE(TAG, "创建输入设备失败");
+        return NULL;
+    }
+
+    // 设置输入设备属性
+    lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);
+    lv_indev_set_read_cb(indev, touchpad_read);
+    lv_indev_set_user_data(indev, tp);
+
+    return indev;
+}
+
+static void tick_increment(void *arg)
+{
+    /* 告诉 LVGL 已经过去了多少毫秒 */
+    lv_tick_inc(LVGL_PORT_TICK_PERIOD_MS);
+}
+
+static esp_err_t tick_init(void)
+{
+    // LVGL 的 Tick 接口(使用 esp_timer 生成 2ms 周期事件)
+    const esp_timer_create_args_t lvgl_tick_timer_args = {
+        .callback = &tick_increment,
+        .name = "LVGL tick"};
+    esp_timer_handle_t lvgl_tick_timer = NULL;
+    ESP_ERROR_CHECK(esp_timer_create(&lvgl_tick_timer_args, &lvgl_tick_timer));
+    return esp_timer_start_periodic(lvgl_tick_timer, LVGL_PORT_TICK_PERIOD_MS * 1000);
+}
+
+static void lvgl_port_task(void *arg)
+{
+    ESP_LOGD(TAG, "启动 LVGL 任务");
+
+    uint32_t task_delay_ms = LVGL_PORT_TASK_MAX_DELAY_MS;
+    while (1)
+    {
+        // 使用 FreeRTOS 的任务切换机制,提高效率
+        if (lvgl_port_lock(0))
+        {
+            task_delay_ms = lv_timer_handler();
+            lvgl_port_unlock();
+        }
+        if (task_delay_ms > LVGL_PORT_TASK_MAX_DELAY_MS)
+        {
+            task_delay_ms = LVGL_PORT_TASK_MAX_DELAY_MS;
+        }
+        else if (task_delay_ms < LVGL_PORT_TASK_MIN_DELAY_MS)
+        {
+            task_delay_ms = LVGL_PORT_TASK_MIN_DELAY_MS;
+        }
+        // 使用 vTaskDelay 函数,而不是直接使用延时函数,提高效率
+        vTaskDelay(pdMS_TO_TICKS(task_delay_ms));
+    }
+}
+
+esp_err_t lvgl_port_init(esp_lcd_panel_handle_t lcd_handle, esp_lcd_touch_handle_t tp_handle)
+{
+    lv_init();
+    ESP_ERROR_CHECK(tick_init());
+
+    lv_disp_t *disp = display_init(lcd_handle);
+    assert(disp);
+
+    if (tp_handle)
+    {
+        lv_indev_t *indev = indev_init(tp_handle);
+        assert(indev);
+#if EXAMPLE_LVGL_PORT_ROTATION_90
+        esp_lcd_touch_set_swap_xy(tp_handle, true);
+        esp_lcd_touch_set_mirror_y(tp_handle, true);
+#elif EXAMPLE_LVGL_PORT_ROTATION_180
+        esp_lcd_touch_set_mirror_x(tp_handle, true);
+        esp_lcd_touch_set_mirror_y(tp_handle, true);
+#elif EXAMPLE_LVGL_PORT_ROTATION_270
+        esp_lcd_touch_set_swap_xy(tp_handle, true);
+        esp_lcd_touch_set_mirror_x(tp_handle, true);
+#endif
+    }
+
+    lvgl_mux = xSemaphoreCreateRecursiveMutex();
+    assert(lvgl_mux);
+
+    ESP_LOGI(TAG, "创建 LVGL 任务");
+    BaseType_t core_id = (LVGL_PORT_TASK_CORE < 0) ? tskNO_AFFINITY : LVGL_PORT_TASK_CORE;
+    BaseType_t ret = xTaskCreatePinnedToCore(lvgl_port_task, "lvgl", LVGL_PORT_TASK_STACK_SIZE, NULL,
+                                             LVGL_PORT_TASK_PRIORITY, &lvgl_task_handle, core_id);
+    if (ret != pdPASS)
+    {
+        ESP_LOGE(TAG, "创建 LVGL 任务失败");
+        return ESP_FAIL;
+    }
+
+    return ESP_OK;
+}
+
+bool lvgl_port_lock(int timeout_ms)
+{
+    assert(lvgl_mux && "必须先调用 lvgl_port_init");
+
+    const TickType_t timeout_ticks = (timeout_ms < 0) ? portMAX_DELAY : pdMS_TO_TICKS(timeout_ms);
+    return xSemaphoreTakeRecursive(lvgl_mux, timeout_ticks) == pdTRUE;
+}
+
+void lvgl_port_unlock(void)
+{
+    assert(lvgl_mux && "必须先调用 lvgl_port_init");
+    xSemaphoreGiveRecursive(lvgl_mux);
+}
+
+bool lvgl_port_notify_rgb_vsync(void)
+{
+    BaseType_t need_yield = pdFALSE;
+#if LVGL_PORT_FULL_REFRESH && (LVGL_PORT_LCD_RGB_BUFFER_NUMS == 3) && (EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 0)
+    if (lvgl_port_rgb_next_buf != lvgl_port_rgb_last_buf)
+    {
+        lvgl_port_flush_next_buf = lvgl_port_rgb_last_buf;
+        lvgl_port_rgb_last_buf = lvgl_port_rgb_next_buf;
+    }
+#elif LVGL_PORT_AVOID_TEAR_ENABLE
+    // 通知当前 RGB 帧缓冲区已传输完毕
+    xTaskNotifyFromISR(lvgl_task_handle, ULONG_MAX, eNoAction, &need_yield);
+#endif
+    return (need_yield == pdTRUE);
+}

+ 164 - 0
main/lvgl_port.h

@@ -0,0 +1,164 @@
+/*
+ * SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#pragma once
+
+#include <stdint.h>
+
+#include "esp_err.h"
+#include "esp_lcd_types.h"
+#include "esp_lcd_touch.h"
+#include "lvgl.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/**
+ * LVGL 相关参数,用户可以根据需求调整
+ *
+ */
+#define LVGL_PORT_H_RES (480)                                    // 水平分辨率
+#define LVGL_PORT_V_RES (480)                                    // 垂直分辨率
+#define LVGL_PORT_TICK_PERIOD_MS (2) // LVGL 定时器周期,单位毫秒
+
+// 对齐内存访问
+#define LVGL_PORT_MEM_ALIGNMENT 32
+#define LVGL_PORT_DMA_BURST_SIZE 32
+
+/**
+ * LVGL 定时器任务相关参数,用户可以根据需求调整
+ *
+ */
+#define LVGL_PORT_TASK_MAX_DELAY_MS (500)       // LVGL 定时器任务的最大延迟,单位毫秒
+#define LVGL_PORT_TASK_MIN_DELAY_MS (10)       // LVGL 定时器任务的最小延迟,单位毫秒
+#define LVGL_PORT_TASK_STACK_SIZE (8 * 2048) // LVGL 定时器任务的栈大小,单位字节
+#define LVGL_PORT_TASK_PRIORITY (2)               // LVGL 定时器任务的优先级
+#define LVGL_PORT_TASK_CORE (-1)                       // LVGL 定时器任务的核心编号,-1 表示不指定核心
+
+/**
+ * LVGL 缓冲区相关参数,用户可以根据需求调整:
+ *  (如果启用了避免撕裂功能,这些参数将无效)
+ *
+ *  - 缓冲区分配的内存类型:
+ *      - MALLOC_CAP_SPIRAM: 在 PSRAM 中分配 LVGL 缓冲区
+ *      - MALLOC_CAP_INTERNAL: 在 SRAM 中分配 LVGL 缓冲区
+ *      (SRAM 比 PSRAM 快,但 PSRAM 容量更大)
+ *
+ */
+//#if CONFIG_EXAMPLE_LVGL_PORT_BUF_PSRAM
+//#define LVGL_PORT_BUFFER_MALLOC_CAPS (MALLOC_CAP_SPIRAM)
+//#elif CONFIG_EXAMPLE_LVGL_PORT_BUF_INTERNAL
+#define LVGL_PORT_BUFFER_MALLOC_CAPS (MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT)
+//#endif
+#define LVGL_PORT_BUFFER_HEIGHT (480) // 缓冲区高度
+
+/**
+ * 避免撕裂相关配置,用户可以根据需求调整。
+ *
+ */
+#define LVGL_PORT_AVOID_TEAR_ENABLE (CONFIG_EXAMPLE_LVGL_PORT_AVOID_TEAR_ENABLE) // 启用避免撕裂功能,设置为 1 启用
+#if LVGL_PORT_AVOID_TEAR_ENABLE
+/**
+ * 设置避免撕裂模式:
+ *      - 0: 禁用避免撕裂功能
+ *      - 1: LCD 双缓冲 & LVGL 全刷新
+ *      - 2: LCD 三缓冲 & LVGL 全刷新
+ *      - 3: LCD 双缓冲 & LVGL 直接模式(推荐)
+ *
+ */
+#define LVGL_PORT_AVOID_TEAR_MODE (CONFIG_EXAMPLE_LVGL_PORT_AVOID_TEAR_MODE)
+
+/**
+ * 设置启用避免撕裂功能时 LCD 面板的旋转角度:
+ *      - 0: 0 度
+ *      - 90: 90 度
+ *      - 180: 180 度
+ *      - 270: 270 度
+ *
+ */
+#define EXAMPLE_LVGL_PORT_ROTATION_DEGREE (CONFIG_EXAMPLE_LVGL_PORT_ROTATION_DEGREE)
+
+/**
+ * 以下配置根据上述配置自动设置,用户不需要修改它们。
+ *
+ */
+#if LVGL_PORT_AVOID_TEAR_MODE == 1
+#define LVGL_PORT_LCD_RGB_BUFFER_NUMS (2) // LCD 缓冲区数量
+#define LVGL_PORT_FULL_REFRESH (1)        // 是否启用全刷新
+#elif LVGL_PORT_AVOID_TEAR_MODE == 2
+#define LVGL_PORT_LCD_RGB_BUFFER_NUMS (3) // LCD 缓冲区数量
+#define LVGL_PORT_FULL_REFRESH (1)        // 是否启用全刷新
+#elif LVGL_PORT_AVOID_TEAR_MODE == 3
+#define LVGL_PORT_LCD_RGB_BUFFER_NUMS (2) // LCD 缓冲区数量
+#define LVGL_PORT_DIRECT_MODE (1)         // 是否启用直接模式
+#endif                                    /* LVGL_PORT_AVOID_TEAR_MODE */
+
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 0
+#define EXAMPLE_LVGL_PORT_ROTATION_0 (1) // 0 度旋转
+#else
+#if EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 90
+#define EXAMPLE_LVGL_PORT_ROTATION_90 (1) // 90 度旋转
+#elif EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 180
+#define EXAMPLE_LVGL_PORT_ROTATION_180 (1) // 180 度旋转
+#elif EXAMPLE_LVGL_PORT_ROTATION_DEGREE == 270
+#define EXAMPLE_LVGL_PORT_ROTATION_270 (1) // 270 度旋转
+#endif
+#ifdef LVGL_PORT_LCD_RGB_BUFFER_NUMS
+#undef LVGL_PORT_LCD_RGB_BUFFER_NUMS
+#define LVGL_PORT_LCD_RGB_BUFFER_NUMS (3) // 重新定义 LCD 缓冲区数量
+#endif
+#endif /* EXAMPLE_LVGL_PORT_ROTATION_DEGREE */
+#else
+#define LVGL_PORT_LCD_RGB_BUFFER_NUMS (1) // LCD 缓冲区数量
+#define LVGL_PORT_FULL_REFRESH (0)        // 是否启用全刷新
+#define LVGL_PORT_DIRECT_MODE (0)         // 是否启用直接模式
+
+#endif                                    /* LVGL_PORT_AVOID_TEAR_ENABLE */
+
+    /**
+     * @brief 初始化 LVGL 端口
+     *
+     * @param[in] lcd_handle: LCD 面板句柄
+     * @param[in] tp_handle: 触摸屏句柄
+     *
+     * @return
+     *      - ESP_OK: 成功
+     *      - ESP_ERR_INVALID_ARG: 参数无效
+     *      - 其他: 失败
+     */
+    esp_err_t lvgl_port_init(esp_lcd_panel_handle_t lcd_handle, esp_lcd_touch_handle_t tp_handle);
+
+    /**
+     * @brief 获取 LVGL 互斥锁
+     *
+     * @param[in] timeout_ms: 超时时间,单位毫秒。0 表示无限期等待。
+     *
+     * @return
+     *      - true: 成功获取互斥锁
+     *      - false: 未能获取互斥锁
+     */
+    bool lvgl_port_lock(int timeout_ms);
+
+    /**
+     * @brief 释放 LVGL 互斥锁
+     *
+     */
+    void lvgl_port_unlock(void);
+
+    /**
+     * @brief 当 RGB 帧缓冲区传输完成时通知 LVGL 任务
+     *
+     * @return
+     *      - true: 需要重新调度任务
+     *      - false: 不需要重新调度任务
+     */
+    bool lvgl_port_notify_rgb_vsync(void);
+
+#ifdef __cplusplus
+}
+#endif

+ 121 - 0
main/main.c

@@ -0,0 +1,121 @@
+#include <sys/cdefs.h>
+#include <stdio.h>
+#include <nvs_flash.h>
+#include <esp_netif.h>
+#include "esp_log.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+
+#include "app/include/wifi.h"
+#include "lcd_st7701.h"
+#include "lvgl_port.h"
+#include "framework.h"
+#include "framework_compat.h"
+#include "time_sync.h"
+#include "ota.h"
+#include "wifi.h"
+#include "main.h"
+#include "custom.h"
+#include "beep.h"
+#include "extend_io.h"
+#include "sht30.h"
+#include "fp_controller.h"
+#include "modbus_master.h"
+#include "modbus_slave.h"
+#include "system/miscellaneous_interface.h"
+
+static const char *TAG = "main";
+lv_ui guider_ui;
+system_setting_t system_setting = {};
+bool cloud_connected = false;
+void iot_event_monitor(int event) {
+    switch (event) {
+        case IOT_CONNECT_CLOUD_FAILT:
+            ESP_LOGE(TAG, "IOT_CONNECT_CLOUD_FAILT");
+            cloud_connected = false;
+            lvgl_port_lock(-1);
+            lv_obj_add_flag(guider_ui.screen_main_lab_cloud1, LV_OBJ_FLAG_HIDDEN);
+            lvgl_port_unlock();
+            break;
+        case IOT_CONNECT_CLOUD_SUCCESS:
+            ESP_LOGE(TAG, "IOT_CONNECT_CLOUD_SUCCESS");
+            cloud_connected = true;
+            lvgl_port_lock(-1);
+            lv_obj_remove_flag(guider_ui.screen_main_lab_cloud1, LV_OBJ_FLAG_HIDDEN);
+            lvgl_port_unlock();
+            break;
+        case IOT_LOGIN_FAILT:
+            ESP_LOGE(TAG, "IOT_LOGIN_FAILT");
+            break;
+        case IOT_LOGIN_SUCCESS:
+            ESP_LOGE(TAG, "IOT_LOGIN_SUCCESS");
+            break;
+        case IOT_REGISTER_FAILT:
+            ESP_LOGE(TAG, "IOT_REGISTER_FAILT");
+            break;
+        case IOT_REGISTER_SUCCESS:
+            ESP_LOGE(TAG, "IOT_REGISTER_SUCCESS");
+            break;
+        default:
+            break;
+    }
+}
+
+/**
+ * wifi连接成功后执行的回调函数
+ */
+void on_wifi_connected(void) {
+    // 开启时间同步
+    //time_sync_start();
+    // 接入云平台
+   // yxlj_framework_init();
+    // 初始化OTA功能
+    //ota_init();
+}
+
+
+_Noreturn void app_main(void) {
+    esp_log_level_set("*", ESP_LOG_DEBUG);
+//    esp_log_level_set("wifi-setting", ESP_LOG_DEBUG);
+//    esp_log_level_set("system_setting", ESP_LOG_DEBUG);
+//    esp_log_level_set("actions", ESP_LOG_DEBUG);
+   // esp_log_level_set("mqtt_client", ESP_LOG_DEBUG);
+    // 初始化NVS
+    esp_err_t err = nvs_flash_init(); //nvs初始化
+    if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
+        ESP_ERROR_CHECK(nvs_flash_erase()); //擦除nvs
+        nvs_flash_init();             //重新初始化
+    }
+    ESP_ERROR_CHECK(esp_netif_init());
+    read_system_setting(&system_setting); // 读取nvs中存储的系统设置
+    read_xf_status(&system_setting);
+    modbus_slave_init();
+    hc595_init();
+    beep_init();
+    ac_controller_init(&system_setting) ;
+    iotx_event_regist_cb(&iot_event_monitor); // 注册网关事件
+    //beep_init(); // 蜂鸣器初始化
+    ESP_ERROR_CHECK(lcd_st7701_init());
+    uint8_t *s_on_off = nvs_get_uint8(NVS_SCREEN_ON_OFF);
+    if (s_on_off != NULL) {
+        if (*s_on_off == 1) {
+            ESP_ERROR_CHECK(lcd_st7701_backlight_off());
+        } else {
+            ESP_ERROR_CHECK(lcd_st7701_backlight_on());
+        }
+    } else {
+        ESP_ERROR_CHECK(lcd_st7701_backlight_on());
+    }
+    setup_ui(&guider_ui);
+    app_wifi_init(on_wifi_connected);
+    sht30_init(); // 初始化温湿度传感器
+    timer_init_lx();
+    // 初始化OTA功能
+    ota_init();
+    // 熄屏定时器初始化
+    screen_off_timer_init(&system_setting);
+
+    for (;;) {
+        vTaskDelay(10 / portTICK_PERIOD_MS);
+    }
+}

+ 16 - 0
main/main.h

@@ -0,0 +1,16 @@
+/**
+ * @Author: 李建
+ * @Date: 2025/3/29 16:22
+ * Description: 
+ * Copyright: Copyright (©) 2025 永续绿建. All rights reserved.
+ */
+#ifndef WIRE_CONTROLLER_MAIN_H
+#define WIRE_CONTROLLER_MAIN_H
+#include "gui_guider.h"
+#include "setting.h"
+
+extern lv_ui guider_ui;
+extern system_setting_t system_setting;
+extern bool cloud_connected;
+
+#endif //WIRE_CONTROLLER_MAIN_H

+ 42 - 0
main/ui/custom/custom.c

@@ -0,0 +1,42 @@
+/*
+* Copyright 2024 NXP
+* NXP Proprietary. This software is owned or controlled by NXP and may only be used strictly in
+* accordance with the applicable license terms. By expressly accepting such terms or by downloading, installing,
+* activating and/or otherwise using the software, you are agreeing that you have read, and that you agree to
+* comply with and are bound by, such license terms.  If you do not agree to be bound by the applicable license
+* terms, then you may not retain, install, activate or otherwise use the software.
+*/
+
+
+/*********************
+ *      INCLUDES
+ *********************/
+#include <stdio.h>
+#include "lvgl.h"
+#include "custom.h"
+
+/*********************
+ *      DEFINES
+ *********************/
+
+/**********************
+ *      TYPEDEFS
+ **********************/
+
+/**********************
+ *  STATIC PROTOTYPES
+ **********************/
+
+/**********************
+ *  STATIC VARIABLES
+ **********************/
+
+/**
+ * Create a demo application
+ */
+
+void custom_init(lv_ui *ui)
+{
+    /* Add your codes here */
+}
+

+ 23 - 0
main/ui/custom/custom.h

@@ -0,0 +1,23 @@
+/*
+* Copyright 2024 NXP
+* NXP Proprietary. This software is owned or controlled by NXP and may only be used strictly in
+* accordance with the applicable license terms. By expressly accepting such terms or by downloading, installing,
+* activating and/or otherwise using the software, you are agreeing that you have read, and that you agree to
+* comply with and are bound by, such license terms.  If you do not agree to be bound by the applicable license
+* terms, then you may not retain, install, activate or otherwise use the software.
+*/
+
+#ifndef __CUSTOM_H_
+#define __CUSTOM_H_
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "gui_guider.h"
+
+void custom_init(lv_ui *ui);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* EVENT_CB_H_ */

+ 8 - 0
main/ui/custom/custom.mk

@@ -0,0 +1,8 @@
+
+GEN_CSRCS += $(notdir $(wildcard $(PRJ_DIR)/custom/*.c))
+
+DEPPATH += --dep-path $(PRJ_DIR)/custom
+VPATH += :$(PRJ_DIR)/custom
+
+CFLAGS += "-I$(PRJ_DIR)/custom"
+AFLAGS += "-I$(PRJ_DIR)/custom"

+ 41 - 0
main/ui/custom/lv_conf_ext.h

@@ -0,0 +1,41 @@
+/*
+* Copyright 2024 NXP
+* NXP Proprietary. This software is owned or controlled by NXP and may only be used strictly in
+* accordance with the applicable license terms. By expressly accepting such terms or by downloading, installing,
+* activating and/or otherwise using the software, you are agreeing that you have read, and that you agree to
+* comply with and are bound by, such license terms.  If you do not agree to be bound by the applicable license
+* terms, then you may not retain, install, activate or otherwise use the software.
+*/
+
+/*
+ * lv_conf_ext.h for custom lvconf file.
+ * example :
+ *	#undef LV_FONT_FMT_TXT_LARGE
+ *  #define LV_FONT_FMT_TXT_LARGE 1
+ */
+
+#ifndef LV_CONF_EXT_H
+#define LV_CONF_EXT_H
+
+
+/* common code  begin  */
+
+
+/* common code end */
+
+
+#if LV_USE_GUIDER_SIMULATOR
+/* code for simulator begin  */
+
+
+/* code for simulator end */
+#else
+/* code for board begin */
+
+
+/* code for board end */	
+#endif
+
+
+
+#endif  /* LV_CONF_EXT_H */	

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä