diff --git a/components/led/Kconfig.projbuild b/components/led/Kconfig.projbuild index a306c22..7e316fe 100644 --- a/components/led/Kconfig.projbuild +++ b/components/led/Kconfig.projbuild @@ -18,4 +18,12 @@ menu "Calendink LED Configuration" default 21 help GPIO pin for the LED. + + config CALENDINK_LED_ACTIVE_LOW + bool "LED is Active Low (0 turns it ON)" + depends on CALENDINK_LED_TYPE_SIMPLE + default y + help + Select this if your LED turns ON when the GPIO is driven low (0V). + Many development boards wire LEDs between VCC and the GPIO pin, making them active low. endmenu diff --git a/components/led/led.cpp b/components/led/led.cpp index 2afb5fc..33cafac 100644 --- a/components/led/led.cpp +++ b/components/led/led.cpp @@ -15,6 +15,16 @@ #define LED_GPIO (gpio_num_t)CONFIG_CALENDINK_LED_GPIO +#if defined(CONFIG_CALENDINK_LED_TYPE_SIMPLE) +#if defined(CONFIG_CALENDINK_LED_ACTIVE_LOW) +#define SIMPLE_LED_ON 0 +#define SIMPLE_LED_OFF 1 +#else +#define SIMPLE_LED_ON 1 +#define SIMPLE_LED_OFF 0 +#endif +#endif + #if defined(CONFIG_CALENDINK_LED_TYPE_STRIP) internal led_strip_handle_t led_strip; #endif @@ -34,25 +44,21 @@ void setup_led(void) led_strip_new_rmt_device(&strip_config, &rmt_config, &led_strip)); led_strip_clear(led_strip); + led_strip_refresh(led_strip); #elif defined(CONFIG_CALENDINK_LED_TYPE_SIMPLE) gpio_reset_pin(LED_GPIO); gpio_set_direction(LED_GPIO, GPIO_MODE_OUTPUT); - gpio_set_level(LED_GPIO, 0); + gpio_set_level(LED_GPIO, SIMPLE_LED_OFF); #endif } -void turn_off_led(void) -{ +void turn_off_led(void) +{ #if defined(CONFIG_CALENDINK_LED_TYPE_STRIP) - led_strip_clear(led_strip); + led_strip_clear(led_strip); + led_strip_refresh(led_strip); #elif defined(CONFIG_CALENDINK_LED_TYPE_SIMPLE) - gpio_set_level(LED_GPIO, 1); - vTaskDelay(pdMS_TO_TICKS(100)); - gpio_set_level(LED_GPIO, 0); - vTaskDelay(pdMS_TO_TICKS(100)); - gpio_set_level(LED_GPIO, 1); - vTaskDelay(pdMS_TO_TICKS(100)); - gpio_set_level(LED_GPIO, 0); + gpio_set_level(LED_GPIO, SIMPLE_LED_OFF); #endif } @@ -88,7 +94,7 @@ void set_led_status(led_status status) case led_status::ReadyEthernet: case led_status::ReadyWifi: case led_status::Failed: - gpio_set_level(LED_GPIO, 1); + gpio_set_level(LED_GPIO, SIMPLE_LED_ON); break; } #endif @@ -102,14 +108,14 @@ void led_blink_number(int n, uint8_t r, uint8_t g, uint8_t b) led_strip_set_pixel(led_strip, 0, r, g, b); led_strip_refresh(led_strip); #elif defined(CONFIG_CALENDINK_LED_TYPE_SIMPLE) - gpio_set_level(LED_GPIO, 1); + gpio_set_level(LED_GPIO, SIMPLE_LED_ON); #endif vTaskDelay(pdMS_TO_TICKS(300)); #if defined(CONFIG_CALENDINK_LED_TYPE_STRIP) led_strip_clear(led_strip); led_strip_refresh(led_strip); #elif defined(CONFIG_CALENDINK_LED_TYPE_SIMPLE) - gpio_set_level(LED_GPIO, 0); + gpio_set_level(LED_GPIO, SIMPLE_LED_OFF); #endif vTaskDelay(pdMS_TO_TICKS(300)); }