#include "contiki-conf.h"
#include "dev/leds.h"
#include "gpio.h"

#define LED_RED   ((1 << 23) | (1 << 8))
#define LED_GREEN ((1 << 24) | (1 << 9))
#define LED_BLUE  ((1 << 25) | (1 << 10))

#define LED_YELLOW (LED_RED  | LED_GREEN           )
#define LED_PURPLE (LED_RED  |             LED_BLUE)
#define LED_CYAN   (           LED_GREEN | LED_BLUE)
#define LED_WHITE  (LED_RED  | LED_GREEN | LED_BLUE)

void leds_arch_init(void)
{
	*(volatile uint32_t *)GPIO_PAD_DIR0 = 0;
}

unsigned char leds_arch_get(void)
{
	uint32_t led = *(volatile uint32_t *)GPIO_PAD_DIR0;

	return ((led & LED_RED) ? 0 : LEDS_RED)
		| ((led & LED_GREEN) ? 0 : LEDS_GREEN)
		| ((led & LED_YELLOW) ? 0 : LEDS_YELLOW);
}

void leds_arch_set(unsigned char leds)
{
	uint32_t led;

	led = (led & ~(LED_RED|LED_GREEN|LED_YELLOW))
		| ((leds & LEDS_RED) ? LED_RED : 0)
		| ((leds & LEDS_GREEN) ? LED_GREEN : 0)
		| ((leds & LEDS_YELLOW) ? LED_YELLOW : 0);

	*(volatile uint32_t *)GPIO_PAD_DIR0 = led;
}

