diff options
Diffstat (limited to 'quantum/led_matrix')
-rw-r--r-- | quantum/led_matrix/led_matrix.c | 39 | ||||
-rw-r--r-- | quantum/led_matrix/led_matrix.h | 41 | ||||
-rw-r--r-- | quantum/led_matrix/led_matrix_drivers.c | 2 | ||||
-rw-r--r-- | quantum/led_matrix/led_matrix_drivers.h | 38 |
4 files changed, 55 insertions, 65 deletions
diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 4d67a295df..eee43d9281 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -74,9 +74,6 @@ static uint8_t led_last_enable = UINT8_MAX; static uint8_t led_last_effect = UINT8_MAX; static effect_params_t led_effect_params = {0, LED_FLAG_ALL, false}; static led_task_states led_task_state = SYNCING; -#if LED_MATRIX_TIMEOUT > 0 -static uint32_t led_anykey_timer; -#endif // LED_MATRIX_TIMEOUT > 0 // double buffers static uint32_t led_timer_buffer; @@ -114,6 +111,16 @@ void eeconfig_debug_led_matrix(void) { dprintf("led_matrix_eeconfig.flags = %d\n", led_matrix_eeconfig.flags); } +void led_matrix_reload_from_eeprom(void) { + led_matrix_disable_noeeprom(); + /* Reset back to what we have in eeprom */ + eeconfig_init_led_matrix(); + eeconfig_debug_led_matrix(); // display current eeprom values + if (led_matrix_eeconfig.enable) { + led_matrix_mode_noeeprom(led_matrix_eeconfig.mode); + } +} + __attribute__((weak)) uint8_t led_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) { return 0; } @@ -156,9 +163,6 @@ void process_led_matrix(uint8_t row, uint8_t col, bool pressed) { #ifndef LED_MATRIX_SPLIT if (!is_keyboard_master()) return; #endif -#if LED_MATRIX_TIMEOUT > 0 - led_anykey_timer = 0; -#endif // LED_MATRIX_TIMEOUT > 0 #ifdef LED_MATRIX_KEYREACTIVE_ENABLED uint8_t led[LED_HITS_TO_REMEMBER]; @@ -208,22 +212,11 @@ static bool led_matrix_none(effect_params_t *params) { } static void led_task_timers(void) { -#if defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_MATRIX_TIMEOUT > 0 +#if defined(LED_MATRIX_KEYREACTIVE_ENABLED) uint32_t deltaTime = sync_timer_elapsed32(led_timer_buffer); -#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED) || LED_MATRIX_TIMEOUT > 0 +#endif // defined(LED_MATRIX_KEYREACTIVE_ENABLED) led_timer_buffer = sync_timer_read32(); - // Update double buffer timers -#if LED_MATRIX_TIMEOUT > 0 - if (led_anykey_timer < UINT32_MAX) { - if (UINT32_MAX - deltaTime < led_anykey_timer) { - led_anykey_timer = UINT32_MAX; - } else { - led_anykey_timer += deltaTime; - } - } -#endif // LED_MATRIX_TIMEOUT > 0 - // Update double buffer last hit timers #ifdef LED_MATRIX_KEYREACTIVE_ENABLED uint8_t count = last_hit_buffer.count; @@ -329,7 +322,7 @@ void led_matrix_task(void) { // while suspended and just do a software shutdown. This is a cheap hack for now. bool suspend_backlight = suspend_state || #if LED_MATRIX_TIMEOUT > 0 - (led_anykey_timer > (uint32_t)LED_MATRIX_TIMEOUT) || + (last_input_activity_elapsed() > (uint32_t)LED_MATRIX_TIMEOUT) || #endif // LED_MATRIX_TIMEOUT > 0 false; @@ -432,12 +425,6 @@ void led_matrix_init(void) { } #endif // LED_MATRIX_KEYREACTIVE_ENABLED - if (!eeconfig_is_enabled()) { - dprintf("led_matrix_init_drivers eeconfig is not enabled.\n"); - eeconfig_init(); - eeconfig_update_led_matrix_default(); - } - eeconfig_init_led_matrix(); if (!led_matrix_eeconfig.mode) { dprintf("led_matrix_init_drivers led_matrix_eeconfig.mode = 0. Write default values to EEPROM.\n"); diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index c903a230f4..eeaeee20b5 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -23,32 +23,9 @@ #include <stdint.h> #include <stdbool.h> #include "led_matrix_types.h" +#include "led_matrix_drivers.h" #include "keyboard.h" -#if defined(LED_MATRIX_IS31FL3218) -# include "is31fl3218-simple.h" -#elif defined(LED_MATRIX_IS31FL3731) -# include "is31fl3731-simple.h" -#endif -#ifdef LED_MATRIX_IS31FL3733 -# include "is31fl3733-simple.h" -#endif -#ifdef LED_MATRIX_IS31FL3736 -# include "is31fl3736-simple.h" -#endif -#ifdef LED_MATRIX_IS31FL3737 -# include "is31fl3737-simple.h" -#endif -#ifdef LED_MATRIX_IS31FL3741 -# include "is31fl3741-simple.h" -#endif -#if defined(IS31FLCOMMON) -# include "is31flcommon.h" -#endif -#ifdef LED_MATRIX_SNLED27351 -# include "snled27351-simple.h" -#endif - #ifndef LED_MATRIX_TIMEOUT # define LED_MATRIX_TIMEOUT 0 #endif @@ -159,6 +136,8 @@ bool led_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max); void led_matrix_init(void); +void led_matrix_reload_from_eeprom(void); + void led_matrix_set_suspend_state(bool state); bool led_matrix_get_suspend_state(void); void led_matrix_toggle(void); @@ -193,18 +172,6 @@ led_flags_t led_matrix_get_flags(void); void led_matrix_set_flags(led_flags_t flags); void led_matrix_set_flags_noeeprom(led_flags_t flags); -typedef struct { - /* Perform any initialisation required for the other driver functions to work. */ - void (*init)(void); - - /* Set the brightness of a single LED in the buffer. */ - void (*set_value)(int index, uint8_t value); - /* Set the brightness of all LEDS on the keyboard in the buffer. */ - void (*set_value_all)(uint8_t value); - /* Flush any buffered changes to the hardware. */ - void (*flush)(void); -} led_matrix_driver_t; - static inline bool led_matrix_check_finished_leds(uint8_t led_idx) { #if defined(LED_MATRIX_SPLIT) if (is_keyboard_left()) { @@ -217,8 +184,6 @@ static inline bool led_matrix_check_finished_leds(uint8_t led_idx) { #endif } -extern const led_matrix_driver_t led_matrix_driver; - extern led_eeconfig_t led_matrix_eeconfig; extern uint32_t g_led_timer; diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index 117bed9851..672238a260 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -15,7 +15,7 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -#include "led_matrix.h" +#include "led_matrix_drivers.h" /* Each driver needs to define a struct: * diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h new file mode 100644 index 0000000000..b0ef3dfafc --- /dev/null +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -0,0 +1,38 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <stdint.h> + +#if defined(LED_MATRIX_IS31FL3218) +# include "is31fl3218-simple.h" +#elif defined(LED_MATRIX_IS31FL3731) +# include "is31fl3731-simple.h" +#elif defined(LED_MATRIX_IS31FL3733) +# include "is31fl3733-simple.h" +#elif defined(LED_MATRIX_IS31FL3736) +# include "is31fl3736-simple.h" +#elif defined(LED_MATRIX_IS31FL3737) +# include "is31fl3737-simple.h" +#elif defined(LED_MATRIX_IS31FL3741) +# include "is31fl3741-simple.h" +#elif defined(IS31FLCOMMON) +# include "is31flcommon.h" +#elif defined(LED_MATRIX_SNLED27351) +# include "snled27351-simple.h" +#endif + +typedef struct { + /* Perform any initialisation required for the other driver functions to work. */ + void (*init)(void); + + /* Set the brightness of a single LED in the buffer. */ + void (*set_value)(int index, uint8_t value); + /* Set the brightness of all LEDS on the keyboard in the buffer. */ + void (*set_value_all)(uint8_t value); + /* Flush any buffered changes to the hardware. */ + void (*flush)(void); +} led_matrix_driver_t; + +extern const led_matrix_driver_t led_matrix_driver; |