#ifndef BLINKY_LED_EFFECT_H_ #define BLINKY_LED_EFFECT_H_ #include #include #include #include #include "led_effect_types.h" #include "theme_color.h" #ifdef __cplusplus extern "C" { #endif struct led_effect; struct led_effect_config { const struct led_key_map *key_map; size_t key_map_len; size_t pixel_count; uint8_t default_brightness; }; struct led_effect_ops { int (*init)(struct led_effect *effect, const struct led_effect_config *cfg); void (*reset)(struct led_effect *effect); void (*set_theme)(struct led_effect *effect, const struct theme_rgb *theme); void (*on_key_press)(struct led_effect *effect, uint16_t key_id); bool (*tick)(struct led_effect *effect, uint32_t dt_ms, struct led_rgb *pixels, size_t pixel_count); bool (*is_active)(const struct led_effect *effect); }; struct led_effect { const struct led_effect_ops *ops; void *state; }; const struct led_effect *led_effect_get(enum led_effect_id id); struct led_effect *led_effect_get_mutable(enum led_effect_id id); #ifdef __cplusplus } #endif #endif /* BLINKY_LED_EFFECT_H_ */