From d52d946910614aed5b527d53f5d20ee79af3bde4 Mon Sep 17 00:00:00 2001 From: SpaceComet Date: Wed, 28 Sep 2022 00:05:55 +0000 Subject: [PATCH] Testing battery --- app/Kconfig | 22 +++++++++++++++- app/src/rgb_underglow.c | 58 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/app/Kconfig b/app/Kconfig index f89d3279..76d17c4f 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -236,7 +236,7 @@ config ZMK_RGB_UNDERGLOW_SPD_START config ZMK_RGB_UNDERGLOW_EFF_START int "RGB underglow start effect int value related to the effect enum list" - range 0 3 + range 0 4 default 0 config ZMK_RGB_UNDERGLOW_ON_START @@ -250,6 +250,26 @@ config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB bool "Turn off RGB underglow when USB is disconnected" depends on USB_DEVICE_STACK +config ZMK_RGB_UNDERGLOW_STATUS_BATTERY + bool "Shows battery status on a LED" + default y + +config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N + int "LED number to show the battery status" + range 0 26 + default 0 + depends on ZMK_RGB_UNDERGLOW_STATUS_BATTERY + +config ZMK_RGB_UNDERGLOW_STATUS_LAYER + bool "Shows layer status on a LED" + default y + +config ZMK_RGB_UNDERGLOW_STATUS_LAYER_N + int "LED number to show the layer status" + range 0 26 + default 1 + depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER + #ZMK_RGB_UNDERGLOW endif diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 25d4466e..6a69b3cf 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -25,6 +25,9 @@ #include #include +#include +#include + LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); #define STRIP_LABEL DT_LABEL(DT_CHOSEN(zmk_underglow)) @@ -42,6 +45,7 @@ enum rgb_underglow_effect { UNDERGLOW_EFFECT_BREATHE, UNDERGLOW_EFFECT_SPECTRUM, UNDERGLOW_EFFECT_SWIRL, + UNDERGLOW_EFFECT_STATUS, UNDERGLOW_EFFECT_NUMBER // Used to track number of underglow effects }; @@ -168,6 +172,37 @@ static void zmk_rgb_underglow_effect_swirl() { state.animation_step = state.animation_step % HUE_MAX; } +static void zmk_rgb_underglow_effect_status() { + struct zmk_led_hsb hsb = state.color; + hsb.b = 0; + + // Turn off all LEDs + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + pixels[i] = hsb_to_rgb(hsb_scale_zero_max(hsb)); + } + + // and turn on specific ones. + + // ------- Turn on the layer status leds ------- + struct zmk_led_hsb layer_hsb = state.color; + #if CONFIG_ZMK_SPLIT_ROLE_CENTRAL + layer_hsb.h = zmk_keymap_highest_layer_active() * 20; + #endif + + #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER) + pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_N] = hsb_to_rgb(hsb_scale_min_max(layer_hsb)); + #endif + + // ------- Turn on the battery status led ------- + struct zmk_led_hsb battery_hsb = state.color; + battery_hsb.h = zmk_battery_state_of_charge(); + + #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY) + pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N] = hsb_to_rgb(hsb_scale_min_max(battery_hsb)); + LOG_DBG("---------> Battery Level: %d", battery_hsb.h); + #endif +} + static void zmk_rgb_underglow_tick(struct k_work *work) { switch (state.current_effect) { case UNDERGLOW_EFFECT_SOLID: @@ -182,6 +217,9 @@ static void zmk_rgb_underglow_tick(struct k_work *work) { case UNDERGLOW_EFFECT_SWIRL: zmk_rgb_underglow_effect_swirl(); break; + case UNDERGLOW_EFFECT_STATUS: + zmk_rgb_underglow_effect_status(); + break; } led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); @@ -505,4 +543,24 @@ ZMK_SUBSCRIPTION(rgb_underglow, zmk_activity_state_changed); ZMK_SUBSCRIPTION(rgb_underglow, zmk_usb_conn_state_changed); #endif +// ---------------------------------------------------------------------------- +#if IS_ENABLED(ZMK_RGB_UNDERGLOW_STATUS_BATTERY) +static int rgb_status_battery_event_listener(const zmk_event_t *eh) { + struct zmk_led_hsb hsb = state.color; + //state.pressed = abs(state.pressed - 1); + //hsb.h = abs(state.pressed - 1) * 20; + //hsb.b + hsb.h = zmk_battery_state_of_charge(); + + //pixels[i] = hsb_to_rgb(hsb_scale_zero_max(hsb)); + state.color = hsb; + +} + +ZMK_LISTENER(rgb_status_press, rgb_status_battery_event_listener); +ZMK_SUBSCRIPTION(rgb_status_press, zmk_battery_state_changed); +#endif // IS_ENABLED(ZMK_RGB_UNDERGLOW_STATUS_BATTERY) + +// ---------------------------------------------------------------------------- + SYS_INIT(zmk_rgb_underglow_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);