diff options
| -rw-r--r-- | keyboards/ergodox/infinity/visualizer.c | 11 | ||||
| -rw-r--r-- | keyboards/ergodox/keymaps/default/visualizer.c | 9 | ||||
| -rw-r--r-- | quantum/visualizer/lcd_backlight_keyframes.c | 61 | ||||
| -rw-r--r-- | quantum/visualizer/lcd_backlight_keyframes.h | 27 | ||||
| -rw-r--r-- | quantum/visualizer/visualizer.c | 46 | ||||
| -rw-r--r-- | quantum/visualizer/visualizer.h | 4 | ||||
| -rw-r--r-- | quantum/visualizer/visualizer.mk | 1 | 
7 files changed, 100 insertions, 59 deletions
| diff --git a/keyboards/ergodox/infinity/visualizer.c b/keyboards/ergodox/infinity/visualizer.c index 3abed08db0..bbed4e9897 100644 --- a/keyboards/ergodox/infinity/visualizer.c +++ b/keyboards/ergodox/infinity/visualizer.c @@ -28,6 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "visualizer.h"  #include "lcd_keyframes.h" +#include "lcd_backlight_keyframes.h"  #include "system/serial_link.h"  // To generate an image array like this @@ -140,7 +141,7 @@ static keyframe_animation_t startup_animation = {      .frame_lengths = {0, gfxMillisecondsToTicks(10000), 0},      .frame_functions = {              display_logo, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              enable_visualization      },  }; @@ -150,7 +151,7 @@ static keyframe_animation_t one_led_color = {      .num_frames = 1,      .loop = false,      .frame_lengths = {gfxMillisecondsToTicks(0)}, -    .frame_functions = {keyframe_set_backlight_color}, +    .frame_functions = {backlight_keyframe_set_color},  };  bool swap_led_target_color(keyframe_animation_t* animation, visualizer_state_t* state) { @@ -165,7 +166,7 @@ static keyframe_animation_t two_led_colors = {      .num_frames = 2,      .loop = true,      .frame_lengths = {gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(0)}, -    .frame_functions = {keyframe_set_backlight_color, swap_led_target_color}, +    .frame_functions = {backlight_keyframe_set_color, swap_led_target_color},  };  // The LCD animation alternates between the layer name display and a @@ -190,7 +191,7 @@ static keyframe_animation_t suspend_animation = {      .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},      .frame_functions = {              lcd_keyframe_display_layer_text, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              keyframe_disable_lcd_and_backlight,      },  }; @@ -202,7 +203,7 @@ static keyframe_animation_t resume_animation = {      .frame_functions = {              keyframe_enable_lcd_and_backlight,              display_logo, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              enable_visualization,      },  }; diff --git a/keyboards/ergodox/keymaps/default/visualizer.c b/keyboards/ergodox/keymaps/default/visualizer.c index ef87ac4195..07f5a44ab3 100644 --- a/keyboards/ergodox/keymaps/default/visualizer.c +++ b/keyboards/ergodox/keymaps/default/visualizer.c @@ -28,6 +28,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.  #include "visualizer.h"  #include "lcd_keyframes.h" +#include "lcd_backlight_keyframes.h"  #include "system/serial_link.h"  #include "led.h" @@ -114,7 +115,7 @@ static keyframe_animation_t startup_animation = {      .frame_lengths = {0, gfxMillisecondsToTicks(10000), 0},      .frame_functions = {              display_logo, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              enable_visualization      },  }; @@ -132,7 +133,7 @@ static keyframe_animation_t suspend_animation = {      .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},      .frame_functions = {              lcd_keyframe_display_layer_text, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              keyframe_disable_lcd_and_backlight,      },  }; @@ -144,7 +145,7 @@ static keyframe_animation_t resume_animation = {      .frame_functions = {              keyframe_enable_lcd_and_backlight,              display_logo, -            keyframe_animate_backlight_color, +            backlight_keyframe_animate_color,              enable_visualization,      },  }; @@ -157,7 +158,7 @@ static keyframe_animation_t color_animation = {      // this prevents the color from changing when activating the layer      // momentarily      .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)}, -    .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color}, +    .frame_functions = {keyframe_no_operation, backlight_keyframe_animate_color},  };  void initialize_user_visualizer(visualizer_state_t* state) { diff --git a/quantum/visualizer/lcd_backlight_keyframes.c b/quantum/visualizer/lcd_backlight_keyframes.c new file mode 100644 index 0000000000..0964737087 --- /dev/null +++ b/quantum/visualizer/lcd_backlight_keyframes.c @@ -0,0 +1,61 @@ +/* Copyright 2017 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +#include "lcd_backlight_keyframes.h" + +bool backlight_keyframe_animate_color(keyframe_animation_t* animation, visualizer_state_t* state) { +    int frame_length = animation->frame_lengths[animation->current_frame]; +    int current_pos = frame_length - animation->time_left_in_frame; +    uint8_t t_h = LCD_HUE(state->target_lcd_color); +    uint8_t t_s = LCD_SAT(state->target_lcd_color); +    uint8_t t_i = LCD_INT(state->target_lcd_color); +    uint8_t p_h = LCD_HUE(state->prev_lcd_color); +    uint8_t p_s = LCD_SAT(state->prev_lcd_color); +    uint8_t p_i = LCD_INT(state->prev_lcd_color); + +    uint8_t d_h1 = t_h - p_h; //Modulo arithmetic since we want to wrap around +    int d_h2 = t_h - p_h; +    // Chose the shortest way around +    int d_h = abs(d_h2) < d_h1 ? d_h2 : d_h1; +    int d_s = t_s - p_s; +    int d_i = t_i - p_i; + +    int hue = (d_h * current_pos) / frame_length; +    int sat = (d_s * current_pos) / frame_length; +    int intensity = (d_i * current_pos) / frame_length; +    //dprintf("%X -> %X = %X\n", p_h, t_h, hue); +    hue += p_h; +    sat += p_s; +    intensity += p_i; +    state->current_lcd_color = LCD_COLOR(hue, sat, intensity); +    lcd_backlight_color( +            LCD_HUE(state->current_lcd_color), +            LCD_SAT(state->current_lcd_color), +            LCD_INT(state->current_lcd_color)); + +    return true; +} + +bool backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_state_t* state) { +    (void)animation; +    state->prev_lcd_color = state->target_lcd_color; +    state->current_lcd_color = state->target_lcd_color; +    lcd_backlight_color( +            LCD_HUE(state->current_lcd_color), +            LCD_SAT(state->current_lcd_color), +            LCD_INT(state->current_lcd_color)); +    return false; +} diff --git a/quantum/visualizer/lcd_backlight_keyframes.h b/quantum/visualizer/lcd_backlight_keyframes.h new file mode 100644 index 0000000000..8cd5a46c6a --- /dev/null +++ b/quantum/visualizer/lcd_backlight_keyframes.h @@ -0,0 +1,27 @@ +/* Copyright 2017 Fred Sundvik + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ +#define QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ + +#include "visualizer.h" + +// Animates the LCD backlight color between the current color and the target color (of the state) +bool backlight_keyframe_animate_color(keyframe_animation_t* animation, visualizer_state_t* state); +// Sets the backlight color to the target color +bool backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_state_t* state); + +#endif /* QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ */ diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index 514d7c44e0..6ebd806e40 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -228,52 +228,6 @@ bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t*      return false;  } -#ifdef LCD_BACKLIGHT_ENABLE -bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) { -    int frame_length = animation->frame_lengths[animation->current_frame]; -    int current_pos = frame_length - animation->time_left_in_frame; -    uint8_t t_h = LCD_HUE(state->target_lcd_color); -    uint8_t t_s = LCD_SAT(state->target_lcd_color); -    uint8_t t_i = LCD_INT(state->target_lcd_color); -    uint8_t p_h = LCD_HUE(state->prev_lcd_color); -    uint8_t p_s = LCD_SAT(state->prev_lcd_color); -    uint8_t p_i = LCD_INT(state->prev_lcd_color); - -    uint8_t d_h1 = t_h - p_h; //Modulo arithmetic since we want to wrap around -    int d_h2 = t_h - p_h; -    // Chose the shortest way around -    int d_h = abs(d_h2) < d_h1 ? d_h2 : d_h1; -    int d_s = t_s - p_s; -    int d_i = t_i - p_i; - -    int hue = (d_h * current_pos) / frame_length; -    int sat = (d_s * current_pos) / frame_length; -    int intensity = (d_i * current_pos) / frame_length; -    //dprintf("%X -> %X = %X\n", p_h, t_h, hue); -    hue += p_h; -    sat += p_s; -    intensity += p_i; -    state->current_lcd_color = LCD_COLOR(hue, sat, intensity); -    lcd_backlight_color( -            LCD_HUE(state->current_lcd_color), -            LCD_SAT(state->current_lcd_color), -            LCD_INT(state->current_lcd_color)); - -    return true; -} - -bool keyframe_set_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state) { -    (void)animation; -    state->prev_lcd_color = state->target_lcd_color; -    state->current_lcd_color = state->target_lcd_color; -    lcd_backlight_color( -            LCD_HUE(state->current_lcd_color), -            LCD_SAT(state->current_lcd_color), -            LCD_INT(state->current_lcd_color)); -    return false; -} -#endif // LCD_BACKLIGHT_ENABLE -  bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)animation;      (void)state; diff --git a/quantum/visualizer/visualizer.h b/quantum/visualizer/visualizer.h index 440044fd3d..5c870dbfe9 100644 --- a/quantum/visualizer/visualizer.h +++ b/quantum/visualizer/visualizer.h @@ -129,10 +129,6 @@ void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* stat  // Some predefined keyframe functions that can be used by the user code  // Does nothing, useful for adding delays  bool keyframe_no_operation(keyframe_animation_t* animation, visualizer_state_t* state); -// Animates the LCD backlight color between the current color and the target color (of the state) -bool keyframe_animate_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state); -// Sets the backlight color to the target color -bool keyframe_set_backlight_color(keyframe_animation_t* animation, visualizer_state_t* state);  bool keyframe_disable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state);  bool keyframe_enable_lcd_and_backlight(keyframe_animation_t* animation, visualizer_state_t* state); diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 325cefd6f8..c9eb8c5bbd 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -35,6 +35,7 @@ endif  ifeq ($(strip $(LCD_ENABLE)), yes)  SRC += $(VISUALIZER_DIR)/lcd_backlight.c  SRC += $(VISUALIZER_DIR)/lcd_keyframes.c +SRC += $(VISUALIZER_DIR)/lcd_backlight_keyframes.c  OPT_DEFS += -DLCD_BACKLIGHT_ENABLE  endif | 
