color selection for battery status added

This commit is contained in:
SpaceComet 2022-09-30 00:00:57 +00:00
parent 34264e3d92
commit 9f2dd537ee
2 changed files with 36 additions and 19 deletions

View file

@ -250,23 +250,38 @@ config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB
bool "Turn off RGB underglow when USB is disconnected" bool "Turn off RGB underglow when USB is disconnected"
depends on USB_DEVICE_STACK 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 config ZMK_RGB_UNDERGLOW_STATUS_BATTERY
bool "Shows battery status on a LED" bool "Shows battery status on a LED"
default y default y
config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N
int "LED number to show the battery status" int "LED number to show the battery status"
range 0 26 range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
default 0 default 0
depends on ZMK_RGB_UNDERGLOW_STATUS_BATTERY 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 config ZMK_RGB_UNDERGLOW_STATUS_LAYER
bool "Shows layer status on a LED" bool "Shows layer status on a LED"
default y default y
config ZMK_RGB_UNDERGLOW_STATUS_LAYER_N config ZMK_RGB_UNDERGLOW_STATUS_LAYER_N
int "LED number to show the layer status" int "LED number to show the layer status"
range 0 26 range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
default 1 default 1
depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER
@ -276,7 +291,7 @@ config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N
int "LED number to show the output status" int "LED number to show the output status"
range 0 26 range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
default 2 default 2
depends on ZMK_RGB_UNDERGLOW_STATUS_OUTPUT depends on ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
@ -286,7 +301,7 @@ config ZMK_RGB_UNDERGLOW_STATUS_BLE
config ZMK_RGB_UNDERGLOW_STATUS_BLE_N config ZMK_RGB_UNDERGLOW_STATUS_BLE_N
int "LED number to show the selected ble" int "LED number to show the selected ble"
range 0 26 range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
default 3 default 3
depends on ZMK_RGB_UNDERGLOW_STATUS_BLE depends on ZMK_RGB_UNDERGLOW_STATUS_BLE

View file

@ -80,6 +80,13 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) {
return 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) { static struct led_rgb hsb_to_rgb(struct zmk_led_hsb hsb) {
double r, g, b; double r, g, b;
@ -186,36 +193,31 @@ static void zmk_rgb_underglow_effect_status() {
// and turn on specific ones. // and turn on specific ones.
#if CONFIG_ZMK_SPLIT_ROLE_CENTRAL #if CONFIG_ZMK_SPLIT_ROLE_CENTRAL
struct zmk_led_hsb status_hsb = state.color;
// ------- Turn on the layer status leds ------- // ------- Turn on the layer status leds -------
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER) #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER)
struct zmk_led_hsb layer_hsb = state.color; status_hsb.h = zmk_keymap_highest_layer_active() * 20;
layer_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));
pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_N] = hsb_to_rgb(hsb_scale_min_max(layer_hsb));
#endif #endif
// ------- Turn on the output status led ------- // ------- Turn on the output status led -------
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT) #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT)
struct zmk_led_hsb output_hsb = state.color; status_hsb.h = zmk_endpoints_selected() * 40;
output_hsb.h = zmk_endpoints_selected() * 40; pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N] = hsb_to_rgb(hsb_scale_min_max(status_hsb));
pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N] = hsb_to_rgb(hsb_scale_min_max(output_hsb));
#endif #endif
// ------- Turn on the status led for selected ble ------- // ------- Turn on the status led for selected ble -------
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE) #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE)
struct zmk_led_hsb ble_hsb = state.color; status_hsb.h = zmk_ble_active_profile_index() * 80;
ble_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));
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);
#endif #endif
#endif #endif
// ------- Turn on the battery status led ------- // ------- Turn on the battery status led -------
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY) #if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY)
struct zmk_led_hsb battery_hsb = state.color; 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(); 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)); pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N] = hsb_to_rgb(hsb_scale_min_max(battery_hsb));