feat: expose persistent effect lifecycle, wakeup, fade-delay, idle hooks
Core API additions for full parity with darknao fork behaviors: - ZMK_RGB_EFFECT_PERSISTENT flag: effect persists across RGB on/off - on_idle(bool awake) callback: effect controls sleep/wake behavior - is_active() callback: get_state returns on || effect->is_active() - zmk_rgb_request_refresh_wakeup(bool): conditional wake from sleep - zmk_rgb_set_tick_delay(int): delayed tick restart for fade-delay - zmk_rgb_is_on(): exposed state query for modules - state.layer_enabled restored: persistent effects survive RGB toggle - auto_state delegates to on_idle for effects that implement it - select_effect sets layer_enabled for PERSISTENT effects - transient_off no longer calls on_deselect (only true deselect does)
This commit is contained in:
parent
8f3c4d3929
commit
a36c7f26f8
2 changed files with 86 additions and 14 deletions
|
|
@ -19,28 +19,39 @@ struct zmk_rgb_effect_ctx {
|
|||
|
||||
typedef void (*zmk_rgb_effect_render_fn)(struct zmk_rgb_effect_ctx *ctx);
|
||||
typedef void (*zmk_rgb_effect_event_fn)(void);
|
||||
typedef void (*zmk_rgb_effect_idle_fn)(bool awake);
|
||||
typedef bool (*zmk_rgb_effect_is_active_fn)(void);
|
||||
|
||||
#define ZMK_RGB_EFFECT_STATIC BIT(0)
|
||||
#define ZMK_RGB_EFFECT_PERSISTENT BIT(1)
|
||||
|
||||
struct zmk_rgb_effect {
|
||||
const char *name;
|
||||
zmk_rgb_effect_render_fn render;
|
||||
zmk_rgb_effect_event_fn on_select;
|
||||
zmk_rgb_effect_event_fn on_deselect;
|
||||
zmk_rgb_effect_idle_fn on_idle;
|
||||
zmk_rgb_effect_is_active_fn is_active;
|
||||
uint8_t flags;
|
||||
};
|
||||
|
||||
#define ZMK_RGB_EFFECT_DEFINE(_sym, _name_str, _render, _flags, _on_select, _on_deselect) \
|
||||
#define ZMK_RGB_EFFECT_DEFINE(_sym, _name_str, _render, _flags, _on_select, _on_deselect, \
|
||||
_on_idle, _is_active) \
|
||||
STRUCT_SECTION_ITERABLE(zmk_rgb_effect, _sym) = { \
|
||||
.name = _name_str, \
|
||||
.render = _render, \
|
||||
.flags = _flags, \
|
||||
.on_select = _on_select, \
|
||||
.on_deselect = _on_deselect, \
|
||||
.on_idle = _on_idle, \
|
||||
.is_active = _is_active, \
|
||||
}
|
||||
|
||||
void zmk_rgb_request_refresh(void);
|
||||
void zmk_rgb_request_refresh_wakeup(bool wakeup);
|
||||
int zmk_rgb_effect_get_count(void);
|
||||
bool zmk_rgb_is_on(void);
|
||||
void zmk_rgb_set_tick_delay(int delay_seconds);
|
||||
|
||||
struct led_rgb zmk_rgb_hsb_to_rgb(struct zmk_led_hsb hsb);
|
||||
struct zmk_led_hsb zmk_rgb_hsb_scale_min_max(struct zmk_led_hsb hsb);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue