summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorPete Johanson <peter@peterjohanson.com>2021-01-20 10:57:03 -0500
committerPete Johanson <peter@peterjohanson.com>2021-02-09 01:27:50 -0500
commitbb2c478af915616640d78ae9ba984fbf1f817185 (patch)
treec4a0192b9df440f0413544aa7b6e80f81cf01885 /app/src
parent24ed1a8eaa013aa729f394554991507e95f3f99d (diff)
refactor(rgb): Expose explicit on/off command/API.
Diffstat (limited to 'app/src')
-rw-r--r--app/src/behaviors/behavior_rgb_underglow.c4
-rw-r--r--app/src/rgb_underglow.c87
2 files changed, 53 insertions, 38 deletions
diff --git a/app/src/behaviors/behavior_rgb_underglow.c b/app/src/behaviors/behavior_rgb_underglow.c
index eb4680e..f9eaa13 100644
--- a/app/src/behaviors/behavior_rgb_underglow.c
+++ b/app/src/behaviors/behavior_rgb_underglow.c
@@ -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:
diff --git a/app/src/rgb_underglow.c b/app/src/rgb_underglow.c
index f3bd7a9..1e07fa2 100644
--- a/app/src/rgb_underglow.c
+++ b/app/src/rgb_underglow.c
@@ -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,60 +280,83 @@ int zmk_rgb_underglow_save_state() {
#endif
}
-int zmk_rgb_underglow_cycle_effect(int direction) {
+int zmk_rgb_underglow_get_state(bool *on_off) {
if (!led_strip)
return -ENODEV;
- if (state.current_effect == 0 && direction < 0) {
- state.current_effect = UNDERGLOW_EFFECT_NUMBER - 1;
- return 0;
- }
+ *on_off = state.on;
+ return 0;
+}
- state.current_effect += direction;
+int zmk_rgb_underglow_on() {
+ if (!led_strip)
+ return -ENODEV;
- if (state.current_effect >= UNDERGLOW_EFFECT_NUMBER) {
- state.current_effect = 0;
+#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_toggle() {
+int zmk_rgb_underglow_off() {
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);
- }
-
+ int rc = ext_power_disable(ext_power);
if (rc != 0) {
- LOG_ERR("Unable to toggle EXT_POWER: %d", rc);
+ LOG_ERR("Unable to disable 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();
+ 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;
- k_timer_stop(&underglow_tick);
+ if (state.current_effect == 0 && direction < 0) {
+ state.current_effect = UNDERGLOW_EFFECT_NUMBER - 1;
+ return 0;
}
+ state.current_effect += direction;
+
+ if (state.current_effect >= UNDERGLOW_EFFECT_NUMBER) {
+ state.current_effect = 0;
+ }
+
+ state.animation_step = 0;
+
return zmk_rgb_underglow_save_state();
}
+int zmk_rgb_underglow_toggle() {
+ 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) {
if (hue > 360 || saturation > 100 || brightness > 100) {
return -ENOTSUP;