color range and new funtion to scale hue added
This commit is contained in:
parent
58897e29a5
commit
a94f21df23
2 changed files with 73 additions and 12 deletions
39
app/Kconfig
39
app/Kconfig
|
@ -267,12 +267,12 @@ config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN
|
config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN
|
||||||
int "Color when battery is at 0%"
|
int "Color when battery is at 0%"
|
||||||
range 0 359
|
range 0 360
|
||||||
default 0
|
default 0
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX
|
config ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX
|
||||||
int "Color when battery is at 100%"
|
int "Color when battery is at 100%"
|
||||||
range 0 359
|
range 0 360
|
||||||
default 100
|
default 100
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_LAYER
|
config ZMK_RGB_UNDERGLOW_STATUS_LAYER
|
||||||
|
@ -285,6 +285,16 @@ config ZMK_RGB_UNDERGLOW_STATUS_LAYER_N
|
||||||
default 1
|
default 1
|
||||||
depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER
|
depends on ZMK_RGB_UNDERGLOW_STATUS_LAYER
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_LAYER_COLOR_MIN
|
||||||
|
int "Color when lower layer is selected."
|
||||||
|
range 0 360
|
||||||
|
default 320
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_LAYER_COLOR_MAX
|
||||||
|
int "Color when highest layer is selected."
|
||||||
|
range 0 360
|
||||||
|
default 0
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
|
config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
|
||||||
bool "Shows output status on a LED"
|
bool "Shows output status on a LED"
|
||||||
default y
|
default y
|
||||||
|
@ -295,6 +305,16 @@ config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_N
|
||||||
default 2
|
default 2
|
||||||
depends on ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
|
depends on ZMK_RGB_UNDERGLOW_STATUS_OUTPUT
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_COLOR_MIN
|
||||||
|
int "Color when usb is selected."
|
||||||
|
range 0 360
|
||||||
|
default 50
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_COLOR_MAX
|
||||||
|
int "Color when ble is selected."
|
||||||
|
range 0 360
|
||||||
|
default 300
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_BLE
|
config ZMK_RGB_UNDERGLOW_STATUS_BLE
|
||||||
bool "Shows on a LED the status of the selected ble device."
|
bool "Shows on a LED the status of the selected ble device."
|
||||||
default y
|
default y
|
||||||
|
@ -305,6 +325,16 @@ config ZMK_RGB_UNDERGLOW_STATUS_BLE_N
|
||||||
default 3
|
default 3
|
||||||
depends on ZMK_RGB_UNDERGLOW_STATUS_BLE
|
depends on ZMK_RGB_UNDERGLOW_STATUS_BLE
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_BLE_COLOR_MIN
|
||||||
|
int "Color when ble selected is the first one."
|
||||||
|
range 0 360
|
||||||
|
default 10
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_BLE_COLOR_MAX
|
||||||
|
int "Color when ble selected is the last one."
|
||||||
|
range 0 360
|
||||||
|
default 320
|
||||||
|
|
||||||
config ZMK_RGB_UNDERGLOW_STATUS_CAPS
|
config ZMK_RGB_UNDERGLOW_STATUS_CAPS
|
||||||
bool "Shows on a LED the status of caps word."
|
bool "Shows on a LED the status of caps word."
|
||||||
default y
|
default y
|
||||||
|
@ -314,6 +344,11 @@ config ZMK_RGB_UNDERGLOW_STATUS_CAPS_N
|
||||||
range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
|
range 0 ZMK_RGB_UNDERGLOW_NUM_LEDS
|
||||||
default 4
|
default 4
|
||||||
|
|
||||||
|
config ZMK_RGB_UNDERGLOW_STATUS_CAPS_COLOR
|
||||||
|
int "Color when caps word is on."
|
||||||
|
range 0 360
|
||||||
|
default 360
|
||||||
|
|
||||||
#ZMK_RGB_UNDERGLOW
|
#ZMK_RGB_UNDERGLOW
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -81,10 +81,16 @@ static struct zmk_led_hsb hsb_scale_zero_max(struct zmk_led_hsb hsb) {
|
||||||
return hsb;
|
return hsb;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint16_t hue_scale_range(uint16_t hue) {
|
static uint16_t hue_scale_to_range(uint16_t hue, uint16_t from_max, uint16_t to_min, uint16_t to_max) {
|
||||||
int hue_d = abs(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX - CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN);
|
if (to_max > HUE_MAX) to_max = HUE_MAX;
|
||||||
int direc = hue_d - abs(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX - CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN - 1);
|
if (to_min > HUE_MAX) to_min = HUE_MAX;
|
||||||
hue = (hue * hue_d / 100) + (CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN * direc);
|
|
||||||
|
if (to_min < 0) to_min = 0;
|
||||||
|
if (to_max < 0) to_max = 0;
|
||||||
|
|
||||||
|
int hue_d = abs(to_max - to_min);
|
||||||
|
int direc = hue_d - abs(to_max - to_min - 1);
|
||||||
|
hue = (hue * hue_d / from_max) + (to_min * direc);
|
||||||
return hue;
|
return hue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,26 +204,42 @@ static void zmk_rgb_underglow_effect_status() {
|
||||||
|
|
||||||
// ------- 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)
|
||||||
status_hsb.h = zmk_keymap_highest_layer_active() * 20;
|
status_hsb.h = hue_scale_to_range(
|
||||||
|
zmk_keymap_highest_layer_active(),
|
||||||
|
zmk_keymap_number_of_layers(),
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_COLOR_MIN,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_LAYER_COLOR_MAX
|
||||||
|
);
|
||||||
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(status_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)
|
||||||
status_hsb.h = zmk_endpoints_selected() * 90;
|
//status_hsb.h = zmk_endpoints_selected() * 90;
|
||||||
|
status_hsb.h = hue_scale_to_range(
|
||||||
|
zmk_endpoints_selected(),
|
||||||
|
ZMK_ENDPOINT_BLE,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_COLOR_MIN,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_OUTPUT_COLOR_MAX
|
||||||
|
);
|
||||||
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(status_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)
|
||||||
status_hsb.h = zmk_ble_active_profile_index() * 80;
|
status_hsb.h = hue_scale_to_range(
|
||||||
|
zmk_ble_active_profile_index(),
|
||||||
|
ZMK_BLE_PROFILE_COUNT,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE_COLOR_MIN,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BLE_COLOR_MAX
|
||||||
|
);
|
||||||
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(status_hsb));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ------- Turn on the caps word for status led -------
|
// ------- Turn on the caps word for status led -------
|
||||||
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_CAPS)
|
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_STATUS_CAPS)
|
||||||
struct zmk_led_hsb caps_word_hsb = state.color;
|
struct zmk_led_hsb caps_word_hsb = state.color;
|
||||||
caps_word_hsb.h = zmk_caps_word_state() * 80;
|
caps_word_hsb.h = zmk_caps_word_state() * CONFIG_ZMK_RGB_UNDERGLOW_STATUS_CAPS_COLOR;
|
||||||
caps_word_hsb.b = zmk_caps_word_state() * BRT_MAX;
|
caps_word_hsb.b = zmk_caps_word_state() * BRT_MAX;
|
||||||
|
|
||||||
pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_CAPS_N] = hsb_to_rgb(hsb_scale_zero_max(caps_word_hsb));
|
pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_CAPS_N] = hsb_to_rgb(hsb_scale_zero_max(caps_word_hsb));
|
||||||
|
@ -227,11 +249,15 @@ static void zmk_rgb_underglow_effect_status() {
|
||||||
// ------- 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 = hue_scale_range(zmk_battery_state_of_charge());
|
battery_hsb.h = hue_scale_to_range(
|
||||||
|
zmk_battery_state_of_charge(),
|
||||||
|
100,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MIN,
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_COLOR_MAX
|
||||||
|
);
|
||||||
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_zero_max(battery_hsb));
|
pixels[CONFIG_ZMK_RGB_UNDERGLOW_STATUS_BATTERY_N] = hsb_to_rgb(hsb_scale_zero_max(battery_hsb));
|
||||||
//LOG_DBG("---------> Battery Level: %d", battery_hsb.h);
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue