From 9f2dd537ee6ca6b01f4f7cd75ad146b12a2a4e30 Mon Sep 17 00:00:00 2001 From: SpaceComet Date: Fri, 30 Sep 2022 00:00:57 +0000 Subject: [PATCH] color selection for battery status added --- app/Kconfig | 23 +++++++++++++++++++---- app/src/rgb_underglow.c | 32 +++++++++++++++++--------------- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/app/Kconfig b/app/Kconfig index e797efc1..dbe8aa22 100644 --- a/app/Kconfig +++ b/app/Kconfig @@ -250,23 +250,38 @@ 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_NUM_LEDS + int "Numer of leds on the pcb" + range 0 100 + default 100 + 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 + range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS default 0 depends on ZMK_RGB_UNDERGLOW_STATUS_BATTERY +config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN + int "Color when battery is at 0%" + range 0 359 + default 0 + +config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX + int "Color when battery is at 100%" + range 0 359 + default 100 + 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 + range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS default 1 depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER @@ -276,7 +291,7 @@ config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N int "LED number to show the output status" - range 0 26 + range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS default 2 depends on ZMK_RGB_UNDERGLOW_STATUS_OUTPUT @@ -286,7 +301,7 @@ config ZMK_RGB_UNDERGLOW_STATUS_BLE config ZMK_RGB_UNDERGLOW_STATUS_BLE_N int "LED number to show the selected ble" - range 0 26 + range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS default 3 depends on ZMK_RGB_UNDERGLOW_STATUS_BLE diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c index 625de2bc..2fa2e5b4 100644 --- a/app/src/rgb_underglow.c +++ b/app/src/rgb_underglow.c @@ -80,6 +80,13 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) { return hsb; } +static uint8_t hue_scale_range(uint8_t hue) { + int hue_d = abs(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX - CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN); + int direc = hue_d - abs(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX - CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN - 1); + hue = (hue * hue_d / 100) + (CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN * direc); + return hue; +} + static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) { double r, g, b; @@ -186,36 +193,31 @@ static void zmk_rgb_underglow_effect_status() { // and turn on specific ones. #if CONFIG_ZMK_SPLIT_ROLE_CENTRAL + struct zmk_led_hsb status_hsb = state.color; + // ------- Turn on the layer status leds ------- - #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER) - struct zmk_led_hsb layer_hsb = state.color; - layer_hsb.h = zmk_keymap_highest_layer_active() * 20; - - pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_N] = hsb_to_rgb(hsb_scale_min_max(layer_hsb)); + #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER) + status_hsb.h = zmk_keymap_highest_layer_active() * 20; + pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_N] = hsb_to_rgb(hsb_scale_min_max(status_hsb)); #endif // ------- Turn on the output status led ------- #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT) - struct zmk_led_hsb output_hsb = state.color; - output_hsb.h = zmk_endpoints_selected() * 40; - - pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N] = hsb_to_rgb(hsb_scale_min_max(output_hsb)); + status_hsb.h = zmk_endpoints_selected() * 40; + pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N] = hsb_to_rgb(hsb_scale_min_max(status_hsb)); #endif // ------- Turn on the status led for selected ble ------- #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE) - struct zmk_led_hsb ble_hsb = state.color; - ble_hsb.h = zmk_ble_active_profile_index() * 80; - - pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE_N] = hsb_to_rgb(hsb_scale_min_max(ble_hsb)); - //LOG_DBG("---------> BLE selected: %d", ble_hsb.h); + status_hsb.h = zmk_ble_active_profile_index() * 80; + pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE_N] = hsb_to_rgb(hsb_scale_min_max(status_hsb)); #endif #endif // ------- Turn on the battery status led ------- #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY) struct zmk_led_hsb battery_hsb = state.color; - battery_hsb.h = zmk_battery_state_of_charge(); + battery_hsb.h = hue_scale_range(zmk_battery_state_of_charge()); battery_hsb.b = zmk_battery_state_of_charge(); pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N] = hsb_to_rgb(hsb_scale_min_max(battery_hsb));