/*******************************************************************************
|
* File Name : LED.c
|
* Description :
|
* Created on : 2018Äê8ÔÂ8ÈÕ
|
* Author : www.hido-studio.com
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Include Files *
|
*******************************************************************************/
|
#include "LED.h"
|
#include "GPIO.h"
|
#include "HIDO_Timer.h"
|
#include "stm32f1xx_hal.h"
|
#include "HIDO_Lock.h"
|
#include "string.h"
|
|
/*******************************************************************************
|
* Macro *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Type Definition *
|
*******************************************************************************/
|
typedef struct
|
{
|
ST_GPIO m_stPin;
|
E_LedActiveState m_eActiveState;
|
}ST_LED;
|
|
typedef enum
|
{
|
LED_STATE_IDLE,
|
LED_STATE_ACTIVE,
|
LED_STATE_INACTIVE,
|
} E_LedState;
|
|
/*******************************************************************************
|
* Local Variable *
|
*******************************************************************************/
|
static ST_LED l_astLed[LED_ID_MAX];
|
static ST_LedCtrl l_astLedCtrl[LED_ID_MAX];
|
static E_LedState l_aeLedState[LED_ID_MAX];
|
static HIDO_UINT32 l_au32LedTime[LED_ID_MAX];
|
|
/*******************************************************************************
|
* Local Function Declaration *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Local Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Global Function *
|
*******************************************************************************/
|
|
/*******************************************************************************
|
* Function Name : Led_PinRegister
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_PinRegister(E_LedID _eID, HIDO_VOID *_pGPIO, HIDO_UINT16 _u16Pin, E_LedActiveState _eActiveState)
|
{
|
l_astLed[_eID].m_stPin.m_pstGPIOx = (GPIO_TypeDef *)_pGPIO;
|
l_astLed[_eID].m_stPin.m_u16GPIOPin = _u16Pin;
|
l_astLed[_eID].m_eActiveState = _eActiveState;
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_On
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_On(E_LedID _eID)
|
{
|
if(l_astLed[_eID].m_eActiveState == LED_ACTIVE_STATE_RESET)
|
{
|
GPIO_RESET(&l_astLed[_eID].m_stPin);
|
}
|
else
|
{
|
GPIO_SET(&l_astLed[_eID].m_stPin);
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_Off
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_Off(E_LedID _eID)
|
{
|
if (l_astLed[_eID].m_eActiveState == LED_ACTIVE_STATE_SET)
|
{
|
GPIO_RESET(&l_astLed[_eID].m_stPin);
|
}
|
else
|
{
|
GPIO_SET(&l_astLed[_eID].m_stPin);
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_AllOff
|
* Description : LEDÈ«²¿¹Ø±Õ
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_AllOff(HIDO_VOID)
|
{
|
HIDO_UINT32 i = 0;
|
|
for (i = 0; i < LED_ID_MAX; i++)
|
{
|
Led_Off((E_LedID)i);
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_AllOn
|
* Description : LEDÈ«²¿¿ªÆô
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_AllOn(HIDO_VOID)
|
{
|
HIDO_UINT32 i = 0;
|
|
for (i = 0; i < LED_ID_MAX; i++)
|
{
|
Led_On((E_LedID)i);
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_Toggle
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_Toggle(E_LedID _eID)
|
{
|
GPIO_TOGGLE(&l_astLed[_eID].m_stPin);
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_10MsISR
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2021Äê3ÔÂ25ÈÕ
|
*******************************************************************************/
|
HIDO_VOID Led_10MsISR(HIDO_VOID)
|
{
|
HIDO_UINT32 i = 0;
|
|
for (i = 0; i < LED_ID_MAX; i++)
|
{
|
if (LED_STATE_ACTIVE == l_aeLedState[i])
|
{
|
l_au32LedTime[i] += 10;
|
if (l_au32LedTime[i] >= l_astLedCtrl[i].m_u32ActiveTime)
|
{
|
Led_Off((E_LedID) i);
|
if (l_astLedCtrl[i].m_u32LoopCnt > 0)
|
{
|
if (l_astLedCtrl[i].m_u32LoopCnt != LED_LOOP_CNT_FOREVER)
|
{
|
l_astLedCtrl[i].m_u32LoopCnt--;
|
}
|
}
|
|
if(l_astLedCtrl[i].m_u32LoopCnt != 0)
|
{
|
l_aeLedState[i] = LED_STATE_INACTIVE;
|
l_au32LedTime[i] = 0;
|
}
|
else
|
{
|
l_aeLedState[i] = LED_STATE_IDLE;
|
}
|
}
|
}
|
else if (LED_STATE_INACTIVE == l_aeLedState[i])
|
{
|
l_au32LedTime[i] += 10;
|
if (l_au32LedTime[i] >= l_astLedCtrl[i].m_u32InactiveTime)
|
{
|
l_aeLedState[i] = LED_STATE_ACTIVE;
|
l_au32LedTime[i] = 0;
|
Led_On((E_LedID) i);
|
}
|
}
|
}
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_Ctrl
|
* Description : LED¿ØÖÆ
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2021Äê3ÔÂ25ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_Ctrl(E_LedID _eID, ST_LedCtrl *_pstCtrl)
|
{
|
HIDO_Lock();
|
memcpy(&l_astLedCtrl[_eID], _pstCtrl, sizeof(ST_LedCtrl));
|
HIDO_UnLock();
|
|
if(l_astLedCtrl[_eID].m_u32LoopCnt > 0)
|
{
|
l_aeLedState[_eID] = LED_STATE_ACTIVE;
|
l_au32LedTime[_eID] = 0;
|
Led_On(_eID);
|
}
|
|
return HIDO_OK;
|
}
|
|
/*******************************************************************************
|
* Function Name : Led_Init
|
* Description :
|
* Input :
|
* Output :
|
* Return :
|
* Author : www.hido-studio.com
|
* Modified Date: : 2018Äê8ÔÂ8ÈÕ
|
*******************************************************************************/
|
HIDO_INT32 Led_Init(void)
|
{
|
HIDO_UINT32 i = 0;
|
|
for (i = 0; i < LED_ID_MAX; i++)
|
{
|
Led_Off((E_LedID)i);
|
}
|
|
return HIDO_OK;
|
}
|