|
|
|
#include "gpio_state_led.h"
|
|
|
|
#include "sw_timer.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define GPIO_LED_LE1_PORT (Pn_Type*)PF
|
|
|
|
#define GPIO_LED_LE1_PIN_NUM 4
|
|
|
|
#define GPIO_LED_D1_PORT (Pn_Type*)PE
|
|
|
|
#define GPIO_LED_D1_PIN_NUM 4
|
|
|
|
#define GPIO_LED_D2_PORT (Pn_Type*)PE
|
|
|
|
#define GPIO_LED_D2_PIN_NUM 3
|
|
|
|
#define GPIO_LED_D3_PORT (Pn_Type*)PE
|
|
|
|
#define GPIO_LED_D3_PIN_NUM 2
|
|
|
|
#define GPIO_LED_D4_PORT (Pn_Type*)PE
|
|
|
|
#define GPIO_LED_D4_PIN_NUM 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void State_Led_Output_Process(void);
|
|
|
|
static void State_Led_Off(GPIO_LED_LIST gpio_led_index);
|
|
|
|
static void State_Led_On(GPIO_LED_LIST gpio_led_index);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef void (*GPIO_LED_ON_OFF_FUNC)(GPIO_LED_LIST gpio_led_index);
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
Pn_Type* Port;
|
|
|
|
uint8_t Pin;
|
|
|
|
GPIO_LED_MODE Mode;
|
|
|
|
|
|
|
|
bool isLedOn;
|
|
|
|
uint32_t nCheckTime;
|
|
|
|
uint32_t nOnTime;
|
|
|
|
uint32_t nOffTime;
|
|
|
|
|
|
|
|
GPIO_LED_ON_OFF_FUNC LedOnFunction;
|
|
|
|
GPIO_LED_ON_OFF_FUNC LedOffunction;
|
|
|
|
}GPIO_STATE_LED_INFO;
|
|
|
|
|
|
|
|
|
|
|
|
static GPIO_STATE_LED_INFO Gpio_Led_Ctrl_Info[GPIO_LED_MAX] =
|
|
|
|
{
|
|
|
|
{GPIO_LED_LE1_PORT, GPIO_LED_LE1_PIN_NUM, GPIO_LED_MODE_OFF, 0, 0, NULL, NULL},
|
|
|
|
{GPIO_LED_D1_PORT, GPIO_LED_D1_PIN_NUM, GPIO_LED_MODE_OFF, 0, 0, NULL, NULL},
|
|
|
|
{GPIO_LED_D2_PORT, GPIO_LED_D2_PIN_NUM, GPIO_LED_MODE_OFF, 0, 0, NULL, NULL},
|
|
|
|
{GPIO_LED_D3_PORT, GPIO_LED_D3_PIN_NUM, GPIO_LED_MODE_OFF, 0, 0, NULL, NULL},
|
|
|
|
{GPIO_LED_D4_PORT, GPIO_LED_D4_PIN_NUM, GPIO_LED_MODE_OFF, 0, 0, NULL, NULL},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void Gpio_StateLed_Initialization(void)
|
|
|
|
{
|
|
|
|
uint8_t i;
|
|
|
|
for(i = 0 ; i < GPIO_LED_MAX ; i++)
|
|
|
|
{
|
|
|
|
HAL_GPIO_ConfigOutput(Gpio_Led_Ctrl_Info[i].Port, Gpio_Led_Ctrl_Info[i].Pin, PUSH_PULL_OUTPUT);
|
|
|
|
HAL_GPIO_ConfigPullup(Gpio_Led_Ctrl_Info[i].Port, Gpio_Led_Ctrl_Info[i].Pin, PUPDx_EnablePU);
|
|
|
|
Gpio_Led_Ctrl_Info[i].LedOnFunction = State_Led_On;
|
|
|
|
Gpio_Led_Ctrl_Info[i].LedOffunction = State_Led_Off;
|
|
|
|
}
|
|
|
|
SW_Timer_Callback_Register(SW_TIMER_RUN_CONTINUE, 1, State_Led_Output_Process);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Gpio_Led_OutputSet(GPIO_LED_LIST gpio_led_index, GPIO_LED_MODE gpio_led_mode, uint32_t OnTime, uint32_t OffTime)
|
|
|
|
{
|
|
|
|
Gpio_Led_Ctrl_Info[gpio_led_index].Mode = gpio_led_mode;
|
|
|
|
|
|
|
|
Gpio_Led_Ctrl_Info[gpio_led_index].isLedOn = true;
|
|
|
|
Gpio_Led_Ctrl_Info[gpio_led_index].nCheckTime = millis();
|
|
|
|
Gpio_Led_Ctrl_Info[gpio_led_index].nOnTime = OnTime;
|
|
|
|
Gpio_Led_Ctrl_Info[gpio_led_index].nOffTime = OffTime;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void State_Led_Off(GPIO_LED_LIST gpio_led_index)
|
|
|
|
{
|
|
|
|
HAL_GPIO_SetPin(Gpio_Led_Ctrl_Info[gpio_led_index].Port, _BIT(Gpio_Led_Ctrl_Info[gpio_led_index].Pin));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void State_Led_On(GPIO_LED_LIST gpio_led_index)
|
|
|
|
{
|
|
|
|
HAL_GPIO_ClearPin(Gpio_Led_Ctrl_Info[gpio_led_index].Port, _BIT(Gpio_Led_Ctrl_Info[gpio_led_index].Pin));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void State_Led_Output_Process(void)
|
|
|
|
{
|
|
|
|
uint8_t i;
|
|
|
|
GPIO_STATE_LED_INFO* pControlInfo;
|
|
|
|
for(i = 0 ; i < GPIO_LED_MAX ; i++)
|
|
|
|
{
|
|
|
|
pControlInfo = &Gpio_Led_Ctrl_Info[i];
|
|
|
|
switch (pControlInfo->Mode)
|
|
|
|
{
|
|
|
|
case GPIO_LED_MODE_OFF:
|
|
|
|
pControlInfo->LedOffunction(i);
|
|
|
|
break;
|
|
|
|
case GPIO_LED_MODE_ON:
|
|
|
|
pControlInfo->LedOnFunction(i);
|
|
|
|
break;
|
|
|
|
case GPIO_LED_MODE_TOGGLE:
|
|
|
|
if(pControlInfo->isLedOn == true)
|
|
|
|
{
|
|
|
|
if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOnTime )
|
|
|
|
{
|
|
|
|
pControlInfo->nCheckTime = millis();
|
|
|
|
pControlInfo->isLedOn = false;
|
|
|
|
}
|
|
|
|
pControlInfo->LedOnFunction(i);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if((millis() - pControlInfo->nCheckTime) > pControlInfo->nOffTime )
|
|
|
|
{
|
|
|
|
pControlInfo->nCheckTime = millis();
|
|
|
|
pControlInfo->isLedOn = true;
|
|
|
|
}
|
|
|
|
pControlInfo->LedOffunction(i);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#if 0
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|