aboutsummaryrefslogtreecommitdiff
path: root/quantum/led_matrix.c
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2019-01-26 21:25:59 -0800
committerskullydazed <skullydazed@users.noreply.github.com>2019-02-10 15:37:12 -0800
commit6b74dd6de5359da18e87b2d4894e3ffc3fc89d47 (patch)
treed4b467f032aadac477c4c2fb21d17a6c35dd30a0 /quantum/led_matrix.c
parentbf2670601d29551896bab6811b9bb64de2d0ee0e (diff)
downloadqmk_firmware-6b74dd6de5359da18e87b2d4894e3ffc3fc89d47.tar.gz
qmk_firmware-6b74dd6de5359da18e87b2d4894e3ffc3fc89d47.zip
led_matrix works now
Diffstat (limited to 'quantum/led_matrix.c')
-rw-r--r--quantum/led_matrix.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/quantum/led_matrix.c b/quantum/led_matrix.c
index 3b284990d..f849d478d 100644
--- a/quantum/led_matrix.c
+++ b/quantum/led_matrix.c
@@ -55,6 +55,9 @@ led_config_t led_matrix_config;
55 55
56bool g_suspend_state = false; 56bool g_suspend_state = false;
57 57
58// Last uniform brightness level.
59uint8_t g_uniform_brightness = 0;
60
58// Global tick at 20 Hz 61// Global tick at 20 Hz
59uint32_t g_tick = 0; 62uint32_t g_tick = 0;
60 63
@@ -118,6 +121,7 @@ void led_matrix_set_index_value_all(uint8_t value) {
118} 121}
119 122
120bool process_led_matrix(uint16_t keycode, keyrecord_t *record) { 123bool process_led_matrix(uint16_t keycode, keyrecord_t *record) {
124/* FIXME: Why you comment out skully?
121 if (record->event.pressed) { 125 if (record->event.pressed) {
122 uint8_t led[8], led_count; 126 uint8_t led[8], led_count;
123 map_row_column_to_led(record->event.key.row, record->event.key.col, led, &led_count); 127 map_row_column_to_led(record->event.key.row, record->event.key.col, led, &led_count);
@@ -141,6 +145,7 @@ bool process_led_matrix(uint16_t keycode, keyrecord_t *record) {
141 g_any_key_hit = 255; 145 g_any_key_hit = 255;
142 #endif 146 #endif
143 } 147 }
148*/
144 return true; 149 return true;
145} 150}
146 151
@@ -155,22 +160,20 @@ void led_matrix_all_off(void) {
155 160
156// Uniform brightness 161// Uniform brightness
157void led_matrix_uniform_brightness(void) { 162void led_matrix_uniform_brightness(void) {
158 led_matrix_set_index_value_all(led_matrix_config.val); 163 uint8_t current_brightness = (LED_MATRIX_MAXIMUM_BRIGHTNESS / BACKLIGHT_LEVELS) * led_matrix_config.val;
164 if (current_brightness != g_uniform_brightness) {
165 g_uniform_brightness = current_brightness;
166 led_matrix_set_index_value_all(current_brightness);
167 }
159} 168}
160 169
161void led_matrix_custom(void) {} 170void led_matrix_custom(void) {}
162 171
163void led_matrix_task(void) { 172void led_matrix_task(void) {
164 #ifdef TRACK_PREVIOUS_EFFECT 173 if (!led_matrix_config.enable) {
165 static uint8_t toggle_enable_last = 255; 174 led_matrix_all_off();
166 #endif 175 led_matrix_indicators();
167 if (!led_matrix_config.enable) { 176 return;
168 led_matrix_all_off();
169 led_matrix_indicators();
170 #ifdef TRACK_PREVIOUS_EFFECT
171 toggle_enable_last = led_matrix_config.enable;
172 #endif
173 return;
174 } 177 }
175 178
176 // delay 1 second before driving LEDs or doing anything else 179 // delay 1 second before driving LEDs or doing anything else
@@ -187,6 +190,7 @@ void led_matrix_task(void) {
187 g_any_key_hit++; 190 g_any_key_hit++;
188 } 191 }
189 192
193/* FIXME: WHY YOU COMMENT OUT?!
190 for (int led = 0; led < LED_DRIVER_LED_COUNT; led++) { 194 for (int led = 0; led < LED_DRIVER_LED_COUNT; led++) {
191 if (g_key_hit[led] < 255) { 195 if (g_key_hit[led] < 255) {
192 if (g_key_hit[led] == 254) 196 if (g_key_hit[led] == 254)
@@ -200,24 +204,13 @@ void led_matrix_task(void) {
200 led_matrix_uniform_brightness(); 204 led_matrix_uniform_brightness();
201 return; 205 return;
202 } 206 }
203 207*/
204 // Ideally we would also stop sending zeros to the LED driver PWM buffers 208 // Ideally we would also stop sending zeros to the LED driver PWM buffers
205 // while suspended and just do a software shutdown. This is a cheap hack for now. 209 // while suspended and just do a software shutdown. This is a cheap hack for now.
206 bool suspend_backlight = ((g_suspend_state && LED_DISABLE_WHEN_USB_SUSPENDED) || 210 bool suspend_backlight = ((g_suspend_state && LED_DISABLE_WHEN_USB_SUSPENDED) ||
207 (LED_DISABLE_AFTER_TIMEOUT > 0 && g_any_key_hit > LED_DISABLE_AFTER_TIMEOUT * 60 * 20)); 211 (LED_DISABLE_AFTER_TIMEOUT > 0 && g_any_key_hit > LED_DISABLE_AFTER_TIMEOUT * 60 * 20));
208 uint8_t effect = suspend_backlight ? 0 : led_matrix_config.mode; 212 uint8_t effect = suspend_backlight ? 0 : led_matrix_config.mode;
209 213
210 #ifdef TRACK_PREVIOUS_EFFECT
211 // Keep track of the effect used last time,
212 // detect change in effect, so each effect can
213 // have an optional initialization.
214
215 static uint8_t effect_last = 255;
216 bool initialize = (effect != effect_last) || (led_matrix_config.enable != toggle_enable_last);
217 effect_last = effect;
218 toggle_enable_last = led_matrix_config.enable;
219 #endif
220
221 // this gets ticked at 20 Hz. 214 // this gets ticked at 20 Hz.
222 // each effect can opt to do calculations 215 // each effect can opt to do calculations
223 // and/or request PWM buffer updates. 216 // and/or request PWM buffer updates.
@@ -230,10 +223,12 @@ void led_matrix_task(void) {
230 break; 223 break;
231 } 224 }
232 225
233 if (! suspend_backlight) { 226 if (!suspend_backlight) {
234 led_matrix_indicators(); 227 led_matrix_indicators();
235 } 228 }
236 229
230 // Tell the LED driver to update its state
231 led_matrix_driver.flush();
237} 232}
238 233
239void led_matrix_indicators(void) { 234void led_matrix_indicators(void) {
@@ -404,3 +399,7 @@ void led_matrix_set_value(uint8_t val) {
404 led_matrix_set_value_noeeprom(val); 399 led_matrix_set_value_noeeprom(val);
405 eeconfig_update_led_matrix(led_matrix_config.raw); 400 eeconfig_update_led_matrix(led_matrix_config.raw);
406} 401}
402
403void backlight_set(uint8_t val) {
404 led_matrix_set_value(val);
405}