添加了完整的LED效果系统架构,包括: - 新增主题颜色定义文件theme_color.h - 实现key fade LED效果算法,支持按键触发的渐变效果 - 创建LED效果注册机制和通用接口 - 配置17个LED像素与按键映射关系 - 将原有简单的周期性效果替换为基于按键事件的动态效果 CMakeLists.txt中添加了新的源文件路径和实现文件。 BREAKING CHANGE: LED效果从固定的周期性变化改为响应按键事件的动态效果。
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
#ifndef BLINKY_LED_EFFECT_H_
|
|
#define BLINKY_LED_EFFECT_H_
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <zephyr/drivers/led_strip.h>
|
|
|
|
#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_ */
|