From 6b74dd6de5359da18e87b2d4894e3ffc3fc89d47 Mon Sep 17 00:00:00 2001 From: skullY Date: Sat, 26 Jan 2019 21:25:59 -0800 Subject: led_matrix works now --- quantum/led_matrix.c | 47 ++++++++++++++++++++++---------------------- quantum/led_matrix.h | 3 --- quantum/led_matrix_drivers.c | 3 ++- 3 files changed, 25 insertions(+), 28 deletions(-) (limited to 'quantum') 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; bool g_suspend_state = false; +// Last uniform brightness level. +uint8_t g_uniform_brightness = 0; + // Global tick at 20 Hz uint32_t g_tick = 0; @@ -118,6 +121,7 @@ void led_matrix_set_index_value_all(uint8_t value) { } bool process_led_matrix(uint16_t keycode, keyrecord_t *record) { +/* FIXME: Why you comment out skully? if (record->event.pressed) { uint8_t led[8], led_count; 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) { g_any_key_hit = 255; #endif } +*/ return true; } @@ -155,22 +160,20 @@ void led_matrix_all_off(void) { // Uniform brightness void led_matrix_uniform_brightness(void) { - led_matrix_set_index_value_all(led_matrix_config.val); + uint8_t current_brightness = (LED_MATRIX_MAXIMUM_BRIGHTNESS / BACKLIGHT_LEVELS) * led_matrix_config.val; + if (current_brightness != g_uniform_brightness) { + g_uniform_brightness = current_brightness; + led_matrix_set_index_value_all(current_brightness); + } } void led_matrix_custom(void) {} void led_matrix_task(void) { - #ifdef TRACK_PREVIOUS_EFFECT - static uint8_t toggle_enable_last = 255; - #endif - if (!led_matrix_config.enable) { - led_matrix_all_off(); - led_matrix_indicators(); - #ifdef TRACK_PREVIOUS_EFFECT - toggle_enable_last = led_matrix_config.enable; - #endif - return; + if (!led_matrix_config.enable) { + led_matrix_all_off(); + led_matrix_indicators(); + return; } // delay 1 second before driving LEDs or doing anything else @@ -187,6 +190,7 @@ void led_matrix_task(void) { g_any_key_hit++; } +/* FIXME: WHY YOU COMMENT OUT?! for (int led = 0; led < LED_DRIVER_LED_COUNT; led++) { if (g_key_hit[led] < 255) { if (g_key_hit[led] == 254) @@ -200,24 +204,13 @@ void led_matrix_task(void) { led_matrix_uniform_brightness(); return; } - +*/ // Ideally we would also stop sending zeros to the LED driver PWM buffers // while suspended and just do a software shutdown. This is a cheap hack for now. bool suspend_backlight = ((g_suspend_state && LED_DISABLE_WHEN_USB_SUSPENDED) || (LED_DISABLE_AFTER_TIMEOUT > 0 && g_any_key_hit > LED_DISABLE_AFTER_TIMEOUT * 60 * 20)); uint8_t effect = suspend_backlight ? 0 : led_matrix_config.mode; - #ifdef TRACK_PREVIOUS_EFFECT - // Keep track of the effect used last time, - // detect change in effect, so each effect can - // have an optional initialization. - - static uint8_t effect_last = 255; - bool initialize = (effect != effect_last) || (led_matrix_config.enable != toggle_enable_last); - effect_last = effect; - toggle_enable_last = led_matrix_config.enable; - #endif - // this gets ticked at 20 Hz. // each effect can opt to do calculations // and/or request PWM buffer updates. @@ -230,10 +223,12 @@ void led_matrix_task(void) { break; } - if (! suspend_backlight) { + if (!suspend_backlight) { led_matrix_indicators(); } + // Tell the LED driver to update its state + led_matrix_driver.flush(); } void led_matrix_indicators(void) { @@ -404,3 +399,7 @@ void led_matrix_set_value(uint8_t val) { led_matrix_set_value_noeeprom(val); eeconfig_update_led_matrix(led_matrix_config.raw); } + +void backlight_set(uint8_t val) { + led_matrix_set_value(val); +} diff --git a/quantum/led_matrix.h b/quantum/led_matrix.h index 6db162963..9bf20d044 100644 --- a/quantum/led_matrix.h +++ b/quantum/led_matrix.h @@ -112,9 +112,6 @@ uint8_t led_matrix_get_mode(void); void led_matrix_set_value(uint8_t mode); void led_matrix_set_value_noeeprom(uint8_t mode); -// Hook into the existing backlight API -#define backlight_set(val) led_matrix_set_value(val) - typedef struct { /* Perform any initialisation required for the other driver functions to work. */ void (*init)(void); diff --git a/quantum/led_matrix_drivers.c b/quantum/led_matrix_drivers.c index e0f8b2094..21e8a14c6 100644 --- a/quantum/led_matrix_drivers.c +++ b/quantum/led_matrix_drivers.c @@ -64,7 +64,8 @@ static void init(void) { IS31FL3733_init(LED_DRIVER_ADDR_4); #endif #endif - for (int index = 0; index < LED_DRIVER_COUNT; index++) { + + for (int index = 0; index < LED_DRIVER_LED_COUNT; index++) { #ifdef IS31FL3731 IS31FL3731_set_led_control_register(index, true); #else -- cgit v1.2.3-24-g4f1b