#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]); } }