@ -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
k_timer_start ( & underglow_tick , K_NO_WAIT , K_MSEC ( 50 ) ) ;
# 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 ) ) ;
}
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 ) ;