From 240e57b3918d5a8f71977bd8ab335909b09a2753 Mon Sep 17 00:00:00 2001 From: darknao Date: Thu, 15 Jan 2026 21:34:03 +0100 Subject: [PATCH] feat(underglow): add underglow_color_changed event --- app/CMakeLists.txt | 1 + app/include/zmk/events/underglow_color_changed.h | 16 ++++++++++++++++ app/src/events/underglow_color_changed.c | 10 ++++++++++ app/src/rgb_underglow.c | 12 ++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 app/include/zmk/events/underglow_color_changed.h create mode 100644 app/src/events/underglow_color_changed.c diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 80f1c9537..ab18e1586 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -90,6 +90,7 @@ endif() target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_underglow_color.c) +target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/events/underglow_color_changed.c) target_sources_ifdef(CONFIG_ZMK_BACKLIGHT app PRIVATE src/behaviors/behavior_backlight.c) target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery_state_changed.c) diff --git a/app/include/zmk/events/underglow_color_changed.h b/app/include/zmk/events/underglow_color_changed.h new file mode 100644 index 000000000..0d0ddf37d --- /dev/null +++ b/app/include/zmk/events/underglow_color_changed.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2024 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +struct zmk_underglow_color_changed { + uint32_t layers; + bool wakeup; +}; + +ZMK_EVENT_DECLARE(zmk_underglow_color_changed); diff --git a/app/src/events/underglow_color_changed.c b/app/src/events/underglow_color_changed.c new file mode 100644 index 000000000..c00bdc6b3 --- /dev/null +++ b/app/src/events/underglow_color_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(zmk_underglow_color_changed); \ No newline at end of file diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index a2bd87697..bd5947ea9 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -29,6 +29,8 @@ #include #include #include +#include + #include #include @@ -666,6 +668,15 @@ static int rgb_underglow_event_listener(const zmk_event_t *eh) { zmk_rgb_underglow_set_layer(layer, true); return 0; } + if (as_zmk_underglow_color_changed(eh)) { + const struct zmk_underglow_color_changed *ev = as_zmk_underglow_color_changed(eh); + uint8_t layer = rgb_underglow_top_layer(); + LOG_DBG("refresh layers %d, current: %d, wakeup: %d", ev->layers, layer, ev->wakeup); + if ((ev->layers & (BIT(layer))) == BIT(layer)) { + zmk_rgb_underglow_set_layer(rgb_underglow_top_layer(), ev->wakeup); + } + return 0; + } #endif /* UNDERGLOW_LAYER_ENABLED */ #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB) @@ -692,6 +703,7 @@ ZMK_SUBSCRIPTION(rgb_underglow, zmk_usb_conn_state_changed); #if IS_ENABLED(UNDERGLOW_LAYER_ENABLED) ZMK_SUBSCRIPTION(rgb_underglow, zmk_split_peripheral_layer_changed); +ZMK_SUBSCRIPTION(rgb_underglow, zmk_underglow_color_changed); #endif SYS_INIT(zmk_rgb_underglow_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);