171 lines
3.6 KiB
C
171 lines
3.6 KiB
C
#include "leds.h"
|
||
#include "gpios.h"
|
||
|
||
static gpio_t *leds[LEDS_MAX];
|
||
|
||
/**
|
||
* @brief 初始化LED
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_init(void)
|
||
{
|
||
GPIO_SET_OUTPUT(LED1_GPIO_Port, LED1_Pin);
|
||
GPIO_SET_OUTPUT(LED2_GPIO_Port, LED2_Pin);
|
||
GPIO_SET_OUTPUT(LED3_GPIO_Port, LED3_Pin);
|
||
GPIO_SET_OUTPUT(LED4_GPIO_Port, LED4_Pin);
|
||
GPIO_SET_OUTPUT(LED5_GPIO_Port, LED5_Pin);
|
||
for (uint8_t i = 0; i < LEDS_MAX; i++)
|
||
{
|
||
if (leds[i] == NULL)
|
||
{
|
||
switch (i)
|
||
{
|
||
case LEDS_1_RED:
|
||
leds[i] = gpio_create(LED1_GPIO_Port, LED1_Pin);
|
||
break;
|
||
case LEDS_1_GREEN:
|
||
leds[i] = gpio_create(LED2_GPIO_Port, LED2_Pin);
|
||
break;
|
||
case LEDS_1_YELLOW:
|
||
leds[i] = gpio_create(LED3_GPIO_Port, LED3_Pin);
|
||
break;
|
||
case LEDS_2_ORANGE:
|
||
leds[i] = gpio_create(LED4_GPIO_Port, LED4_Pin);
|
||
break;
|
||
case LEDS_2_BLUE:
|
||
leds[i] = gpio_create(LED5_GPIO_Port, LED5_Pin);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 反初始化LED
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_dinit(void)
|
||
{
|
||
GPIO_SET_ANALOG(LED1_GPIO_Port, LED1_Pin);
|
||
GPIO_SET_ANALOG(LED2_GPIO_Port, LED2_Pin);
|
||
GPIO_SET_ANALOG(LED3_GPIO_Port, LED3_Pin);
|
||
GPIO_SET_ANALOG(LED4_GPIO_Port, LED4_Pin);
|
||
GPIO_SET_ANALOG(LED5_GPIO_Port, LED5_Pin);
|
||
}
|
||
|
||
/**
|
||
* @brief 打开LED
|
||
* @param {leds_e} io
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_on(leds_e io)
|
||
{
|
||
switch (io)
|
||
{
|
||
case LEDS_1_RED:
|
||
GPIO_SET_OUTPUT(LED1_GPIO_Port, LED1_Pin);
|
||
break;
|
||
case LEDS_1_GREEN:
|
||
GPIO_SET_OUTPUT(LED2_GPIO_Port, LED2_Pin);
|
||
break;
|
||
case LEDS_1_YELLOW:
|
||
GPIO_SET_OUTPUT(LED3_GPIO_Port, LED3_Pin);
|
||
break;
|
||
case LEDS_2_ORANGE:
|
||
GPIO_SET_OUTPUT(LED4_GPIO_Port, LED4_Pin);
|
||
break;
|
||
case LEDS_2_BLUE:
|
||
GPIO_SET_OUTPUT(LED5_GPIO_Port, LED5_Pin);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
if (io < LEDS_MAX)
|
||
{
|
||
leds[(uint8_t)io]->reset(*leds[(uint8_t)io]);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 打开所有LED
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_on_all(void)
|
||
{
|
||
leds_on(LEDS_1_RED);
|
||
leds_on(LEDS_1_GREEN);
|
||
leds_on(LEDS_1_YELLOW);
|
||
leds_on(LEDS_2_ORANGE);
|
||
leds_on(LEDS_2_BLUE);
|
||
}
|
||
|
||
/**
|
||
* @brief 关闭LED
|
||
* @param {leds_e} io
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_off(leds_e io)
|
||
{
|
||
if (io < LEDS_MAX)
|
||
{
|
||
leds[(uint8_t)io]->set(*leds[(uint8_t)io]);
|
||
}
|
||
|
||
// 反初始化其他LED,这里暂时先不做处理,如果电流不够,可以考虑关闭其他LED
|
||
// switch (io)
|
||
// {
|
||
// case LEDS_1_RED:
|
||
// GPIO_SET_ANALOG(LED1_GPIO_Port, LED1_Pin);
|
||
// break;
|
||
// case LEDS_1_GREEN:
|
||
// GPIO_SET_ANALOG(LED2_GPIO_Port, LED2_Pin);
|
||
// break;
|
||
// case LEDS_1_YELLOW:
|
||
// GPIO_SET_ANALOG(LED3_GPIO_Port, LED3_Pin);
|
||
// break;
|
||
// case LEDS_2_ORANGE:
|
||
// GPIO_SET_ANALOG(LED4_GPIO_Port, LED4_Pin);
|
||
// break;
|
||
// case LEDS_2_BLUE:
|
||
// GPIO_SET_ANALOG(LED5_GPIO_Port, LED5_Pin);
|
||
// break;
|
||
// default:
|
||
// break;
|
||
// }
|
||
}
|
||
|
||
/**
|
||
* @brief 关闭所有LED
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_off_all(void)
|
||
{
|
||
leds_off(LEDS_1_RED);
|
||
leds_off(LEDS_1_GREEN);
|
||
leds_off(LEDS_1_YELLOW);
|
||
leds_off(LEDS_2_ORANGE);
|
||
leds_off(LEDS_2_BLUE);
|
||
}
|
||
|
||
/**
|
||
* @brief 翻转LED
|
||
* @param {leds_e} io
|
||
* @return {*}
|
||
* @note
|
||
*/
|
||
void leds_toggle(leds_e io)
|
||
{
|
||
if (io < LEDS_MAX)
|
||
{
|
||
leds[(uint8_t)io]->toggle(*leds[(uint8_t)io]);
|
||
}
|
||
}
|