feat(ota): 添加 GD32 版本信息获取和 API 端点
- 实现了通过 SPI PING 命令获取 GD32 应用程序和引导加载程序版本信息 - 添加 /api/version HTTP 端点返回固件版本、编译时间和 Git 哈希 - 在系统状态 API 中包含 GD32 版本信息和存活状态 - 优化 SPI PING 协议解析以支持版本数据提取 refactor(ota): 移除压缩功能并简化 OTA 上传流程 - 移除 OTA 数据压缩和解压缩功能,简化数据处理流程 - 删除 utils/ota_compressor.cpp 文件及相关依赖 - 直接写入原始数据块而不是解压缩后写入 - 更新 OTA 上传处理器以处理原始二进制数据 build(cmakelists): 添加版本头文件自动生成机制 - 配置 CMake 构建时自动生成 version.h 头文件 - 集成 git 哈希和编译时间信息到固件版本 - 更新主 CMakeLists.txt 以包含版本生成目标 - 修改 app_config.h 以使用自动生成的版本字符串 fix(wifi_ota): 修复 OTA 中继状态管理和 SPI 通信问题 - 修复 OTA 中继完成后立即重置的问题,增加 3 秒延迟让前端轮询完成 - 修正 SPI CRC 错误检测和调试信息输出 - 优化 SPI PING 通信超时和重试机制 - 修复 OTA 上传大小计算和数据写入偏移跟踪
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
# gen_version.cmake - 自动生成版本信息头文件
|
||||
# 包含版本号、编译时间、Git 信息
|
||||
|
||||
# 版本号(可手动修改)
|
||||
set(FW_VERSION_MAJOR 0)
|
||||
set(FW_VERSION_MINOR 3)
|
||||
set(FW_VERSION_PATCH 10)
|
||||
|
||||
# 获取编译时间
|
||||
string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# 获取 Git 信息(如果可用)
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
else()
|
||||
set(GIT_HASH "unknown")
|
||||
endif()
|
||||
|
||||
# 生成版本头文件
|
||||
set(VERSION_HEADER_CONTENT
|
||||
"// Auto-generated version info - DO NOT EDIT
|
||||
#pragma once
|
||||
|
||||
// 固件版本
|
||||
#define FW_VERSION_MAJOR ${FW_VERSION_MAJOR}
|
||||
#define FW_VERSION_MINOR ${FW_VERSION_MINOR}
|
||||
#define FW_VERSION_PATCH ${FW_VERSION_PATCH}
|
||||
#define FW_VERSION_STRING \"${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH}\"
|
||||
|
||||
// 编译时间
|
||||
#define BUILD_TIME \"${BUILD_TIME}\"
|
||||
|
||||
// Git 信息
|
||||
#define GIT_HASH \"${GIT_HASH}\"
|
||||
")
|
||||
|
||||
# 检查文件是否需要更新
|
||||
if(EXISTS ${VERSION_HEADER_PATH})
|
||||
file(READ ${VERSION_HEADER_PATH} EXISTING_CONTENT)
|
||||
if(NOT "${EXISTING_CONTENT}" STREQUAL "${VERSION_HEADER_CONTENT}")
|
||||
file(WRITE ${VERSION_HEADER_PATH} "${VERSION_HEADER_CONTENT}")
|
||||
message(STATUS "Version header updated: ${VERSION_HEADER_PATH}")
|
||||
endif()
|
||||
else()
|
||||
file(WRITE ${VERSION_HEADER_PATH} "${VERSION_HEADER_CONTENT}")
|
||||
message(STATUS "Version header generated: ${VERSION_HEADER_PATH}")
|
||||
endif()
|
||||
@@ -0,0 +1,58 @@
|
||||
# gen_version_script.cmake - 构建时执行的独立脚本
|
||||
# 通过 add_custom_target 在每次 build 时调用,确保版本信息始终最新
|
||||
#
|
||||
# 需要传入的参数:
|
||||
# SOURCE_DIR - 项目根目录 (ESP32_COMM)
|
||||
# OUTPUT_FILE - 输出的 version.h 路径
|
||||
|
||||
# 版本号(可手动修改)
|
||||
set(FW_VERSION_MAJOR 0)
|
||||
set(FW_VERSION_MINOR 3)
|
||||
set(FW_VERSION_PATCH 11)
|
||||
|
||||
# 获取编译时间
|
||||
string(TIMESTAMP BUILD_TIME "%Y-%m-%d %H:%M:%S")
|
||||
|
||||
# 获取 Git 信息
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND)
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY ${SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
else()
|
||||
set(GIT_HASH "unknown")
|
||||
endif()
|
||||
|
||||
# 生成版本头文件内容
|
||||
set(VERSION_HEADER_CONTENT
|
||||
"// Auto-generated version info - DO NOT EDIT
|
||||
#pragma once
|
||||
|
||||
// 固件版本
|
||||
#define FW_VERSION_MAJOR ${FW_VERSION_MAJOR}
|
||||
#define FW_VERSION_MINOR ${FW_VERSION_MINOR}
|
||||
#define FW_VERSION_PATCH ${FW_VERSION_PATCH}
|
||||
#define FW_VERSION_STRING \"${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH}\"
|
||||
|
||||
// 编译时间
|
||||
#define BUILD_TIME \"${BUILD_TIME}\"
|
||||
|
||||
// Git 信息
|
||||
#define GIT_HASH \"${GIT_HASH}\"
|
||||
")
|
||||
|
||||
# 仅在内容变化时写入,避免不必要的重编译
|
||||
if(EXISTS ${OUTPUT_FILE})
|
||||
file(READ ${OUTPUT_FILE} EXISTING_CONTENT)
|
||||
if(NOT "${EXISTING_CONTENT}" STREQUAL "${VERSION_HEADER_CONTENT}")
|
||||
file(WRITE ${OUTPUT_FILE} "${VERSION_HEADER_CONTENT}")
|
||||
message(STATUS "Version header updated: v${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH} (${GIT_HASH})")
|
||||
endif()
|
||||
else()
|
||||
file(WRITE ${OUTPUT_FILE} "${VERSION_HEADER_CONTENT}")
|
||||
message(STATUS "Version header generated: v${FW_VERSION_MAJOR}.${FW_VERSION_MINOR}.${FW_VERSION_PATCH} (${GIT_HASH})")
|
||||
endif()
|
||||
Reference in New Issue
Block a user