diff options
Diffstat (limited to 'quantum/led_matrix')
| -rw-r--r-- | quantum/led_matrix/led_matrix.c | 43 | ||||
| -rw-r--r-- | quantum/led_matrix/led_matrix.h | 45 | ||||
| -rw-r--r-- | quantum/led_matrix/led_matrix_drivers.c | 36 | ||||
| -rw-r--r-- | quantum/led_matrix/led_matrix_drivers.h | 44 | 
4 files changed, 96 insertions, 72 deletions
| diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 4d67a295df..c0fb4c810b 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; @@ -101,7 +98,7 @@ void eeconfig_update_led_matrix_default(void) {      led_matrix_eeconfig.mode   = LED_MATRIX_DEFAULT_MODE;      led_matrix_eeconfig.val    = LED_MATRIX_DEFAULT_VAL;      led_matrix_eeconfig.speed  = LED_MATRIX_DEFAULT_SPD; -    led_matrix_eeconfig.flags  = LED_FLAG_ALL; +    led_matrix_eeconfig.flags  = LED_MATRIX_DEFAULT_FLAGS;      eeconfig_flush_led_matrix(true);  } @@ -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"); @@ -447,7 +434,7 @@ void led_matrix_init(void) {  }  void led_matrix_set_suspend_state(bool state) { -#ifdef LED_DISABLE_WHEN_USB_SUSPENDED +#ifdef LED_MATRIX_SLEEP      if (state && !suspend_state && is_keyboard_master()) { // only run if turning off, and only once          led_task_render(0);                                // turn off all LEDs when suspending          led_task_flush(0);                                 // and actually flash led state to LEDs diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index c903a230f4..941d42aeca 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 @@ -81,6 +58,10 @@  #    define LED_MATRIX_DEFAULT_SPD UINT8_MAX / 2  #endif +#ifndef LED_MATRIX_DEFAULT_FLAGS +#    define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL +#endif +  #ifndef LED_MATRIX_LED_FLUSH_LIMIT  #    define LED_MATRIX_LED_FLUSH_LIMIT 16  #endif @@ -159,6 +140,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 +176,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 +188,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..b866383481 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:   * @@ -73,12 +73,36 @@ const led_matrix_driver_t led_matrix_driver = {      .set_value_all = is31fl3741_set_value_all,  }; -#elif defined(IS31FLCOMMON) +#elif defined(LED_MATRIX_IS31FL3742A)  const led_matrix_driver_t led_matrix_driver = { -    .init          = IS31FL_simple_init_drivers, -    .flush         = IS31FL_common_flush, -    .set_value     = IS31FL_simple_set_brightness, -    .set_value_all = IS31FL_simple_set_brigntness_all, +    .init          = is31fl3742a_init_drivers, +    .flush         = is31fl3742a_flush, +    .set_value     = is31fl3742a_set_value, +    .set_value_all = is31fl3742a_set_value_all, +}; + +#elif defined(LED_MATRIX_IS31FL3743A) +const led_matrix_driver_t led_matrix_driver = { +    .init          = is31fl3743a_init_drivers, +    .flush         = is31fl3743a_flush, +    .set_value     = is31fl3743a_set_value, +    .set_value_all = is31fl3743a_set_value_all, +}; + +#elif defined(LED_MATRIX_IS31FL3745) +const led_matrix_driver_t led_matrix_driver = { +    .init          = is31fl3745_init_drivers, +    .flush         = is31fl3745_flush, +    .set_value     = is31fl3745_set_value, +    .set_value_all = is31fl3745_set_value_all, +}; + +#elif defined(LED_MATRIX_IS31FL3746A) +const led_matrix_driver_t led_matrix_driver = { +    .init          = is31fl3746a_init_drivers, +    .flush         = is31fl3746a_flush, +    .set_value     = is31fl3746a_set_value, +    .set_value_all = is31fl3746a_set_value_all,  };  #elif defined(LED_MATRIX_SNLED27351) diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h new file mode 100644 index 0000000000..d792600e1f --- /dev/null +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -0,0 +1,44 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <stdint.h> + +#if defined(LED_MATRIX_IS31FL3218) +#    include "is31fl3218-mono.h" +#elif defined(LED_MATRIX_IS31FL3731) +#    include "is31fl3731-mono.h" +#elif defined(LED_MATRIX_IS31FL3733) +#    include "is31fl3733-mono.h" +#elif defined(LED_MATRIX_IS31FL3736) +#    include "is31fl3736-mono.h" +#elif defined(LED_MATRIX_IS31FL3737) +#    include "is31fl3737-mono.h" +#elif defined(LED_MATRIX_IS31FL3741) +#    include "is31fl3741-mono.h" +#elif defined(LED_MATRIX_IS31FL3742A) +#    include "is31fl3742a-mono.h" +#elif defined(LED_MATRIX_IS31FL3743A) +#    include "is31fl3743a-mono.h" +#elif defined(LED_MATRIX_IS31FL3745) +#    include "is31fl3745-mono.h" +#elif defined(LED_MATRIX_IS31FL3746A) +#    include "is31fl3746a-mono.h" +#elif defined(LED_MATRIX_SNLED27351) +#    include "snled27351-mono.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; | 
