RGB underglow: dim or disable when battery low

Disable underglow when battery below 10%, halve brightness when battery below 20%
This commit is contained in:
Donald Gordon 2022-09-28 21:11:04 +09:00 committed by Chris Andreae
parent dbdaf2f935
commit ea8bf0b936
No known key found for this signature in database
GPG key ID: 3AA9D181B3ABD33F

View file

@ -185,6 +185,7 @@ static void zmk_led_write_pixels() {
static struct led_rgb led_buffer[STRIP_NUM_PIXELS];
int bat0 = zmk_battery_state_of_charge();
int blend = 0;
int reset_ext_power = 0;
if (state.status_active) {
blend = zmk_led_generate_status();
}
@ -194,6 +195,18 @@ static void zmk_led_write_pixels() {
led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS);
return;
}
// battery below minimum charge
if (bat0 < 10) {
memset(pixels, 0, sizeof(struct led_rgb) * STRIP_NUM_PIXELS);
if (state.on) {
int c_power = ext_power_get(ext_power);
if (c_power && !state.status_active) {
// power is on, RGB underglow is on, but battery is too low
state.on = false;
reset_ext_power = true;
}
}
}
if (blend == 0) {
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
@ -216,7 +229,20 @@ static void zmk_led_write_pixels() {
}
}
// battery below 20%, reduce LED brightness
if (bat0 < 20) {
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
led_buffer[i].r = led_buffer[i].r >> 1;
led_buffer[i].g = led_buffer[i].g >> 1;
led_buffer[i].b = led_buffer[i].b >> 1;
}
}
led_strip_update_rgb(led_strip, led_buffer, STRIP_NUM_PIXELS);
if (reset_ext_power) {
zmk_rgb_set_ext_power();
}
}
#define UNDERGLOW_INDICATORS DT_PATH(underglow_indicators)
@ -485,6 +511,12 @@ int zmk_rgb_set_ext_power() {
c_power = 0;
}
int desired_state = state.on || state.status_active;
// force power off, when battery low (<10%)
if (state.on && !state.status_active) {
if (zmk_battery_state_of_charge() < 10) {
desired_state = false;
}
}
if (desired_state && !c_power) {
int rc = ext_power_enable(ext_power);
if (rc != 0) {