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
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;
|
|
}
|
|
}
|
|
|
|
|