diff options
author | Fred Sundvik <fsundvik@gmail.com> | 2017-07-09 17:46:51 +0300 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2017-07-10 09:01:59 -0400 |
commit | 2251560256ff1a139178dc80b18dd8ef1d8e83d6 (patch) | |
tree | 51f39e49e40dc3cfa2bafeff51c32d992f1d10f5 /quantum/visualizer/led_backlight_keyframes.c | |
parent | f3c113fb5a5ea89762b5c51d5d182093f6fb999d (diff) | |
download | qmk_firmware-2251560256ff1a139178dc80b18dd8ef1d8e83d6.tar.gz qmk_firmware-2251560256ff1a139178dc80b18dd8ef1d8e83d6.zip |
Clarify naming between LCD_BACKLIGHT and LED_BACKLIGHT
Diffstat (limited to 'quantum/visualizer/led_backlight_keyframes.c')
-rw-r--r-- | quantum/visualizer/led_backlight_keyframes.c | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/quantum/visualizer/led_backlight_keyframes.c b/quantum/visualizer/led_backlight_keyframes.c new file mode 100644 index 000000000..d2921a391 --- /dev/null +++ b/quantum/visualizer/led_backlight_keyframes.c | |||
@@ -0,0 +1,143 @@ | |||
1 | /* | ||
2 | The MIT License (MIT) | ||
3 | |||
4 | Copyright (c) 2016 Fred Sundvik | ||
5 | |||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | ||
7 | of this software and associated documentation files (the "Software"), to deal | ||
8 | in the Software without restriction, including without limitation the rights | ||
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
10 | copies of the Software, and to permit persons to whom the Software is | ||
11 | furnished to do so, subject to the following conditions: | ||
12 | |||
13 | The above copyright notice and this permission notice shall be included in all | ||
14 | copies or substantial portions of the Software. | ||
15 | |||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
22 | SOFTWARE. | ||
23 | */ | ||
24 | #include "gfx.h" | ||
25 | #include "math.h" | ||
26 | #include "led_backlight_keyframes.h" | ||
27 | |||
28 | static uint8_t fade_led_color(keyframe_animation_t* animation, int from, int to) { | ||
29 | int frame_length = animation->frame_lengths[animation->current_frame]; | ||
30 | int current_pos = frame_length - animation->time_left_in_frame; | ||
31 | int delta = to - from; | ||
32 | int luma = (delta * current_pos) / frame_length; | ||
33 | luma += from; | ||
34 | return luma; | ||
35 | } | ||
36 | |||
37 | static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint8_t from, uint8_t to) { | ||
38 | uint8_t luma = fade_led_color(animation, from, to); | ||
39 | color_t color = LUMA2COLOR(luma); | ||
40 | gdispGClear(LED_DISPLAY, color); | ||
41 | } | ||
42 | |||
43 | // TODO: Should be customizable per keyboard | ||
44 | #define NUM_ROWS LED_NUM_ROWS | ||
45 | #define NUM_COLS LED_NUM_COLS | ||
46 | |||
47 | static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS]; | ||
48 | static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; | ||
49 | |||
50 | static uint8_t compute_gradient_color(float t, float index, float num) { | ||
51 | const float two_pi = M_PI * 2.0f; | ||
52 | float normalized_index = (1.0f - index / (num - 1.0f)) * two_pi; | ||
53 | float x = t * two_pi + normalized_index; | ||
54 | float v = 0.5 * (cosf(x) + 1.0f); | ||
55 | return (uint8_t)(255.0f * v); | ||
56 | } | ||
57 | |||
58 | bool led_backlight_keyframe_fade_in_all(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
59 | (void)state; | ||
60 | keyframe_fade_all_leds_from_to(animation, 0, 255); | ||
61 | return true; | ||
62 | } | ||
63 | |||
64 | bool led_backlight_keyframe_fade_out_all(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
65 | (void)state; | ||
66 | keyframe_fade_all_leds_from_to(animation, 255, 0); | ||
67 | return true; | ||
68 | } | ||
69 | |||
70 | bool led_backlight_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
71 | (void)state; | ||
72 | float frame_length = animation->frame_lengths[animation->current_frame]; | ||
73 | float current_pos = frame_length - animation->time_left_in_frame; | ||
74 | float t = current_pos / frame_length; | ||
75 | for (int i=0; i< NUM_COLS; i++) { | ||
76 | uint8_t color = compute_gradient_color(t, i, NUM_COLS); | ||
77 | gdispGDrawLine(LED_DISPLAY, i, 0, i, NUM_ROWS - 1, LUMA2COLOR(color)); | ||
78 | } | ||
79 | return true; | ||
80 | } | ||
81 | |||
82 | bool led_backlight_keyframe_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
83 | (void)state; | ||
84 | float frame_length = animation->frame_lengths[animation->current_frame]; | ||
85 | float current_pos = frame_length - animation->time_left_in_frame; | ||
86 | float t = current_pos / frame_length; | ||
87 | for (int i=0; i< NUM_ROWS; i++) { | ||
88 | uint8_t color = compute_gradient_color(t, i, NUM_ROWS); | ||
89 | gdispGDrawLine(LED_DISPLAY, 0, i, NUM_COLS - 1, i, LUMA2COLOR(color)); | ||
90 | } | ||
91 | return true; | ||
92 | } | ||
93 | |||
94 | static void copy_current_led_state(uint8_t* dest) { | ||
95 | for (int i=0;i<NUM_ROWS;i++) { | ||
96 | for (int j=0;j<NUM_COLS;j++) { | ||
97 | dest[i*NUM_COLS + j] = gdispGGetPixelColor(LED_DISPLAY, j, i); | ||
98 | } | ||
99 | } | ||
100 | } | ||
101 | bool led_backlight_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
102 | (void)state; | ||
103 | if (animation->first_update_of_frame) { | ||
104 | copy_current_led_state(&crossfade_start_frame[0][0]); | ||
105 | run_next_keyframe(animation, state); | ||
106 | copy_current_led_state(&crossfade_end_frame[0][0]); | ||
107 | } | ||
108 | for (int i=0;i<NUM_ROWS;i++) { | ||
109 | for (int j=0;j<NUM_COLS;j++) { | ||
110 | color_t color = LUMA2COLOR(fade_led_color(animation, crossfade_start_frame[i][j], crossfade_end_frame[i][j])); | ||
111 | gdispGDrawPixel(LED_DISPLAY, j, i, color); | ||
112 | } | ||
113 | } | ||
114 | return true; | ||
115 | } | ||
116 | |||
117 | bool led_backlight_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
118 | (void)state; | ||
119 | (void)animation; | ||
120 | gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_180); | ||
121 | return false; | ||
122 | } | ||
123 | |||
124 | bool led_backlight_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
125 | (void)state; | ||
126 | (void)animation; | ||
127 | gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0); | ||
128 | return false; | ||
129 | } | ||
130 | |||
131 | bool led_backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
132 | (void)state; | ||
133 | (void)animation; | ||
134 | gdispGSetPowerMode(LED_DISPLAY, powerOff); | ||
135 | return false; | ||
136 | } | ||
137 | |||
138 | bool led_backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) { | ||
139 | (void)state; | ||
140 | (void)animation; | ||
141 | gdispGSetPowerMode(LED_DISPLAY, powerOn); | ||
142 | return false; | ||
143 | } | ||