185 lines
4.9 KiB
C
185 lines
4.9 KiB
C
/* USER CODE BEGIN Header */
|
|
/**
|
|
******************************************************************************
|
|
* @file : bsp_config.h
|
|
* @brief : 板级支持包配置文件头文件
|
|
******************************************************************************
|
|
*/
|
|
/* USER CODE END Header */
|
|
|
|
#ifndef BSP_CONFIG_H
|
|
#define BSP_CONFIG_H
|
|
|
|
#include <stdio.h>
|
|
#include "bsp_module.h"
|
|
#include "bsp_board.h"
|
|
#include "hal.h"
|
|
|
|
/**
|
|
* @brief BSP 配置文件格式定义
|
|
*/
|
|
#define BSP_CONFIG_FILE_VERSION "1.0.0"
|
|
#define BSP_CONFIG_MAX_LINE_LENGTH 256
|
|
#define BSP_CONFIG_MAX_SECTION_NAME_LENGTH 32
|
|
#define BSP_CONFIG_MAX_KEY_NAME_LENGTH 32
|
|
#define BSP_CONFIG_MAX_VALUE_LENGTH 128
|
|
|
|
/**
|
|
* @brief BSP 配置节类型
|
|
*/
|
|
typedef enum {
|
|
BSP_CONFIG_SECTION_NONE = 0,
|
|
BSP_CONFIG_SECTION_BOARD,
|
|
BSP_CONFIG_SECTION_MODULE,
|
|
BSP_CONFIG_SECTION_PERIPH,
|
|
BSP_CONFIG_SECTION_MAX
|
|
} bsp_config_section_t;
|
|
|
|
/**
|
|
* @brief BSP 配置条目
|
|
*/
|
|
typedef struct {
|
|
const char* section;
|
|
const char* key;
|
|
const char* value;
|
|
} bsp_config_entry_t;
|
|
|
|
/**
|
|
* @brief BSP 配置解析器上下文
|
|
*/
|
|
typedef struct {
|
|
FILE* file;
|
|
char current_section[BSP_CONFIG_MAX_SECTION_NAME_LENGTH];
|
|
char buffer[BSP_CONFIG_MAX_LINE_LENGTH];
|
|
uint32_t line_number;
|
|
uint8_t initialized;
|
|
} bsp_config_parser_t;
|
|
|
|
/**
|
|
* @brief BSP 配置文件操作
|
|
*/
|
|
typedef struct {
|
|
hal_ret_t (*open)(const char* filename, bsp_config_parser_t* parser);
|
|
hal_ret_t (*close)(bsp_config_parser_t* parser);
|
|
hal_ret_t (*read_entry)(bsp_config_parser_t* parser, bsp_config_entry_t* entry);
|
|
hal_ret_t (*parse_int)(const char* value, int* result);
|
|
hal_ret_t (*parse_uint)(const char* value, uint32_t* result);
|
|
hal_ret_t (*parse_bool)(const char* value, uint8_t* result);
|
|
hal_ret_t (*parse_string)(const char* value, char* result, size_t max_length);
|
|
} bsp_config_ops_t;
|
|
|
|
/**
|
|
* @brief 初始化 BSP 配置系统
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_init(void);
|
|
|
|
/**
|
|
* @brief 反初始化 BSP 配置系统
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_deinit(void);
|
|
|
|
/**
|
|
* @brief 从文件加载 BSP 配置
|
|
* @param filename: 配置文件名称
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_load(const char* filename);
|
|
|
|
/**
|
|
* @brief 保存 BSP 配置到文件
|
|
* @param filename: 配置文件名称
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_save(const char* filename);
|
|
|
|
/**
|
|
* @brief 获取配置值
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 存储值的指针
|
|
* @param max_length: 值缓冲区的最大长度
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_get_value(const char* section, const char* key, char* value, size_t max_length);
|
|
|
|
/**
|
|
* @brief 设置配置值
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 配置值
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_set_value(const char* section, const char* key, const char* value);
|
|
|
|
/**
|
|
* @brief 获取配置值作为整数
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 存储整数值的指针
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_get_int(const char* section, const char* key, int* value);
|
|
|
|
/**
|
|
* @brief 设置配置值作为整数
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 整数值
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_set_int(const char* section, const char* key, int value);
|
|
|
|
/**
|
|
* @brief 获取配置值作为无符号整数
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 存储无符号整数值的指针
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_get_uint(const char* section, const char* key, uint32_t* value);
|
|
|
|
/**
|
|
* @brief 设置配置值作为无符号整数
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 无符号整数值
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_set_uint(const char* section, const char* key, uint32_t value);
|
|
|
|
/**
|
|
* @brief 获取配置值作为布尔值
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 存储布尔值的指针
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_get_bool(const char* section, const char* key, uint8_t* value);
|
|
|
|
/**
|
|
* @brief 设置配置值作为布尔值
|
|
* @param section: 配置节名称
|
|
* @param key: 配置键名称
|
|
* @param value: 布尔值
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_set_bool(const char* section, const char* key, uint8_t value);
|
|
|
|
/**
|
|
* @brief 从配置解析 BSP 模块
|
|
* @param config: 指向要填充的 BSP 板卡配置结构体的指针
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_config_parse_modules(bsp_board_config_t* config);
|
|
|
|
/**
|
|
* @brief 从配置文件初始化 BSP
|
|
* @param filename: 配置文件名称
|
|
* @retval HAL 状态码
|
|
*/
|
|
hal_ret_t bsp_init_from_config(const char* filename);
|
|
|
|
#endif /* BSP_CONFIG_H */
|