#include "led.h" uint16_t led_timers[3]; uint16_t led_thresholds[3]; uint16_t led_cycles[3]; void led_init(void) { memset(led_timers, 0, sizeof(led_timers)); memset(led_thresholds, 0, sizeof(led_thresholds)); memset(led_cycles, 0, sizeof(led_cycles)); } void led_blink(led_name_t led, uint16_t period) { led_timers[led] = period; led_thresholds[led] = period/2; led_cycles[led] = period; } void led_stop(led_name_t led) { led_timers[led] = 0; led_thresholds[led] = 0; led_cycles[led] = 0; led_set(led, 0); } void led_blink_once(led_name_t led, uint16_t period) { if (led_timers[led] == 0) { led_timers[led] = period; led_thresholds[led] = period/2; } } void led_update(led_name_t led) { if (led_timers[led] > led_thresholds[led]) { led_set(led, 1); led_timers[led]--; } else if (led_timers[led] > 0) { led_set(led, 0); led_timers[led]--; } else if (led_cycles[led] > 0) { led_set(led, 0); led_timers[led] = led_cycles[led]; } } void led_update_all(void) { led_update(LED_STATUS); led_update(LED_CAN); led_update(LED_ERROR); } void led_set(led_name_t led, bool value) { gpio_set_led(led, value); } void led_toggle(led_name_t led) { gpio_toggle_led(led); } bool led_set_brightness(uint8_t brightness) { return gpio_set_led_brightness(brightness); } __weak bool gpio_set_led(led_name_t led, bool value) { return false; } __weak bool gpio_toggle_led(led_name_t led) { return false; } __weak bool gpio_set_led_brightness(uint8_t brightness) { return false; }