#include "internal.h"

#define event_get_value(e) _event_get_value(__FILE__, __LINE__, __FUNCTION__, e)
#define leds_max_location() _leds_max_location(__FILE__, __LINE__, __FUNCTION__)
#define leds_all_dimmable() _leds_all_dimmable(__FILE__, __LINE__, __FUNCTION__)

#define BLINK_CODE(...)                                                    \
	({                                                                 \
		struct blink_code ___code = { .params = { 0, 0 },          \
					      .color = led->current_color, \
					      __VA_ARGS__ };               \
		___code;                                                   \
	})
#define BLINK_CODE_SKIP BLINK_CODE(.type = blink_invalid)

#define COLOR(name)                                                 \
	static inline struct blink_code set_current_color_##name(   \
		struct led *led)                                    \
	{                                                           \
		_led_set_current_color(led, led_color_name_##name); \
		return BLINK_CODE_SKIP;                             \
	}
#include "../def/colors.h"

#define OVERLAYS(...)             \
	(led_overlay_t[])         \
	{                         \
		__VA_ARGS__ { NULL, NULL } \
	}
#define OVERLAY(_name_) { #_name_, _name_ }

#include "../def/leds.c"

unsigned int num_led_types = sizeof(led_types) / sizeof(led_types[0]);