You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.1 KiB

#include "gpio_state_led.h"
#include "sw_timer.h"
static void State_Led_Output_Process(void);
static STATE_LED_MODE StateLedMode = STATE_LED_MODE_UNKNOW;
static STATE_LED_STEP StateLedStep = STATE_LED_STEP_INIT;
static STATE_LED_ONOFF_TIME StateLedTime;
static uint32_t StateLedCheckTime;
static STATE_LED_ONOFF_TIME StateLedOnOffTime[STATE_LED_MODE_MAX] =
{
{100, 900}, //STATE_LED_MODE_OFF,
{500, 500}, //STATE_LED_MODE_1,
{1000, 1000}, //STATE_LED_MODE_2,
{1500, 1500}, //STATE_LED_MODE_3,
{2000, 2000}, //STATE_LED_MODE_4,
{2500, 2500}, //STATE_LED_MODE_5,
};
void Gpio_StateLed_Initialization(void)
{
HAL_GPIO_ConfigOutput(GPIO_STATE_LED_PORT, GPIO_STATE_LED_PIN_NUM, PUSH_PULL_OUTPUT);
HAL_GPIO_ConfigPullup(GPIO_STATE_LED_PORT, GPIO_STATE_LED_PIN_NUM, PUPDx_EnablePU);
Gpio_StateLed_Set_Mode(STATE_LED_MODE_OFF);
SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 1, State_Led_Output_Process);
}
void Gpio_StateLed_Set_Mode(STATE_LED_MODE mode)
{
if(StateLedMode == mode)
return;
StateLedMode = mode;
StateLedStep = STATE_LED_STEP_INIT;
StateLedTime = StateLedOnOffTime[mode];
}
STATE_LED_MODE Gpio_StateLed_Get_Mode(void)
{
return StateLedMode;
}
static void State_Led_Output_Process(void)
{
switch(StateLedStep)
{
case STATE_LED_STEP_INIT:
StateLedCheckTime = millis();
StateLedStep = STATE_LED_STEP_ON_TIME;
break;
case STATE_LED_STEP_ON_TIME:
if((millis() - StateLedCheckTime) <= StateLedTime.onTime)
{
GPIO_STATE_LED_ON;
}
else
{
StateLedCheckTime = millis();
StateLedStep = STATE_LED_STEP_OFF_TIME;
}
break;
case STATE_LED_STEP_OFF_TIME:
if((millis() - StateLedCheckTime) <= StateLedTime.OffTime)
{
GPIO_STATE_LED_OFF;
}
else
{
StateLedCheckTime = millis();
StateLedStep = STATE_LED_STEP_ON_TIME;
}
break;
}
}