feat(underglow): Add RGB auto off timeout on idle and on usb disconnect
Two new options for functionality to enable/disable RGB for USB status or idle events. Co-authored-by: Pete Johanson <peter@peterjohanson.com> Co-authored-by: ReFil <harryherring@gmail.com>
This commit is contained in:
parent
38e079ef37
commit
90e070b427
2 changed files with 69 additions and 1 deletions
|
@ -243,6 +243,13 @@ config ZMK_RGB_UNDERGLOW_ON_START
|
||||||
bool "RGB underglow starts on by default"
|
bool "RGB underglow starts on by default"
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE
|
||||||
|
bool "Turn off RGB underglow when keyboard goes into idle state"
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB
|
||||||
|
bool "Turn off RGB underglow when USB is disconnected"
|
||||||
|
depends on USB_DEVICE_STACK
|
||||||
|
|
||||||
#ZMK_RGB_UNDERGLOW
|
#ZMK_RGB_UNDERGLOW
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,12 @@
|
||||||
|
|
||||||
#include <zmk/rgb_underglow.h>
|
#include <zmk/rgb_underglow.h>
|
||||||
|
|
||||||
|
#include <zmk/activity.h>
|
||||||
|
#include <zmk/usb.h>
|
||||||
|
#include <zmk/event_manager.h>
|
||||||
|
#include <zmk/events/activity_state_changed.h>
|
||||||
|
#include <zmk/events/usb_conn_state_changed.h>
|
||||||
|
|
||||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
|
|
||||||
#define STRIP_LABEL DT_LABEL(DT_CHOSEN(zmk_underglow))
|
#define STRIP_LABEL DT_LABEL(DT_CHOSEN(zmk_underglow))
|
||||||
|
@ -265,7 +271,13 @@ static int zmk_rgb_underglow_init(const struct device *_arg) {
|
||||||
settings_load_subtree("rgb/underglow");
|
settings_load_subtree("rgb/underglow");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB)
|
||||||
|
state.on = zmk_usb_is_powered();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (state.on) {
|
||||||
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50));
|
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50));
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -444,4 +456,53 @@ int zmk_rgb_underglow_change_spd(int direction) {
|
||||||
return zmk_rgb_underglow_save_state();
|
return zmk_rgb_underglow_save_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE) || \
|
||||||
|
IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB)
|
||||||
|
static int rgb_underglow_auto_state(bool *prev_state, bool new_state) {
|
||||||
|
if (state.on == new_state) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (new_state) {
|
||||||
|
state.on = *prev_state;
|
||||||
|
*prev_state = false;
|
||||||
|
return zmk_rgb_underglow_on();
|
||||||
|
} else {
|
||||||
|
state.on = false;
|
||||||
|
*prev_state = true;
|
||||||
|
return zmk_rgb_underglow_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int rgb_underglow_event_listener(const zmk_event_t *eh) {
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE)
|
||||||
|
if (as_zmk_activity_state_changed(eh)) {
|
||||||
|
static bool prev_state = false;
|
||||||
|
return rgb_underglow_auto_state(&prev_state,
|
||||||
|
zmk_activity_get_state() == ZMK_ACTIVITY_ACTIVE);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB)
|
||||||
|
if (as_zmk_usb_conn_state_changed(eh)) {
|
||||||
|
static bool prev_state = false;
|
||||||
|
return rgb_underglow_auto_state(&prev_state, zmk_usb_is_powered());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return -ENOTSUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
ZMK_LISTENER(rgb_underglow, rgb_underglow_event_listener);
|
||||||
|
#endif // IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE) ||
|
||||||
|
// IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB)
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE)
|
||||||
|
ZMK_SUBSCRIPTION(rgb_underglow, zmk_activity_state_changed);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB)
|
||||||
|
ZMK_SUBSCRIPTION(rgb_underglow, zmk_usb_conn_state_changed);
|
||||||
|
#endif
|
||||||
|
|
||||||
SYS_INIT(zmk_rgb_underglow_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);
|
SYS_INIT(zmk_rgb_underglow_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);
|
||||||
|
|
Loading…
Reference in a new issue