可用的文件,全部

This commit is contained in:
2026-03-21 01:49:41 +08:00
commit da4f00f652
56 changed files with 9299 additions and 0 deletions

177
Core/Bsp/bsp_relay.c Normal file
View File

@@ -0,0 +1,177 @@
/**
* @file bsp_relay.c
* @brief Relay control driver implementation
*/
#include "bsp_relay.h"
#include "bsp_flash.h"
#include <stddef.h>
/* Private variables ----------------------------------------------------------*/
static fan_mode_t s_fan_mode = FAN_MODE_MANUAL;
static float s_fan_threshold = 30.0f; // Default threshold: 30°C
/**
* @brief Initialize all relay pins
* @retval None
*/
void BSP_Relay_Init(void)
{
/* Set all relays to OFF state (high level) by default */
HAL_GPIO_WritePin(LIGHT_GPIO_Port, LIGHT_Pin, RELAY_OFF);
HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, RELAY_OFF);
/* Load settings from Flash */
system_settings_t settings;
if (BSP_Flash_LoadSettings(&settings))
{
s_fan_mode = (fan_mode_t)settings.fan_mode;
s_fan_threshold = settings.fan_threshold;
}
else
{
/* Use default values if no valid settings */
s_fan_mode = FAN_MODE_AUTO;
s_fan_threshold = 30.0f;
}
}
/**
* @brief Turn LIGHT relay ON (low level output)
* @retval None
*/
void BSP_LIGHT_On(void)
{
HAL_GPIO_WritePin(LIGHT_GPIO_Port, LIGHT_Pin, RELAY_ON);
}
/**
* @brief Turn LIGHT relay OFF (high level output)
* @retval None
*/
void BSP_LIGHT_Off(void)
{
HAL_GPIO_WritePin(LIGHT_GPIO_Port, LIGHT_Pin, RELAY_OFF);
}
/**
* @brief Toggle LIGHT relay state
* @retval None
*/
void BSP_LIGHT_Toggle(void)
{
HAL_GPIO_TogglePin(LIGHT_GPIO_Port, LIGHT_Pin);
}
uint8_t BSP_LIGHT_GetState(void)
{
return (HAL_GPIO_ReadPin(LIGHT_GPIO_Port, LIGHT_Pin) == RELAY_ON) ? 1 : 0;
}
/**
* @brief Turn FAN relay ON (low level output)
* @retval None
*/
void BSP_FAN_On(void)
{
HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, RELAY_ON);
}
/**
* @brief Turn FAN relay OFF (high level output)
* @retval None
*/
void BSP_FAN_Off(void)
{
HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, RELAY_OFF);
}
/**
* @brief Toggle FAN relay state
* @retval None
*/
void BSP_FAN_Toggle(void)
{
HAL_GPIO_TogglePin(FAN_GPIO_Port, FAN_Pin);
}
uint8_t BSP_FAN_GetState(void)
{
return (HAL_GPIO_ReadPin(FAN_GPIO_Port, FAN_Pin) == RELAY_ON) ? 1 : 0;
}
/**
* @brief Set FAN mode and save to Flash
*/
void BSP_FAN_SetMode(fan_mode_t mode)
{
s_fan_mode = mode;
/* Save to Flash */
system_settings_t settings = {
.fan_threshold = s_fan_threshold,
.fan_mode = mode,
.light_state = BSP_LIGHT_GetState(),
.valid = SETTINGS_VALID_FLAG
};
BSP_Flash_SaveSettings(&settings);
}
fan_mode_t BSP_FAN_GetMode(void)
{
return s_fan_mode;
}
/**
* @brief Set temperature threshold for auto mode and save to Flash
*/
void BSP_FAN_SetThreshold(float threshold)
{
s_fan_threshold = threshold;
/* Save to Flash */
system_settings_t settings = {
.fan_threshold = threshold,
.fan_mode = s_fan_mode,
.light_state = BSP_LIGHT_GetState(),
.valid = SETTINGS_VALID_FLAG
};
BSP_Flash_SaveSettings(&settings);
}
float BSP_FAN_GetThreshold(void)
{
return s_fan_threshold;
}
/**
* @brief Auto control FAN based on temperature
* @param current_temp: current temperature in Celsius
*/
void BSP_FAN_AutoControl(float current_temp)
{
if (s_fan_mode != FAN_MODE_AUTO)
return;
if (current_temp >= s_fan_threshold)
{
BSP_FAN_On();
}
else
{
BSP_FAN_Off();
}
}
/**
* @brief Get system state
*/
void BSP_System_GetState(system_state_t *state)
{
if (state == NULL) return;
state->fan_mode = s_fan_mode;
state->fan_threshold = s_fan_threshold;
state->light_state = BSP_LIGHT_GetState();
state->fan_state = BSP_FAN_GetState();
}