underglow-layer: Don't save state on idle/resume & register activity on layer change
This commit is contained in:
parent
da994be0ba
commit
9308ba806a
3 changed files with 31 additions and 16 deletions
|
|
@ -16,6 +16,8 @@ int zmk_rgb_underglow_toggle(void);
|
||||||
int zmk_rgb_underglow_get_state(bool *state);
|
int zmk_rgb_underglow_get_state(bool *state);
|
||||||
int zmk_rgb_underglow_on(void);
|
int zmk_rgb_underglow_on(void);
|
||||||
int zmk_rgb_underglow_off(void);
|
int zmk_rgb_underglow_off(void);
|
||||||
|
int zmk_rgb_underglow_transient_on(void);
|
||||||
|
int zmk_rgb_underglow_transient_off(void);
|
||||||
int zmk_rgb_underglow_cycle_effect(int direction);
|
int zmk_rgb_underglow_cycle_effect(int direction);
|
||||||
int zmk_rgb_underglow_calc_effect(int direction);
|
int zmk_rgb_underglow_calc_effect(int direction);
|
||||||
int zmk_rgb_underglow_select_effect(int effect);
|
int zmk_rgb_underglow_select_effect(int effect);
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
#include <zmk/event_manager.h>
|
#include <zmk/event_manager.h>
|
||||||
#include <zmk/events/activity_state_changed.h>
|
#include <zmk/events/activity_state_changed.h>
|
||||||
#include <zmk/events/position_state_changed.h>
|
#include <zmk/events/position_state_changed.h>
|
||||||
|
#include <zmk/events/split_peripheral_layer_changed.h>
|
||||||
#include <zmk/events/sensor_event.h>
|
#include <zmk/events/sensor_event.h>
|
||||||
|
|
||||||
#include <zmk/pm.h>
|
#include <zmk/pm.h>
|
||||||
|
|
@ -109,6 +110,7 @@ static int activity_init(void) {
|
||||||
ZMK_LISTENER(activity, activity_event_listener);
|
ZMK_LISTENER(activity, activity_event_listener);
|
||||||
ZMK_SUBSCRIPTION(activity, zmk_position_state_changed);
|
ZMK_SUBSCRIPTION(activity, zmk_position_state_changed);
|
||||||
ZMK_SUBSCRIPTION(activity, zmk_sensor_event);
|
ZMK_SUBSCRIPTION(activity, zmk_sensor_event);
|
||||||
|
ZMK_SUBSCRIPTION(activity, zmk_split_peripheral_layer_changed);
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -475,18 +475,17 @@ static void zmk_rgb_underglow_apply_rgbmap(uint32_t rgbmap[], size_t rgbmap_len)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void zmk_rgb_underglow_set_layer(uint8_t layer) {
|
static void zmk_rgb_underglow_set_layer(uint8_t layer) {
|
||||||
state.on = true;
|
if (state.current_effect != UNDERGLOW_EFFECT_LAYER_INDICATORS)
|
||||||
|
return;
|
||||||
|
|
||||||
uint32_t *rgbmap = rgb_underglow_get_bindings(layer);
|
uint32_t *rgbmap = rgb_underglow_get_bindings(layer);
|
||||||
if (rgbmap != NULL) {
|
if (rgbmap != NULL) {
|
||||||
zmk_rgb_underglow_apply_rgbmap(rgbmap, ZMK_KEYMAP_LEN);
|
zmk_rgb_underglow_apply_rgbmap(rgbmap, ZMK_KEYMAP_LEN);
|
||||||
|
zmk_rgb_underglow_transient_on();
|
||||||
|
zmk_led_write_pixels();
|
||||||
} else {
|
} else {
|
||||||
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
|
zmk_rgb_underglow_transient_off();
|
||||||
pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0};
|
|
||||||
}
|
|
||||||
state.on = false;
|
|
||||||
}
|
}
|
||||||
zmk_led_write_pixels();
|
|
||||||
zmk_rgb_set_ext_power();
|
|
||||||
}
|
}
|
||||||
#endif /* UNDERGLOW_LAYER_ENABLED */
|
#endif /* UNDERGLOW_LAYER_ENABLED */
|
||||||
|
|
||||||
|
|
@ -515,7 +514,7 @@ static void zmk_rgb_underglow_tick(struct k_work *work) {
|
||||||
K_WORK_DEFINE(underglow_tick_work, zmk_rgb_underglow_tick);
|
K_WORK_DEFINE(underglow_tick_work, zmk_rgb_underglow_tick);
|
||||||
|
|
||||||
static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) {
|
static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) {
|
||||||
if (!state.on && state.current_effect == UNDERGLOW_EFFECT_LAYER_INDICATORS) {
|
if (!state.on || state.current_effect == UNDERGLOW_EFFECT_LAYER_INDICATORS) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -647,6 +646,11 @@ void zmk_rgb_set_ext_power(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_rgb_underglow_on(void) {
|
int zmk_rgb_underglow_on(void) {
|
||||||
|
zmk_rgb_underglow_transient_on();
|
||||||
|
return zmk_rgb_underglow_save_state();
|
||||||
|
}
|
||||||
|
|
||||||
|
int zmk_rgb_underglow_transient_on(void) {
|
||||||
if (!led_strip)
|
if (!led_strip)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
|
@ -656,7 +660,7 @@ int zmk_rgb_underglow_on(void) {
|
||||||
state.animation_step = 0;
|
state.animation_step = 0;
|
||||||
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(25));
|
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(25));
|
||||||
|
|
||||||
return zmk_rgb_underglow_save_state();
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void zmk_rgb_underglow_off_handler(struct k_work *work) {
|
static void zmk_rgb_underglow_off_handler(struct k_work *work) {
|
||||||
|
|
@ -669,6 +673,11 @@ static void zmk_rgb_underglow_off_handler(struct k_work *work) {
|
||||||
K_WORK_DEFINE(underglow_off_work, zmk_rgb_underglow_off_handler);
|
K_WORK_DEFINE(underglow_off_work, zmk_rgb_underglow_off_handler);
|
||||||
|
|
||||||
int zmk_rgb_underglow_off(void) {
|
int zmk_rgb_underglow_off(void) {
|
||||||
|
zmk_rgb_underglow_transient_off();
|
||||||
|
return zmk_rgb_underglow_save_state();
|
||||||
|
}
|
||||||
|
|
||||||
|
int zmk_rgb_underglow_transient_off(void) {
|
||||||
if (!led_strip)
|
if (!led_strip)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
|
@ -678,7 +687,7 @@ int zmk_rgb_underglow_off(void) {
|
||||||
state.on = false;
|
state.on = false;
|
||||||
zmk_rgb_set_ext_power();
|
zmk_rgb_set_ext_power();
|
||||||
|
|
||||||
return zmk_rgb_underglow_save_state();
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_rgb_underglow_calc_effect(int direction) {
|
int zmk_rgb_underglow_calc_effect(int direction) {
|
||||||
|
|
@ -855,17 +864,19 @@ static int rgb_underglow_auto_state(bool target_wake_state) {
|
||||||
sleep_state.is_awake = target_wake_state;
|
sleep_state.is_awake = target_wake_state;
|
||||||
|
|
||||||
if (sleep_state.is_awake) {
|
if (sleep_state.is_awake) {
|
||||||
if (sleep_state.rgb_state_before_sleeping) {
|
|
||||||
#ifdef UNDERGLOW_LAYER_ENABLED
|
#ifdef UNDERGLOW_LAYER_ENABLED
|
||||||
zmk_rgb_underglow_set_layer(rgb_underglow_top_layer());
|
zmk_rgb_underglow_set_layer(rgb_underglow_top_layer());
|
||||||
#endif
|
return 0;
|
||||||
return zmk_rgb_underglow_on();
|
#else
|
||||||
|
if (sleep_state.rgb_state_before_sleeping) {
|
||||||
|
return zmk_rgb_underglow_transient_on();
|
||||||
} else {
|
} else {
|
||||||
return zmk_rgb_underglow_off();
|
return zmk_rgb_underglow_transient_off();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
sleep_state.rgb_state_before_sleeping = state.on;
|
sleep_state.rgb_state_before_sleeping = state.on;
|
||||||
return zmk_rgb_underglow_off();
|
return zmk_rgb_underglow_transient_off();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue