/*
* led.c
*
* Created on: Mar 30, 2017
* Author: Matthew Reed
*/
#include "led.h"
#define LED_CYCLE_STATUS 2000
#define LED_CYCLE_CAN 0
#define LED_CYCLE_ERROR 0
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);
led_cycles[LED_STATUS] = LED_CYCLE_STATUS;
led_cycles[LED_CAN] = LED_CYCLE_CAN;
led_cycles[LED_ERROR] = LED_CYCLE_ERROR;
}
void led_start(led_name_t led)
{
led_timers[led] = led_cycles[led];
led_thresholds[led] = led_cycles[led]/2;
}
void led_start_time(led_name_t led, uint16_t time)
{
if (led_timers[led] == 0)
{
led_timers[led] = time;
led_thresholds[led] = time/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 {
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);
}
__weak bool gpio_set_led(led_name_t led, bool value)
{
return false;
}
__weak bool gpio_toggle_led(led_name_t led)
{
return false;
}