// Author: Dirk Jahnke // January 24, 2018 // // Manage on board LED of SONOFF device // #include #include #include "mgos.h" #include "mgos_gpio.h" #include "mgos_sys_config.h" #include "mgos_timers.h" #include "ledHandler.h" static int ON_BOARD_LED = 13; /* sonoff basic LED pin */ static enum LEDStatus currentStatus = LED_OFF; static int numTicksLedHasThisState = 0; void set_led_status(enum LEDStatus newStatus) { numTicksLedHasThisState = 0; currentStatus = newStatus; LOG(LL_INFO, ("set_led_status to %d", newStatus)); } static void blink_on_board_led_cb(void *arg) { switch (currentStatus) { case LED_OFF: mgos_gpio_write(ON_BOARD_LED, 1); // off break; case LED_ON: mgos_gpio_write(ON_BOARD_LED, 0); // on break; case LED_BLINK_SLOW: ++numTicksLedHasThisState; if (numTicksLedHasThisState >= 4) { numTicksLedHasThisState = 0; mgos_gpio_toggle(ON_BOARD_LED); } break; case LED_BLINK_FAST: // toggle LED each tick mgos_gpio_toggle(ON_BOARD_LED); break; default: LOG(LL_ERROR, ("Invalid current LED status: %d -- ignored", currentStatus)); break; } (void) arg; } void init_led_handler() { mgos_gpio_set_mode(ON_BOARD_LED, MGOS_GPIO_MODE_OUTPUT); mgos_set_timer(250, MGOS_TIMER_REPEAT, blink_on_board_led_cb, NULL); LOG(LL_INFO, ("LED handler initialized")); }