refactor(rgb): Expose explicit on/off command/API.
This commit is contained in:
parent
24ed1a8eaa
commit
bb2c478af9
4 changed files with 76 additions and 54 deletions
|
@ -5,19 +5,23 @@
|
|||
*/
|
||||
|
||||
#define RGB_TOG_CMD 0
|
||||
#define RGB_HUI_CMD 1
|
||||
#define RGB_HUD_CMD 2
|
||||
#define RGB_SAI_CMD 3
|
||||
#define RGB_SAD_CMD 4
|
||||
#define RGB_BRI_CMD 5
|
||||
#define RGB_BRD_CMD 6
|
||||
#define RGB_SPI_CMD 7
|
||||
#define RGB_SPD_CMD 8
|
||||
#define RGB_EFF_CMD 9
|
||||
#define RGB_EFR_CMD 10
|
||||
#define RGB_COLOR_HSB_CMD 11
|
||||
#define RGB_ON_CMD 1
|
||||
#define RGB_OFF_CMD 2
|
||||
#define RGB_HUI_CMD 3
|
||||
#define RGB_HUD_CMD 4
|
||||
#define RGB_SAI_CMD 5
|
||||
#define RGB_SAD_CMD 6
|
||||
#define RGB_BRI_CMD 7
|
||||
#define RGB_BRD_CMD 8
|
||||
#define RGB_SPI_CMD 9
|
||||
#define RGB_SPD_CMD 10
|
||||
#define RGB_EFF_CMD 11
|
||||
#define RGB_EFR_CMD 12
|
||||
#define RGB_COLOR_HSB_CMD 13
|
||||
|
||||
#define RGB_TOG RGB_TOG_CMD 0
|
||||
#define RGB_ON RGB_ON_CMD 0
|
||||
#define RGB_OFF RGB_OFF_CMD 0
|
||||
#define RGB_HUI RGB_HUI_CMD 0
|
||||
#define RGB_HUD RGB_HUD_CMD 0
|
||||
#define RGB_SAI RGB_SAI_CMD 0
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
#pragma once
|
||||
|
||||
int zmk_rgb_underglow_toggle();
|
||||
int zmk_rgb_underglow_get_state(bool *state);
|
||||
int zmk_rgb_underglow_on();
|
||||
int zmk_rgb_underglow_off();
|
||||
int zmk_rgb_underglow_cycle_effect(int direction);
|
||||
int zmk_rgb_underglow_change_hue(int direction);
|
||||
int zmk_rgb_underglow_change_sat(int direction);
|
||||
|
|
|
@ -25,6 +25,10 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding,
|
|||
switch (binding->param1) {
|
||||
case RGB_TOG_CMD:
|
||||
return zmk_rgb_underglow_toggle();
|
||||
case RGB_ON_CMD:
|
||||
return zmk_rgb_underglow_on();
|
||||
case RGB_OFF_CMD:
|
||||
return zmk_rgb_underglow_off();
|
||||
case RGB_HUI_CMD:
|
||||
return zmk_rgb_underglow_change_hue(1);
|
||||
case RGB_HUD_CMD:
|
||||
|
|
|
@ -105,14 +105,6 @@ static struct led_rgb hsb_to_rgb(struct led_hsb hsb) {
|
|||
return rgb;
|
||||
}
|
||||
|
||||
static void zmk_rgb_underglow_off() {
|
||||
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
|
||||
pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0};
|
||||
}
|
||||
|
||||
led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS);
|
||||
}
|
||||
|
||||
static void zmk_rgb_underglow_effect_solid() {
|
||||
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
|
||||
int hue = state.hue;
|
||||
|
@ -196,10 +188,6 @@ K_WORK_DEFINE(underglow_work, zmk_rgb_underglow_tick);
|
|||
|
||||
static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) {
|
||||
if (!state.on) {
|
||||
zmk_rgb_underglow_off();
|
||||
|
||||
k_timer_stop(timer);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -292,6 +280,59 @@ int zmk_rgb_underglow_save_state() {
|
|||
#endif
|
||||
}
|
||||
|
||||
int zmk_rgb_underglow_get_state(bool *on_off) {
|
||||
if (!led_strip)
|
||||
return -ENODEV;
|
||||
|
||||
*on_off = state.on;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int zmk_rgb_underglow_on() {
|
||||
if (!led_strip)
|
||||
return -ENODEV;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER)
|
||||
if (ext_power != NULL) {
|
||||
int rc = ext_power_enable(ext_power);
|
||||
if (rc != 0) {
|
||||
LOG_ERR("Unable to enable EXT_POWER: %d", rc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
state.on = true;
|
||||
state.animation_step = 0;
|
||||
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50));
|
||||
|
||||
return zmk_rgb_underglow_save_state();
|
||||
}
|
||||
|
||||
int zmk_rgb_underglow_off() {
|
||||
if (!led_strip)
|
||||
return -ENODEV;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER)
|
||||
if (ext_power != NULL) {
|
||||
int rc = ext_power_disable(ext_power);
|
||||
if (rc != 0) {
|
||||
LOG_ERR("Unable to disable EXT_POWER: %d", rc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < STRIP_NUM_PIXELS; i++) {
|
||||
pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0};
|
||||
}
|
||||
|
||||
led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS);
|
||||
|
||||
k_timer_stop(&underglow_tick);
|
||||
state.on = false;
|
||||
|
||||
return zmk_rgb_underglow_save_state();
|
||||
}
|
||||
|
||||
int zmk_rgb_underglow_cycle_effect(int direction) {
|
||||
if (!led_strip)
|
||||
return -ENODEV;
|
||||
|
@ -313,37 +354,7 @@ int zmk_rgb_underglow_cycle_effect(int direction) {
|
|||
}
|
||||
|
||||
int zmk_rgb_underglow_toggle() {
|
||||
if (!led_strip)
|
||||
return -ENODEV;
|
||||
|
||||
state.on = !state.on;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER)
|
||||
if (ext_power != NULL) {
|
||||
int rc;
|
||||
|
||||
if (state.on) {
|
||||
rc = ext_power_enable(ext_power);
|
||||
} else {
|
||||
rc = ext_power_disable(ext_power);
|
||||
}
|
||||
|
||||
if (rc != 0) {
|
||||
LOG_ERR("Unable to toggle EXT_POWER: %d", rc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (state.on) {
|
||||
state.animation_step = 0;
|
||||
k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50));
|
||||
} else {
|
||||
zmk_rgb_underglow_off();
|
||||
|
||||
k_timer_stop(&underglow_tick);
|
||||
}
|
||||
|
||||
return zmk_rgb_underglow_save_state();
|
||||
return state.on ? zmk_rgb_underglow_off() : zmk_rgb_underglow_on();
|
||||
}
|
||||
|
||||
int zmk_rgb_underglow_set_hsb(uint16_t hue, uint8_t saturation, uint8_t brightness) {
|
||||
|
|
Loading…
Add table
Reference in a new issue