From 7cc90c234f55364bb5ebf45f9bb4274fd9926b9d Mon Sep 17 00:00:00 2001 From: Pete Neisen Date: Wed, 29 Nov 2023 15:38:06 -0700 Subject: Converted RGB matrix to use last_input_activity_elapsed(). (#21687) Co-authored-by: Nick Brassel --- quantum/led_matrix/led_matrix.c | 23 +++-------------------- quantum/rgb_matrix/rgb_matrix.c | 19 +++---------------- 2 files changed, 6 insertions(+), 36 deletions(-) (limited to 'quantum') diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 4d67a295df..4699c4a4c2 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; @@ -156,9 +153,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 +202,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 +312,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; diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index d93d189827..ebaf3077dc 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -76,9 +76,6 @@ static uint8_t rgb_last_enable = UINT8_MAX; static uint8_t rgb_last_effect = UINT8_MAX; static effect_params_t rgb_effect_params = {0, LED_FLAG_ALL, false}; static rgb_task_states rgb_task_state = SYNCING; -#if RGB_MATRIX_TIMEOUT > 0 -static uint32_t rgb_anykey_timer; -#endif // RGB_MATRIX_TIMEOUT > 0 // double buffers static uint32_t rgb_timer_buffer; @@ -163,9 +160,6 @@ void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) { #ifndef RGB_MATRIX_SPLIT if (!is_keyboard_master()) return; #endif -#if RGB_MATRIX_TIMEOUT > 0 - rgb_anykey_timer = 0; -#endif // RGB_MATRIX_TIMEOUT > 0 #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED uint8_t led[LED_HITS_TO_REMEMBER]; @@ -246,18 +240,11 @@ static bool rgb_matrix_none(effect_params_t *params) { } static void rgb_task_timers(void) { -#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_MATRIX_TIMEOUT > 0 +#if defined(RGB_MATRIX_KEYREACTIVE_ENABLED) uint32_t deltaTime = sync_timer_elapsed32(rgb_timer_buffer); -#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) || RGB_MATRIX_TIMEOUT > 0 +#endif // defined(RGB_MATRIX_KEYREACTIVE_ENABLED) rgb_timer_buffer = sync_timer_read32(); - // Update double buffer timers -#if RGB_MATRIX_TIMEOUT > 0 - if (rgb_anykey_timer + deltaTime <= UINT32_MAX) { - rgb_anykey_timer += deltaTime; - } -#endif // RGB_MATRIX_TIMEOUT > 0 - // Update double buffer last hit timers #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED uint8_t count = last_hit_buffer.count; @@ -370,7 +357,7 @@ void rgb_matrix_task(void) { // while suspended and just do a software shutdown. This is a cheap hack for now. bool suspend_backlight = suspend_state || #if RGB_MATRIX_TIMEOUT > 0 - (rgb_anykey_timer > (uint32_t)RGB_MATRIX_TIMEOUT) || + (last_input_activity_elapsed() > (uint32_t)RGB_MATRIX_TIMEOUT) || #endif // RGB_MATRIX_TIMEOUT > 0 false; -- cgit v1.2.3 From ce81801480d21147900f968e76c90974c889d244 Mon Sep 17 00:00:00 2001 From: JuanoD Date: Sun, 3 Dec 2023 19:13:27 -0500 Subject: Add latam spanish headers (#22542) --- .../keycodes_spanish_latin_america_0.0.1.hjson | 339 +++++++++++++++++++++ docs/feature_macros.md | 6 +- docs/reference_keymap_extras.md | 1 + .../keymap_extras/keymap_spanish_latin_america.h | 105 +++++++ .../sendstring_spanish_latin_america.h | 120 ++++++++ 5 files changed, 568 insertions(+), 3 deletions(-) create mode 100644 data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson create mode 100644 quantum/keymap_extras/keymap_spanish_latin_america.h create mode 100644 quantum/keymap_extras/sendstring_spanish_latin_america.h (limited to 'quantum') diff --git a/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson new file mode 100644 index 0000000000..50c49274be --- /dev/null +++ b/data/constants/keycodes/extras/keycodes_spanish_latin_america_0.0.1.hjson @@ -0,0 +1,339 @@ +{ + "aliases": { +/* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ | │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¿ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ´ │ + │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ñ │ { │ } │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "KC_GRV": { + "key": "ES_PIPE", + "label": "|", + } + "KC_1": { + "key": "ES_1", + "label": "1", + } + "KC_2": { + "key": "ES_2", + "label": "2", + } + "KC_3": { + "key": "ES_3", + "label": "3", + } + "KC_4": { + "key": "ES_4", + "label": "4", + } + "KC_5": { + "key": "ES_5", + "label": "5", + } + "KC_6": { + "key": "ES_6", + "label": "6", + } + "KC_7": { + "key": "ES_7", + "label": "7", + } + "KC_8": { + "key": "ES_8", + "label": "8", + } + "KC_9": { + "key": "ES_9", + "label": "9", + } + "KC_0": { + "key": "ES_0", + "label": "0", + } + "KC_MINS": { + "key": "ES_QUOT", + "label": "'", + } + "KC_EQL": { + "key": "ES_IQUE", + "label": "¿", + } + "KC_Q": { + "key": "ES_Q", + "label": "Q", + } + "KC_W": { + "key": "ES_W", + "label": "W", + } + "KC_E": { + "key": "ES_E", + "label": "E", + } + "KC_R": { + "key": "ES_R", + "label": "R", + } + "KC_T": { + "key": "ES_T", + "label": "T", + } + "KC_Y": { + "key": "ES_Y", + "label": "Y", + } + "KC_U": { + "key": "ES_U", + "label": "U", + } + "KC_I": { + "key": "ES_I", + "label": "I", + } + "KC_O": { + "key": "ES_O", + "label": "O", + } + "KC_P": { + "key": "ES_P", + "label": "P", + } + "KC_LBRC": { + "key": "ES_ACUT", + "label": "´ (dead)", + } + "KC_RBRC": { + "key": "ES_PLUS", + "label": "+", + } + "KC_A": { + "key": "ES_A", + "label": "A", + } + "KC_S": { + "key": "ES_S", + "label": "S", + } + "KC_D": { + "key": "ES_D", + "label": "D", + } + "KC_F": { + "key": "ES_F", + "label": "F", + } + "KC_G": { + "key": "ES_G", + "label": "G", + } + "KC_H": { + "key": "ES_H", + "label": "H", + } + "KC_J": { + "key": "ES_J", + "label": "J", + } + "KC_K": { + "key": "ES_K", + "label": "K", + } + "KC_L": { + "key": "ES_L", + "label": "L", + } + "KC_SCLN": { + "key": "ES_NTIL", + "label": "Ñ", + } + "KC_QUOT": { + "key": "ES_LCBR", + "label": "{", + } + "KC_NUHS": { + "key": "ES_RCBR", + "label": "}", + } + "KC_NUBS": { + "key": "ES_LABK", + "label": "<", + } + "KC_Z": { + "key": "ES_Z", + "label": "Z", + } + "KC_X": { + "key": "ES_X", + "label": "X", + } + "KC_C": { + "key": "ES_C", + "label": "C", + } + "KC_V": { + "key": "ES_V", + "label": "V", + } + "KC_B": { + "key": "ES_B", + "label": "B", + } + "KC_N": { + "key": "ES_N", + "label": "N", + } + "KC_M": { + "key": "ES_M", + "label": "M", + } + "KC_COMM": { + "key": "ES_COMM", + "label": ",", + } + "KC_DOT": { + "key": "ES_DOT", + "label": ".", + } + "KC_SLSH": { + "key": "ES_MINS", + "label": "-", + } +/* Shifted symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ ° │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¡ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ * │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "S(ES_PIPE)": { + "key": "ES_MORD", + "label": "°", + } + "S(ES_1)": { + "key": "ES_EXLM", + "label": "!", + } + "S(ES_2)": { + "key": "ES_DQUO", + "label": "\"", + } + "S(ES_3)": { + "key": "ES_NUMB", + "label": "#", + } + "S(ES_4)": { + "key": "ES_DLR", + "label": "$", + } + "S(ES_5)": { + "key": "ES_PERC", + "label": "%", + } + "S(ES_6)": { + "key": "ES_AMPR", + "label": "&", + } + "S(ES_7)": { + "key": "ES_SLSH", + "label": "/", + } + "S(ES_8)": { + "key": "ES_LPRN", + "label": "(", + } + "S(ES_9)": { + "key": "ES_RPRN", + "label": ")", + } + "S(ES_0)": { + "key": "ES_EQL", + "label": "=", + } + "S(ES_QUOT)": { + "key": "ES_QUES", + "label": "?", + } + "S(ES_IQUE)": { + "key": "ES_IEXL", + "label": "¡", + } + "S(ES_ACUT)": { + "key": "ES_DIAE", + "label": "¨ (dead)", + } + "S(ES_PLUS)": { + "key": "ES_ASTR", + "label": "*", + } + "S(ES_LCBR)": { + "key": "ES_LBRC", + "label": "[", + } + "S(ES_RCBR)": { + "key": "ES_RBRC", + "label": "]", + } + "S(ES_LABK)": { + "key": "ES_RABK", + "label": ">", + } + "S(ES_COMM)": { + "key": "ES_SCLN", + "label": ";", + } + "S(ES_DOT)": { + "key": "ES_COLN", + "label": ":", + } + "S(ES_MINS)": { + "key": "ES_UNDS", + "label": "_", + } +/* AltGr symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ ¬ │ │ │ │ │ │ │ │ │ │ │ \ │ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ @ │ │ │ │ │ │ │ │ │ │ │ ~ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ │ ^ │ ` │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "ALGR(ES_PIPE)": { + "key": "ES_NOT", + "label": "¬", + } + "ALGR(ES_QUOT)": { + "key": "ES_BSLS", + "label": "\\", + } + "ALGR(ES_Q)": { + "key": "ES_AT", + "label": "@", + } + "ALGR(ES_PLUS)": { + "key": "ES_TILD", + "label": "~", + } + "ALGR(ES_LCBR)": { + "key": "ES_CIRC", + "label": "^", + } + } +} \ No newline at end of file diff --git a/docs/feature_macros.md b/docs/feature_macros.md index c7d6c1a918..f0533f14fe 100644 --- a/docs/feature_macros.md +++ b/docs/feature_macros.md @@ -69,9 +69,9 @@ The current list of available languages is: | **italian_osx_iso** | **jis** | **latvian** | **lithuanian_azerty** | | **lithuanian_qwerty** | **norman** | **norwegian** | **portuguese** | | **portuguese_osx_iso** | **romanian** | **serbian_latin** | **slovak** | -| **slovenian** | **spanish_dvorak** | **spanish** | **swedish** | -| **turkish_f** | **turkish_q** | **uk** | **us_international** | -| **workman** | **workman_zxcvm** | +| **slovenian** | **spanish_dvorak** | **spanish_latin_america** | **spanish** | +| **swedish** | **turkish_f** | **turkish_q** | **uk** | +| **us_international** | **workman** | **workman_zxcvm** | ### Macro Basics diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md index 84751a512c..0a51c85853 100644 --- a/docs/reference_keymap_extras.md +++ b/docs/reference_keymap_extras.md @@ -67,6 +67,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q |Slovenian |`keymap_slovenian.h` |`sendstring_slovenian.h` | |Spanish |`keymap_spanish.h` |`sendstring_spanish.h` | |Spanish (Dvorak) |`keymap_spanish_dvorak.h` |`sendstring_spanish_dvorak.h` | +|Spanish (Latin America) |`keymap_spanish_latin_america.h` |`sendstring_spanish_latin_america.h`| |Swedish |`keymap_swedish.h` |`sendstring_swedish.h` | |Swedish (macOS, ANSI) |`keymap_swedish_mac_ansi.h` | | |Swedish (macOS, ISO) |`keymap_swedish_mac_iso.h` | | diff --git a/quantum/keymap_extras/keymap_spanish_latin_america.h b/quantum/keymap_extras/keymap_spanish_latin_america.h new file mode 100644 index 0000000000..92921811b3 --- /dev/null +++ b/quantum/keymap_extras/keymap_spanish_latin_america.h @@ -0,0 +1,105 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +/******************************************************************************* + 88888888888 888 d8b .d888 d8b 888 d8b + 888 888 Y8P d88P" Y8P 888 Y8P + 888 888 888 888 + 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b + 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K + 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. + 888 888 888 888 X88 888 888 888 Y8b. 888 X88 + 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' + 888 888 + 888 888 + 888 888 + .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 + d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 + 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 + Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 + "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 + 888 + Y8b d88P + "Y88P" +*******************************************************************************/ + +#pragma once +#include "keycodes.h" +// clang-format off + +// Aliases +#define ES_PIPE KC_GRV // | +#define ES_1 KC_1 // 1 +#define ES_2 KC_2 // 2 +#define ES_3 KC_3 // 3 +#define ES_4 KC_4 // 4 +#define ES_5 KC_5 // 5 +#define ES_6 KC_6 // 6 +#define ES_7 KC_7 // 7 +#define ES_8 KC_8 // 8 +#define ES_9 KC_9 // 9 +#define ES_0 KC_0 // 0 +#define ES_QUOT KC_MINS // ' +#define ES_IQUE KC_EQL // ¿ +#define ES_Q KC_Q // Q +#define ES_W KC_W // W +#define ES_E KC_E // E +#define ES_R KC_R // R +#define ES_T KC_T // T +#define ES_Y KC_Y // Y +#define ES_U KC_U // U +#define ES_I KC_I // I +#define ES_O KC_O // O +#define ES_P KC_P // P +#define ES_ACUT KC_LBRC // ´ (dead) +#define ES_PLUS KC_RBRC // + +#define ES_A KC_A // A +#define ES_S KC_S // S +#define ES_D KC_D // D +#define ES_F KC_F // F +#define ES_G KC_G // G +#define ES_H KC_H // H +#define ES_J KC_J // J +#define ES_K KC_K // K +#define ES_L KC_L // L +#define ES_NTIL KC_SCLN // Ñ +#define ES_LCBR KC_QUOT // { +#define ES_RCBR KC_NUHS // } +#define ES_LABK KC_NUBS // < +#define ES_Z KC_Z // Z +#define ES_X KC_X // X +#define ES_C KC_C // C +#define ES_V KC_V // V +#define ES_B KC_B // B +#define ES_N KC_N // N +#define ES_M KC_M // M +#define ES_COMM KC_COMM // , +#define ES_DOT KC_DOT // . +#define ES_MINS KC_SLSH // - +#define ES_MORD S(ES_PIPE) // ° +#define ES_EXLM S(ES_1) // ! +#define ES_DQUO S(ES_2) // " +#define ES_NUMB S(ES_3) // # +#define ES_DLR S(ES_4) // $ +#define ES_PERC S(ES_5) // % +#define ES_AMPR S(ES_6) // & +#define ES_SLSH S(ES_7) // / +#define ES_LPRN S(ES_8) // ( +#define ES_RPRN S(ES_9) // ) +#define ES_EQL S(ES_0) // = +#define ES_QUES S(ES_QUOT) // ? +#define ES_IEXL S(ES_IQUE) // ¡ +#define ES_DIAE S(ES_ACUT) // ¨ (dead) +#define ES_ASTR S(ES_PLUS) // * +#define ES_LBRC S(ES_LCBR) // [ +#define ES_RBRC S(ES_RCBR) // ] +#define ES_RABK S(ES_LABK) // > +#define ES_SCLN S(ES_COMM) // ; +#define ES_COLN S(ES_DOT) // : +#define ES_UNDS S(ES_MINS) // _ +#define ES_NOT ALGR(ES_PIPE) // ¬ +#define ES_BSLS ALGR(ES_QUOT) // (backslash) +#define ES_AT ALGR(ES_Q) // @ +#define ES_TILD ALGR(ES_PLUS) // ~ +#define ES_CIRC ALGR(ES_LCBR) // ^ + diff --git a/quantum/keymap_extras/sendstring_spanish_latin_america.h b/quantum/keymap_extras/sendstring_spanish_latin_america.h new file mode 100644 index 0000000000..3bfdf7d5cb --- /dev/null +++ b/quantum/keymap_extras/sendstring_spanish_latin_america.h @@ -0,0 +1,120 @@ +/* Copyright 2023 Juan David Díaz + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// Sendstring lookup tables for Latam Spanish layouts + +#pragma once + +#include "send_string.h" +#include "keymap_spanish_latin_america.h" + +// clang-format off + +const uint8_t ascii_to_shift_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 0), + KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1), + KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 0), + KCLUT_ENTRY(0, 0, 1, 1, 0, 1, 1, 1), + KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 0, 1, 0, 1), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0) +}; + +const uint8_t ascii_to_altgr_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 1, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0) +}; + +const uint8_t ascii_to_dead_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0) +}; + +const uint8_t ascii_to_keycode_lut[128] PROGMEM = { + // NUL SOH STX ETX EOT ENQ ACK BEL + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // BS TAB LF VT FF CR SO SI + KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // DLE DC1 DC2 DC3 DC4 NAK SYN ETB + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // CAN EM SUB ESC FS GS RS US + XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + + // ! " # $ % & ' + KC_SPC, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_QUOT, + // ( ) * + , - . / + ES_8, ES_9, ES_PLUS, ES_PLUS, ES_COMM, ES_MINS, ES_DOT, ES_7, + // 0 1 2 3 4 5 6 7 + ES_0, ES_1, ES_2, ES_3, ES_4, ES_5, ES_6, ES_7, + // 8 9 : ; < = > ? + ES_8, ES_9, ES_DOT, ES_COMM, ES_LABK, ES_0, ES_LABK, ES_QUOT, + // @ A B C D E F G + ES_Q, ES_A, ES_B, ES_C, ES_D, ES_E, ES_F, ES_G, + // H I J K L M N O + ES_H, ES_I, ES_J, ES_K, ES_L, ES_M, ES_N, ES_O, + // P Q R S T U V W + ES_P, ES_Q, ES_R, ES_S, ES_T, ES_U, ES_V, ES_W, + // X Y Z [ \ ] ^ _ + ES_X, ES_Y, ES_Z, ES_LCBR, ES_QUOT, ES_RCBR, ES_LCBR, ES_MINS, + // ` a b c d e f g + ES_RCBR, ES_A, ES_B, ES_C, ES_D, ES_E, ES_F, ES_G, + // h i j k l m n o + ES_H, ES_I, ES_J, ES_K, ES_L, ES_M, ES_N, ES_O, + // p q r s t u v w + ES_P, ES_Q, ES_R, ES_S, ES_T, ES_U, ES_V, ES_W, + // x y z { | } ~ DEL + ES_X, ES_Y, ES_Z, ES_LCBR, ES_PIPE, ES_RCBR, ES_PLUS, KC_DEL +}; -- cgit v1.2.3 From 17f36a21bfc340e4715c5849e4d0c537820e7cbe Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 5 Dec 2023 22:49:14 +1100 Subject: Rework RGBLight driver system (#22529) --- builddefs/common_features.mk | 1 + drivers/led/apa102.c | 5 ----- keyboards/dp60/keymaps/indicator/indicator.c | 12 +++++----- keyboards/dp60/keymaps/indicator/rules.mk | 2 ++ keyboards/ergodox_ez/led_i2c.c | 6 ++++- keyboards/ergodox_ez/shine/info.json | 3 +++ keyboards/ergodox_ez/shine/rules.mk | 1 + keyboards/matrix/abelx/abelx.c | 7 +++++- keyboards/matrix/abelx/info.json | 1 + keyboards/matrix/abelx/rules.mk | 1 + keyboards/matrix/m20add/info.json | 1 + keyboards/matrix/m20add/rgb_ring.c | 6 ++++- keyboards/matrix/noah/noah.c | 27 ++++++++++------------- keyboards/neson_design/700e/700e.c | 7 +++++- keyboards/neson_design/700e/info.json | 1 + keyboards/neson_design/700e/rules.mk | 1 + keyboards/neson_design/n6/info.json | 1 + keyboards/neson_design/n6/n6.c | 7 +++++- keyboards/neson_design/n6/rules.mk | 1 + keyboards/neson_design/nico/info.json | 3 ++- keyboards/neson_design/nico/nico.c | 6 ++++- keyboards/neson_design/nico/rules.mk | 2 +- keyboards/v60_type_r/info.json | 16 -------------- keyboards/v60_type_r/rules.mk | 2 +- keyboards/v60_type_r/v60_type_r.c | 14 ------------ keyboards/work_louder/loop/info.json | 1 + keyboards/work_louder/micro/info.json | 1 + keyboards/work_louder/nano/info.json | 1 + keyboards/work_louder/numpad/info.json | 1 + keyboards/work_louder/rgb_functions.c | 6 ++--- keyboards/work_louder/work_board/info.json | 1 + quantum/rgblight/rgblight.c | 33 +++++++++++----------------- quantum/rgblight/rgblight.h | 1 + quantum/rgblight/rgblight_drivers.c | 20 +++++++++++++++++ quantum/rgblight/rgblight_drivers.h | 13 +++++++++++ 35 files changed, 125 insertions(+), 87 deletions(-) create mode 100644 quantum/rgblight/rgblight_drivers.c create mode 100644 quantum/rgblight/rgblight_drivers.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 60f1cbd837..d793d5faf5 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -313,6 +313,7 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) OPT_DEFS += -DRGBLIGHT_$(strip $(shell echo $(RGBLIGHT_DRIVER) | tr '[:lower:]' '[:upper:]')) SRC += $(QUANTUM_DIR)/color.c SRC += $(QUANTUM_DIR)/rgblight/rgblight.c + SRC += $(QUANTUM_DIR)/rgblight/rgblight_drivers.c CIE1931_CURVE := yes RGB_KEYCODES_ENABLE := yes endif diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c index 527519eb8a..4d8f69cdcd 100644 --- a/drivers/led/apa102.c +++ b/drivers/led/apa102.c @@ -71,11 +71,6 @@ void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) { apa102_end_frame(num_leds); } -// Overwrite the default rgblight_call_driver to use apa102 driver -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) { - apa102_setleds(start_led, num_leds); -} - void static apa102_init(void) { setPinOutput(APA102_DI_PIN); setPinOutput(APA102_CI_PIN); diff --git a/keyboards/dp60/keymaps/indicator/indicator.c b/keyboards/dp60/keymaps/indicator/indicator.c index 02450ce68d..d7b628cc56 100644 --- a/keyboards/dp60/keymaps/indicator/indicator.c +++ b/keyboards/dp60/keymaps/indicator/indicator.c @@ -14,10 +14,8 @@ along with this program. If not, see . */ -#include "dp60.h" - -#include "rgblight.h" - +#include QMK_KEYBOARD_H +#include "ws2812.h" // caps led const rgblight_segment_t PROGMEM dp60_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( @@ -72,13 +70,17 @@ extern rgblight_config_t rgblight_config; extern void rgblight_layers_write(void); extern void indicator_write(rgb_led_t *start_led, uint8_t num_leds); -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { ws2812_setleds(start_led, RGBLED_NUM-RGB_INDICATOR_NUM); indicator_write(start_led + (RGBLED_NUM - RGB_INDICATOR_NUM), RGB_INDICATOR_NUM); } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; + void led_update_ports(led_t led_state) { rgblight_set_layer_state(0, led_state.caps_lock); rgblight_set_layer_state(1, led_state.scroll_lock); diff --git a/keyboards/dp60/keymaps/indicator/rules.mk b/keyboards/dp60/keymaps/indicator/rules.mk index a8891659f7..853666e4f4 100644 --- a/keyboards/dp60/keymaps/indicator/rules.mk +++ b/keyboards/dp60/keymaps/indicator/rules.mk @@ -1,4 +1,6 @@ RGBLIGHT_ENABLE = yes # Use RGB underglow light +RGBLIGHT_DRIVER = custom +WS2812_DRIVER_REQUIRED = yes SRC += indicator.c led_driver.c diff --git a/keyboards/ergodox_ez/led_i2c.c b/keyboards/ergodox_ez/led_i2c.c index 23ef91b74f..b82a12d67b 100644 --- a/keyboards/ergodox_ez/led_i2c.c +++ b/keyboards/ergodox_ez/led_i2c.c @@ -21,8 +21,9 @@ along with this program. If not, see . #ifdef RGBLIGHT_ENABLE # include "ergodox_ez.h" +# include "ws2812.h" -void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) { +void setleds_custom(rgb_led_t *led, uint16_t led_num) { i2c_init(); i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT); int i = 0; @@ -51,5 +52,8 @@ void rgblight_call_driver(rgb_led_t *led, uint8_t led_num) { ws2812_setleds(led, led_num); } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; #endif // RGBLIGHT_ENABLE diff --git a/keyboards/ergodox_ez/shine/info.json b/keyboards/ergodox_ez/shine/info.json index 11c3a8b209..181ac52e6c 100644 --- a/keyboards/ergodox_ez/shine/info.json +++ b/keyboards/ergodox_ez/shine/info.json @@ -2,5 +2,8 @@ "keyboard_name": "ErgoDox EZ Shine", "usb": { "pid": "0x4975" + }, + "rgblight": { + "driver": "custom" } } diff --git a/keyboards/ergodox_ez/shine/rules.mk b/keyboards/ergodox_ez/shine/rules.mk index 1e3cebb145..b035c36850 100644 --- a/keyboards/ergodox_ez/shine/rules.mk +++ b/keyboards/ergodox_ez/shine/rules.mk @@ -1 +1,2 @@ RGBLIGHT_ENABLE = yes +WS2812_DRIVER_REQUIRED = yes diff --git a/keyboards/matrix/abelx/abelx.c b/keyboards/matrix/abelx/abelx.c index a05934238a..0a3071a402 100644 --- a/keyboards/matrix/abelx/abelx.c +++ b/keyboards/matrix/abelx/abelx.c @@ -57,6 +57,7 @@ void housekeeping_task_kb(void) { #ifdef RGBLIGHT_ENABLE #include "rgblight.h" +#include "ws2812.h" #include "i2c_master.h" const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = { @@ -66,7 +67,7 @@ const aw9523b_led g_aw9523b_leds[AW9523B_RGB_NUM] = { {AW9523B_P07_PWM, AW9523B_P06_PWM, AW9523B_P05_PWM}, }; -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { uint8_t num = num_leds < AW9523B_RGB_NUM ? num_leds : AW9523B_RGB_NUM; @@ -77,6 +78,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) } } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; + #endif static uint16_t caps_lock_pin = DEF_PIN(TCA6424_PORT2, 3); diff --git a/keyboards/matrix/abelx/info.json b/keyboards/matrix/abelx/info.json index 35bc059810..b9aa23b756 100644 --- a/keyboards/matrix/abelx/info.json +++ b/keyboards/matrix/abelx/info.json @@ -10,6 +10,7 @@ }, "rgblight": { "led_count": 9, + "driver": "custom", "animations": { "breathing": true, "rainbow_mood": true, diff --git a/keyboards/matrix/abelx/rules.mk b/keyboards/matrix/abelx/rules.mk index 1c2fc05ffe..83142dd71c 100644 --- a/keyboards/matrix/abelx/rules.mk +++ b/keyboards/matrix/abelx/rules.mk @@ -46,3 +46,4 @@ CUSTOM_MATRIX = lite # project specific files SRC += matrix.c tca6424.c aw9523b.c I2C_DRIVER_REQUIRED = yes +WS2812_DRIVER_REQUIRED = yes diff --git a/keyboards/matrix/m20add/info.json b/keyboards/matrix/m20add/info.json index 972aab9d0d..6e1a1c493f 100644 --- a/keyboards/matrix/m20add/info.json +++ b/keyboards/matrix/m20add/info.json @@ -10,6 +10,7 @@ }, "rgblight": { "led_count": 20, + "driver": "custom", "animations": { "breathing": true, "rainbow_mood": true, diff --git a/keyboards/matrix/m20add/rgb_ring.c b/keyboards/matrix/m20add/rgb_ring.c index f3fbe83d72..f32875cf4f 100644 --- a/keyboards/matrix/m20add/rgb_ring.c +++ b/keyboards/matrix/m20add/rgb_ring.c @@ -357,7 +357,7 @@ static void custom_effects(void) effect_funcs[rgb_ring.effect](); } -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { if (rgb_ring.state != RING_STATE_QMK) { return; @@ -368,6 +368,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) } } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; + void rgb_ring_init(void) { diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c index 8246da809c..35a55d03b6 100644 --- a/keyboards/matrix/noah/noah.c +++ b/keyboards/matrix/noah/noah.c @@ -22,45 +22,42 @@ extern rgblight_config_t rgblight_config; #endif rgb_led_t noah_leds[RGBLED_NUM]; static bool noah_led_mode = false; -void rgblight_set(void) { +void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) { memset(&noah_leds[0], 0, sizeof(noah_leds)); if (!rgblight_config.enable) { for (uint8_t i = 0; i < RGBLED_NUM; i++) { - led[i].r = 0; - led[i].g = 0; - led[i].b = 0; + ledarray[i].r = 0; + ledarray[i].g = 0; + ledarray[i].b = 0; } } if (noah_led_mode) { led_t led_state = host_keyboard_led_state(); if (led_state.caps_lock) { - noah_leds[0] = led[0]; + noah_leds[0] = ledarray[0]; } if (led_state.scroll_lock) { - noah_leds[1] = led[1]; + noah_leds[1] = ledarray[1]; } if (led_state.num_lock) { - noah_leds[2] = led[2]; + noah_leds[2] = ledarray[2]; } for (int32_t i = 0; i < 4; i++) { if(layer_state_is(i+1)) { - noah_leds[i + 3] = led[i + 3]; + noah_leds[i + 3] = ledarray[i + 3]; } } } else { - memcpy(&noah_leds[0], &led[0], sizeof(noah_leds)); + memcpy(&noah_leds[0], &ledarray[0], sizeof(noah_leds)); } ws2812_setleds(noah_leds, RGBLED_NUM); } -#endif -void matrix_scan_kb(void) { -#ifdef RGBLIGHT_ENABLE - rgblight_task(); +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; #endif - matrix_scan_user(); -} #ifdef RGB_MATRIX_ENABLE const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { diff --git a/keyboards/neson_design/700e/700e.c b/keyboards/neson_design/700e/700e.c index 9def73d6a4..31f88a71f9 100644 --- a/keyboards/neson_design/700e/700e.c +++ b/keyboards/neson_design/700e/700e.c @@ -20,6 +20,7 @@ #include "quantum.h" #include "i2c_master.h" #include "drivers/led/issi/is31fl3731.h" +#include "ws2812.h" enum { SELF_TESTING, @@ -336,7 +337,7 @@ void housekeeping_task_kb(void) housekeeping_task_user(); } -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { if (rgb_state.state != NORMAL) return; @@ -353,6 +354,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) ws2812_setleds(leds, 4); } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; + bool led_update_kb(led_t led_state) { bool res = led_update_user(led_state); diff --git a/keyboards/neson_design/700e/info.json b/keyboards/neson_design/700e/info.json index 12a979ab11..3b74e9609a 100644 --- a/keyboards/neson_design/700e/info.json +++ b/keyboards/neson_design/700e/info.json @@ -20,6 +20,7 @@ "saturation_steps": 8, "brightness_steps": 8, "led_count": 68, + "driver": "custom", "animations": { "breathing": true, "rainbow_mood": true, diff --git a/keyboards/neson_design/700e/rules.mk b/keyboards/neson_design/700e/rules.mk index 5650ed1fee..dd1db38bab 100644 --- a/keyboards/neson_design/700e/rules.mk +++ b/keyboards/neson_design/700e/rules.mk @@ -12,4 +12,5 @@ RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow NO_USB_STARTUP_CHECK = yes QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c +WS2812_DRIVER_REQUIRED = yes I2C_DRIVER_REQUIRED = yes diff --git a/keyboards/neson_design/n6/info.json b/keyboards/neson_design/n6/info.json index 3f383b4f8f..c48824d80f 100644 --- a/keyboards/neson_design/n6/info.json +++ b/keyboards/neson_design/n6/info.json @@ -23,6 +23,7 @@ "saturation_steps": 8, "brightness_steps": 8, "led_count": 65, + "driver": "custom", "max_brightness": 192, "animations": { "breathing": true, diff --git a/keyboards/neson_design/n6/n6.c b/keyboards/neson_design/n6/n6.c index 38b634eeb7..b878b9368d 100644 --- a/keyboards/neson_design/n6/n6.c +++ b/keyboards/neson_design/n6/n6.c @@ -20,6 +20,7 @@ #include "quantum.h" #include "i2c_master.h" #include "drivers/led/issi/is31fl3731.h" +#include "ws2812.h" enum { SELF_TESTING, @@ -338,7 +339,7 @@ void housekeeping_task_kb(void) housekeeping_task_user(); } -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { if (rgb_state.state != NORMAL) return; @@ -348,6 +349,10 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) ws2812_setleds(start_led+IS31FL3731_LED_COUNT, 1); } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; + bool led_update_kb(led_t led_state) { bool res = led_update_user(led_state); diff --git a/keyboards/neson_design/n6/rules.mk b/keyboards/neson_design/n6/rules.mk index a3e4abe6cd..4c9ce45352 100644 --- a/keyboards/neson_design/n6/rules.mk +++ b/keyboards/neson_design/n6/rules.mk @@ -11,4 +11,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow QUANTUM_LIB_SRC += drivers/led/issi/is31fl3731.c +WS2812_DRIVER_REQUIRED = yes I2C_DRIVER_REQUIRED = yes diff --git a/keyboards/neson_design/nico/info.json b/keyboards/neson_design/nico/info.json index 477ac3ba7c..1c86d9a1ae 100644 --- a/keyboards/neson_design/nico/info.json +++ b/keyboards/neson_design/nico/info.json @@ -25,7 +25,8 @@ "pin": "B0" }, "rgblight": { - "led_count": 5 + "led_count": 5, + "driver": "custom" }, "url": "", "usb": { diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c index b4d15777b7..5d84cb9e1b 100644 --- a/keyboards/neson_design/nico/nico.c +++ b/keyboards/neson_design/nico/nico.c @@ -18,6 +18,7 @@ */ #include "quantum.h" +#include "ws2812.h" #ifdef RGBLIGHT_ENABLE static bool alert = false; @@ -66,7 +67,7 @@ void housekeeping_task_kb(void) housekeeping_task_user(); } -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) +void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) { start_led[2].r = start_led[0].r; start_led[2].g = start_led[0].g; @@ -82,4 +83,7 @@ void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) ws2812_setleds(start_led, RGBLED_NUM); } +const rgblight_driver_t rgblight_driver = { + .setleds = setleds_custom, +}; #endif \ No newline at end of file diff --git a/keyboards/neson_design/nico/rules.mk b/keyboards/neson_design/nico/rules.mk index 6e7633bfe0..9a69649289 100644 --- a/keyboards/neson_design/nico/rules.mk +++ b/keyboards/neson_design/nico/rules.mk @@ -1 +1 @@ -# This file intentionally left blank +WS2812_DRIVER_REQUIRED = yes diff --git a/keyboards/v60_type_r/info.json b/keyboards/v60_type_r/info.json index 6332071994..43a3d9472c 100644 --- a/keyboards/v60_type_r/info.json +++ b/keyboards/v60_type_r/info.json @@ -18,22 +18,6 @@ "pin": "F7", "on_state": 0 }, - "rgblight": { - "driver": "custom", - "led_count": 1, - "animations": { - "breathing": true, - "rainbow_mood": true, - "rainbow_swirl": true, - "snake": true, - "knight": true, - "christmas": true, - "static_gradient": true, - "rgb_test": true, - "alternating": true, - "twinkle": true - } - }, "processor": "atmega32u4", "bootloader": "atmel-dfu", "community_layouts": ["60_ansi", "60_iso"], diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk index d6654ffea6..a7f2bc7026 100644 --- a/keyboards/v60_type_r/rules.mk +++ b/keyboards/v60_type_r/rules.mk @@ -8,7 +8,7 @@ CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = yes # Commands for debug and configuration NKRO_ENABLE = no # Enable N-Key Rollover BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality -RGBLIGHT_ENABLE = yes # Enable the RGB Underglow +RGBLIGHT_ENABLE = no # Enable the RGB Underglow AUDIO_ENABLE = no # Audio output LTO_ENABLE = yes diff --git a/keyboards/v60_type_r/v60_type_r.c b/keyboards/v60_type_r/v60_type_r.c index 871d9915d3..b266472e64 100644 --- a/keyboards/v60_type_r/v60_type_r.c +++ b/keyboards/v60_type_r/v60_type_r.c @@ -131,20 +131,6 @@ void set_rgb_pin_off(uint8_t pin) { PORTF |= _BV(pin); } -void rgblight_set(void) { - // xprintf("Setting RGB underglow\n"); - if (!rgblight_config.enable) { - led[0].r = 0; - led[0].g = 0; - led[0].b = 0; - set_rgb_pin_off(RGB_RED_PIN); - set_rgb_pin_off(RGB_GREEN_PIN); - set_rgb_pin_off(RGB_BLUE_PIN); - } - - // //xprintf("Red: %u, Green: %u, Blue: %u\n", led[0].r, led[0].g, led[0].b); -} - ISR(TIMER3_COMPA_vect) { static uint8_t pwm = 0; diff --git a/keyboards/work_louder/loop/info.json b/keyboards/work_louder/loop/info.json index eacbbbccbd..4514192b6d 100644 --- a/keyboards/work_louder/loop/info.json +++ b/keyboards/work_louder/loop/info.json @@ -30,6 +30,7 @@ "pin": "F1" }, "rgblight": { + "driver": "custom", "max_brightness": 120, "sleep": true, "animations": { diff --git a/keyboards/work_louder/micro/info.json b/keyboards/work_louder/micro/info.json index d76e7aa049..21c4bc0da8 100644 --- a/keyboards/work_louder/micro/info.json +++ b/keyboards/work_louder/micro/info.json @@ -21,6 +21,7 @@ }, "processor": "atmega32u4", "rgblight": { + "driver": "custom", "animations": { "alternating": false, "breathing": true, diff --git a/keyboards/work_louder/nano/info.json b/keyboards/work_louder/nano/info.json index ab064bd019..7bbdb4e032 100644 --- a/keyboards/work_louder/nano/info.json +++ b/keyboards/work_louder/nano/info.json @@ -27,6 +27,7 @@ }, "rgblight": { "led_count": 6, + "driver": "custom", "max_brightness": 120, "sleep": true, "animations": { diff --git a/keyboards/work_louder/numpad/info.json b/keyboards/work_louder/numpad/info.json index 0fa2bf2565..9149fc77bb 100644 --- a/keyboards/work_louder/numpad/info.json +++ b/keyboards/work_louder/numpad/info.json @@ -50,6 +50,7 @@ ] }, "rgblight": { + "driver": "custom", "animations": { "breathing": true, "knight": true, diff --git a/keyboards/work_louder/rgb_functions.c b/keyboards/work_louder/rgb_functions.c index b4d1a2ad72..9b39555971 100644 --- a/keyboards/work_louder/rgb_functions.c +++ b/keyboards/work_louder/rgb_functions.c @@ -24,9 +24,9 @@ #include "ws2812_bitbang.c" -void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) { - ws2812_setleds(start_led, num_leds); -} +const rgblight_driver_t rgblight_driver = { + .setleds = ws2812_setleds, +}; #endif #ifdef RGB_MATRIX_ENABLE diff --git a/keyboards/work_louder/work_board/info.json b/keyboards/work_louder/work_board/info.json index 1946b8bcf4..163271bf7a 100644 --- a/keyboards/work_louder/work_board/info.json +++ b/keyboards/work_louder/work_board/info.json @@ -25,6 +25,7 @@ "pin": "D1" }, "rgblight": { + "driver": "custom", "max_brightness": 120, "sleep": true, "animations": { diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 8ac886d441..8a5240568c 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -900,12 +900,6 @@ void rgblight_wakeup(void) { #endif -__attribute__((weak)) void rgblight_call_driver(rgb_led_t *start_led, uint8_t num_leds) { - ws2812_setleds(start_led, num_leds); -} - -#ifndef RGBLIGHT_CUSTOM - void rgblight_set(void) { rgb_led_t *start_led; uint8_t num_leds = rgblight_ranges.clipping_num_leds; @@ -915,42 +909,41 @@ void rgblight_set(void) { led[i].r = 0; led[i].g = 0; led[i].b = 0; -# ifdef RGBW +#ifdef RGBW led[i].w = 0; -# endif +#endif } } -# ifdef RGBLIGHT_LAYERS +#ifdef RGBLIGHT_LAYERS if (rgblight_layers != NULL -# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF) +# if !defined(RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF) && rgblight_config.enable -# elif defined(RGBLIGHT_SLEEP) +# elif defined(RGBLIGHT_SLEEP) && !is_suspended -# endif +# endif ) { rgblight_layers_write(); } -# endif +#endif -# ifdef RGBLIGHT_LED_MAP +#ifdef RGBLIGHT_LED_MAP rgb_led_t led0[RGBLED_NUM]; for (uint8_t i = 0; i < RGBLED_NUM; i++) { led0[i] = led[pgm_read_byte(&led_map[i])]; } start_led = led0 + rgblight_ranges.clipping_start_pos; -# else +#else start_led = led + rgblight_ranges.clipping_start_pos; -# endif +#endif -# ifdef RGBW +#ifdef RGBW for (uint8_t i = 0; i < num_leds; i++) { convert_rgb_to_rgbw(&start_led[i]); } -# endif - rgblight_call_driver(start_led, num_leds); -} #endif + rgblight_driver.setleds(start_led, num_leds); +} #ifdef RGBLIGHT_SPLIT /* for split keyboard master side */ diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h index a222ab6b9f..d2b8a24b1e 100644 --- a/quantum/rgblight/rgblight.h +++ b/quantum/rgblight/rgblight.h @@ -160,6 +160,7 @@ enum RGBLIGHT_EFFECT_MODE { #include #include +#include "rgblight_drivers.h" #include "progmem.h" #include "eeconfig.h" #include "ws2812.h" diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c new file mode 100644 index 0000000000..45b60e1a5f --- /dev/null +++ b/quantum/rgblight/rgblight_drivers.c @@ -0,0 +1,20 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "rgblight_drivers.h" + +#if defined(RGBLIGHT_WS2812) +# include "ws2812.h" + +const rgblight_driver_t rgblight_driver = { + .setleds = ws2812_setleds, +}; + +#elif defined(RGBLIGHT_APA102) +# include "apa102.h" + +const rgblight_driver_t rgblight_driver = { + .setleds = apa102_setleds, +}; + +#endif diff --git a/quantum/rgblight/rgblight_drivers.h b/quantum/rgblight/rgblight_drivers.h new file mode 100644 index 0000000000..f7125a6f3d --- /dev/null +++ b/quantum/rgblight/rgblight_drivers.h @@ -0,0 +1,13 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include +#include "color.h" + +typedef struct { + void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds); +} rgblight_driver_t; + +extern const rgblight_driver_t rgblight_driver; -- cgit v1.2.3 From 24511d31b6fbf92d182d84d97193f65cbbdfeaa4 Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 8 Dec 2023 16:54:47 +1100 Subject: LED/RGB Matrix: add header for drivers (#22628) --- quantum/led_matrix/led_matrix.h | 39 +------------------------------ quantum/led_matrix/led_matrix_drivers.c | 2 +- quantum/led_matrix/led_matrix_drivers.h | 38 ++++++++++++++++++++++++++++++ quantum/rgb_matrix/rgb_matrix.h | 36 +---------------------------- quantum/rgb_matrix/rgb_matrix_drivers.c | 6 ++++- quantum/rgb_matrix/rgb_matrix_drivers.h | 41 +++++++++++++++++++++++++++++++++ 6 files changed, 87 insertions(+), 75 deletions(-) create mode 100644 quantum/led_matrix/led_matrix_drivers.h create mode 100644 quantum/rgb_matrix/rgb_matrix_drivers.h (limited to 'quantum') diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index c903a230f4..153abf2975 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -23,32 +23,9 @@ #include #include #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 @@ -193,18 +170,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 +182,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 . */ -#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 + +#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; diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index 9a3ffb8ea3..b1bf839bf6 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -21,31 +21,10 @@ #include #include #include "rgb_matrix_types.h" +#include "rgb_matrix_drivers.h" #include "color.h" #include "keyboard.h" -#if defined(RGB_MATRIX_IS31FL3218) -# include "is31fl3218.h" -#elif defined(RGB_MATRIX_IS31FL3731) -# include "is31fl3731.h" -#elif defined(RGB_MATRIX_IS31FL3733) -# include "is31fl3733.h" -#elif defined(RGB_MATRIX_IS31FL3736) -# include "is31fl3736.h" -#elif defined(RGB_MATRIX_IS31FL3737) -# include "is31fl3737.h" -#elif defined(RGB_MATRIX_IS31FL3741) -# include "is31fl3741.h" -#elif defined(IS31FLCOMMON) -# include "is31flcommon.h" -#elif defined(RGB_MATRIX_SNLED27351) -# include "snled27351.h" -#elif defined(RGB_MATRIX_AW20216S) -# include "aw20216s.h" -#elif defined(RGB_MATRIX_WS2812) -# include "ws2812.h" -#endif - #ifndef RGB_MATRIX_TIMEOUT # define RGB_MATRIX_TIMEOUT 0 #endif @@ -272,17 +251,6 @@ void rgb_matrix_set_flags_noeeprom(led_flags_t flags); # define rgblight_decrease_speed_noeeprom rgb_matrix_decrease_speed_noeeprom #endif -typedef struct { - /* Perform any initialisation required for the other driver functions to work. */ - void (*init)(void); - /* Set the colour of a single LED in the buffer. */ - void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b); - /* Set the colour of all LEDS on the keyboard in the buffer. */ - void (*set_color_all)(uint8_t r, uint8_t g, uint8_t b); - /* Flush any buffered changes to the hardware. */ - void (*flush)(void); -} rgb_matrix_driver_t; - static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #if defined(RGB_MATRIX_SPLIT) if (is_keyboard_left()) { @@ -295,8 +263,6 @@ static inline bool rgb_matrix_check_finished_leds(uint8_t led_idx) { #endif } -extern const rgb_matrix_driver_t rgb_matrix_driver; - extern rgb_config_t rgb_matrix_config; extern uint32_t g_rgb_timer; diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 0f979cb233..e7bed0bf72 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -14,7 +14,11 @@ * along with this program. If not, see . */ -#include "rgb_matrix.h" +#include "rgb_matrix_drivers.h" + +#include +#include "keyboard.h" +#include "color.h" #include "util.h" /* Each driver needs to define the struct diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h new file mode 100644 index 0000000000..991344f087 --- /dev/null +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -0,0 +1,41 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include + +#if defined(RGB_MATRIX_AW20216S) +# include "aw20216s.h" +#elif defined(RGB_MATRIX_IS31FL3218) +# include "is31fl3218.h" +#elif defined(RGB_MATRIX_IS31FL3731) +# include "is31fl3731.h" +#elif defined(RGB_MATRIX_IS31FL3733) +# include "is31fl3733.h" +#elif defined(RGB_MATRIX_IS31FL3736) +# include "is31fl3736.h" +#elif defined(RGB_MATRIX_IS31FL3737) +# include "is31fl3737.h" +#elif defined(RGB_MATRIX_IS31FL3741) +# include "is31fl3741.h" +#elif defined(IS31FLCOMMON) +# include "is31flcommon.h" +#elif defined(RGB_MATRIX_SNLED27351) +# include "snled27351.h" +#elif defined(RGB_MATRIX_WS2812) +# include "ws2812.h" +#endif + +typedef struct { + /* Perform any initialisation required for the other driver functions to work. */ + void (*init)(void); + /* Set the colour of a single LED in the buffer. */ + void (*set_color)(int index, uint8_t r, uint8_t g, uint8_t b); + /* Set the colour of all LEDS on the keyboard in the buffer. */ + void (*set_color_all)(uint8_t r, uint8_t g, uint8_t b); + /* Flush any buffered changes to the hardware. */ + void (*flush)(void); +} rgb_matrix_driver_t; + +extern const rgb_matrix_driver_t rgb_matrix_driver; -- cgit v1.2.3 From 42245651e7515c0d323761c97e0f0d35ee6ff35a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 8 Dec 2023 15:57:34 +0000 Subject: Align Dip Switch feature (#22625) --- quantum/dip_switch.c | 29 ++++++++++++----------------- quantum/dip_switch.h | 20 +++++++++++++++++++- quantum/keyboard.c | 2 +- 3 files changed, 32 insertions(+), 19 deletions(-) (limited to 'quantum') diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c index 6e254578d1..c4d64aa133 100644 --- a/quantum/dip_switch.c +++ b/quantum/dip_switch.c @@ -19,8 +19,6 @@ #include // for memcpy #include "dip_switch.h" -#include "gpio.h" -#include "util.h" #ifdef SPLIT_KEYBOARD # include "split_common/split_util.h" @@ -35,24 +33,17 @@ #endif #ifdef DIP_SWITCH_PINS -# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad)) static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; #endif #ifdef DIP_SWITCH_MATRIX_GRID -typedef struct matrix_index_t { - uint8_t row; - uint8_t col; -} matrix_index_t; - -# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad)) -static matrix_index_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID; -extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw); -static uint16_t scan_count; +static matrix_intersection_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID; +extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw); +static uint16_t scan_count; #endif /* DIP_SWITCH_MATRIX_GRID */ -static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0}; -static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0}; +static bool dip_switch_state[NUM_DIP_SWITCHES] = {0}; +static bool last_dip_switch_state[NUM_DIP_SWITCHES] = {0}; __attribute__((weak)) bool dip_switch_update_user(uint8_t index, bool active) { return true; @@ -75,12 +66,12 @@ void dip_switch_init(void) { # if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT) if (!isLeftHand) { const pin_t dip_switch_pad_right[] = DIP_SWITCH_PINS_RIGHT; - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { dip_switch_pad[i] = dip_switch_pad_right[i]; } } # endif - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { setPinInputHigh(dip_switch_pad[i]); } dip_switch_read(true); @@ -108,7 +99,7 @@ void dip_switch_read(bool forced) { } #endif - for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { #ifdef DIP_SWITCH_PINS dip_switch_state[i] = !readPin(dip_switch_pad[i]); #endif @@ -126,3 +117,7 @@ void dip_switch_read(bool forced) { memcpy(last_dip_switch_state, dip_switch_state, sizeof(dip_switch_state)); } } + +void dip_switch_task(void) { + dip_switch_read(false); +} diff --git a/quantum/dip_switch.h b/quantum/dip_switch.h index 6e79dcb0bf..ee5b550ada 100644 --- a/quantum/dip_switch.h +++ b/quantum/dip_switch.h @@ -20,11 +20,29 @@ #include #include +#include "gpio.h" +#include "util.h" + +#if defined(DIP_SWITCH_PINS) +# define NUM_DIP_SWITCHES ARRAY_SIZE(((pin_t[])DIP_SWITCH_PINS)) +#elif defined(DIP_SWITCH_MATRIX_GRID) +typedef struct matrix_intersection_t { + uint8_t row; + uint8_t col; +} matrix_intersection_t; +# define NUM_DIP_SWITCHES ARRAY_SIZE(((matrix_intersection_t[])DIP_SWITCH_MATRIX_GRID)) +#endif + +#ifndef NUM_DIP_SWITCHES +# define NUM_DIP_SWITCHES 0 +#endif bool dip_switch_update_kb(uint8_t index, bool active); bool dip_switch_update_user(uint8_t index, bool active); bool dip_switch_update_mask_user(uint32_t state); bool dip_switch_update_mask_kb(uint32_t state); -void dip_switch_init(void); void dip_switch_read(bool forced); + +void dip_switch_init(void); +void dip_switch_task(void); diff --git a/quantum/keyboard.c b/quantum/keyboard.c index 86a1a9fea3..b5fa1a6e2e 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -615,7 +615,7 @@ void quantum_task(void) { #endif #ifdef DIP_SWITCH_ENABLE - dip_switch_read(false); + dip_switch_task(); #endif #ifdef AUTO_SHIFT_ENABLE -- cgit v1.2.3 From 4682226e20d17437c0a6f67f5d6160432074d948 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 11 Dec 2023 23:06:18 +0000 Subject: Keymap introspection for Dip Switches (#22543) --- builddefs/common_features.mk | 6 +++++ docs/feature_dip_switch.md | 21 ++++++++++++++++ .../onekey/keymaps/dip_switch_map/config.h | 6 +++++ .../onekey/keymaps/dip_switch_map/keymap.c | 14 +++++++++++ .../onekey/keymaps/dip_switch_map/rules.mk | 2 ++ quantum/dip_switch.c | 28 ++++++++++++++++++++++ quantum/dip_switch.h | 7 ++++++ quantum/keyboard.h | 13 +++++++++- quantum/keymap_common.c | 12 ++++++++++ quantum/keymap_introspection.c | 18 ++++++++++++++ quantum/keymap_introspection.h | 12 ++++++++++ 11 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 keyboards/handwired/onekey/keymaps/dip_switch_map/config.h create mode 100644 keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c create mode 100644 keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index d793d5faf5..5e93480e4d 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -908,6 +908,12 @@ ifeq ($(strip $(ENCODER_ENABLE)), yes) endif endif +ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes) + ifeq ($(strip $(DIP_SWITCH_MAP_ENABLE)), yes) + OPT_DEFS += -DDIP_SWITCH_MAP_ENABLE + endif +endif + VALID_WS2812_DRIVER_TYPES := bitbang custom i2c pwm spi vendor WS2812_DRIVER ?= bitbang diff --git a/docs/feature_dip_switch.md b/docs/feature_dip_switch.md index 6fbe91657d..0e31f5acae 100644 --- a/docs/feature_dip_switch.md +++ b/docs/feature_dip_switch.md @@ -20,6 +20,27 @@ or #define DIP_SWITCH_MATRIX_GRID { {0,6}, {1,6}, {2,6} } // List of row and col pairs ``` +## DIP Switch map :id=dip-switch-map + +DIP Switch mapping may be added to your `keymap.c`, which replicates the normal keyswitch functionality, but with dip switches. Add this to your keymap's `rules.mk`: + +```make +DIP_SWITCH_MAP_ENABLE = yes +``` + +Your `keymap.c` will then need a dip switch mapping defined (for two dip switches): + +```c +#if defined(DIP_SWITCH_MAP_ENABLE) +const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = { + DIP_SWITCH_OFF_ON(DF(0), DF(1)), + DIP_SWITCH_OFF_ON(EC_NORM, EC_SWAP) +}; +#endif +``` + +?> This should only be enabled at the keymap level. + ## Callbacks The callback functions can be inserted into your `.c`: diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h b/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h new file mode 100644 index 0000000000..7e5b6c0b91 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/config.h @@ -0,0 +1,6 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +// TODO: Remove reuse of pin +#define DIP_SWITCH_PINS { WS2812_DI_PIN } diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c b/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c new file mode 100644 index 0000000000..35bb16d458 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/keymap.c @@ -0,0 +1,14 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_ortho_1x1(KC_A), + [1] = LAYOUT_ortho_1x1(KC_B), +}; + +#if defined(DIP_SWITCH_MAP_ENABLE) +const uint16_t PROGMEM dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES] = { + DIP_SWITCH_OFF_ON(DF(0), DF(1)) +}; +#endif diff --git a/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk b/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk new file mode 100644 index 0000000000..b2429854f1 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/dip_switch_map/rules.mk @@ -0,0 +1,2 @@ +DIP_SWITCH_ENABLE = yes +DIP_SWITCH_MAP_ENABLE = yes diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c index c4d64aa133..e901f3e0c4 100644 --- a/quantum/dip_switch.c +++ b/quantum/dip_switch.c @@ -61,6 +61,28 @@ __attribute__((weak)) bool dip_switch_update_mask_kb(uint32_t state) { return dip_switch_update_mask_user(state); } +#ifdef DIP_SWITCH_MAP_ENABLE +# include "keymap_introspection.h" +# include "action.h" + +# ifndef DIP_SWITCH_MAP_KEY_DELAY +# define DIP_SWITCH_MAP_KEY_DELAY TAP_CODE_DELAY +# endif + +static void dip_switch_exec_mapping(uint8_t index, bool on) { + // The delays below cater for Windows and its wonderful requirements. + action_exec(on ? MAKE_DIPSWITCH_ON_EVENT(index, true) : MAKE_DIPSWITCH_OFF_EVENT(index, true)); +# if DIP_SWITCH_MAP_KEY_DELAY > 0 + wait_ms(DIP_SWITCH_MAP_KEY_DELAY); +# endif // DIP_SWITCH_MAP_KEY_DELAY > 0 + + action_exec(on ? MAKE_DIPSWITCH_ON_EVENT(index, false) : MAKE_DIPSWITCH_OFF_EVENT(index, false)); +# if DIP_SWITCH_MAP_KEY_DELAY > 0 + wait_ms(DIP_SWITCH_MAP_KEY_DELAY); +# endif // DIP_SWITCH_MAP_KEY_DELAY > 0 +} +#endif // DIP_SWITCH_MAP_ENABLE + void dip_switch_init(void) { #ifdef DIP_SWITCH_PINS # if defined(SPLIT_KEYBOARD) && defined(DIP_SWITCH_PINS_RIGHT) @@ -109,11 +131,17 @@ void dip_switch_read(bool forced) { dip_switch_mask |= dip_switch_state[i] << i; if (last_dip_switch_state[i] != dip_switch_state[i] || forced) { has_dip_state_changed = true; +#ifndef DIP_SWITCH_MAP_ENABLE dip_switch_update_kb(i, dip_switch_state[i]); +#else + dip_switch_exec_mapping(i, dip_switch_state[i]); +#endif } } if (has_dip_state_changed) { +#ifndef DIP_SWITCH_MAP_ENABLE dip_switch_update_mask_kb(dip_switch_mask); +#endif memcpy(last_dip_switch_state, dip_switch_state, sizeof(dip_switch_state)); } } diff --git a/quantum/dip_switch.h b/quantum/dip_switch.h index ee5b550ada..7629859359 100644 --- a/quantum/dip_switch.h +++ b/quantum/dip_switch.h @@ -46,3 +46,10 @@ void dip_switch_read(bool forced); void dip_switch_init(void); void dip_switch_task(void); + +#ifdef DIP_SWITCH_MAP_ENABLE +# define NUM_DIP_STATES 2 +# define DIP_SWITCH_OFF_ON(off, on) \ + { (off), (on) } +extern const uint16_t dip_switch_map[NUM_DIP_SWITCHES][NUM_DIP_STATES]; +#endif // DIP_SWITCH_MAP_ENABLE diff --git a/quantum/keyboard.h b/quantum/keyboard.h index 5ea57815a7..0f39fde682 100644 --- a/quantum/keyboard.h +++ b/quantum/keyboard.h @@ -32,7 +32,7 @@ typedef struct { uint8_t row; } keypos_t; -typedef enum keyevent_type_t { TICK_EVENT = 0, KEY_EVENT = 1, ENCODER_CW_EVENT = 2, ENCODER_CCW_EVENT = 3, COMBO_EVENT = 4 } keyevent_type_t; +typedef enum keyevent_type_t { TICK_EVENT = 0, KEY_EVENT = 1, ENCODER_CW_EVENT = 2, ENCODER_CCW_EVENT = 3, COMBO_EVENT = 4, DIP_SWITCH_ON_EVENT = 5, DIP_SWITCH_OFF_EVENT = 6 } keyevent_type_t; /* key event */ typedef struct { @@ -48,6 +48,8 @@ typedef struct { /* special keypos_t entries */ #define KEYLOC_ENCODER_CW 253 #define KEYLOC_ENCODER_CCW 252 +#define KEYLOC_DIP_SWITCH_ON 251 +#define KEYLOC_DIP_SWITCH_OFF 250 static inline bool IS_NOEVENT(const keyevent_t event) { return event.type == TICK_EVENT; @@ -64,6 +66,9 @@ static inline bool IS_COMBOEVENT(const keyevent_t event) { static inline bool IS_ENCODEREVENT(const keyevent_t event) { return event.type == ENCODER_CW_EVENT || event.type == ENCODER_CCW_EVENT; } +static inline bool IS_DIPSWITCHEVENT(const keyevent_t event) { + return event.type == DIP_SWITCH_ON_EVENT || event.type == DIP_SWITCH_OFF_EVENT; +} /* Common keypos_t object factory */ #define MAKE_KEYPOS(row_num, col_num) ((keypos_t){.row = (row_num), .col = (col_num)}) @@ -92,6 +97,12 @@ static inline bool IS_ENCODEREVENT(const keyevent_t event) { # define MAKE_ENCODER_CCW_EVENT(enc_id, press) MAKE_EVENT(KEYLOC_ENCODER_CCW, (enc_id), (press), ENCODER_CCW_EVENT) #endif // ENCODER_MAP_ENABLE +#ifdef DIP_SWITCH_MAP_ENABLE +/* Dip Switch events */ +# define MAKE_DIPSWITCH_ON_EVENT(switch_id, press) MAKE_EVENT(KEYLOC_DIP_SWITCH_ON, (switch_id), (press), DIP_SWITCH_ON_EVENT) +# define MAKE_DIPSWITCH_OFF_EVENT(switch_id, press) MAKE_EVENT(KEYLOC_DIP_SWITCH_OFF, (switch_id), (press), DIP_SWITCH_OFF_EVENT) +#endif // DIP_SWITCH_MAP_ENABLE + /* it runs once at early stage of startup before keyboard_init. */ void keyboard_setup(void); /* it runs once after initializing host side protocol, debug and MCU peripherals. */ diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 91e47a72ee..abdcd5c7ba 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -29,6 +29,10 @@ along with this program. If not, see . # include "encoder.h" #endif +#ifdef DIP_SWITCH_MAP_ENABLE +# include "dip_switch.h" +#endif + #ifdef BACKLIGHT_ENABLE # include "backlight.h" #endif @@ -204,5 +208,13 @@ __attribute__((weak)) uint16_t keymap_key_to_keycode(uint8_t layer, keypos_t key return keycode_at_encodermap_location(layer, key.col, false); } #endif // ENCODER_MAP_ENABLE +#ifdef DIP_SWITCH_MAP_ENABLE + else if (key.row == KEYLOC_DIP_SWITCH_ON && key.col < NUM_DIP_SWITCHES) { + return keycode_at_dip_switch_map_location(key.col, true); + } else if (key.row == KEYLOC_DIP_SWITCH_OFF && key.col < NUM_DIP_SWITCHES) { + return keycode_at_dip_switch_map_location(key.col, false); + } +#endif // DIP_SWITCH_MAP_ENABLE + return KC_NO; } diff --git a/quantum/keymap_introspection.c b/quantum/keymap_introspection.c index e4a01d2e9a..71e3b429ea 100644 --- a/quantum/keymap_introspection.c +++ b/quantum/keymap_introspection.c @@ -71,6 +71,24 @@ __attribute__((weak)) uint16_t keycode_at_encodermap_location(uint8_t layer_num, #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Dip Switch mapping + +#if defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE) + +uint16_t keycode_at_dip_switch_map_location_raw(uint8_t switch_idx, bool on) { + if (switch_idx < NUM_DIP_SWITCHES) { + return pgm_read_word(&dip_switch_map[switch_idx][!!on]); + } + return KC_TRNS; +} + +uint16_t keycode_at_dip_switch_map_location(uint8_t switch_idx, bool on) { + return keycode_at_dip_switch_map_location_raw(switch_idx, on); +} + +#endif // defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE) + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Combos diff --git a/quantum/keymap_introspection.h b/quantum/keymap_introspection.h index 2012a2b8cc..f7516bf42a 100644 --- a/quantum/keymap_introspection.h +++ b/quantum/keymap_introspection.h @@ -35,6 +35,18 @@ uint16_t keycode_at_encodermap_location(uint8_t layer_num, uint8_t encoder_idx, #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Dip Switch mapping + +#if defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE) + +// Get the keycode for the dip_switch mapping location, stored in firmware rather than any other persistent storage +uint16_t keycode_at_dip_switch_map_location_raw(uint8_t switch_idx, bool on); +// Get the keycode for the dip_switch mapping location, potentially stored dynamically +uint16_t keycode_at_dip_switch_map_location(uint8_t switch_idx, bool on); + +#endif // defined(DIP_SWITCH_ENABLE) && defined(DIP_SWITCH_MAP_ENABLE) + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Combos -- cgit v1.2.3 From e64815511303584787b623c12ac8bab7dccb0034 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 12 Dec 2023 15:30:08 +1100 Subject: Rename `RGBLED_NUM` -> `RGBLIGHT_LED_COUNT` (#22570) --- data/mappings/info_config.hjson | 2 +- docs/config_options.md | 2 +- docs/feature_rgblight.md | 56 +++++++++++----------- docs/hardware_keyboard_guidelines.md | 4 +- drivers/led/apa102.h | 6 +-- drivers/ws2812.h | 6 +-- keyboards/1k/keymaps/default/rgblite.h | 4 +- keyboards/25keys/zinc/rev1/post_config.h | 20 ++++---- keyboards/25keys/zinc/reva/post_config.h | 20 ++++---- keyboards/acheron/themis/87h/config.h | 2 - keyboards/acheron/themis/87h/info.json | 3 ++ keyboards/acheron/themis/87htsc/config.h | 2 - keyboards/acheron/themis/87htsc/info.json | 3 ++ keyboards/acheron/themis/88htsc/config.h | 2 - keyboards/acheron/themis/88htsc/info.json | 3 ++ keyboards/arabica37/keymaps/default/config.h | 4 +- .../ergo42/keymaps/default-underglow/config.h | 4 +- keyboards/dm9records/ergoinu/config.h | 2 +- keyboards/duck/jetfire/indicator_leds.h | 2 +- keyboards/duck/jetfire/jetfire.c | 8 ++-- keyboards/ergodox_ez/led_i2c.c | 2 +- keyboards/ergodox_ez/post_config.h | 4 +- keyboards/ergotravel/keymaps/default/config.h | 4 +- keyboards/ergotravel/keymaps/via/config.h | 4 +- keyboards/fc660c/keymaps/default_rgb/config.h | 2 +- keyboards/fc660c/keymaps/via_rgb/config.h | 2 +- keyboards/foxlab/key65/universal/readme.md | 2 +- .../keymaps/default_giabarinaix2/config.h | 4 +- .../giabalanai/keymaps/via_giabarinaix2/config.h | 4 +- .../gl516/j73gl/keymaps/via_rgb_matrix/config.h | 4 +- .../handwired/chiron/keymaps/default/config.h | 4 +- .../handwired/freoduo/keymaps/default/keymap.c | 2 +- keyboards/handwired/onekey/keymaps/apa102/config.h | 2 +- keyboards/helix/pico/config.h | 8 ++-- keyboards/helix/rev2/config.h | 8 ++-- keyboards/hineybush/hbcp/hbcp.c | 2 +- keyboards/ibm/model_m/mschwingen/mschwingen.c | 10 ++-- keyboards/jian/nsrev2/config.h | 4 +- keyboards/jian/rev1/post_config.h | 4 +- keyboards/jian/rev2/post_config.h | 4 +- .../kapcave/gskt00/keymaps/default-poly/config.h | 2 +- keyboards/kc60/mod_rgb_underglow.md | 4 +- keyboards/keebio/viterbi/keymaps/default/config.h | 4 +- keyboards/lets_split/keymaps/via/config.h | 4 +- keyboards/lily58/keymaps/default/config.h | 8 ++-- keyboards/lily58/keymaps/via/config.h | 4 +- .../launchpad/keymaps/default_rgb/config.h | 2 +- keyboards/marksard/treadstone48/rev1/config.h | 4 +- keyboards/matrix/noah/noah.c | 10 ++-- keyboards/miiiw/blackio83/rev_0100/config.h | 1 - keyboards/miiiw/blackio83/rev_0100/rev_0100.c | 17 ------- keyboards/mixi/keymaps/default/keymap.c | 6 +-- keyboards/mixi/keymaps/via/keymap.c | 6 +-- keyboards/mlego/m48/keymaps/default/keymap.c | 8 ++-- keyboards/mlego/m48/keymaps/via/keymap.c | 8 ++-- keyboards/mlego/m60/keymaps/default/keymap.c | 8 ++-- keyboards/mlego/m60/keymaps/via/keymap.c | 8 ++-- keyboards/mlego/m60_split/keymaps/default/keymap.c | 8 ++-- keyboards/mlego/m60_split/keymaps/via/keymap.c | 8 ++-- keyboards/mlego/m65/m65.c | 8 ++-- keyboards/monstargear/xo87/solderable/solderable.h | 4 +- keyboards/neson_design/nico/nico.c | 6 +-- keyboards/newgame40/post_config.h | 4 +- keyboards/nullbitsco/nibble/keymaps/via/keymap.c | 2 +- keyboards/redox/keymaps/default/config.h | 4 +- keyboards/redox/keymaps/via/config.h | 4 +- .../reviung/reviung34/keymaps/default_rgb/config.h | 2 +- .../reviung34/keymaps/default_rgb2u/config.h | 2 +- .../reviung/reviung39/keymaps/default/config.h | 2 +- .../reviung/reviung39/keymaps/default_s/config.h | 2 +- .../reviung/reviung39/keymaps/default_s/readme.md | 2 +- .../reviung/reviung61/keymaps/default_rgb/config.h | 2 +- keyboards/rgbkb/sol/rev1/config.h | 6 +-- keyboards/rgbkb/sol/rev2/config.h | 14 +++--- keyboards/rgbkb/zen/rev1/keymaps/default/config.h | 4 +- keyboards/rgbkb/zygomorph/rev1/config.h | 4 +- .../naked48/keymaps/default_with_nafuda/config.h | 6 +-- .../naked48/keymaps/default_with_setta21/config.h | 6 +-- .../naked48/keymaps/via_rgb_matrix/config.h | 4 +- .../naked64/keymaps/default_with_setta21/config.h | 2 +- keyboards/silverbullet44/config.h | 2 +- keyboards/snes_macropad/snes_macropad.c | 2 +- keyboards/sofle/keymaps/rgb_default/config.h | 12 ++--- keyboards/sofle/keymaps/via/config.h | 4 +- keyboards/stront/config.h | 2 +- keyboards/tunks/ergo33/keymaps/default/config.h | 2 +- keyboards/unison/keymaps/via/config.h | 4 +- keyboards/yosino58/keymaps/default/config.h | 4 +- quantum/rgblight/rgblight.c | 32 ++++++------- quantum/rgblight/rgblight.h | 8 +++- 90 files changed, 254 insertions(+), 263 deletions(-) delete mode 100644 keyboards/miiiw/blackio83/rev_0100/rev_0100.c (limited to 'quantum') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 26b437b513..a323865fec 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -142,12 +142,12 @@ "RGB_MATRIX_DEFAULT_SPD": {"info_key": "rgb_matrix.default.speed", "value_type": "int"}, // RGBLight - "RGBLED_NUM": {"info_key": "rgblight.led_count", "value_type": "int"}, "RGBLED_SPLIT": {"info_key": "rgblight.split_count", "value_type": "array.int"}, "RGBLIGHT_HUE_STEP": {"info_key": "rgblight.hue_steps", "value_type": "int"}, "RGBLIGHT_LAYER_BLINK": {"info_key": "rgblight.layers.blink", "value_type": "bool"}, "RGBLIGHT_LAYERS": {"info_key": "rgblight.layers.enabled", "value_type": "bool"}, "RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF": {"info_key": "rgblight.layers.override_rgb", "value_type": "bool"}, + "RGBLIGHT_LED_COUNT": {"info_key": "rgblight.led_count", "value_type": "int"}, "RGBLIGHT_LED_MAP": {"info_key": "rgblight.led_map", "value_type": "array.int"}, "RGBLIGHT_LIMIT_VAL": {"info_key": "rgblight.max_brightness", "value_type": "int"}, "RGBLIGHT_MAX_LAYERS": {"info_key": "rgblight.layers.max", "value_type": "int"}, diff --git a/docs/config_options.md b/docs/config_options.md index 8119b9e356..bc28f603fa 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -223,7 +223,7 @@ If you define these options you will enable the associated feature, which may in * Adds ability to [blink](feature_rgblight.md?id=lighting-layer-blink) a lighting layer for a specified number of milliseconds (e.g. to acknowledge an action). * `#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF` * If defined, then [lighting layers](feature_rgblight?id=overriding-rgb-lighting-onoff-status) will be shown even if RGB Light is off. -* `#define RGBLED_NUM 12` +* `#define RGBLIGHT_LED_COUNT 12` * number of LEDs * `#define RGBLIGHT_SPLIT` * Needed if both halves of the board have RGB LEDs wired directly to the RGB output pin on the controllers instead of passing the output of the left half to the input of the right half diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md index 8a64454b0d..b7ba075731 100644 --- a/docs/feature_rgblight.md +++ b/docs/feature_rgblight.md @@ -33,13 +33,13 @@ RGBLIGHT_DRIVER = apa102 At minimum you must define the data pin your LED strip is connected to, and the number of LEDs in the strip, in your `config.h`. For APA102 LEDs, you must also define the clock pin. If your keyboard has onboard RGB LEDs, and you are simply creating a keymap, you usually won't need to modify these. -|Define |Description | -|---------------|-------------------------------------------------------------------------| -|`WS2812_DI_PIN`|The pin connected to the data pin of the LEDs (WS2812) | -|`APA102_DI_PIN`|The pin connected to the data pin of the LEDs (APA102) | -|`APA102_CI_PIN`|The pin connected to the clock pin of the LEDs (APA102) | -|`RGBLED_NUM` |The number of LEDs connected | -|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half| +|Define |Description | +|--------------------|-------------------------------------------------------------------------| +|`WS2812_DI_PIN` |The pin connected to the data pin of the LEDs (WS2812) | +|`APA102_DI_PIN` |The pin connected to the data pin of the LEDs (APA102) | +|`APA102_CI_PIN` |The pin connected to the clock pin of the LEDs (APA102) | +|`RGBLIGHT_LED_COUNT`|The number of LEDs connected | +|`RGBLED_SPLIT` |(Optional) For split keyboards, the number of LEDs connected on each half| Then you should be able to use the keycodes below to change the RGB lighting to your liking. @@ -152,28 +152,28 @@ Use these defines to add or remove animations from the firmware. When you are ru The following options are used to tweak the various animations: -|Define |Default |Description | -|------------------------------------|-------------|-----------------------------------------------------------------------------------------------| -|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined*|If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 | -|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 | -|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`40` |How long (in milliseconds) to wait between animation steps for the "Christmas" animation | -|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation | -|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLED_NUM` |The number of LEDs to have the "Knight" animation travel | -|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation | -|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by | -|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`255` |Range adjustment for the rainbow swirl effect to get different swirls | -|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation | -|`RGBLIGHT_EFFECT_TWINKLE_LIFE` |`200` |Adjusts how quickly each LED brightens and dims when twinkling (in animation steps) | -|`RGBLIGHT_EFFECT_TWINKLE_PROBABILITY`|`1/127` |Adjusts how likely each LED is to twinkle (on each animation step) | +|Define |Default |Description | +|------------------------------------|--------------------|-----------------------------------------------------------------------------------------------| +|`RGBLIGHT_EFFECT_BREATHE_CENTER` |*Not defined* |If defined, used to calculate the curve for the breathing animation. Valid values are 1.0 to 2.7 | +|`RGBLIGHT_EFFECT_BREATHE_MAX` |`255` |The maximum brightness for the breathing mode. Valid values are 1 to 255 | +|`RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL`|`40` |How long (in milliseconds) to wait between animation steps for the "Christmas" animation | +|`RGBLIGHT_EFFECT_CHRISTMAS_STEP` |`2` |The number of LEDs to group the red/green colors by for the "Christmas" animation | +|`RGBLIGHT_EFFECT_KNIGHT_LED_NUM` |`RGBLIGHT_LED_COUNT`|The number of LEDs to have the "Knight" animation travel | +|`RGBLIGHT_EFFECT_KNIGHT_LENGTH` |`3` |The number of LEDs to light up for the "Knight" animation | +|`RGBLIGHT_EFFECT_KNIGHT_OFFSET` |`0` |The number of LEDs to start the "Knight" animation from the start of the strip by | +|`RGBLIGHT_RAINBOW_SWIRL_RANGE` |`255` |Range adjustment for the rainbow swirl effect to get different swirls | +|`RGBLIGHT_EFFECT_SNAKE_LENGTH` |`4` |The number of LEDs to light up for the "Snake" animation | +|`RGBLIGHT_EFFECT_TWINKLE_LIFE` |`200` |Adjusts how quickly each LED brightens and dims when twinkling (in animation steps) | +|`RGBLIGHT_EFFECT_TWINKLE_PROBABILITY`|`1/127` |Adjusts how likely each LED is to twinkle (on each animation step) | ### Example Usage to Reduce Memory Footprint 1. Use `#undef` to selectively disable animations. The following would disable two animations and save about 4KiB: ```diff - #undef RGBLED_NUM + #undef RGBLIGHT_LED_COUNT +#undef RGBLIGHT_EFFECT_STATIC_GRADIENT +#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL - #define RGBLED_NUM 12 + #define RGBLIGHT_LED_COUNT 12 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 ``` @@ -386,10 +386,10 @@ rgblight_set(); // Utility functions do not call rgblight_set() automatically, s #### direct operation |Function |Description | |--------------------------------------------|-------------| -|`rgblight_setrgb_at(r, g, b, index)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) | -|`rgblight_sethsv_at(h, s, v, index)` |Set a single LED to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `index` is between 0 and `RGBLED_NUM` (not written to EEPROM) | -|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)| -|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLED_NUM` (not written to EEPROM)| +|`rgblight_setrgb_at(r, g, b, index)` |Set a single LED to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `index` is between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM) | +|`rgblight_sethsv_at(h, s, v, index)` |Set a single LED to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `index` is between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM) | +|`rgblight_setrgb_range(r, g, b, start, end)`|Set a continuous range of LEDs to the given RGB value, where `r`/`g`/`b` are between 0 and 255 and `start`(included) and `stop`(excluded) are between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM)| +|`rgblight_sethsv_range(h, s, v, start, end)`|Set a continuous range of LEDs to the given HSV value, where `h`/`s`/`v` are between 0 and 255, and `start`(included) and `stop`(excluded) are between 0 and `RGBLIGHT_LED_COUNT` (not written to EEPROM)| |`rgblight_setrgb(r, g, b)` |Set effect range LEDs to the given RGB value where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) | |`rgblight_setrgb_master(r, g, b)` |Set the LEDs on the master side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) | |`rgblight_setrgb_slave(r, g, b)` |Set the LEDs on the slave side to the given RGB value, where `r`/`g`/`b` are between 0 and 255 (not written to EEPROM) | @@ -519,7 +519,7 @@ By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED ```c // config.h -#define RGBLED_NUM 4 +#define RGBLIGHT_LED_COUNT 4 #define RGBLIGHT_LED_MAP { 3, 2, 1, 0 } ``` @@ -541,7 +541,7 @@ In addition to setting the Clipping Range, you can use `RGBLIGHT_LED_MAP` togeth ```c // config.h -#define RGBLED_NUM 8 +#define RGBLIGHT_LED_COUNT 8 #define RGBLIGHT_LED_MAP { 7, 6, 5, 4, 3, 2, 1, 0 } // some source diff --git a/docs/hardware_keyboard_guidelines.md b/docs/hardware_keyboard_guidelines.md index fb434e1576..684ccc73f6 100644 --- a/docs/hardware_keyboard_guidelines.md +++ b/docs/hardware_keyboard_guidelines.md @@ -169,11 +169,11 @@ The `post_rules.mk` file can interpret `features` of a keyboard-level before `co ifeq ($(strip $(RGBLED_OPTION_TYPE)),backlight) RGBLIGHT_ENABLE = yes - OPT_DEFS += -DRGBLED_NUM=30 + OPT_DEFS += -DRGBLIGHT_LED_COUNT=30 endif ifeq ($(strip $(RGBLED_OPTION_TYPE)),underglow) RGBLIGHT_ENABLE = yes - OPT_DEFS += -DRGBLED_NUM=6 + OPT_DEFS += -DRGBLIGHT_LED_COUNT=6 endif ``` diff --git a/drivers/led/apa102.h b/drivers/led/apa102.h index 027221f434..e3b269883d 100644 --- a/drivers/led/apa102.h +++ b/drivers/led/apa102.h @@ -19,9 +19,9 @@ #include "color.h" -#if defined(RGBLED_NUM) -# define APA102_LED_COUNT RGBLED_NUM -#elif defined(RGB_MATRIX_LED_COUNT) +#if defined(RGBLIGHT_APA102) +# define APA102_LED_COUNT RGBLIGHT_LED_COUNT +#elif defined(RGB_MATRIX_APA102) # define APA102_LED_COUNT RGB_MATRIX_LED_COUNT #endif diff --git a/drivers/ws2812.h b/drivers/ws2812.h index 1527df23d3..134de51c50 100644 --- a/drivers/ws2812.h +++ b/drivers/ws2812.h @@ -56,9 +56,9 @@ # define WS2812_TRST_US 280 #endif -#if defined(RGBLED_NUM) -# define WS2812_LED_COUNT RGBLED_NUM -#elif defined(RGB_MATRIX_LED_COUNT) +#if defined(RGBLIGHT_WS2812) +# define WS2812_LED_COUNT RGBLIGHT_LED_COUNT +#elif defined(RGB_MATRIX_WS2812) # define WS2812_LED_COUNT RGB_MATRIX_LED_COUNT #endif diff --git a/keyboards/1k/keymaps/default/rgblite.h b/keyboards/1k/keymaps/default/rgblite.h index 29d684ac08..9a7761e30d 100644 --- a/keyboards/1k/keymaps/default/rgblite.h +++ b/keyboards/1k/keymaps/default/rgblite.h @@ -7,8 +7,8 @@ #include "color.h" static inline void rgblite_setrgb(RGB rgb) { - rgb_led_t leds[RGBLED_NUM] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}}; - ws2812_setleds(leds, RGBLED_NUM); + rgb_led_t leds[RGBLIGHT_LED_COUNT] = {{.r = rgb.r, .g = rgb.g, .b = rgb.b}}; + ws2812_setleds(leds, RGBLIGHT_LED_COUNT); } static void rgblite_increase_hue(void) { diff --git a/keyboards/25keys/zinc/rev1/post_config.h b/keyboards/25keys/zinc/rev1/post_config.h index 3d51de9e4c..42d2d7e46c 100644 --- a/keyboards/25keys/zinc/rev1/post_config.h +++ b/keyboards/25keys/zinc/rev1/post_config.h @@ -24,35 +24,35 @@ along with this program. If not, see . #define RGBLIGHT_SPLIT #ifdef RGBLED_BACK #ifdef RGBLED_CONT - #define RGBLED_NUM 48 + #define RGBLIGHT_LED_COUNT 48 #define RGBLED_SPLIT { 24, 24 } #else - #define RGBLED_NUM 24 + #define RGBLIGHT_LED_COUNT 24 #endif #else #ifdef RGBLED_BOTH #ifdef RGBLED_CONT - #define RGBLED_NUM 60 + #define RGBLIGHT_LED_COUNT 60 #define RGBLED_SPLIT { 30, 30 } #else - #define RGBLED_NUM 30 + #define RGBLIGHT_LED_COUNT 30 #endif #else #ifdef RGBLED_CONT - #define RGBLED_NUM 12 + #define RGBLIGHT_LED_COUNT 12 #define RGBLED_SPLIT { 6, 6 } #else - #define RGBLED_NUM 6 + #define RGBLIGHT_LED_COUNT 6 #endif #endif #endif #endif #ifndef IOS_DEVICE_ENABLE - #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12)) + #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12)) #define RGBLIGHT_LIMIT_VAL 255 #else - #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32)) + #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32)) #define RGBLIGHT_LIMIT_VAL 130 #else #define RGBLIGHT_LIMIT_VAL 120 @@ -60,10 +60,10 @@ along with this program. If not, see . #endif #define RGBLIGHT_VAL_STEP 17 #else - #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12)) + #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12)) #define RGBLIGHT_LIMIT_VAL 90 #else - #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32)) + #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32)) #define RGBLIGHT_LIMIT_VAL 45 #else #define RGBLIGHT_LIMIT_VAL 35 diff --git a/keyboards/25keys/zinc/reva/post_config.h b/keyboards/25keys/zinc/reva/post_config.h index 3d51de9e4c..42d2d7e46c 100644 --- a/keyboards/25keys/zinc/reva/post_config.h +++ b/keyboards/25keys/zinc/reva/post_config.h @@ -24,35 +24,35 @@ along with this program. If not, see . #define RGBLIGHT_SPLIT #ifdef RGBLED_BACK #ifdef RGBLED_CONT - #define RGBLED_NUM 48 + #define RGBLIGHT_LED_COUNT 48 #define RGBLED_SPLIT { 24, 24 } #else - #define RGBLED_NUM 24 + #define RGBLIGHT_LED_COUNT 24 #endif #else #ifdef RGBLED_BOTH #ifdef RGBLED_CONT - #define RGBLED_NUM 60 + #define RGBLIGHT_LED_COUNT 60 #define RGBLED_SPLIT { 30, 30 } #else - #define RGBLED_NUM 30 + #define RGBLIGHT_LED_COUNT 30 #endif #else #ifdef RGBLED_CONT - #define RGBLED_NUM 12 + #define RGBLIGHT_LED_COUNT 12 #define RGBLED_SPLIT { 6, 6 } #else - #define RGBLED_NUM 6 + #define RGBLIGHT_LED_COUNT 6 #endif #endif #endif #endif #ifndef IOS_DEVICE_ENABLE - #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12)) + #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12)) #define RGBLIGHT_LIMIT_VAL 255 #else - #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32)) + #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32)) #define RGBLIGHT_LIMIT_VAL 130 #else #define RGBLIGHT_LIMIT_VAL 120 @@ -60,10 +60,10 @@ along with this program. If not, see . #endif #define RGBLIGHT_VAL_STEP 17 #else - #if (RGBLED_NUM <= 6) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 12)) + #if (RGBLIGHT_LED_COUNT <= 6) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 12)) #define RGBLIGHT_LIMIT_VAL 90 #else - #if (RGBLED_NUM <= 16) || (defined(RGBLED_CONT) && (RGBLED_NUM <= 32)) + #if (RGBLIGHT_LED_COUNT <= 16) || (defined(RGBLED_CONT) && (RGBLIGHT_LED_COUNT <= 32)) #define RGBLIGHT_LIMIT_VAL 45 #else #define RGBLIGHT_LIMIT_VAL 35 diff --git a/keyboards/acheron/themis/87h/config.h b/keyboards/acheron/themis/87h/config.h index 605594eea2..ed1229c779 100644 --- a/keyboards/acheron/themis/87h/config.h +++ b/keyboards/acheron/themis/87h/config.h @@ -20,8 +20,6 @@ along with this program. If not, see . #define LOCKING_SUPPORT_ENABLE #define LOCKING_RESYNC_ENABLE -#define RGBLED_NUM 1 - #define WS2812_PWM_COMPLEMENTARY_OUTPUT #define WS2812_PWM_DRIVER PWMD1 #define WS2812_PWM_CHANNEL 3 diff --git a/keyboards/acheron/themis/87h/info.json b/keyboards/acheron/themis/87h/info.json index cbff8f4eec..0ef52a61a0 100644 --- a/keyboards/acheron/themis/87h/info.json +++ b/keyboards/acheron/themis/87h/info.json @@ -26,6 +26,9 @@ "backing_size": 8192 } }, + "rgblight": { + "led_count": 1 + }, "ws2812": { "pin": "B15" }, diff --git a/keyboards/acheron/themis/87htsc/config.h b/keyboards/acheron/themis/87htsc/config.h index 605594eea2..ed1229c779 100644 --- a/keyboards/acheron/themis/87htsc/config.h +++ b/keyboards/acheron/themis/87htsc/config.h @@ -20,8 +20,6 @@ along with this program. If not, see . #define LOCKING_SUPPORT_ENABLE #define LOCKING_RESYNC_ENABLE -#define RGBLED_NUM 1 - #define WS2812_PWM_COMPLEMENTARY_OUTPUT #define WS2812_PWM_DRIVER PWMD1 #define WS2812_PWM_CHANNEL 3 diff --git a/keyboards/acheron/themis/87htsc/info.json b/keyboards/acheron/themis/87htsc/info.json index 5b491690bb..75c680d2a4 100644 --- a/keyboards/acheron/themis/87htsc/info.json +++ b/keyboards/acheron/themis/87htsc/info.json @@ -26,6 +26,9 @@ "backing_size": 8192 } }, + "rgblight": { + "led_count": 1 + }, "ws2812": { "pin": "B15" }, diff --git a/keyboards/acheron/themis/88htsc/config.h b/keyboards/acheron/themis/88htsc/config.h index 605594eea2..ed1229c779 100644 --- a/keyboards/acheron/themis/88htsc/config.h +++ b/keyboards/acheron/themis/88htsc/config.h @@ -20,8 +20,6 @@ along with this program. If not, see . #define LOCKING_SUPPORT_ENABLE #define LOCKING_RESYNC_ENABLE -#define RGBLED_NUM 1 - #define WS2812_PWM_COMPLEMENTARY_OUTPUT #define WS2812_PWM_DRIVER PWMD1 #define WS2812_PWM_CHANNEL 3 diff --git a/keyboards/acheron/themis/88htsc/info.json b/keyboards/acheron/themis/88htsc/info.json index 073a16e946..8726642c0c 100644 --- a/keyboards/acheron/themis/88htsc/info.json +++ b/keyboards/acheron/themis/88htsc/info.json @@ -26,6 +26,9 @@ "backing_size": 8192 } }, + "rgblight": { + "led_count": 1 + }, "ws2812": { "pin": "B15" }, diff --git a/keyboards/arabica37/keymaps/default/config.h b/keyboards/arabica37/keymaps/default/config.h index 57ce4cc0c1..5654f4daf4 100644 --- a/keyboards/arabica37/keymaps/default/config.h +++ b/keyboards/arabica37/keymaps/default/config.h @@ -31,7 +31,7 @@ along with this program. If not, see . #define QUICK_TAP_TERM 0 #define TAPPING_TERM 170 -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -42,7 +42,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 50 +#define RGBLIGHT_LED_COUNT 50 #define RGBLIGHT_LIMIT_VAL 120 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h index a56bd0f2e7..2469b627e2 100644 --- a/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h +++ b/keyboards/biacco42/ergo42/keymaps/default-underglow/config.h @@ -27,8 +27,8 @@ along with this program. If not, see . // #define EE_HANDS // Underglow -#undef RGBLED_NUM -#define RGBLED_NUM 14 // Number of LEDs +#undef RGBLIGHT_LED_COUNT +#define RGBLIGHT_LED_COUNT 14 // Number of LEDs #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL diff --git a/keyboards/dm9records/ergoinu/config.h b/keyboards/dm9records/ergoinu/config.h index d1c1201a54..b6a3484a26 100644 --- a/keyboards/dm9records/ergoinu/config.h +++ b/keyboards/dm9records/ergoinu/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . // #define EE_HANDS #ifndef IOS_DEVICE_ENABLE - #if RGBLED_NUM <= 7 + #if RGBLIGHT_LED_COUNT <= 7 #define RGBLIGHT_LIMIT_VAL 255 #define RGBLIGHT_VAL_STEP 17 #endif diff --git a/keyboards/duck/jetfire/indicator_leds.h b/keyboards/duck/jetfire/indicator_leds.h index d94709d1cb..36dda632fb 100644 --- a/keyboards/duck/jetfire/indicator_leds.h +++ b/keyboards/duck/jetfire/indicator_leds.h @@ -6,6 +6,6 @@ void backlight_init_ports(void); void backlight_set_state(bool cfg[7]); void backlight_update_state(void); void backlight_toggle_rgb(bool enabled); -void backlight_set_rgb(uint8_t cfg[RGBLED_NUM][3]); +void backlight_set_rgb(uint8_t cfg[RGBLIGHT_LED_COUNT][3]); void backlight_set(uint8_t level); void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device); diff --git a/keyboards/duck/jetfire/jetfire.c b/keyboards/duck/jetfire/jetfire.c index 23e6e9095a..45a46766fd 100644 --- a/keyboards/duck/jetfire/jetfire.c +++ b/keyboards/duck/jetfire/jetfire.c @@ -44,10 +44,10 @@ uint8_t backlight_state_led = 1<= half_led_num; --i) # elif defined(ERGODOX_LED_15_MIRROR) for (i = 0; i < led_num; ++i) diff --git a/keyboards/ergodox_ez/post_config.h b/keyboards/ergodox_ez/post_config.h index 0d4fe5c683..eb22439ae4 100644 --- a/keyboards/ergodox_ez/post_config.h +++ b/keyboards/ergodox_ez/post_config.h @@ -33,8 +33,8 @@ along with this program. If not, see . #ifdef ERGODOX_LED_30 // If using 30 LEDs, then define that many -# define RGBLED_NUM 30 // Number of LEDs +# define RGBLIGHT_LED_COUNT 30 // Number of LEDs #else // If not, then only define 15 -# define RGBLED_NUM 15 // Number of LEDs +# define RGBLIGHT_LED_COUNT 15 // Number of LEDs #endif diff --git a/keyboards/ergotravel/keymaps/default/config.h b/keyboards/ergotravel/keymaps/default/config.h index d047f718d6..746e60da5a 100644 --- a/keyboards/ergotravel/keymaps/default/config.h +++ b/keyboards/ergotravel/keymaps/default/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -34,7 +34,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 14 +#define RGBLIGHT_LED_COUNT 14 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/ergotravel/keymaps/via/config.h b/keyboards/ergotravel/keymaps/via/config.h index 409e3efde4..d42b738adc 100644 --- a/keyboards/ergotravel/keymaps/via/config.h +++ b/keyboards/ergotravel/keymaps/via/config.h @@ -23,8 +23,8 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -// #undef RGBLED_NUM -// #define RGBLED_NUM 14 +// #undef RGBLIGHT_LED_COUNT +// #define RGBLIGHT_LED_COUNT 14 // #define RGBLIGHT_HUE_STEP 8 // #define RGBLIGHT_SAT_STEP 8 // #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/fc660c/keymaps/default_rgb/config.h b/keyboards/fc660c/keymaps/default_rgb/config.h index 23745f3190..1953964f88 100644 --- a/keyboards/fc660c/keymaps/default_rgb/config.h +++ b/keyboards/fc660c/keymaps/default_rgb/config.h @@ -21,7 +21,7 @@ /*RGB*/ /*Repurpose Insert LED */ #define WS2812_DI_PIN B5 - #define RGBLED_NUM 16 + #define RGBLIGHT_LED_COUNT 16 #define RGBLIGHT_DEFAULT_HUE 127 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/fc660c/keymaps/via_rgb/config.h b/keyboards/fc660c/keymaps/via_rgb/config.h index 23745f3190..1953964f88 100644 --- a/keyboards/fc660c/keymaps/via_rgb/config.h +++ b/keyboards/fc660c/keymaps/via_rgb/config.h @@ -21,7 +21,7 @@ /*RGB*/ /*Repurpose Insert LED */ #define WS2812_DI_PIN B5 - #define RGBLED_NUM 16 + #define RGBLIGHT_LED_COUNT 16 #define RGBLIGHT_DEFAULT_HUE 127 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 diff --git a/keyboards/foxlab/key65/universal/readme.md b/keyboards/foxlab/key65/universal/readme.md index 967b9565f2..36f63b1aba 100644 --- a/keyboards/foxlab/key65/universal/readme.md +++ b/keyboards/foxlab/key65/universal/readme.md @@ -19,4 +19,4 @@ See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_to ## RGB LED support -The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLED_NUM to match the number of LEDs on your strip. +The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLIGHT_LED_COUNT to match the number of LEDs on your strip. diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h index dd10d213a0..01ad55eec0 100644 --- a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h +++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h @@ -22,8 +22,8 @@ along with this program. If not, see . # undef MATRIX_COL_PINS_RIGHT # ifdef RGBLIGHT_ENABLE -# undef RGBLED_NUM -# define RGBLED_NUM 120 +# undef RGBLIGHT_LED_COUNT +# define RGBLIGHT_LED_COUNT 120 # undef RGBLIGHT_LED_MAP # define RGBLIGHT_LED_MAP { \ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \ diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h index 01905b8dfe..decc2e2dc1 100644 --- a/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h +++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h @@ -7,8 +7,8 @@ # undef MATRIX_COL_PINS_RIGHT # ifdef RGBLIGHT_ENABLE -# undef RGBLED_NUM -# define RGBLED_NUM 120 +# undef RGBLIGHT_LED_COUNT +# define RGBLIGHT_LED_COUNT 120 # undef RGBLIGHT_LED_MAP # define RGBLIGHT_LED_MAP { \ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \ diff --git a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h index 0f71fedd0e..b3970ff04a 100644 --- a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h +++ b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h @@ -21,8 +21,8 @@ #define QUICK_TAP_TERM 0 #define TAPPING_TERM 180 -#ifdef RGBLED_NUM - #undef RGBLED_NUM +#ifdef RGBLIGHT_LED_COUNT + #undef RGBLIGHT_LED_COUNT #endif #define RGB_MATRIX_LED_COUNT 73 diff --git a/keyboards/handwired/chiron/keymaps/default/config.h b/keyboards/handwired/chiron/keymaps/default/config.h index c373743a39..5d8a8a083d 100644 --- a/keyboards/handwired/chiron/keymaps/default/config.h +++ b/keyboards/handwired/chiron/keymaps/default/config.h @@ -30,8 +30,8 @@ #define MOUSEKEY_WHEEL_MAX_SPEED 8 #define MOUSEKEY_WHEEL_TIME_TO_MAX 40 -#undef RGBLED_NUM -#define RGBLED_NUM 2 +#undef RGBLIGHT_LED_COUNT +#define RGBLIGHT_LED_COUNT 2 #define RGBLED_SPLIT {1, 1} // Don't turn off lights when the host goes to sleep. diff --git a/keyboards/handwired/freoduo/keymaps/default/keymap.c b/keyboards/handwired/freoduo/keymaps/default/keymap.c index bd01de7585..791e6af318 100644 --- a/keyboards/handwired/freoduo/keymaps/default/keymap.c +++ b/keyboards/handwired/freoduo/keymaps/default/keymap.c @@ -79,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 7, 0}, {7, 24, HSV_RED}, - {24, RGBLED_NUM, 0} + {24, RGBLIGHT_LED_COUNT, 0} ); // Light all LEDs in green when keyboard layer 1 is active const rgblight_segment_t PROGMEM layer_lower[] = RGBLIGHT_LAYER_SEGMENTS( diff --git a/keyboards/handwired/onekey/keymaps/apa102/config.h b/keyboards/handwired/onekey/keymaps/apa102/config.h index 756ebb3593..bb618d77fb 100644 --- a/keyboards/handwired/onekey/keymaps/apa102/config.h +++ b/keyboards/handwired/onekey/keymaps/apa102/config.h @@ -1,6 +1,6 @@ #pragma once -#define RGBLED_NUM 40 +#define RGBLIGHT_LED_COUNT 40 #define APA102_DEFAULT_BRIGHTNESS 5 #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h index f5eb4c13e1..e1cd9c2e90 100644 --- a/keyboards/helix/pico/config.h +++ b/keyboards/helix/pico/config.h @@ -50,20 +50,20 @@ along with this program. If not, see . // Helix keyboard RGB LED support // see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes #ifdef RGBLED_BACK - #define RGBLED_NUM 25 + #define RGBLIGHT_LED_COUNT 25 #else - #define RGBLED_NUM 6 + #define RGBLIGHT_LED_COUNT 6 #endif #ifndef IOS_DEVICE_ENABLE - #if RGBLED_NUM <= 6 + #if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 255 #else #define RGBLIGHT_LIMIT_VAL 130 #endif #define RGBLIGHT_VAL_STEP 17 #else - #if RGBLED_NUM <= 6 + #if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 90 #else #define RGBLIGHT_LIMIT_VAL 45 diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h index 7ab494522a..8af2a44ecc 100644 --- a/keyboards/helix/rev2/config.h +++ b/keyboards/helix/rev2/config.h @@ -31,20 +31,20 @@ along with this program. If not, see . // Helix keyboard RGB LED support // see ./rules.mk: LED_BACK_ENABLE or LED_UNDERGLOW_ENABLE set yes #ifdef RGBLED_BACK - #define RGBLED_NUM 32 + #define RGBLIGHT_LED_COUNT 32 #else - #define RGBLED_NUM 6 + #define RGBLIGHT_LED_COUNT 6 #endif #ifndef IOS_DEVICE_ENABLE - #if RGBLED_NUM <= 6 + #if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 255 #else #define RGBLIGHT_LIMIT_VAL 120 #endif #define RGBLIGHT_VAL_STEP 17 #else - #if RGBLED_NUM <= 6 + #if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 90 #else #define RGBLIGHT_LIMIT_VAL 35 diff --git a/keyboards/hineybush/hbcp/hbcp.c b/keyboards/hineybush/hbcp/hbcp.c index df17650f27..754b63b200 100644 --- a/keyboards/hineybush/hbcp/hbcp.c +++ b/keyboards/hineybush/hbcp/hbcp.c @@ -70,7 +70,7 @@ bool led_update_kb(led_t led_state) { __attribute__ ((weak)) void keyboard_post_init_user(void) { - rgblight_set_effect_range(3, RGBLED_NUM-3); + rgblight_set_effect_range(3, RGBLIGHT_LED_COUNT-3); led_t led_state = { .caps_lock = true, .num_lock = true, diff --git a/keyboards/ibm/model_m/mschwingen/mschwingen.c b/keyboards/ibm/model_m/mschwingen/mschwingen.c index 8e3810cd23..03dfcdc2f2 100644 --- a/keyboards/ibm/model_m/mschwingen/mschwingen.c +++ b/keyboards/ibm/model_m/mschwingen/mschwingen.c @@ -36,10 +36,10 @@ static bool blink_state = false; static uint8_t isRecording = 0; #ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812 -# if RGBLED_NUM < 3 +# if RGBLIGHT_LED_COUNT < 3 # error we need at least 3 RGB LEDs! # endif -static rgb_led_t led[RGBLED_NUM] = {{255, 255, 255}, {255, 255, 255}, {255, 255, 255}}; +static rgb_led_t led[RGBLIGHT_LED_COUNT] = {{255, 255, 255}, {255, 255, 255}, {255, 255, 255}}; # define BRIGHT 32 # define DIM 6 @@ -84,13 +84,13 @@ void sleep_led_enable(void) { led[0] = black; led[1] = black; led[2] = black; - ws2812_setleds(led, RGBLED_NUM); + ws2812_setleds(led, RGBLIGHT_LED_COUNT); #endif } void keyboard_pre_init_kb(void) { #ifdef KEYBOARD_ibm_model_m_mschwingen_led_ws2812 - ws2812_setleds(led, RGBLED_NUM); + ws2812_setleds(led, RGBLIGHT_LED_COUNT); #else /* Set status LEDs pins to output and Low (on) */ setPinOutput(MODELM_LED_CAPSLOCK); @@ -146,7 +146,7 @@ static void led_update_rgb(void) { break; } if (!suspend_active) { - ws2812_setleds(led, RGBLED_NUM); + ws2812_setleds(led, RGBLIGHT_LED_COUNT); } } diff --git a/keyboards/jian/nsrev2/config.h b/keyboards/jian/nsrev2/config.h index 5025847259..7df400367f 100644 --- a/keyboards/jian/nsrev2/config.h +++ b/keyboards/jian/nsrev2/config.h @@ -22,14 +22,14 @@ along with this program. If not, see . #define RGBLIGHT_TIMER #ifndef IOS_DEVICE_ENABLE -#if RGBLED_NUM <= 6 +#if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 255 #else #define RGBLIGHT_LIMIT_VAL 130 #endif #define RGBLIGHT_VAL_STEP 8 #else -#if RGBLED_NUM <= 6 +#if RGBLIGHT_LED_COUNT <= 6 #define RGBLIGHT_LIMIT_VAL 90 #else #define RGBLIGHT_LIMIT_VAL 45 diff --git a/keyboards/jian/rev1/post_config.h b/keyboards/jian/rev1/post_config.h index fade065e19..935d0d1f01 100644 --- a/keyboards/jian/rev1/post_config.h +++ b/keyboards/jian/rev1/post_config.h @@ -1,14 +1,14 @@ #pragma once #ifndef IOS_DEVICE_ENABLE -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 255 # else # define RGBLIGHT_LIMIT_VAL 130 # endif # define RGBLIGHT_VAL_STEP 8 #else -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 90 # else # define RGBLIGHT_LIMIT_VAL 45 diff --git a/keyboards/jian/rev2/post_config.h b/keyboards/jian/rev2/post_config.h index fade065e19..935d0d1f01 100644 --- a/keyboards/jian/rev2/post_config.h +++ b/keyboards/jian/rev2/post_config.h @@ -1,14 +1,14 @@ #pragma once #ifndef IOS_DEVICE_ENABLE -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 255 # else # define RGBLIGHT_LIMIT_VAL 130 # endif # define RGBLIGHT_VAL_STEP 8 #else -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 90 # else # define RGBLIGHT_LIMIT_VAL 45 diff --git a/keyboards/kapcave/gskt00/keymaps/default-poly/config.h b/keyboards/kapcave/gskt00/keymaps/default-poly/config.h index 64135cabcd..40a7c6ec47 100644 --- a/keyboards/kapcave/gskt00/keymaps/default-poly/config.h +++ b/keyboards/kapcave/gskt00/keymaps/default-poly/config.h @@ -30,7 +30,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 14 +#define RGBLIGHT_LED_COUNT 14 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 12 diff --git a/keyboards/kc60/mod_rgb_underglow.md b/keyboards/kc60/mod_rgb_underglow.md index 6aab1e1d2e..22ade4fa1b 100644 --- a/keyboards/kc60/mod_rgb_underglow.md +++ b/keyboards/kc60/mod_rgb_underglow.md @@ -9,8 +9,8 @@ By default, the source is set up for 16 LEDs on the F5 breakout pin. See [includ ```c #pragma once -#undef RGBLED_NUM -#define RGBLED_NUM +#undef RGBLIGHT_LED_COUNT +#define RGBLIGHT_LED_COUNT ``` To enable RGB Underglow, simply add a `rules.mk` file containing `RGBLIGHT_ENABLE = yes` alongside your `keymap.c` file, and compile as normal: diff --git a/keyboards/keebio/viterbi/keymaps/default/config.h b/keyboards/keebio/viterbi/keymaps/default/config.h index 38c399ff2c..acc5970dcb 100644 --- a/keyboards/keebio/viterbi/keymaps/default/config.h +++ b/keyboards/keebio/viterbi/keymaps/default/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -35,7 +35,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 12 +#define RGBLIGHT_LED_COUNT 12 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/lets_split/keymaps/via/config.h b/keyboards/lets_split/keymaps/via/config.h index a676d6826d..03853dc391 100644 --- a/keyboards/lets_split/keymaps/via/config.h +++ b/keyboards/lets_split/keymaps/via/config.h @@ -31,7 +31,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -42,6 +42,6 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 10 +#define RGBLIGHT_LED_COUNT 10 #define NO_MUSIC_MODE diff --git a/keyboards/lily58/keymaps/default/config.h b/keyboards/lily58/keymaps/default/config.h index b16e63b6d7..5b45770f38 100644 --- a/keyboards/lily58/keymaps/default/config.h +++ b/keyboards/lily58/keymaps/default/config.h @@ -29,7 +29,7 @@ along with this program. If not, see . #define QUICK_TAP_TERM 0 #define TAPPING_TERM 100 -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -40,7 +40,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 27 +#define RGBLIGHT_LED_COUNT 27 #define RGBLIGHT_LIMIT_VAL 120 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 @@ -48,7 +48,7 @@ along with this program. If not, see . // Underglow /* -#undef RGBLED_NUM -#define RGBLED_NUM 14 // Number of LEDs +#undef RGBLIGHT_LED_COUNT +#define RGBLIGHT_LED_COUNT 14 // Number of LEDs #define RGBLIGHT_SLEEP */ diff --git a/keyboards/lily58/keymaps/via/config.h b/keyboards/lily58/keymaps/via/config.h index 331521bcbf..284d3944b9 100644 --- a/keyboards/lily58/keymaps/via/config.h +++ b/keyboards/lily58/keymaps/via/config.h @@ -33,7 +33,7 @@ along with this program. If not, see . // Underglow /* -#undef RGBLED_NUM -#define RGBLED_NUM 14 // Number of LEDs +#undef RGBLIGHT_LED_COUNT +#define RGBLIGHT_LED_COUNT 14 // Number of LEDs #define RGBLIGHT_SLEEP */ diff --git a/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h index 3d47ae41e7..c50e010375 100644 --- a/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h +++ b/keyboards/maple_computing/launchpad/keymaps/default_rgb/config.h @@ -12,7 +12,7 @@ #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 2 // Number of LEDs +#define RGBLIGHT_LED_COUNT 2 // Number of LEDs #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 #define RGBLIGHT_VAL_STEP 17 diff --git a/keyboards/marksard/treadstone48/rev1/config.h b/keyboards/marksard/treadstone48/rev1/config.h index 3f43b16d2b..66007ee2ef 100644 --- a/keyboards/marksard/treadstone48/rev1/config.h +++ b/keyboards/marksard/treadstone48/rev1/config.h @@ -18,10 +18,10 @@ along with this program. If not, see . #pragma once #ifndef RS_EXTRA_LED - #define RGBLED_NUM 12 + #define RGBLIGHT_LED_COUNT 12 #define RGBLED_SPLIT {12, 0} #else - #define RGBLED_NUM 32 + #define RGBLIGHT_LED_COUNT 32 #define RGBLED_SPLIT {12, 20} #endif diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c index 35a55d03b6..d62177a2f4 100644 --- a/keyboards/matrix/noah/noah.c +++ b/keyboards/matrix/noah/noah.c @@ -17,15 +17,15 @@ extern rgblight_config_t rgblight_config; // led 0 for caps lock, led 1 for scroll lock, led 3 for num lock // led 4 for layer 1, led 5 for layer 2, led 6 for layer 3, led 7 for layer 4 -#if RGBLED_NUM < 7 -#error "MUST set the RGBLED_NUM bigger than 7" +#if RGBLIGHT_LED_COUNT < 7 +#error "MUST set the RGBLIGHT_LED_COUNT bigger than 7" #endif -rgb_led_t noah_leds[RGBLED_NUM]; +rgb_led_t noah_leds[RGBLIGHT_LED_COUNT]; static bool noah_led_mode = false; void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) { memset(&noah_leds[0], 0, sizeof(noah_leds)); if (!rgblight_config.enable) { - for (uint8_t i = 0; i < RGBLED_NUM; i++) { + for (uint8_t i = 0; i < RGBLIGHT_LED_COUNT; i++) { ledarray[i].r = 0; ledarray[i].g = 0; ledarray[i].b = 0; @@ -51,7 +51,7 @@ void setleds_custom(rgb_led_t *ledarray, uint16_t num_leds) { memcpy(&noah_leds[0], &ledarray[0], sizeof(noah_leds)); } - ws2812_setleds(noah_leds, RGBLED_NUM); + ws2812_setleds(noah_leds, RGBLIGHT_LED_COUNT); } const rgblight_driver_t rgblight_driver = { diff --git a/keyboards/miiiw/blackio83/rev_0100/config.h b/keyboards/miiiw/blackio83/rev_0100/config.h index e68a9d0b16..78f7739f0a 100644 --- a/keyboards/miiiw/blackio83/rev_0100/config.h +++ b/keyboards/miiiw/blackio83/rev_0100/config.h @@ -36,7 +36,6 @@ /* RGB Matrix config */ #define RGB_EN_PIN A8 -#define RGBLED_NUM 83 #define RGB_MATRIX_LED_COUNT 83 #define RGB_MATRIX_CENTER { 62, 42 } diff --git a/keyboards/miiiw/blackio83/rev_0100/rev_0100.c b/keyboards/miiiw/blackio83/rev_0100/rev_0100.c deleted file mode 100644 index b28ac84acb..0000000000 --- a/keyboards/miiiw/blackio83/rev_0100/rev_0100.c +++ /dev/null @@ -1,17 +0,0 @@ -/* Copyright 2023 ArthurCyy - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "blackio83.h" diff --git a/keyboards/mixi/keymaps/default/keymap.c b/keyboards/mixi/keymaps/default/keymap.c index d14a692a89..29f19349cc 100644 --- a/keyboards/mixi/keymaps/default/keymap.c +++ b/keyboards/mixi/keymaps/default/keymap.c @@ -59,13 +59,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; const rgblight_segment_t PROGMEM _base_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_BLUE} + {0, RGBLIGHT_LED_COUNT, HSV_BLUE} ); const rgblight_segment_t PROGMEM _middle_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_GREEN} + {0, RGBLIGHT_LED_COUNT, HSV_GREEN} ); const rgblight_segment_t PROGMEM _top_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_RED} + {0, RGBLIGHT_LED_COUNT, HSV_RED} ); const rgblight_segment_t* const PROGMEM _rgb_layers[] = diff --git a/keyboards/mixi/keymaps/via/keymap.c b/keyboards/mixi/keymaps/via/keymap.c index ef5aace888..adcf448503 100644 --- a/keyboards/mixi/keymaps/via/keymap.c +++ b/keyboards/mixi/keymaps/via/keymap.c @@ -76,13 +76,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { }; const rgblight_segment_t PROGMEM _base_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_BLUE} + {0, RGBLIGHT_LED_COUNT, HSV_BLUE} ); const rgblight_segment_t PROGMEM _middle_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_GREEN} + {0, RGBLIGHT_LED_COUNT, HSV_GREEN} ); const rgblight_segment_t PROGMEM _top_layer[] = RGBLIGHT_LAYER_SEGMENTS( - {0, RGBLED_NUM, HSV_RED} + {0, RGBLIGHT_LED_COUNT, HSV_RED} ); const rgblight_segment_t* const PROGMEM _rgb_layers[] = diff --git a/keyboards/mlego/m48/keymaps/default/keymap.c b/keyboards/mlego/m48/keymaps/default/keymap.c index d07f193526..71409bf939 100644 --- a/keyboards/mlego/m48/keymaps/default/keymap.c +++ b/keyboards/mlego/m48/keymaps/default/keymap.c @@ -26,10 +26,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m48/keymaps/via/keymap.c b/keyboards/mlego/m48/keymaps/via/keymap.c index 91649631dc..d180c3e8ac 100644 --- a/keyboards/mlego/m48/keymaps/via/keymap.c +++ b/keyboards/mlego/m48/keymaps/via/keymap.c @@ -26,10 +26,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m60/keymaps/default/keymap.c b/keyboards/mlego/m60/keymaps/default/keymap.c index dbfcad3152..d997bd2dc0 100644 --- a/keyboards/mlego/m60/keymaps/default/keymap.c +++ b/keyboards/mlego/m60/keymaps/default/keymap.c @@ -26,10 +26,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m60/keymaps/via/keymap.c b/keyboards/mlego/m60/keymaps/via/keymap.c index 8d0cddae80..fc3ab612d0 100644 --- a/keyboards/mlego/m60/keymaps/via/keymap.c +++ b/keyboards/mlego/m60/keymaps/via/keymap.c @@ -26,10 +26,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m60_split/keymaps/default/keymap.c b/keyboards/mlego/m60_split/keymaps/default/keymap.c index 2f51794c1c..506aa45f30 100644 --- a/keyboards/mlego/m60_split/keymaps/default/keymap.c +++ b/keyboards/mlego/m60_split/keymaps/default/keymap.c @@ -29,10 +29,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m60_split/keymaps/via/keymap.c b/keyboards/mlego/m60_split/keymaps/via/keymap.c index 756639bfd9..29270b0425 100644 --- a/keyboards/mlego/m60_split/keymaps/via/keymap.c +++ b/keyboards/mlego/m60_split/keymaps/via/keymap.c @@ -29,10 +29,10 @@ enum layer_names { #ifdef RGBLIGHT_ENABLE -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_PURPLE}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CYAN}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_GREEN}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); #endif diff --git a/keyboards/mlego/m65/m65.c b/keyboards/mlego/m65/m65.c index 12ea866f1e..506ac2e30d 100644 --- a/keyboards/mlego/m65/m65.c +++ b/keyboards/mlego/m65/m65.c @@ -9,10 +9,10 @@ static bool toggle_rse = false; #if defined(RGBLIGHT_ENABLE) -const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_OFF}); -const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_AZURE}); -const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CORAL}); -const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED}); +const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_OFF}); +const rgblight_segment_t PROGMEM my_lwr_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_AZURE}); +const rgblight_segment_t PROGMEM my_rse_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_CORAL}); +const rgblight_segment_t PROGMEM my_adj_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLIGHT_LED_COUNT, HSV_RED}); const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer); diff --git a/keyboards/monstargear/xo87/solderable/solderable.h b/keyboards/monstargear/xo87/solderable/solderable.h index 2758a3a3ff..70e8a6c8d5 100644 --- a/keyboards/monstargear/xo87/solderable/solderable.h +++ b/keyboards/monstargear/xo87/solderable/solderable.h @@ -43,11 +43,11 @@ typedef struct{ rgb_; #define colorAGSize 10 -#define colorBGSize RGBLED_NUM-10 +#define colorBGSize RGBLIGHT_LED_COUNT-10 typedef struct{ rgb_ colorAG[colorAGSize]; - rgb_ colorBG[RGBLED_NUM-10]; + rgb_ colorBG[RGBLIGHT_LED_COUNT-10]; } backLedRgbG_; diff --git a/keyboards/neson_design/nico/nico.c b/keyboards/neson_design/nico/nico.c index 5d84cb9e1b..bf8eeb87dd 100644 --- a/keyboards/neson_design/nico/nico.c +++ b/keyboards/neson_design/nico/nico.c @@ -54,14 +54,14 @@ void housekeeping_task_kb(void) alert = !alert; last_ticks = timer_read(); } - ws2812_setleds(led, RGBLED_NUM); + ws2812_setleds(led, RGBLIGHT_LED_COUNT); } else { if (backup) { led[4].r = caps_led.r; led[4].g = caps_led.g; led[4].b = caps_led.b; backup = false; - ws2812_setleds(led, RGBLED_NUM); + ws2812_setleds(led, RGBLIGHT_LED_COUNT); } } housekeeping_task_user(); @@ -80,7 +80,7 @@ void setleds_custom(rgb_led_t *start_led, uint16_t num_leds) uint8_t tmp = start_led[4].g; start_led[4].g = start_led[4].r; start_led[4].r = tmp; - ws2812_setleds(start_led, RGBLED_NUM); + ws2812_setleds(start_led, RGBLIGHT_LED_COUNT); } const rgblight_driver_t rgblight_driver = { diff --git a/keyboards/newgame40/post_config.h b/keyboards/newgame40/post_config.h index 247178beec..7ac270c932 100644 --- a/keyboards/newgame40/post_config.h +++ b/keyboards/newgame40/post_config.h @@ -1,14 +1,14 @@ #pragma once #ifndef IOS_DEVICE_ENABLE -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 255 # else # define RGBLIGHT_LIMIT_VAL 130 # endif # define RGBLIGHT_VAL_STEP 17 #else -# if RGBLED_NUM <= 6 +# if RGBLIGHT_LED_COUNT <= 6 # define RGBLIGHT_LIMIT_VAL 90 # else # define RGBLIGHT_LIMIT_VAL 45 diff --git a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c index b71f9119ef..4e2f7dd4d6 100644 --- a/keyboards/nullbitsco/nibble/keymaps/via/keymap.c +++ b/keyboards/nullbitsco/nibble/keymaps/via/keymap.c @@ -112,7 +112,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { } else { rgblight_timer_disable(); uint8_t val = rgblight_get_val(); - rgblight_sethsv_range(255, 255, val, 0, RGBLED_NUM-1); + rgblight_sethsv_range(255, 255, val, 0, RGBLIGHT_LED_COUNT-1); } deafened = !deafened; } diff --git a/keyboards/redox/keymaps/default/config.h b/keyboards/redox/keymaps/default/config.h index 2a1801a78f..ab4d588cb0 100644 --- a/keyboards/redox/keymaps/default/config.h +++ b/keyboards/redox/keymaps/default/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -33,7 +33,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 14 +#define RGBLIGHT_LED_COUNT 14 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/redox/keymaps/via/config.h b/keyboards/redox/keymaps/via/config.h index cfb2a9378a..7b9be07d97 100644 --- a/keyboards/redox/keymaps/via/config.h +++ b/keyboards/redox/keymaps/via/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -34,7 +34,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 14 +#define RGBLIGHT_LED_COUNT 14 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/reviung/reviung34/keymaps/default_rgb/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h index e4d91482c9..cc14e26943 100644 --- a/keyboards/reviung/reviung34/keymaps/default_rgb/config.h +++ b/keyboards/reviung/reviung34/keymaps/default_rgb/config.h @@ -19,7 +19,7 @@ // place overrides here #define WS2812_DI_PIN D3 - #define RGBLED_NUM 9 + #define RGBLIGHT_LED_COUNT 9 #define RGBLIGHT_HUE_STEP 16 #define RGBLIGHT_SAT_STEP 16 #define RGBLIGHT_VAL_STEP 16 diff --git a/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h index e4d91482c9..cc14e26943 100644 --- a/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h +++ b/keyboards/reviung/reviung34/keymaps/default_rgb2u/config.h @@ -19,7 +19,7 @@ // place overrides here #define WS2812_DI_PIN D3 - #define RGBLED_NUM 9 + #define RGBLIGHT_LED_COUNT 9 #define RGBLIGHT_HUE_STEP 16 #define RGBLIGHT_SAT_STEP 16 #define RGBLIGHT_VAL_STEP 16 diff --git a/keyboards/reviung/reviung39/keymaps/default/config.h b/keyboards/reviung/reviung39/keymaps/default/config.h index d868c539e4..d882e8ad94 100644 --- a/keyboards/reviung/reviung39/keymaps/default/config.h +++ b/keyboards/reviung/reviung39/keymaps/default/config.h @@ -19,7 +19,7 @@ // place overrides here #define WS2812_DI_PIN D3 - #define RGBLED_NUM 11 + #define RGBLIGHT_LED_COUNT 11 #define RGBLIGHT_HUE_STEP 16 #define RGBLIGHT_SAT_STEP 16 #define RGBLIGHT_VAL_STEP 16 diff --git a/keyboards/reviung/reviung39/keymaps/default_s/config.h b/keyboards/reviung/reviung39/keymaps/default_s/config.h index c44a5f9d7c..3fd3c73fcc 100644 --- a/keyboards/reviung/reviung39/keymaps/default_s/config.h +++ b/keyboards/reviung/reviung39/keymaps/default_s/config.h @@ -19,7 +19,7 @@ // place overrides here #define WS2812_DI_PIN D3 - #define RGBLED_NUM 6 + #define RGBLIGHT_LED_COUNT 6 #define RGBLIGHT_HUE_STEP 16 #define RGBLIGHT_SAT_STEP 16 #define RGBLIGHT_VAL_STEP 16 diff --git a/keyboards/reviung/reviung39/keymaps/default_s/readme.md b/keyboards/reviung/reviung39/keymaps/default_s/readme.md index b882ec40c2..a67401b97c 100644 --- a/keyboards/reviung/reviung39/keymaps/default_s/readme.md +++ b/keyboards/reviung/reviung39/keymaps/default_s/readme.md @@ -3,4 +3,4 @@ __REVIUNG39S is simple version__ The number of RGB LEDs is set to 6. -To change the number of RGB LEDs, change the "#define RGBLED_NUM 6" number in "default_s / config.h". +To change the number of RGB LEDs, change the "#define RGBLIGHT_LED_COUNT 6" number in "default_s / config.h". diff --git a/keyboards/reviung/reviung61/keymaps/default_rgb/config.h b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h index 854af5142d..ddd5ef6cf5 100644 --- a/keyboards/reviung/reviung61/keymaps/default_rgb/config.h +++ b/keyboards/reviung/reviung61/keymaps/default_rgb/config.h @@ -20,7 +20,7 @@ // --- RGB underglow --- #define WS2812_DI_PIN B7 - #define RGBLED_NUM 12 + #define RGBLIGHT_LED_COUNT 12 #define RGBLIGHT_HUE_STEP 16 #define RGBLIGHT_SAT_STEP 16 #define RGBLIGHT_VAL_STEP 16 diff --git a/keyboards/rgbkb/sol/rev1/config.h b/keyboards/rgbkb/sol/rev1/config.h index a41959a88b..575e393b1d 100644 --- a/keyboards/rgbkb/sol/rev1/config.h +++ b/keyboards/rgbkb/sol/rev1/config.h @@ -19,10 +19,10 @@ along with this program. If not, see . #pragma once #ifdef LED_MIRRORED - #define RGBLED_NUM 35 + #define RGBLIGHT_LED_COUNT 35 #else - #define RGBLED_NUM 70 + #define RGBLIGHT_LED_COUNT 70 #endif -#define RGB_MATRIX_LED_COUNT RGBLED_NUM +#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT #define RGB_MATRIX_CENTER { 112, 35 } diff --git a/keyboards/rgbkb/sol/rev2/config.h b/keyboards/rgbkb/sol/rev2/config.h index 19680c84b3..7016cf7744 100644 --- a/keyboards/rgbkb/sol/rev2/config.h +++ b/keyboards/rgbkb/sol/rev2/config.h @@ -24,28 +24,28 @@ along with this program. If not, see . #ifdef LED_MIRRORED #ifdef FULLHAND_ENABLE #define FULLHAND_LEDS 24 - #define RGBLED_NUM 74 + #define RGBLIGHT_LED_COUNT 74 #elif SF_ENABLE #define FULLHAND_LEDS 38 - #define RGBLED_NUM 81 + #define RGBLIGHT_LED_COUNT 81 #else #define FULLHAND_LEDS 0 - #define RGBLED_NUM 62 + #define RGBLIGHT_LED_COUNT 62 #endif #else #ifdef FULLHAND_ENABLE #define FULLHAND_LEDS 24 - #define RGBLED_NUM 148 + #define RGBLIGHT_LED_COUNT 148 #elif SF_ENABLE #define FULLHAND_LEDS 38 - #define RGBLED_NUM 162 + #define RGBLIGHT_LED_COUNT 162 #else #define FULLHAND_LEDS 0 - #define RGBLED_NUM 124 + #define RGBLIGHT_LED_COUNT 124 #endif #endif -#define RGB_MATRIX_LED_COUNT RGBLED_NUM +#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT #define RGB_MATRIX_CENTER { 112, 37 } diff --git a/keyboards/rgbkb/zen/rev1/keymaps/default/config.h b/keyboards/rgbkb/zen/rev1/keymaps/default/config.h index 1de23afd63..e9d6659d60 100644 --- a/keyboards/rgbkb/zen/rev1/keymaps/default/config.h +++ b/keyboards/rgbkb/zen/rev1/keymaps/default/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . // #define MASTER_RIGHT // #define EE_HANDS -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -35,7 +35,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 16 +#define RGBLIGHT_LED_COUNT 16 #define RGBLIGHT_HUE_STEP 8 #define RGBLIGHT_SAT_STEP 8 #define RGBLIGHT_VAL_STEP 8 diff --git a/keyboards/rgbkb/zygomorph/rev1/config.h b/keyboards/rgbkb/zygomorph/rev1/config.h index 8a46a941b7..81f961540c 100644 --- a/keyboards/rgbkb/zygomorph/rev1/config.h +++ b/keyboards/rgbkb/zygomorph/rev1/config.h @@ -22,9 +22,9 @@ along with this program. If not, see . #define EE_HANDS #ifndef RGBLIGHT_SPLIT_ENABLE - #define RGBLED_NUM 30 + #define RGBLIGHT_LED_COUNT 30 #else - #define RGBLED_NUM 60 + #define RGBLIGHT_LED_COUNT 60 #endif #define RGB_MATRIX_LED_COUNT 60 diff --git a/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h index 12d5784374..f2a365a52e 100644 --- a/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h +++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_nafuda/config.h @@ -25,11 +25,11 @@ #define QUICK_TAP_TERM 0 #define TAPPING_TERM 180 -#ifdef RGBLED_NUM - #undef RGBLED_NUM +#ifdef RGBLIGHT_LED_COUNT + #undef RGBLIGHT_LED_COUNT #endif -#define RGBLED_NUM 55 // Number of LEDs +#define RGBLIGHT_LED_COUNT 55 // Number of LEDs #define RGBLIGHT_SPLIT #define RGBLED_SPLIT { 48, 7 } diff --git a/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h index 392f2f97e8..d0f71f4f9f 100644 --- a/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h +++ b/keyboards/salicylic_acid3/naked48/keymaps/default_with_setta21/config.h @@ -25,10 +25,10 @@ #define QUICK_TAP_TERM 0 #define TAPPING_TERM 180 -#ifdef RGBLED_NUM - #undef RGBLED_NUM +#ifdef RGBLIGHT_LED_COUNT + #undef RGBLIGHT_LED_COUNT #endif -#define RGBLED_NUM 69 // Number of LEDs +#define RGBLIGHT_LED_COUNT 69 // Number of LEDs #define RGBLIGHT_SPLIT #define RGBLED_SPLIT { 48, 21 } diff --git a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h index 21494a0dfd..36be4d6868 100644 --- a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h +++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h @@ -21,8 +21,8 @@ #define QUICK_TAP_TERM 0 #define TAPPING_TERM 180 -#ifdef RGBLED_NUM - #undef RGBLED_NUM +#ifdef RGBLIGHT_LED_COUNT + #undef RGBLIGHT_LED_COUNT #endif #define RGB_MATRIX_LED_COUNT 48 diff --git a/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h index 73a3019540..ebc2b46717 100644 --- a/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h +++ b/keyboards/salicylic_acid3/naked64/keymaps/default_with_setta21/config.h @@ -25,6 +25,6 @@ #define QUICK_TAP_TERM 0 #define TAPPING_TERM 180 -#define RGBLED_NUM 12 // Number of LEDs +#define RGBLIGHT_LED_COUNT 12 // Number of LEDs #define RGBLIGHT_LED_MAP { 0, 1, 3, 2, 2, 3, 2, 3, 4, 5, 6, 7 } diff --git a/keyboards/silverbullet44/config.h b/keyboards/silverbullet44/config.h index e8f1cca7eb..2c9eac876c 100644 --- a/keyboards/silverbullet44/config.h +++ b/keyboards/silverbullet44/config.h @@ -36,7 +36,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_BREATHE_CENTER 2 // 1 to 2.7 #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255 /*== customize snake effect ==*/ - #define RGBLIGHT_EFFECT_SNAKE_LENGTH RGBLED_NUM + #define RGBLIGHT_EFFECT_SNAKE_LENGTH RGBLIGHT_LED_COUNT /*== customize knight effect ==*/ #define RGBLIGHT_EFFECT_KNIGHT_LENGTH 6 #endif diff --git a/keyboards/snes_macropad/snes_macropad.c b/keyboards/snes_macropad/snes_macropad.c index 1dcfda33ec..9f4f410fa3 100644 --- a/keyboards/snes_macropad/snes_macropad.c +++ b/keyboards/snes_macropad/snes_macropad.c @@ -90,7 +90,7 @@ static void setupForFlashing(void) { // Set alternating backlight colors const uint8_t max = 20; rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); - for (size_t i = 0; i < RGBLED_NUM; ++i) { + for (size_t i = 0; i < RGBLIGHT_LED_COUNT; ++i) { rgb_led_t *led_ = (rgb_led_t *)&led[i]; switch (i % 2) { case 0: diff --git a/keyboards/sofle/keymaps/rgb_default/config.h b/keyboards/sofle/keymaps/rgb_default/config.h index 7d14c6e337..ee137625c0 100644 --- a/keyboards/sofle/keymaps/rgb_default/config.h +++ b/keyboards/sofle/keymaps/rgb_default/config.h @@ -49,13 +49,13 @@ #ifdef RGB_MATRIX_ENABLE -#define RGBLED_NUM 35 // Number of LEDs -#define RGBLED_NUM 35 // Number of LEDs -#define RGB_MATRIX_LED_COUNT RGBLED_NUM +#define RGBLIGHT_LED_COUNT 35 // Number of LEDs +#define RGBLIGHT_LED_COUNT 35 // Number of LEDs +#define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT #endif #ifdef RGBLIGHT_ENABLE - #undef RGBLED_NUM + #undef RGBLIGHT_LED_COUNT //#define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD @@ -68,11 +68,11 @@ //#define RGBLIGHT_EFFECT_ALTERNATING //#define RGBLIGHT_EFFECT_TWINKLE - #define RGBLED_NUM 70 + #define RGBLIGHT_LED_COUNT 70 //#define RGBLED_SPLIT #define RGBLED_SPLIT { 35, 35 } // haven't figured out how to use this yet - //#define RGBLED_NUM 30 + //#define RGBLIGHT_LED_COUNT 30 #define RGBLIGHT_LIMIT_VAL 120 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/keyboards/sofle/keymaps/via/config.h b/keyboards/sofle/keymaps/via/config.h index e53881987d..c70c410f77 100644 --- a/keyboards/sofle/keymaps/via/config.h +++ b/keyboards/sofle/keymaps/via/config.h @@ -24,11 +24,11 @@ for more options. */ #if defined(KEYBOARD_sofle_rev1) // Add RGB underglow and top facing lighting # define WS2812_DI_PIN D3 -# define RGBLED_NUM 72 +# define RGBLIGHT_LED_COUNT 72 # define RGBLED_SPLIT \ { 36, 36 } # ifdef RGB_MATRIX_ENABLE -# define RGB_MATRIX_LED_COUNT RGBLED_NUM +# define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT # define RGB_MATRIX_SPLIT RGBLED_SPLIT # define SPLIT_TRANSPORT_MIRROR # else diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h index 13c76a80e2..0694b9dd3c 100644 --- a/keyboards/stront/config.h +++ b/keyboards/stront/config.h @@ -38,7 +38,7 @@ /* RGB config */ #ifdef RGB_MATRIX_ENABLE # define SPLIT_TRANSPORT_MIRROR -# define RGB_MATRIX_LED_COUNT RGBLED_NUM +# define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT # define RGB_DISABLE_WHEN_USB_SUSPENDED # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/tunks/ergo33/keymaps/default/config.h b/keyboards/tunks/ergo33/keymaps/default/config.h index 33edf0b03c..3ca11c66a6 100644 --- a/keyboards/tunks/ergo33/keymaps/default/config.h +++ b/keyboards/tunks/ergo33/keymaps/default/config.h @@ -20,7 +20,7 @@ * No external LED PCB: 10 * External LED PCB: 14 */ -#define RGBLED_NUM 14 +#define RGBLIGHT_LED_COUNT 14 #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL diff --git a/keyboards/unison/keymaps/via/config.h b/keyboards/unison/keymaps/via/config.h index 48fe417a5d..07a2c9f5cc 100644 --- a/keyboards/unison/keymaps/via/config.h +++ b/keyboards/unison/keymaps/via/config.h @@ -16,8 +16,8 @@ #pragma once - #undef RGBLED_NUM - #define RGBLED_NUM 17 // Layer Indicator(2) + Rotary Encoder(5) + Optional(2) + Under(8) + #undef RGBLIGHT_LED_COUNT + #define RGBLIGHT_LED_COUNT 17 // Layer Indicator(2) + Rotary Encoder(5) + Optional(2) + Under(8) #undef RGBLIGHT_LED_MAP #define RGBLIGHT_LED_MAP {2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} // Left to Right to Under diff --git a/keyboards/yosino58/keymaps/default/config.h b/keyboards/yosino58/keymaps/default/config.h index 763b31aa10..e82254fff1 100644 --- a/keyboards/yosino58/keymaps/default/config.h +++ b/keyboards/yosino58/keymaps/default/config.h @@ -29,7 +29,7 @@ along with this program. If not, see . #define QUICK_TAP_TERM 0 #define TAPPING_TERM 100 -#undef RGBLED_NUM +#undef RGBLIGHT_LED_COUNT #define RGBLIGHT_EFFECT_BREATHING #define RGBLIGHT_EFFECT_RAINBOW_MOOD #define RGBLIGHT_EFFECT_RAINBOW_SWIRL @@ -40,7 +40,7 @@ along with this program. If not, see . #define RGBLIGHT_EFFECT_RGB_TEST #define RGBLIGHT_EFFECT_ALTERNATING #define RGBLIGHT_EFFECT_TWINKLE -#define RGBLED_NUM 12 +#define RGBLIGHT_LED_COUNT 12 #define RGBLIGHT_LIMIT_VAL 120 #define RGBLIGHT_HUE_STEP 10 #define RGBLIGHT_SAT_STEP 17 diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 8a5240568c..8c057f687d 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -116,7 +116,7 @@ animation_status_t animation_status = {}; #endif #ifndef LED_ARRAY -rgb_led_t led[RGBLED_NUM]; +rgb_led_t led[RGBLIGHT_LED_COUNT]; # define LED_ARRAY led #endif @@ -126,7 +126,7 @@ rgblight_segment_t const *const *rgblight_layers = NULL; static bool deferred_set_layer_state = false; #endif -rgblight_ranges_t rgblight_ranges = {0, RGBLED_NUM, 0, RGBLED_NUM, RGBLED_NUM}; +rgblight_ranges_t rgblight_ranges = {0, RGBLIGHT_LED_COUNT, 0, RGBLIGHT_LED_COUNT, RGBLIGHT_LED_COUNT}; void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) { rgblight_ranges.clipping_start_pos = start_pos; @@ -134,8 +134,8 @@ void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds) { } void rgblight_set_effect_range(uint8_t start_pos, uint8_t num_leds) { - if (start_pos >= RGBLED_NUM) return; - if (start_pos + num_leds > RGBLED_NUM) return; + if (start_pos >= RGBLIGHT_LED_COUNT) return; + if (start_pos + num_leds > RGBLIGHT_LED_COUNT) return; rgblight_ranges.effect_start_pos = start_pos; rgblight_ranges.effect_end_pos = start_pos + num_leds; rgblight_ranges.effect_num_leds = num_leds; @@ -664,7 +664,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) { } void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) { - if (!rgblight_config.enable || index >= RGBLED_NUM) { + if (!rgblight_config.enable || index >= RGBLIGHT_LED_COUNT) { return; } @@ -700,7 +700,7 @@ static uint8_t get_interval_time(const uint8_t *default_interval_address, uint8_ #endif void rgblight_setrgb_range(uint8_t r, uint8_t g, uint8_t b, uint8_t start, uint8_t end) { - if (!rgblight_config.enable || start < 0 || start >= end || end > RGBLED_NUM) { + if (!rgblight_config.enable || start < 0 || start >= end || end > RGBLIGHT_LED_COUNT) { return; } @@ -727,19 +727,19 @@ void rgblight_sethsv_range(uint8_t hue, uint8_t sat, uint8_t val, uint8_t start, #ifndef RGBLIGHT_SPLIT void rgblight_setrgb_master(uint8_t r, uint8_t g, uint8_t b) { - rgblight_setrgb_range(r, g, b, 0, (uint8_t)RGBLED_NUM / 2); + rgblight_setrgb_range(r, g, b, 0, (uint8_t)RGBLIGHT_LED_COUNT / 2); } void rgblight_setrgb_slave(uint8_t r, uint8_t g, uint8_t b) { - rgblight_setrgb_range(r, g, b, (uint8_t)RGBLED_NUM / 2, (uint8_t)RGBLED_NUM); + rgblight_setrgb_range(r, g, b, (uint8_t)RGBLIGHT_LED_COUNT / 2, (uint8_t)RGBLIGHT_LED_COUNT); } void rgblight_sethsv_master(uint8_t hue, uint8_t sat, uint8_t val) { - rgblight_sethsv_range(hue, sat, val, 0, (uint8_t)RGBLED_NUM / 2); + rgblight_sethsv_range(hue, sat, val, 0, (uint8_t)RGBLIGHT_LED_COUNT / 2); } void rgblight_sethsv_slave(uint8_t hue, uint8_t sat, uint8_t val) { - rgblight_sethsv_range(hue, sat, val, (uint8_t)RGBLED_NUM / 2, (uint8_t)RGBLED_NUM); + rgblight_sethsv_range(hue, sat, val, (uint8_t)RGBLIGHT_LED_COUNT / 2, (uint8_t)RGBLIGHT_LED_COUNT); } #endif // ifndef RGBLIGHT_SPLIT @@ -789,7 +789,7 @@ static void rgblight_layers_write(void) { break; // No more segments } // Write segment.count LEDs - rgb_led_t *const limit = &led[MIN(segment.index + segment.count, RGBLED_NUM)]; + rgb_led_t *const limit = &led[MIN(segment.index + segment.count, RGBLIGHT_LED_COUNT)]; for (rgb_led_t *led_ptr = &led[segment.index]; led_ptr < limit; led_ptr++) { # ifdef RGBLIGHT_LAYERS_RETAIN_VAL sethsv(segment.hue, segment.sat, current_val, led_ptr); @@ -928,8 +928,8 @@ void rgblight_set(void) { #endif #ifdef RGBLIGHT_LED_MAP - rgb_led_t led0[RGBLED_NUM]; - for (uint8_t i = 0; i < RGBLED_NUM; i++) { + rgb_led_t led0[RGBLIGHT_LED_COUNT]; + for (uint8_t i = 0; i < RGBLIGHT_LED_COUNT; i++) { led0[i] = led[pgm_read_byte(&led_map[i])]; } start_led = led0 + rgblight_ranges.clipping_start_pos; @@ -1272,8 +1272,8 @@ void rgblight_effect_snake(animation_status_t *anim) { # endif for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) { k = pos + j * increment; - if (k > RGBLED_NUM) { - k = k % (RGBLED_NUM); + if (k > RGBLIGHT_LED_COUNT) { + k = k % (RGBLIGHT_LED_COUNT); } if (k < 0) { k = k + rgblight_ranges.effect_num_leds; @@ -1458,7 +1458,7 @@ typedef struct PACKED { uint8_t max_life; } TwinkleState; -static TwinkleState led_twinkle_state[RGBLED_NUM]; +static TwinkleState led_twinkle_state[RGBLIGHT_LED_COUNT]; void rgblight_effect_twinkle(animation_status_t *anim) { const bool random_color = anim->delta / 3; diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h index d2b8a24b1e..9e2b073776 100644 --- a/quantum/rgblight/rgblight.h +++ b/quantum/rgblight/rgblight.h @@ -16,6 +16,12 @@ #pragma once +// DEPRECATED DEFINES - DO NOT USE +#if defined(RGBLED_NUM) +# define RGBLIGHT_LED_COUNT RGBLED_NUM +#endif +// ======== + /***** rgblight_mode(mode)/rgblight_mode_noeeprom(mode) **** old mode number (before 0.6.117) to new mode name table @@ -234,7 +240,7 @@ void rgblight_unblink_all_but_layer(uint8_t layer); #endif -extern rgb_led_t led[RGBLED_NUM]; +extern rgb_led_t led[RGBLIGHT_LED_COUNT]; extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM; extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM; -- cgit v1.2.3 From dc5befd13906f193f6ee8c2f9ace01100a167b20 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 16 Dec 2023 15:43:39 +0000 Subject: Remove redundant RGB/LED matrix eeconfig init (#22673) --- quantum/led_matrix/led_matrix.c | 16 ++++++++++------ quantum/led_matrix/led_matrix.h | 2 ++ quantum/rgb_matrix/rgb_matrix.c | 6 ------ 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'quantum') diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 4699c4a4c2..eee43d9281 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -111,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; } @@ -415,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 153abf2975..eeaeee20b5 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -136,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); diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index ebaf3077dc..fb7f20c210 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -460,12 +460,6 @@ void rgb_matrix_init(void) { } #endif // RGB_MATRIX_KEYREACTIVE_ENABLED - if (!eeconfig_is_enabled()) { - dprintf("rgb_matrix_init_drivers eeconfig is not enabled.\n"); - eeconfig_init(); - eeconfig_update_rgb_matrix_default(); - } - eeconfig_init_rgb_matrix(); if (!rgb_matrix_config.mode) { dprintf("rgb_matrix_init_drivers rgb_matrix_config.mode = 0. Write default values to EEPROM.\n"); -- cgit v1.2.3 From f165eb5cc96b4b987020ad4cba73a0643525be4f Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 16 Dec 2023 15:43:53 +0000 Subject: Remove redundant rgblight eeconfig init (#22674) --- quantum/rgblight/rgblight.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'quantum') diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 8c057f687d..530cb04688 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -229,13 +229,7 @@ void rgblight_init(void) { return; } - dprintf("rgblight_init called.\n"); dprintf("rgblight_init start!\n"); - if (!eeconfig_is_enabled()) { - dprintf("rgblight_init eeconfig is not enabled.\n"); - eeconfig_init(); - eeconfig_update_rgblight_default(); - } rgblight_config.raw = eeconfig_read_rgblight(); RGBLIGHT_SPLIT_SET_CHANGE_MODEHSVS; if (!rgblight_config.mode) { -- cgit v1.2.3 From 11be3e7c649185f9339158c47f161d48d32f0908 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 16 Dec 2023 21:15:55 +0000 Subject: Remove redundant backlight eeconfig init (#22675) --- quantum/backlight/backlight.c | 21 ++++++++++++++------- quantum/backlight/backlight.h | 2 +- 2 files changed, 15 insertions(+), 8 deletions(-) (limited to 'quantum') diff --git a/quantum/backlight/backlight.c b/quantum/backlight/backlight.c index e89b34696c..eb64dd71e8 100644 --- a/quantum/backlight/backlight.c +++ b/quantum/backlight/backlight.c @@ -42,20 +42,26 @@ backlight_config_t backlight_config; static uint8_t breathing_period = BREATHING_PERIOD; #endif +static void backlight_check_config(void) { + /* Add some out of bound checks for backlight config */ + + if (backlight_config.level > BACKLIGHT_LEVELS) { + backlight_config.level = BACKLIGHT_LEVELS; + } +} + /** \brief Backlight initialization * * FIXME: needs doc */ void backlight_init(void) { - /* check signature */ - if (!eeconfig_is_enabled()) { - eeconfig_init(); - eeconfig_update_backlight_default(); - } backlight_config.raw = eeconfig_read_backlight(); - if (backlight_config.level > BACKLIGHT_LEVELS) { - backlight_config.level = BACKLIGHT_LEVELS; + if (!backlight_config.valid) { + dprintf("backlight_init backlight_config.valid = 0. Write default values to EEPROM.\n"); + eeconfig_update_backlight_default(); } + backlight_check_config(); + backlight_set(backlight_config.enable ? backlight_config.level : 0); } @@ -183,6 +189,7 @@ void eeconfig_update_backlight_current(void) { } void eeconfig_update_backlight_default(void) { + backlight_config.valid = true; backlight_config.enable = BACKLIGHT_DEFAULT_ON; backlight_config.breathing = BACKLIGHT_DEFAULT_BREATHING; backlight_config.level = BACKLIGHT_DEFAULT_LEVEL; diff --git a/quantum/backlight/backlight.h b/quantum/backlight/backlight.h index 85812bff3a..c34fb5858d 100644 --- a/quantum/backlight/backlight.h +++ b/quantum/backlight/backlight.h @@ -39,7 +39,7 @@ typedef union { struct { bool enable : 1; bool breathing : 1; - uint8_t reserved : 1; // Reserved for possible future backlight modes + bool valid : 1; uint8_t level : 5; }; } backlight_config_t; -- cgit v1.2.3 From b9e81c06911a4e3345acf09cd499a9661eea67b8 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 19 Dec 2023 07:13:08 +1100 Subject: Update keyboard LED driver configs (#22638) --- docs/feature_led_matrix.md | 2 +- docs/feature_rgb_matrix.md | 10 +++++----- drivers/led/issi/is31fl3218-simple.c | 2 +- drivers/led/issi/is31fl3733-simple.c | 2 +- drivers/led/issi/is31fl3736.c | 2 +- drivers/led/issi/is31fl3741-simple.c | 3 ++- drivers/led/issi/is31fl3741.c | 3 ++- keyboards/4pplet/perk60_iso/rev_a/rev_a.c | 2 +- keyboards/abko/ak84bt/ak84bt.c | 2 +- keyboards/acheron/apollo/87h/gamma/gamma.c | 2 +- keyboards/akko/5087/5087.c | 2 +- keyboards/akko/5108/5108.c | 2 +- keyboards/akko/acr87/acr87.c | 2 +- keyboards/akko/top40/top40.c | 2 +- keyboards/axolstudio/yeti/hotswap/hotswap.c | 2 +- keyboards/canary/canary60rgb/canary60rgb.c | 2 +- keyboards/chosfox/cf81/cf81.c | 2 +- keyboards/clueboard/66_hotswap/gen1/gen1.c | 2 +- keyboards/darkproject/kd83a_bfg_edition/kd83a_bfg_edition.c | 2 +- keyboards/darkproject/kd87a_bfg_edition/kd87a_bfg_edition.c | 2 +- keyboards/dp60/dp60.c | 2 +- keyboards/drop/alt/v2/v2.c | 2 +- keyboards/drop/cstm65/cstm65.c | 2 +- keyboards/drop/cstm80/cstm80.c | 2 +- keyboards/drop/ctrl/v2/v2.c | 2 +- keyboards/drop/sense75/sense75.c | 2 +- keyboards/drop/shift/v2/v2.c | 2 +- keyboards/durgod/dgk6x/galaxy/galaxy.c | 2 +- keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c | 2 +- keyboards/durgod/dgk6x/hades_iso/hades_iso.c | 2 +- keyboards/durgod/dgk6x/venus/venus.c | 2 +- keyboards/dztech/dz60rgb/dz60rgb.c | 2 +- keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c | 2 +- keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c | 2 +- keyboards/dztech/dz64rgb/dz64rgb.c | 2 +- keyboards/dztech/dz65rgb/v1/v1.c | 2 +- keyboards/dztech/dz65rgb/v2/v2.c | 2 +- keyboards/dztech/dz65rgb/v3/v3.c | 2 +- keyboards/dztech/tofu/ii/v1/v1.c | 2 +- keyboards/dztech/tofu/jr/v1/v1.c | 2 +- keyboards/ergodox_ez/ergodox_ez.c | 2 +- keyboards/evyd13/atom47/rev5/rev5.c | 2 +- keyboards/exclusive/e6_rgb/e6_rgb.c | 2 +- keyboards/feker/ik75/ik75.c | 2 +- keyboards/ferris/0_2/bling/bling.c | 2 +- keyboards/flashquark/horizon_z/horizon_z.c | 2 +- keyboards/frooastboard/walnut/walnut.c | 2 +- keyboards/geekboards/tester/tester.c | 2 +- keyboards/gizmo_engineering/gk6/gk6.c | 2 +- keyboards/gmmk/gmmk2/p65/ansi/ansi.c | 2 +- keyboards/gmmk/gmmk2/p65/iso/iso.c | 2 +- keyboards/gmmk/gmmk2/p96/ansi/ansi.c | 2 +- keyboards/gmmk/gmmk2/p96/iso/iso.c | 2 +- keyboards/gmmk/numpad/numpad.c | 2 +- keyboards/gmmk/pro/rev1/ansi/ansi.c | 2 +- keyboards/gmmk/pro/rev1/iso/iso.c | 2 +- keyboards/gmmk/pro/rev2/ansi/ansi.c | 2 +- keyboards/gmmk/pro/rev2/iso/iso.c | 2 +- keyboards/handwired/orbweaver/orbweaver.c | 2 +- keyboards/hs60/v1/v1.c | 4 ++-- keyboards/ilumkb/simpler61/simpler61.c | 2 +- keyboards/ilumkb/simpler64/simpler64.c | 2 +- keyboards/inett_studio/sqx/hotswap/hotswap.c | 2 +- keyboards/inett_studio/sqx/universal/universal.c | 2 +- keyboards/inland/kb83/kb83.c | 2 +- keyboards/inland/mk47/mk47.c | 2 +- keyboards/inland/v83p/v83p.c | 2 +- keyboards/input_club/ergodox_infinity/ergodox_infinity.c | 2 +- keyboards/input_club/infinity60/led/led.c | 2 +- keyboards/input_club/whitefox/whitefox.c | 2 +- keyboards/jukaie/jk01/jk01.c | 2 +- keyboards/kbdcraft/adam64/adam64.c | 2 +- keyboards/kbdfans/bella/rgb/rgb.c | 2 +- keyboards/kbdfans/bella/rgb_iso/rgb_iso.c | 2 +- keyboards/kbdfans/boop65/rgb/rgb.c | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c | 2 +- keyboards/kbdfans/kbdmini/kbdmini.c | 2 +- keyboards/kbdfans/maja/maja.c | 2 +- keyboards/keychron/c1_pro/ansi/rgb/rgb.c | 2 +- keyboards/keychron/c1_pro/ansi/white/white.c | 2 +- keyboards/keychron/c2_pro/ansi/rgb/rgb.c | 2 +- keyboards/keychron/c2_pro/ansi/white/white.c | 2 +- keyboards/keychron/q0/base/base.c | 2 +- keyboards/keychron/q0/plus/plus.c | 2 +- keyboards/keychron/q10/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q10/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q11/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q11/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q12/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q12/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q1v1/ansi/ansi.c | 2 +- keyboards/keychron/q1v1/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q1v1/iso/iso.c | 2 +- keyboards/keychron/q1v1/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q1v2/ansi/ansi.c | 2 +- keyboards/keychron/q1v2/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q1v2/iso/iso.c | 2 +- keyboards/keychron/q1v2/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q1v2/jis/jis.c | 2 +- keyboards/keychron/q1v2/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/q2/ansi/ansi.c | 2 +- keyboards/keychron/q2/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q2/iso/iso.c | 2 +- keyboards/keychron/q2/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q2/jis/jis.c | 2 +- keyboards/keychron/q2/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/q3/ansi/ansi.c | 2 +- keyboards/keychron/q3/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q3/iso/iso.c | 2 +- keyboards/keychron/q3/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q3/jis/jis.c | 2 +- keyboards/keychron/q3/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/q4/ansi/v1/v1.c | 2 +- keyboards/keychron/q4/ansi/v2/v2.c | 2 +- keyboards/keychron/q4/iso/iso.c | 2 +- keyboards/keychron/q5/ansi/ansi.c | 2 +- keyboards/keychron/q5/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q5/iso/iso.c | 2 +- keyboards/keychron/q5/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q6/ansi/ansi.c | 2 +- keyboards/keychron/q6/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q6/iso/iso.c | 2 +- keyboards/keychron/q6/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q60/ansi/ansi.c | 2 +- keyboards/keychron/q65/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q7/ansi/ansi.c | 2 +- keyboards/keychron/q7/iso/iso.c | 2 +- keyboards/keychron/q8/ansi/ansi.c | 2 +- keyboards/keychron/q8/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q8/iso/iso.c | 2 +- keyboards/keychron/q8/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q9/ansi/ansi.c | 2 +- keyboards/keychron/q9/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/q9/iso/iso.c | 2 +- keyboards/keychron/q9/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/q9_plus/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/s1/ansi/rgb/rgb.c | 2 +- keyboards/keychron/s1/ansi/white/white.c | 2 +- keyboards/keychron/v1/ansi/ansi.c | 2 +- keyboards/keychron/v1/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v1/iso/iso.c | 2 +- keyboards/keychron/v1/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v1/jis/jis.c | 2 +- keyboards/keychron/v1/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/v10/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v10/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v2/ansi/ansi.c | 2 +- keyboards/keychron/v2/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v2/iso/iso.c | 2 +- keyboards/keychron/v2/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v2/jis/jis.c | 2 +- keyboards/keychron/v2/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/v3/ansi/ansi.c | 2 +- keyboards/keychron/v3/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v3/iso/iso.c | 2 +- keyboards/keychron/v3/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v3/jis/jis.c | 2 +- keyboards/keychron/v3/jis_encoder/jis_encoder.c | 2 +- keyboards/keychron/v4/ansi/ansi.c | 2 +- keyboards/keychron/v4/iso/iso.c | 2 +- keyboards/keychron/v5/ansi/ansi.c | 2 +- keyboards/keychron/v5/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v5/iso/iso.c | 2 +- keyboards/keychron/v5/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v6/ansi/ansi.c | 2 +- keyboards/keychron/v6/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v6/iso/iso.c | 2 +- keyboards/keychron/v6/iso_encoder/iso_encoder.c | 2 +- keyboards/keychron/v7/ansi/ansi.c | 2 +- keyboards/keychron/v7/iso/iso.c | 2 +- keyboards/keychron/v8/ansi/ansi.c | 2 +- keyboards/keychron/v8/ansi_encoder/ansi_encoder.c | 2 +- keyboards/keychron/v8/iso/iso.c | 2 +- keyboards/keychron/v8/iso_encoder/iso_encoder.c | 2 +- keyboards/kprepublic/bm40hsrgb/rev2/rev2.c | 2 +- keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c | 2 +- keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c | 2 +- keyboards/kprepublic/bm68hsrgb/rev2/rev2.c | 2 +- keyboards/kprepublic/bm80v2/bm80v2.c | 2 +- keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c | 2 +- keyboards/kprepublic/cstc40/daughterboard/daughterboard.c | 2 +- keyboards/kprepublic/cstc40/single_pcb/single_pcb.c | 2 +- keyboards/latincompass/latin17rgb/latin17rgb.c | 2 +- keyboards/latincompass/latin60rgb/latin60rgb.c | 2 +- keyboards/latincompass/latin6rgb/latin6rgb.c | 2 +- keyboards/matrix/noah/noah.c | 2 +- keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c | 2 +- keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c | 2 +- keyboards/mechlovin/delphine/rgb_led/rgb_led.c | 2 +- keyboards/mechlovin/hannah60rgb/rev2/rev2.c | 2 +- keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c | 2 +- keyboards/mechlovin/olly/octagon/octagon.c | 2 +- keyboards/mechlovin/zed65/mono_led/mono_led.c | 2 +- keyboards/melgeek/mach80/rev1/rev1.c | 2 +- keyboards/melgeek/mach80/rev2/rev2.c | 2 +- keyboards/melgeek/mj61/rev1/rev1.c | 2 +- keyboards/melgeek/mj61/rev2/rev2.c | 2 +- keyboards/melgeek/mj63/rev1/rev1.c | 2 +- keyboards/melgeek/mj63/rev2/rev2.c | 2 +- keyboards/melgeek/mj64/rev1/rev1.c | 2 +- keyboards/melgeek/mj64/rev2/rev2.c | 2 +- keyboards/melgeek/mj64/rev3/rev3.c | 2 +- keyboards/melgeek/mj65/rev3/rev3.c | 2 +- keyboards/melgeek/mojo68/rev1/rev1.c | 2 +- keyboards/melgeek/mojo75/rev1/rev1.c | 2 +- keyboards/melgeek/tegic/rev1/rev1.c | 2 +- keyboards/melgeek/z70ultra/z70ultra.c | 2 +- keyboards/miller/gm862/gm862.c | 2 +- keyboards/monsgeek/m1/m1.c | 2 +- keyboards/monsgeek/m3/m3.c | 2 +- keyboards/monsgeek/m5/m5.c | 2 +- keyboards/monsgeek/m6/m6.c | 2 +- keyboards/moonlander/moonlander.c | 2 +- keyboards/mt/mt64rgb/mt64rgb.c | 2 +- keyboards/mt/mt84/mt84.c | 2 +- keyboards/opendeck/32/rev1/rev1.c | 2 +- keyboards/owlab/voice65/hotswap/hotswap.c | 2 +- keyboards/owlab/voice65/soldered/soldered.c | 2 +- keyboards/phentech/rpk_001/rpk_001.c | 2 +- keyboards/planck/ez/ez.c | 2 +- keyboards/planck/light/light.c | 2 +- keyboards/playkbtw/pk64rgb/pk64rgb.c | 2 +- keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c | 2 +- keyboards/projectd/75/ansi/ansi.c | 2 +- keyboards/qwertykeys/qk100/ansi/ansi.c | 2 +- keyboards/redragon/k667/k667.c | 2 +- keyboards/skyloong/gk61/v1/v1.c | 2 +- keyboards/smallkeyboard/smallkeyboard.c | 2 +- keyboards/teleport/native/native.c | 2 +- keyboards/terrazzo/terrazzo.c | 2 +- keyboards/tkc/portico68v2/portico68v2.c | 2 +- keyboards/xbows/knight/knight.c | 2 +- keyboards/xbows/knight_plus/knight_plus.c | 2 +- keyboards/xbows/nature/nature.c | 2 +- keyboards/xbows/numpad/numpad.c | 2 +- keyboards/xbows/ranger/ranger.c | 2 +- keyboards/xbows/woody/woody.c | 2 +- quantum/rgb_matrix/rgb_matrix_drivers.c | 4 ++-- 240 files changed, 248 insertions(+), 246 deletions(-) (limited to 'quantum') diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index b1ce09d349..d803fcf101 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -54,7 +54,7 @@ For split keyboards using `LED_MATRIX_SPLIT` with an LED driver, you can either Define these arrays listing all the LEDs in your `.c`: ```c -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | LED address diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 824ff50648..53e387ee70 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -55,7 +55,7 @@ For split keyboards using `RGB_MATRIX_SPLIT` with an LED driver, you can either Define these arrays listing all the LEDs in your `.c`: ```c -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -139,7 +139,7 @@ Currently only 4 drivers are supported, but it would be trivial to support all 8 Define these arrays listing all the LEDs in your `.c`: ```c -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -218,7 +218,7 @@ Here is an example using 2 drivers. Define these arrays listing all the LEDs in your `.c`: ```c -const is31fl3736_led_t PROGMEM g_is31fl3736_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -292,7 +292,7 @@ Here is an example using 2 drivers. Define these arrays listing all the LEDs in your `.c`: ```c -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -501,7 +501,7 @@ Here is an example using 2 drivers. Define these arrays listing all the LEDs in your `.c`: ```c -const aw20216s_led_t PROGMEM g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Each AW20216S channel is controlled by a register at some offset between 0x00 * and 0xD7 inclusive. * See drivers/led/aw20216s.h for the mapping between register offsets and diff --git a/drivers/led/issi/is31fl3218-simple.c b/drivers/led/issi/is31fl3218-simple.c index e58b7d8bc0..d9faa8677d 100644 --- a/drivers/led/issi/is31fl3218-simple.c +++ b/drivers/led/issi/is31fl3218-simple.c @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -#include "is31fl3218.h" +#include "is31fl3218-simple.h" #include #include "i2c_master.h" diff --git a/drivers/led/issi/is31fl3733-simple.c b/drivers/led/issi/is31fl3733-simple.c index 805905ebc2..889d9ef389 100644 --- a/drivers/led/issi/is31fl3733-simple.c +++ b/drivers/led/issi/is31fl3733-simple.c @@ -43,7 +43,7 @@ #endif #ifndef IS31FL3733_CS_PULLDOWN -# define IS31FL3733_CSPULLDOWN IS31FL3733_PDR_0_OHM +# define IS31FL3733_CS_PULLDOWN IS31FL3733_PDR_0_OHM #endif #ifndef IS31FL3733_GLOBAL_CURRENT diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c index 384b815850..0d7b08e7e8 100644 --- a/drivers/led/issi/is31fl3736.c +++ b/drivers/led/issi/is31fl3736.c @@ -139,7 +139,7 @@ void is31fl3736_init(uint8_t addr) { // Set up the mode and other settings, clear the PWM registers, // then disable software shutdown. - is31fl3736_select_page(addr, IS31FL3736_REG_LED_CONTROL); + is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL); // Turn off all LEDs. for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3741-simple.c b/drivers/led/issi/is31fl3741-simple.c index db245af4da..3e9b3d8b25 100644 --- a/drivers/led/issi/is31fl3741-simple.c +++ b/drivers/led/issi/is31fl3741-simple.c @@ -23,6 +23,7 @@ #include "wait.h" #define IS31FL3741_PWM_REGISTER_COUNT 351 +#define IS31FL3741_SCALING_REGISTER_COUNT 351 #ifndef IS31FL3741_I2C_TIMEOUT # define IS31FL3741_I2C_TIMEOUT 100 @@ -64,7 +65,7 @@ uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false}; bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false}; -uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; +uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_SCALING_REGISTER_COUNT]; void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) { i2c_transfer_buffer[0] = reg; diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c index 0575f31254..08b86f9171 100644 --- a/drivers/led/issi/is31fl3741.c +++ b/drivers/led/issi/is31fl3741.c @@ -23,6 +23,7 @@ #include "wait.h" #define IS31FL3741_PWM_REGISTER_COUNT 351 +#define IS31FL3741_SCALING_REGISTER_COUNT 351 #ifndef IS31FL3741_I2C_TIMEOUT # define IS31FL3741_I2C_TIMEOUT 100 @@ -64,7 +65,7 @@ uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false}; bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false}; -uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; +uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_SCALING_REGISTER_COUNT]; void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) { i2c_transfer_buffer[0] = reg; diff --git a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c index e3b8d71a90..55af271f3b 100644 --- a/keyboards/4pplet/perk60_iso/rev_a/rev_a.c +++ b/keyboards/4pplet/perk60_iso/rev_a/rev_a.c @@ -17,7 +17,7 @@ along with this program. If not, see . #include "rev_a.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_2, J_2, L_2 }, //D402 { 0, K_3, J_3, L_3 }, //D403 { 0, K_4, J_4, L_4 }, //D404 diff --git a/keyboards/abko/ak84bt/ak84bt.c b/keyboards/abko/ak84bt/ak84bt.c index a51f1f458f..86f28a1bb2 100644 --- a/keyboards/abko/ak84bt/ak84bt.c +++ b/keyboards/abko/ak84bt/ak84bt.c @@ -16,7 +16,7 @@ #include QMK_KEYBOARD_H -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, G_1, I_1, H_1}, {0, G_3, I_3, H_3}, {0, G_4, I_4, H_4}, diff --git a/keyboards/acheron/apollo/87h/gamma/gamma.c b/keyboards/acheron/apollo/87h/gamma/gamma.c index 19e9106287..43802bb4ad 100644 --- a/keyboards/acheron/apollo/87h/gamma/gamma.c +++ b/keyboards/acheron/apollo/87h/gamma/gamma.c @@ -18,7 +18,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/akko/5087/5087.c b/keyboards/akko/5087/5087.c index 4d6cf94900..6374adc301 100644 --- a/keyboards/akko/5087/5087.c +++ b/keyboards/akko/5087/5087.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const ckled2001_led PROGMEM g_ckled2001_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/akko/5108/5108.c b/keyboards/akko/5108/5108.c index 91f53e1e55..0fd71834d1 100644 --- a/keyboards/akko/5108/5108.c +++ b/keyboards/akko/5108/5108.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/akko/acr87/acr87.c b/keyboards/akko/acr87/acr87.c index 7ee9ec6470..3e7f603474 100644 --- a/keyboards/akko/acr87/acr87.c +++ b/keyboards/akko/acr87/acr87.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/akko/top40/top40.c b/keyboards/akko/top40/top40.c index 028e4bdd05..2d75b77497 100644 --- a/keyboards/akko/top40/top40.c +++ b/keyboards/akko/top40/top40.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/axolstudio/yeti/hotswap/hotswap.c b/keyboards/axolstudio/yeti/hotswap/hotswap.c index 527bec17ee..dd65a16a80 100644 --- a/keyboards/axolstudio/yeti/hotswap/hotswap.c +++ b/keyboards/axolstudio/yeti/hotswap/hotswap.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_1, A_1, C_1 }, { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/canary/canary60rgb/canary60rgb.c b/keyboards/canary/canary60rgb/canary60rgb.c index 065268c531..55569f5049 100644 --- a/keyboards/canary/canary60rgb/canary60rgb.c +++ b/keyboards/canary/canary60rgb/canary60rgb.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, J_14, K_14, L_14 }, { 0, J_13, K_13, L_13 }, { 0, J_12, K_12, L_12 }, diff --git a/keyboards/chosfox/cf81/cf81.c b/keyboards/chosfox/cf81/cf81.c index ad7ec9bc55..b864a56bc6 100644 --- a/keyboards/chosfox/cf81/cf81.c +++ b/keyboards/chosfox/cf81/cf81.c @@ -18,7 +18,7 @@ // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/clueboard/66_hotswap/gen1/gen1.c b/keyboards/clueboard/66_hotswap/gen1/gen1.c index 7af0b964da..e13a05de05 100644 --- a/keyboards/clueboard/66_hotswap/gen1/gen1.c +++ b/keyboards/clueboard/66_hotswap/gen1/gen1.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef LED_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | LED address diff --git a/keyboards/darkproject/kd83a_bfg_edition/kd83a_bfg_edition.c b/keyboards/darkproject/kd83a_bfg_edition/kd83a_bfg_edition.c index e78de78bf8..550520e790 100644 --- a/keyboards/darkproject/kd83a_bfg_edition/kd83a_bfg_edition.c +++ b/keyboards/darkproject/kd83a_bfg_edition/kd83a_bfg_edition.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/darkproject/kd87a_bfg_edition/kd87a_bfg_edition.c b/keyboards/darkproject/kd87a_bfg_edition/kd87a_bfg_edition.c index 0ce0799e14..22d10488d2 100644 --- a/keyboards/darkproject/kd87a_bfg_edition/kd87a_bfg_edition.c +++ b/keyboards/darkproject/kd87a_bfg_edition/kd87a_bfg_edition.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/dp60/dp60.c b/keyboards/dp60/dp60.c index 588acd591d..5f23b35542 100644 --- a/keyboards/dp60/dp60.c +++ b/keyboards/dp60/dp60.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/drop/alt/v2/v2.c b/keyboards/drop/alt/v2/v2.c index fcdad7f2df..d3bb78fd12 100644 --- a/keyboards/drop/alt/v2/v2.c +++ b/keyboards/drop/alt/v2/v2.c @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 1, B_2, A_2, C_2 }, { 1, E_3, D_3, F_3 }, { 1, E_4, D_4, F_4 }, diff --git a/keyboards/drop/cstm65/cstm65.c b/keyboards/drop/cstm65/cstm65.c index ccb86f1d3e..1c8e6bb0bb 100644 --- a/keyboards/drop/cstm65/cstm65.c +++ b/keyboards/drop/cstm65/cstm65.c @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_1, A_1, C_1 }, { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/drop/cstm80/cstm80.c b/keyboards/drop/cstm80/cstm80.c index 75e7049c20..e99c7801e5 100644 --- a/keyboards/drop/cstm80/cstm80.c +++ b/keyboards/drop/cstm80/cstm80.c @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, E_1, D_1, F_1 }, { 0, E_2, D_2, F_2 }, { 0, E_3, D_3, F_3 }, diff --git a/keyboards/drop/ctrl/v2/v2.c b/keyboards/drop/ctrl/v2/v2.c index 6b565efbe1..0c1d8210c6 100644 --- a/keyboards/drop/ctrl/v2/v2.c +++ b/keyboards/drop/ctrl/v2/v2.c @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 1, B_2, A_2, C_2 }, { 1, E_3, D_3, F_3 }, { 1, E_4, D_4, F_4 }, diff --git a/keyboards/drop/sense75/sense75.c b/keyboards/drop/sense75/sense75.c index 057e310748..bbe5a3aa47 100644 --- a/keyboards/drop/sense75/sense75.c +++ b/keyboards/drop/sense75/sense75.c @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { // top underglow sd2-sd17 { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/drop/shift/v2/v2.c b/keyboards/drop/shift/v2/v2.c index 8565a0cb26..cbfbeda429 100644 --- a/keyboards/drop/shift/v2/v2.c +++ b/keyboards/drop/shift/v2/v2.c @@ -4,7 +4,7 @@ # include "host.h" # include "rgb_matrix.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_1, J_1, L_1 },// LED1 { 0, K_2, J_2, L_2 }, { 0, K_3, J_3, L_3 }, diff --git a/keyboards/durgod/dgk6x/galaxy/galaxy.c b/keyboards/durgod/dgk6x/galaxy/galaxy.c index aa903c3a0a..cd1f10c4f9 100644 --- a/keyboards/durgod/dgk6x/galaxy/galaxy.c +++ b/keyboards/durgod/dgk6x/galaxy/galaxy.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c b/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c index 2d1907f4db..225a7c13dd 100644 --- a/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c +++ b/keyboards/durgod/dgk6x/hades_ansi/hades_ansi.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/durgod/dgk6x/hades_iso/hades_iso.c b/keyboards/durgod/dgk6x/hades_iso/hades_iso.c index 42f43645f5..6dd732c454 100644 --- a/keyboards/durgod/dgk6x/hades_iso/hades_iso.c +++ b/keyboards/durgod/dgk6x/hades_iso/hades_iso.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/durgod/dgk6x/venus/venus.c b/keyboards/durgod/dgk6x/venus/venus.c index d48e95fb21..9de5f2e63d 100644 --- a/keyboards/durgod/dgk6x/venus/venus.c +++ b/keyboards/durgod/dgk6x/venus/venus.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/dztech/dz60rgb/dz60rgb.c b/keyboards/dztech/dz60rgb/dz60rgb.c index 826e3502eb..593b2d96ff 100644 --- a/keyboards/dztech/dz60rgb/dz60rgb.c +++ b/keyboards/dztech/dz60rgb/dz60rgb.c @@ -1,7 +1,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_14, J_14, L_14 }, { 0, K_13, J_13, L_13 }, { 0, K_12, J_12, L_12 }, diff --git a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c index 5c06922028..a4cfd2551e 100644 --- a/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c +++ b/keyboards/dztech/dz60rgb_ansi/dz60rgb_ansi.c @@ -1,7 +1,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_14, J_14, L_14 }, { 0, K_13, J_13, L_13 }, { 0, K_12, J_12, L_12 }, diff --git a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c index d6506389a6..4326b6f9af 100644 --- a/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c +++ b/keyboards/dztech/dz60rgb_wkl/dz60rgb_wkl.c @@ -1,7 +1,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, H_15, G_15, I_15 }, { 0, K_14, J_14, L_14 }, { 0, K_13, J_13, L_13 }, diff --git a/keyboards/dztech/dz64rgb/dz64rgb.c b/keyboards/dztech/dz64rgb/dz64rgb.c index 561a9727e5..09a535ab47 100644 --- a/keyboards/dztech/dz64rgb/dz64rgb.c +++ b/keyboards/dztech/dz64rgb/dz64rgb.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_14, J_14, L_14 }, { 0, K_13, J_13, L_13 }, { 0, K_12, J_12, L_12 }, diff --git a/keyboards/dztech/dz65rgb/v1/v1.c b/keyboards/dztech/dz65rgb/v1/v1.c index a0a355e120..6e8cf96e4c 100644 --- a/keyboards/dztech/dz65rgb/v1/v1.c +++ b/keyboards/dztech/dz65rgb/v1/v1.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { { 0, C8_8, C7_8, C6_8 }, { 0, C9_8, C7_7, C6_7 }, { 0, C9_7, C8_7, C6_6 }, diff --git a/keyboards/dztech/dz65rgb/v2/v2.c b/keyboards/dztech/dz65rgb/v2/v2.c index 7754bc4ee5..a9f7fc104f 100644 --- a/keyboards/dztech/dz65rgb/v2/v2.c +++ b/keyboards/dztech/dz65rgb/v2/v2.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { { 0, C8_8, C7_8, C6_8 }, { 0, C9_8, C7_7, C6_7 }, { 0, C9_7, C8_7, C6_6 }, diff --git a/keyboards/dztech/dz65rgb/v3/v3.c b/keyboards/dztech/dz65rgb/v3/v3.c index 0fb8ba49de..2055e6e3c2 100755 --- a/keyboards/dztech/dz65rgb/v3/v3.c +++ b/keyboards/dztech/dz65rgb/v3/v3.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS21_SW1, CS20_SW1, CS19_SW1}, {0, CS21_SW2, CS20_SW2, CS19_SW2}, {0, CS21_SW3, CS20_SW3, CS19_SW3}, diff --git a/keyboards/dztech/tofu/ii/v1/v1.c b/keyboards/dztech/tofu/ii/v1/v1.c index 8baf0235bd..dd18f86bf8 100644 --- a/keyboards/dztech/tofu/ii/v1/v1.c +++ b/keyboards/dztech/tofu/ii/v1/v1.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { { 1, K_12, J_12, L_12 }, { 1, K_11, J_11, L_11 }, { 1, K_10, J_10, L_10 }, diff --git a/keyboards/dztech/tofu/jr/v1/v1.c b/keyboards/dztech/tofu/jr/v1/v1.c index 474134cb5e..46b16317ac 100644 --- a/keyboards/dztech/tofu/jr/v1/v1.c +++ b/keyboards/dztech/tofu/jr/v1/v1.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { { 1, K_12, J_12, L_12 }, { 1, K_11, J_11, L_11 }, { 1, K_10, J_10, L_10 }, diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c index 455d294ef5..f088036c4a 100644 --- a/keyboards/ergodox_ez/ergodox_ez.c +++ b/keyboards/ergodox_ez/ergodox_ez.c @@ -243,7 +243,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { #ifdef RGB_MATRIX_ENABLE // clang-format off -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* driver * | R location * | | G location diff --git a/keyboards/evyd13/atom47/rev5/rev5.c b/keyboards/evyd13/atom47/rev5/rev5.c index 7bf2a961ff..6dad846614 100644 --- a/keyboards/evyd13/atom47/rev5/rev5.c +++ b/keyboards/evyd13/atom47/rev5/rev5.c @@ -17,7 +17,7 @@ along with this program. If not, see . #include "quantum.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/exclusive/e6_rgb/e6_rgb.c b/keyboards/exclusive/e6_rgb/e6_rgb.c index f34f40cc1f..24676e8910 100644 --- a/keyboards/exclusive/e6_rgb/e6_rgb.c +++ b/keyboards/exclusive/e6_rgb/e6_rgb.c @@ -7,7 +7,7 @@ void matrix_init_kb(void) { matrix_init_user(); } -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/feker/ik75/ik75.c b/keyboards/feker/ik75/ik75.c index 826afab01b..e6424491bd 100644 --- a/keyboards/feker/ik75/ik75.c +++ b/keyboards/feker/ik75/ik75.c @@ -18,7 +18,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | G location diff --git a/keyboards/ferris/0_2/bling/bling.c b/keyboards/ferris/0_2/bling/bling.c index 07f58149cc..69fbe411eb 100644 --- a/keyboards/ferris/0_2/bling/bling.c +++ b/keyboards/ferris/0_2/bling/bling.c @@ -27,7 +27,7 @@ along with this program. If not, see . | | 4 | | || | | 4 | | | 6 | | | 2 || 2 | | | 5 | */ -const is31fl3731_led_t g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/flashquark/horizon_z/horizon_z.c b/keyboards/flashquark/horizon_z/horizon_z.c index a9faa5a943..5ab6e22434 100755 --- a/keyboards/flashquark/horizon_z/horizon_z.c +++ b/keyboards/flashquark/horizon_z/horizon_z.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, B_1, A_1, C_1}, {0, B_2, A_2, C_2}, {0, B_3, A_3, C_3}, diff --git a/keyboards/frooastboard/walnut/walnut.c b/keyboards/frooastboard/walnut/walnut.c index 48d1677f7a..e3205e07f3 100644 --- a/keyboards/frooastboard/walnut/walnut.c +++ b/keyboards/frooastboard/walnut/walnut.c @@ -5,7 +5,7 @@ #if defined(RGB_MATRIX_ENABLE) -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/geekboards/tester/tester.c b/keyboards/geekboards/tester/tester.c index 187d887d58..11d2eb4db2 100644 --- a/keyboards/geekboards/tester/tester.c +++ b/keyboards/geekboards/tester/tester.c @@ -1,6 +1,6 @@ #include "quantum.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/gizmo_engineering/gk6/gk6.c b/keyboards/gizmo_engineering/gk6/gk6.c index 18883727b8..fe85ecc235 100755 --- a/keyboards/gizmo_engineering/gk6/gk6.c +++ b/keyboards/gizmo_engineering/gk6/gk6.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_8, C2_8, C3_8}, //0 led1 {0, C1_7, C2_7, C3_7}, //1 led2 {0, C1_6, C2_6, C3_6}, //2 led3 diff --git a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c index 774006d529..7c43f8d5ec 100644 --- a/keyboards/gmmk/gmmk2/p65/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p65/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p65/iso/iso.c b/keyboards/gmmk/gmmk2/p65/iso/iso.c index 80c0dc2e0d..9a591cd4ef 100644 --- a/keyboards/gmmk/gmmk2/p65/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p65/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c index bc05ab6301..83dcad728a 100644 --- a/keyboards/gmmk/gmmk2/p96/ansi/ansi.c +++ b/keyboards/gmmk/gmmk2/p96/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/gmmk/gmmk2/p96/iso/iso.c b/keyboards/gmmk/gmmk2/p96/iso/iso.c index f6b3528cb4..d412215fc4 100644 --- a/keyboards/gmmk/gmmk2/p96/iso/iso.c +++ b/keyboards/gmmk/gmmk2/p96/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/gmmk/numpad/numpad.c b/keyboards/gmmk/numpad/numpad.c index 5cdb34c7bd..557137e8f1 100644 --- a/keyboards/gmmk/numpad/numpad.c +++ b/keyboards/gmmk/numpad/numpad.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/gmmk/pro/rev1/ansi/ansi.c b/keyboards/gmmk/pro/rev1/ansi/ansi.c index a06594cb88..ff6382625a 100644 --- a/keyboards/gmmk/pro/rev1/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev1/ansi/ansi.c @@ -136,7 +136,7 @@ led_config_t g_led_config = {{ 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev1/iso/iso.c b/keyboards/gmmk/pro/rev1/iso/iso.c index 9744447587..68165dd27f 100644 --- a/keyboards/gmmk/pro/rev1/iso/iso.c +++ b/keyboards/gmmk/pro/rev1/iso/iso.c @@ -137,7 +137,7 @@ led_config_t g_led_config = {{ 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev2/ansi/ansi.c b/keyboards/gmmk/pro/rev2/ansi/ansi.c index 322e94c938..c592e3cdae 100644 --- a/keyboards/gmmk/pro/rev2/ansi/ansi.c +++ b/keyboards/gmmk/pro/rev2/ansi/ansi.c @@ -136,7 +136,7 @@ led_config_t g_led_config = {{ 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/gmmk/pro/rev2/iso/iso.c b/keyboards/gmmk/pro/rev2/iso/iso.c index 3a5b21c014..969ce8bf2e 100644 --- a/keyboards/gmmk/pro/rev2/iso/iso.c +++ b/keyboards/gmmk/pro/rev2/iso/iso.c @@ -137,7 +137,7 @@ led_config_t g_led_config = {{ 2, 4, 2, 2, 4, 4, 2, 2, 4, 2, 2, 4, 4, 2, 2, 4, 4, 2, 2, 4, 4, 4, 4, 4 }}; -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { {0, CS1_SW1, CS2_SW1, CS3_SW1}, // 0, ESC, k13 {0, CS4_SW1, CS5_SW1, CS6_SW1}, // 1, ~, k16 {0, CS7_SW1, CS8_SW1, CS9_SW1}, // 2, Tab, k11 diff --git a/keyboards/handwired/orbweaver/orbweaver.c b/keyboards/handwired/orbweaver/orbweaver.c index 63778ea52b..a24db9aedd 100644 --- a/keyboards/handwired/orbweaver/orbweaver.c +++ b/keyboards/handwired/orbweaver/orbweaver.c @@ -22,7 +22,7 @@ #include "rgb_matrix.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/hs60/v1/v1.c b/keyboards/hs60/v1/v1.c index 50f6215a02..f68bcbdf9e 100644 --- a/keyboards/hs60/v1/v1.c +++ b/keyboards/hs60/v1/v1.c @@ -91,7 +91,7 @@ void raw_hid_receive( uint8_t *data, uint8_t length ) #ifdef HS60_ANSI -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location @@ -199,7 +199,7 @@ led_config_t g_led_config = { { #else -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/ilumkb/simpler61/simpler61.c b/keyboards/ilumkb/simpler61/simpler61.c index f29f05defe..cb35e55428 100644 --- a/keyboards/ilumkb/simpler61/simpler61.c +++ b/keyboards/ilumkb/simpler61/simpler61.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS3_SW1, CS2_SW1, CS1_SW1}, {0, CS3_SW2, CS2_SW2, CS1_SW2}, {0, CS3_SW3, CS2_SW3, CS1_SW3}, diff --git a/keyboards/ilumkb/simpler64/simpler64.c b/keyboards/ilumkb/simpler64/simpler64.c index a562fa5c8b..173423cf7e 100644 --- a/keyboards/ilumkb/simpler64/simpler64.c +++ b/keyboards/ilumkb/simpler64/simpler64.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS3_SW1, CS2_SW1, CS1_SW1}, {0, CS3_SW2, CS2_SW2, CS1_SW2}, {0, CS3_SW3, CS2_SW3, CS1_SW3}, diff --git a/keyboards/inett_studio/sqx/hotswap/hotswap.c b/keyboards/inett_studio/sqx/hotswap/hotswap.c index 4d77a4829e..079889e727 100644 --- a/keyboards/inett_studio/sqx/hotswap/hotswap.c +++ b/keyboards/inett_studio/sqx/hotswap/hotswap.c @@ -20,7 +20,7 @@ #include "hotswap.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/inett_studio/sqx/universal/universal.c b/keyboards/inett_studio/sqx/universal/universal.c index 3ba42e9995..519df57505 100644 --- a/keyboards/inett_studio/sqx/universal/universal.c +++ b/keyboards/inett_studio/sqx/universal/universal.c @@ -20,7 +20,7 @@ #include "universal.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/inland/kb83/kb83.c b/keyboards/inland/kb83/kb83.c index 49604b93be..427a9a5e2d 100644 --- a/keyboards/inland/kb83/kb83.c +++ b/keyboards/inland/kb83/kb83.c @@ -18,7 +18,7 @@ // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/inland/mk47/mk47.c b/keyboards/inland/mk47/mk47.c index 5a34527c6c..959330e6f8 100644 --- a/keyboards/inland/mk47/mk47.c +++ b/keyboards/inland/mk47/mk47.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/inland/v83p/v83p.c b/keyboards/inland/v83p/v83p.c index 3cb9c06cb0..d044003615 100644 --- a/keyboards/inland/v83p/v83p.c +++ b/keyboards/inland/v83p/v83p.c @@ -5,7 +5,7 @@ // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/input_club/ergodox_infinity/ergodox_infinity.c b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c index 8f245d9fa3..80d3681437 100644 --- a/keyboards/input_club/ergodox_infinity/ergodox_infinity.c +++ b/keyboards/input_club/ergodox_infinity/ergodox_infinity.c @@ -171,7 +171,7 @@ const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { #endif #ifdef LED_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { // The numbers in the comments are the led numbers DXX on the PCB /* Refer to IS31 manual for these locations * driver diff --git a/keyboards/input_club/infinity60/led/led.c b/keyboards/input_club/infinity60/led/led.c index a6a63e202d..e54f30d7b4 100644 --- a/keyboards/input_club/infinity60/led/led.c +++ b/keyboards/input_club/infinity60/led/led.c @@ -4,7 +4,7 @@ #include "quantum.h" #ifdef LED_MATRIX_ENABLE -const is31fl3731_led_t g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | LED address diff --git a/keyboards/input_club/whitefox/whitefox.c b/keyboards/input_club/whitefox/whitefox.c index 63c6a49240..07741365c3 100644 --- a/keyboards/input_club/whitefox/whitefox.c +++ b/keyboards/input_club/whitefox/whitefox.c @@ -18,7 +18,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef LED_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { // The numbers in the comments are the led numbers DXX on the PCB /* Refer to IS31 manual for these locations * driver diff --git a/keyboards/jukaie/jk01/jk01.c b/keyboards/jukaie/jk01/jk01.c index 8f69419476..96db3b804e 100644 --- a/keyboards/jukaie/jk01/jk01.c +++ b/keyboards/jukaie/jk01/jk01.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/kbdcraft/adam64/adam64.c b/keyboards/kbdcraft/adam64/adam64.c index b0712aec39..3f1565c2f3 100644 --- a/keyboards/kbdcraft/adam64/adam64.c +++ b/keyboards/kbdcraft/adam64/adam64.c @@ -19,7 +19,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/kbdfans/bella/rgb/rgb.c b/keyboards/kbdfans/bella/rgb/rgb.c index 8bdc1d8fdf..c666f9198f 100644 --- a/keyboards/kbdfans/bella/rgb/rgb.c +++ b/keyboards/kbdfans/bella/rgb/rgb.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS18_SW1, CS17_SW1, CS16_SW1}, /* RGB6 */ {0, CS18_SW3, CS17_SW3, CS16_SW3}, /* RGB32 */ {0, CS18_SW4, CS17_SW4, CS16_SW4}, /* RGB45 */ diff --git a/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c b/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c index e36b811bbc..b4fc00765f 100644 --- a/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c +++ b/keyboards/kbdfans/bella/rgb_iso/rgb_iso.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS18_SW1, CS17_SW1, CS16_SW1}, /* RGB6 */ {0, CS18_SW3, CS17_SW3, CS16_SW3}, /* RGB32 */ {0, CS18_SW4, CS17_SW4, CS16_SW4}, /* RGB45 */ diff --git a/keyboards/kbdfans/boop65/rgb/rgb.c b/keyboards/kbdfans/boop65/rgb/rgb.c index f2b5858966..b8145382c7 100644 --- a/keyboards/kbdfans/boop65/rgb/rgb.c +++ b/keyboards/kbdfans/boop65/rgb/rgb.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS21_SW1, CS20_SW1, CS19_SW1}, {0, CS21_SW2, CS20_SW2, CS19_SW2}, {0, CS21_SW3, CS20_SW3, CS19_SW3}, diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c b/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c index c70622dd56..210be85d3f 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/v1.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C8_8, C7_8, C6_8}, // LA17 {0, C9_8, C7_7, C6_7}, // LA16 diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c b/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c index 7de8060d7a..50958017a2 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/v2.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C8_8, C7_8, C6_8}, // LA17 {0, C9_8, C7_7, C6_7}, // LA16 diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c b/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c index 7347a365bc..5910d0cf7b 100755 --- a/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c +++ b/keyboards/kbdfans/kbd67/mkiirgb/v3/v3.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS21_SW1, CS20_SW1, CS19_SW1}, {0, CS21_SW2, CS20_SW2, CS19_SW2}, {0, CS21_SW3, CS20_SW3, CS19_SW3}, diff --git a/keyboards/kbdfans/kbdmini/kbdmini.c b/keyboards/kbdfans/kbdmini/kbdmini.c index d46283b973..31b2e1a256 100644 --- a/keyboards/kbdfans/kbdmini/kbdmini.c +++ b/keyboards/kbdfans/kbdmini/kbdmini.c @@ -1,6 +1,6 @@ #include "quantum.h" -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_9, A_9, C_9 }, //LA33 { 0, B_10, A_10, C_10 }, //LA37 { 0, B_11, A_11, C_11 }, //LA41 diff --git a/keyboards/kbdfans/maja/maja.c b/keyboards/kbdfans/maja/maja.c index d30d327113..cc073930bc 100755 --- a/keyboards/kbdfans/maja/maja.c +++ b/keyboards/kbdfans/maja/maja.c @@ -1,6 +1,6 @@ #include "quantum.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C2_1, C3_1, C4_1}, // LA0 {0, C1_1, C3_2, C4_2}, // LA1 {0, C1_2, C2_2, C4_3}, // LA2 diff --git a/keyboards/keychron/c1_pro/ansi/rgb/rgb.c b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c index c04e82a44e..38d4a96d3e 100644 --- a/keyboards/keychron/c1_pro/ansi/rgb/rgb.c +++ b/keyboards/keychron/c1_pro/ansi/rgb/rgb.c @@ -18,7 +18,7 @@ // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/c1_pro/ansi/white/white.c b/keyboards/keychron/c1_pro/ansi/white/white.c index 15f291e80c..d7b75e0dd6 100644 --- a/keyboards/keychron/c1_pro/ansi/white/white.c +++ b/keyboards/keychron/c1_pro/ansi/white/white.c @@ -18,7 +18,7 @@ // clang-format off #ifdef LED_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | LED address diff --git a/keyboards/keychron/c2_pro/ansi/rgb/rgb.c b/keyboards/keychron/c2_pro/ansi/rgb/rgb.c index d42c2de39e..6fce51417c 100644 --- a/keyboards/keychron/c2_pro/ansi/rgb/rgb.c +++ b/keyboards/keychron/c2_pro/ansi/rgb/rgb.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/c2_pro/ansi/white/white.c b/keyboards/keychron/c2_pro/ansi/white/white.c index 9c75e73c6d..4bad7187cc 100644 --- a/keyboards/keychron/c2_pro/ansi/white/white.c +++ b/keyboards/keychron/c2_pro/ansi/white/white.c @@ -18,7 +18,7 @@ // clang-format off #ifdef LED_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | LED address diff --git a/keyboards/keychron/q0/base/base.c b/keyboards/keychron/q0/base/base.c index 05803234c0..b977471730 100644 --- a/keyboards/keychron/q0/base/base.c +++ b/keyboards/keychron/q0/base/base.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q0/plus/plus.c b/keyboards/keychron/q0/plus/plus.c index 0466e1a584..4af7a4572f 100644 --- a/keyboards/keychron/q0/plus/plus.c +++ b/keyboards/keychron/q0/plus/plus.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c index a9df1609e0..06947e9d18 100644 --- a/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q10/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q10/iso_encoder/iso_encoder.c b/keyboards/keychron/q10/iso_encoder/iso_encoder.c index fbe4bca637..2aebd936ec 100644 --- a/keyboards/keychron/q10/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q10/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c index f7acae7add..24b9836b2e 100755 --- a/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q11/ansi_encoder/ansi_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q11/iso_encoder/iso_encoder.c b/keyboards/keychron/q11/iso_encoder/iso_encoder.c index a2db569710..feedfd17c3 100755 --- a/keyboards/keychron/q11/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q11/iso_encoder/iso_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c index 350da52661..e2acddd894 100644 --- a/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q12/ansi_encoder/ansi_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q12/iso_encoder/iso_encoder.c b/keyboards/keychron/q12/iso_encoder/iso_encoder.c index 37d9db10b4..f05a35dad8 100644 --- a/keyboards/keychron/q12/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q12/iso_encoder/iso_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v1/ansi/ansi.c b/keyboards/keychron/q1v1/ansi/ansi.c index 5f74267bf4..bc352a1964 100644 --- a/keyboards/keychron/q1v1/ansi/ansi.c +++ b/keyboards/keychron/q1v1/ansi/ansi.c @@ -26,7 +26,7 @@ const matrix_row_t matrix_mask[] = { }; #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v1/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q1v1/ansi_encoder/ansi_encoder.c index c4fc884bc2..387f3e0b32 100644 --- a/keyboards/keychron/q1v1/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q1v1/ansi_encoder/ansi_encoder.c @@ -26,7 +26,7 @@ const matrix_row_t matrix_mask[] = { }; #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v1/iso/iso.c b/keyboards/keychron/q1v1/iso/iso.c index 874f5c8539..ad3152adcd 100644 --- a/keyboards/keychron/q1v1/iso/iso.c +++ b/keyboards/keychron/q1v1/iso/iso.c @@ -26,7 +26,7 @@ const matrix_row_t matrix_mask[] = { }; #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v1/iso_encoder/iso_encoder.c b/keyboards/keychron/q1v1/iso_encoder/iso_encoder.c index 4a7496ed29..19122aa18d 100644 --- a/keyboards/keychron/q1v1/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q1v1/iso_encoder/iso_encoder.c @@ -27,7 +27,7 @@ const matrix_row_t matrix_mask[] = { #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/ansi/ansi.c b/keyboards/keychron/q1v2/ansi/ansi.c index 3b80c9d5c4..a25b597b03 100644 --- a/keyboards/keychron/q1v2/ansi/ansi.c +++ b/keyboards/keychron/q1v2/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q1v2/ansi_encoder/ansi_encoder.c index 3b80c9d5c4..a25b597b03 100644 --- a/keyboards/keychron/q1v2/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q1v2/ansi_encoder/ansi_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/iso/iso.c b/keyboards/keychron/q1v2/iso/iso.c index d879e55083..53cdea506f 100644 --- a/keyboards/keychron/q1v2/iso/iso.c +++ b/keyboards/keychron/q1v2/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/iso_encoder/iso_encoder.c b/keyboards/keychron/q1v2/iso_encoder/iso_encoder.c index d879e55083..53cdea506f 100644 --- a/keyboards/keychron/q1v2/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q1v2/iso_encoder/iso_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/jis/jis.c b/keyboards/keychron/q1v2/jis/jis.c index e8c0112649..d43d64dd82 100644 --- a/keyboards/keychron/q1v2/jis/jis.c +++ b/keyboards/keychron/q1v2/jis/jis.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q1v2/jis_encoder/jis_encoder.c b/keyboards/keychron/q1v2/jis_encoder/jis_encoder.c index e8c0112649..d43d64dd82 100644 --- a/keyboards/keychron/q1v2/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/q1v2/jis_encoder/jis_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/ansi/ansi.c b/keyboards/keychron/q2/ansi/ansi.c index d0ff0a1869..64abe016a6 100644 --- a/keyboards/keychron/q2/ansi/ansi.c +++ b/keyboards/keychron/q2/ansi/ansi.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q2/ansi_encoder/ansi_encoder.c index d0ff0a1869..64abe016a6 100644 --- a/keyboards/keychron/q2/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q2/ansi_encoder/ansi_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/iso/iso.c b/keyboards/keychron/q2/iso/iso.c index a54c90bc4b..7da02c4a79 100644 --- a/keyboards/keychron/q2/iso/iso.c +++ b/keyboards/keychron/q2/iso/iso.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/iso_encoder/iso_encoder.c b/keyboards/keychron/q2/iso_encoder/iso_encoder.c index a54c90bc4b..7da02c4a79 100644 --- a/keyboards/keychron/q2/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q2/iso_encoder/iso_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/jis/jis.c b/keyboards/keychron/q2/jis/jis.c index d877e225d9..b8d36be505 100644 --- a/keyboards/keychron/q2/jis/jis.c +++ b/keyboards/keychron/q2/jis/jis.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q2/jis_encoder/jis_encoder.c b/keyboards/keychron/q2/jis_encoder/jis_encoder.c index d877e225d9..b8d36be505 100644 --- a/keyboards/keychron/q2/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/q2/jis_encoder/jis_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/ansi/ansi.c b/keyboards/keychron/q3/ansi/ansi.c index 8327ee430b..a2793b040c 100644 --- a/keyboards/keychron/q3/ansi/ansi.c +++ b/keyboards/keychron/q3/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q3/ansi_encoder/ansi_encoder.c index a386e87a01..3b88a83d38 100644 --- a/keyboards/keychron/q3/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q3/ansi_encoder/ansi_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/iso/iso.c b/keyboards/keychron/q3/iso/iso.c index 725af67006..37f418e66b 100644 --- a/keyboards/keychron/q3/iso/iso.c +++ b/keyboards/keychron/q3/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/iso_encoder/iso_encoder.c b/keyboards/keychron/q3/iso_encoder/iso_encoder.c index 725af67006..37f418e66b 100644 --- a/keyboards/keychron/q3/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q3/iso_encoder/iso_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/jis/jis.c b/keyboards/keychron/q3/jis/jis.c index 4b19eca52f..0fc70b1af3 100644 --- a/keyboards/keychron/q3/jis/jis.c +++ b/keyboards/keychron/q3/jis/jis.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q3/jis_encoder/jis_encoder.c b/keyboards/keychron/q3/jis_encoder/jis_encoder.c index 8770f9d33c..df4a6a467b 100644 --- a/keyboards/keychron/q3/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/q3/jis_encoder/jis_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q4/ansi/v1/v1.c b/keyboards/keychron/q4/ansi/v1/v1.c index 6c1fecefec..f9e2946bb3 100644 --- a/keyboards/keychron/q4/ansi/v1/v1.c +++ b/keyboards/keychron/q4/ansi/v1/v1.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q4/ansi/v2/v2.c b/keyboards/keychron/q4/ansi/v2/v2.c index 468a87af41..f7564c02a1 100644 --- a/keyboards/keychron/q4/ansi/v2/v2.c +++ b/keyboards/keychron/q4/ansi/v2/v2.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q4/iso/iso.c b/keyboards/keychron/q4/iso/iso.c index a808c3ad74..c30f06c6bd 100644 --- a/keyboards/keychron/q4/iso/iso.c +++ b/keyboards/keychron/q4/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q5/ansi/ansi.c b/keyboards/keychron/q5/ansi/ansi.c index 8c80245fbc..26cebc996e 100644 --- a/keyboards/keychron/q5/ansi/ansi.c +++ b/keyboards/keychron/q5/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q5/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q5/ansi_encoder/ansi_encoder.c index d5f67f1297..90a9310c64 100644 --- a/keyboards/keychron/q5/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q5/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q5/iso/iso.c b/keyboards/keychron/q5/iso/iso.c index 8a7cb863ec..48fdcb7363 100644 --- a/keyboards/keychron/q5/iso/iso.c +++ b/keyboards/keychron/q5/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q5/iso_encoder/iso_encoder.c b/keyboards/keychron/q5/iso_encoder/iso_encoder.c index 009e8043db..65b5c40c5a 100644 --- a/keyboards/keychron/q5/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q5/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q6/ansi/ansi.c b/keyboards/keychron/q6/ansi/ansi.c index 80eaad02b3..b9f249e281 100644 --- a/keyboards/keychron/q6/ansi/ansi.c +++ b/keyboards/keychron/q6/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c index 9c88533620..4064329099 100644 --- a/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q6/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q6/iso/iso.c b/keyboards/keychron/q6/iso/iso.c index d2aa010c05..8cdee4cf3b 100644 --- a/keyboards/keychron/q6/iso/iso.c +++ b/keyboards/keychron/q6/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q6/iso_encoder/iso_encoder.c b/keyboards/keychron/q6/iso_encoder/iso_encoder.c index 66e066b839..5ff71379c9 100644 --- a/keyboards/keychron/q6/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q6/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q60/ansi/ansi.c b/keyboards/keychron/q60/ansi/ansi.c index ac72737146..f02d45b42a 100644 --- a/keyboards/keychron/q60/ansi/ansi.c +++ b/keyboards/keychron/q60/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c index 8e9b37b806..3ed44a7387 100644 --- a/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q65/ansi_encoder/ansi_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q7/ansi/ansi.c b/keyboards/keychron/q7/ansi/ansi.c index 190c110a77..dfb8cd1295 100644 --- a/keyboards/keychron/q7/ansi/ansi.c +++ b/keyboards/keychron/q7/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q7/iso/iso.c b/keyboards/keychron/q7/iso/iso.c index 13354b9f0b..7564099156 100644 --- a/keyboards/keychron/q7/iso/iso.c +++ b/keyboards/keychron/q7/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q8/ansi/ansi.c b/keyboards/keychron/q8/ansi/ansi.c index 12cd9f9378..fbb6813448 100644 --- a/keyboards/keychron/q8/ansi/ansi.c +++ b/keyboards/keychron/q8/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q8/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q8/ansi_encoder/ansi_encoder.c index 12cd9f9378..fbb6813448 100644 --- a/keyboards/keychron/q8/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q8/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q8/iso/iso.c b/keyboards/keychron/q8/iso/iso.c index 55020c0c2b..aab7ab357b 100644 --- a/keyboards/keychron/q8/iso/iso.c +++ b/keyboards/keychron/q8/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q8/iso_encoder/iso_encoder.c b/keyboards/keychron/q8/iso_encoder/iso_encoder.c index 55020c0c2b..aab7ab357b 100644 --- a/keyboards/keychron/q8/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q8/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q9/ansi/ansi.c b/keyboards/keychron/q9/ansi/ansi.c index 9178c8dcc7..90dcc2d0a5 100644 --- a/keyboards/keychron/q9/ansi/ansi.c +++ b/keyboards/keychron/q9/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q9/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q9/ansi_encoder/ansi_encoder.c index 58d66e0473..84d4c4be9d 100644 --- a/keyboards/keychron/q9/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q9/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q9/iso/iso.c b/keyboards/keychron/q9/iso/iso.c index 1917b61f37..2f8d78feb2 100644 --- a/keyboards/keychron/q9/iso/iso.c +++ b/keyboards/keychron/q9/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q9/iso_encoder/iso_encoder.c b/keyboards/keychron/q9/iso_encoder/iso_encoder.c index 3a161fe9d7..4706ab3f39 100644 --- a/keyboards/keychron/q9/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/q9/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/q9_plus/ansi_encoder/ansi_encoder.c b/keyboards/keychron/q9_plus/ansi_encoder/ansi_encoder.c index d264334fa0..ffc213b75b 100755 --- a/keyboards/keychron/q9_plus/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/q9_plus/ansi_encoder/ansi_encoder.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/s1/ansi/rgb/rgb.c b/keyboards/keychron/s1/ansi/rgb/rgb.c index ca39b0c796..e81e7db402 100644 --- a/keyboards/keychron/s1/ansi/rgb/rgb.c +++ b/keyboards/keychron/s1/ansi/rgb/rgb.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/s1/ansi/white/white.c b/keyboards/keychron/s1/ansi/white/white.c index b3a49ae9eb..d6a5eaf232 100644 --- a/keyboards/keychron/s1/ansi/white/white.c +++ b/keyboards/keychron/s1/ansi/white/white.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | LED address diff --git a/keyboards/keychron/v1/ansi/ansi.c b/keyboards/keychron/v1/ansi/ansi.c index ed8a6ed1af..2db3ab782d 100644 --- a/keyboards/keychron/v1/ansi/ansi.c +++ b/keyboards/keychron/v1/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c index ed8a6ed1af..2db3ab782d 100644 --- a/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v1/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v1/iso/iso.c b/keyboards/keychron/v1/iso/iso.c index 00909c85e3..dff029055b 100644 --- a/keyboards/keychron/v1/iso/iso.c +++ b/keyboards/keychron/v1/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v1/iso_encoder/iso_encoder.c b/keyboards/keychron/v1/iso_encoder/iso_encoder.c index 00909c85e3..dff029055b 100644 --- a/keyboards/keychron/v1/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v1/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v1/jis/jis.c b/keyboards/keychron/v1/jis/jis.c index 6bc647656d..029c58fd70 100644 --- a/keyboards/keychron/v1/jis/jis.c +++ b/keyboards/keychron/v1/jis/jis.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v1/jis_encoder/jis_encoder.c b/keyboards/keychron/v1/jis_encoder/jis_encoder.c index 6bc647656d..029c58fd70 100644 --- a/keyboards/keychron/v1/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v1/jis_encoder/jis_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c index 8b787aad18..10cf2a85fd 100644 --- a/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v10/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v10/iso_encoder/iso_encoder.c b/keyboards/keychron/v10/iso_encoder/iso_encoder.c index f7e0a10470..b4bfb69206 100644 --- a/keyboards/keychron/v10/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v10/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/ansi/ansi.c b/keyboards/keychron/v2/ansi/ansi.c index d98a96fdf9..7e3214f175 100644 --- a/keyboards/keychron/v2/ansi/ansi.c +++ b/keyboards/keychron/v2/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c index 64153d4251..df33725b5e 100644 --- a/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v2/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/iso/iso.c b/keyboards/keychron/v2/iso/iso.c index 37cac7337d..ba9d47a2f1 100644 --- a/keyboards/keychron/v2/iso/iso.c +++ b/keyboards/keychron/v2/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/iso_encoder/iso_encoder.c b/keyboards/keychron/v2/iso_encoder/iso_encoder.c index 37cac7337d..ba9d47a2f1 100644 --- a/keyboards/keychron/v2/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v2/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/jis/jis.c b/keyboards/keychron/v2/jis/jis.c index 42285e56ca..0d638b5753 100644 --- a/keyboards/keychron/v2/jis/jis.c +++ b/keyboards/keychron/v2/jis/jis.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v2/jis_encoder/jis_encoder.c b/keyboards/keychron/v2/jis_encoder/jis_encoder.c index 5ccbb807cb..10a3ca25a7 100644 --- a/keyboards/keychron/v2/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v2/jis_encoder/jis_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/ansi/ansi.c b/keyboards/keychron/v3/ansi/ansi.c index 16d6b77131..6205b0b01b 100644 --- a/keyboards/keychron/v3/ansi/ansi.c +++ b/keyboards/keychron/v3/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c index 39fa354539..27f1f1f830 100644 --- a/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v3/ansi_encoder/ansi_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/iso/iso.c b/keyboards/keychron/v3/iso/iso.c index 24b406467a..be0934b4a0 100644 --- a/keyboards/keychron/v3/iso/iso.c +++ b/keyboards/keychron/v3/iso/iso.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/iso_encoder/iso_encoder.c b/keyboards/keychron/v3/iso_encoder/iso_encoder.c index 53fe99aac0..0456fb99f9 100644 --- a/keyboards/keychron/v3/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v3/iso_encoder/iso_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/jis/jis.c b/keyboards/keychron/v3/jis/jis.c index 70dbf812fa..be93dbc641 100644 --- a/keyboards/keychron/v3/jis/jis.c +++ b/keyboards/keychron/v3/jis/jis.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v3/jis_encoder/jis_encoder.c b/keyboards/keychron/v3/jis_encoder/jis_encoder.c index cf1065eed9..9eea7b3994 100644 --- a/keyboards/keychron/v3/jis_encoder/jis_encoder.c +++ b/keyboards/keychron/v3/jis_encoder/jis_encoder.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v4/ansi/ansi.c b/keyboards/keychron/v4/ansi/ansi.c index 6326405380..24afdb65b7 100644 --- a/keyboards/keychron/v4/ansi/ansi.c +++ b/keyboards/keychron/v4/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v4/iso/iso.c b/keyboards/keychron/v4/iso/iso.c index 9116135a4a..0b59f04d52 100644 --- a/keyboards/keychron/v4/iso/iso.c +++ b/keyboards/keychron/v4/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v5/ansi/ansi.c b/keyboards/keychron/v5/ansi/ansi.c index 073fb0cde0..3f85b6b210 100644 --- a/keyboards/keychron/v5/ansi/ansi.c +++ b/keyboards/keychron/v5/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c index 62ebc3f7b3..06c7ae6d92 100644 --- a/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v5/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v5/iso/iso.c b/keyboards/keychron/v5/iso/iso.c index 1552de7d47..7b2739d53e 100644 --- a/keyboards/keychron/v5/iso/iso.c +++ b/keyboards/keychron/v5/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v5/iso_encoder/iso_encoder.c b/keyboards/keychron/v5/iso_encoder/iso_encoder.c index 95eb62ae1f..9a13422d2c 100644 --- a/keyboards/keychron/v5/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v5/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v6/ansi/ansi.c b/keyboards/keychron/v6/ansi/ansi.c index a3f1032a1e..be5bad84ff 100644 --- a/keyboards/keychron/v6/ansi/ansi.c +++ b/keyboards/keychron/v6/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c index 02e0de0b3d..b83a5b0fb0 100644 --- a/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v6/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v6/iso/iso.c b/keyboards/keychron/v6/iso/iso.c index 7804ca3600..1138cb07d7 100644 --- a/keyboards/keychron/v6/iso/iso.c +++ b/keyboards/keychron/v6/iso/iso.c @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v6/iso_encoder/iso_encoder.c b/keyboards/keychron/v6/iso_encoder/iso_encoder.c index bd9189f8b5..47f609d817 100644 --- a/keyboards/keychron/v6/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v6/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v7/ansi/ansi.c b/keyboards/keychron/v7/ansi/ansi.c index 07a98622a4..132f568519 100644 --- a/keyboards/keychron/v7/ansi/ansi.c +++ b/keyboards/keychron/v7/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v7/iso/iso.c b/keyboards/keychron/v7/iso/iso.c index a35dcb2092..7aaeafe65e 100644 --- a/keyboards/keychron/v7/iso/iso.c +++ b/keyboards/keychron/v7/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v8/ansi/ansi.c b/keyboards/keychron/v8/ansi/ansi.c index bda7ba1d74..e5840fe966 100644 --- a/keyboards/keychron/v8/ansi/ansi.c +++ b/keyboards/keychron/v8/ansi/ansi.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c b/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c index bda7ba1d74..e5840fe966 100644 --- a/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c +++ b/keyboards/keychron/v8/ansi_encoder/ansi_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v8/iso/iso.c b/keyboards/keychron/v8/iso/iso.c index 88040c3ab8..07b350209d 100644 --- a/keyboards/keychron/v8/iso/iso.c +++ b/keyboards/keychron/v8/iso/iso.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/keychron/v8/iso_encoder/iso_encoder.c b/keyboards/keychron/v8/iso_encoder/iso_encoder.c index 88040c3ab8..07b350209d 100644 --- a/keyboards/keychron/v8/iso_encoder/iso_encoder.c +++ b/keyboards/keychron/v8/iso_encoder/iso_encoder.c @@ -20,7 +20,7 @@ // clang-format off -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/kprepublic/bm40hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm40hsrgb/rev2/rev2.c index 4bf9168935..8dd4cc2af1 100755 --- a/keyboards/kprepublic/bm40hsrgb/rev2/rev2.c +++ b/keyboards/kprepublic/bm40hsrgb/rev2/rev2.c @@ -17,7 +17,7 @@ #if defined(RGB_MATRIX_ENABLE) -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_1, A_1, C_1 }, { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c index fc40e0fa9a..982bf39c52 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev2/rev2.c @@ -15,7 +15,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_1, A_1, C_1 }, { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c index 2cfe18e08e..9cb9edba8e 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/rev2.c @@ -24,7 +24,7 @@ # include "ws2812.h" -const PROGMEM is31fl3733_led_t g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, B_1, A_1, C_1 }, { 0, B_2, A_2, C_2 }, { 0, B_3, A_3, C_3 }, diff --git a/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c b/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c index 057b4669f5..357ce13e96 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c +++ b/keyboards/kprepublic/bm68hsrgb/rev2/rev2.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS6_SW1, CS5_SW1, CS4_SW1}, {0, CS6_SW2, CS5_SW2, CS4_SW2}, {0, CS6_SW3, CS5_SW3, CS4_SW3}, diff --git a/keyboards/kprepublic/bm80v2/bm80v2.c b/keyboards/kprepublic/bm80v2/bm80v2.c index 13d67cdd56..3e3de08288 100644 --- a/keyboards/kprepublic/bm80v2/bm80v2.c +++ b/keyboards/kprepublic/bm80v2/bm80v2.c @@ -16,7 +16,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS6_SW1, CS5_SW1, CS4_SW1}, {0, CS6_SW3, CS5_SW3, CS4_SW3}, {0, CS6_SW4, CS5_SW4, CS4_SW4}, diff --git a/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c b/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c index 3b8daf5fee..1d6e3df547 100644 --- a/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c +++ b/keyboards/kprepublic/bm80v2_iso/bm80v2_iso.c @@ -16,7 +16,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS6_SW1, CS5_SW1, CS4_SW1}, {0, CS6_SW3, CS5_SW3, CS4_SW3}, {0, CS6_SW4, CS5_SW4, CS4_SW4}, diff --git a/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c b/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c index 39d3d7ff52..1df130fe53 100644 --- a/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c +++ b/keyboards/kprepublic/cstc40/daughterboard/daughterboard.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, L_1, K_1, J_1 }, { 0, L_2, K_2, J_2 }, { 0, L_3, K_3, J_3 }, diff --git a/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c b/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c index 39d3d7ff52..1df130fe53 100644 --- a/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c +++ b/keyboards/kprepublic/cstc40/single_pcb/single_pcb.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, L_1, K_1, J_1 }, { 0, L_2, K_2, J_2 }, { 0, L_3, K_3, J_3 }, diff --git a/keyboards/latincompass/latin17rgb/latin17rgb.c b/keyboards/latincompass/latin17rgb/latin17rgb.c index b75a11d965..54705bf4f7 100644 --- a/keyboards/latincompass/latin17rgb/latin17rgb.c +++ b/keyboards/latincompass/latin17rgb/latin17rgb.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/latincompass/latin60rgb/latin60rgb.c b/keyboards/latincompass/latin60rgb/latin60rgb.c index a915bede80..95ddc428da 100644 --- a/keyboards/latincompass/latin60rgb/latin60rgb.c +++ b/keyboards/latincompass/latin60rgb/latin60rgb.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { { 0, K_13, J_13, L_13 }, { 0, K_12, J_12, L_12 }, { 0, K_11, J_11, L_11 }, diff --git a/keyboards/latincompass/latin6rgb/latin6rgb.c b/keyboards/latincompass/latin6rgb/latin6rgb.c index a1eb38b9af..779373ae8f 100644 --- a/keyboards/latincompass/latin6rgb/latin6rgb.c +++ b/keyboards/latincompass/latin6rgb/latin6rgb.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/matrix/noah/noah.c b/keyboards/matrix/noah/noah.c index d62177a2f4..b5c52f9952 100644 --- a/keyboards/matrix/noah/noah.c +++ b/keyboards/matrix/noah/noah.c @@ -60,7 +60,7 @@ const rgblight_driver_t rgblight_driver = { #endif #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c b/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c index 9e5fe11895..d49d16e85a 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c +++ b/keyboards/mechlovin/adelais/rgb_led/rev2/rev2.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C2_1, C3_1, C4_1}, //D102-A0-0 {0, C5_1, C6_1, C7_1}, //D108-A1-1 diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c b/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c index b13f223a1c..5eebd7ec8a 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c +++ b/keyboards/mechlovin/adelais/rgb_led/rev3/rev3.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS3_SW5, CS2_SW5, CS1_SW5}, /* D9-K31-00 */ {0, CS6_SW5, CS5_SW5, CS4_SW5}, /* D46-K00-01 */ {0, CS6_SW9, CS5_SW9, CS4_SW9}, /* D59-K01-02 */ diff --git a/keyboards/mechlovin/delphine/rgb_led/rgb_led.c b/keyboards/mechlovin/delphine/rgb_led/rgb_led.c index a55143f2e1..feda05a071 100644 --- a/keyboards/mechlovin/delphine/rgb_led/rgb_led.c +++ b/keyboards/mechlovin/delphine/rgb_led/rgb_led.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { // left CA {0, C5_2, C6_2, C7_2}, //D2-0 {0, C1_1, C3_2, C4_2}, //D20-1 diff --git a/keyboards/mechlovin/hannah60rgb/rev2/rev2.c b/keyboards/mechlovin/hannah60rgb/rev2/rev2.c index 2e3c8d0090..c6943cc357 100644 --- a/keyboards/mechlovin/hannah60rgb/rev2/rev2.c +++ b/keyboards/mechlovin/hannah60rgb/rev2/rev2.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c b/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c index 5649f80712..cd8f2e2ca0 100644 --- a/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c +++ b/keyboards/mechlovin/infinity87/rgb_rev1/rgb_rev1.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS34_SW1, CS35_SW1, CS36_SW1}, //D92-K00-0 {0, CS37_SW1, CS38_SW1, CS39_SW1}, //D94-K01-1 {0, CS31_SW1, CS32_SW1, CS33_SW1}, //D96-K02-2 diff --git a/keyboards/mechlovin/olly/octagon/octagon.c b/keyboards/mechlovin/olly/octagon/octagon.c index b5eb828bc8..185ee32a3e 100644 --- a/keyboards/mechlovin/olly/octagon/octagon.c +++ b/keyboards/mechlovin/olly/octagon/octagon.c @@ -16,7 +16,7 @@ #include "quantum.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | LED address diff --git a/keyboards/mechlovin/zed65/mono_led/mono_led.c b/keyboards/mechlovin/zed65/mono_led/mono_led.c index f66c4b1359..d8570fa0a6 100644 --- a/keyboards/mechlovin/zed65/mono_led/mono_led.c +++ b/keyboards/mechlovin/zed65/mono_led/mono_led.c @@ -19,7 +19,7 @@ along with this program. If not, see . -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | LED address diff --git a/keyboards/melgeek/mach80/rev1/rev1.c b/keyboards/melgeek/mach80/rev1/rev1.c index 9e5c2d8b81..97744bd824 100755 --- a/keyboards/melgeek/mach80/rev1/rev1.c +++ b/keyboards/melgeek/mach80/rev1/rev1.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mach80/rev2/rev2.c b/keyboards/melgeek/mach80/rev2/rev2.c index e9fdc2517f..5fcc84e947 100755 --- a/keyboards/melgeek/mach80/rev2/rev2.c +++ b/keyboards/melgeek/mach80/rev2/rev2.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mj61/rev1/rev1.c b/keyboards/melgeek/mj61/rev1/rev1.c index 76fcb64c37..473ef5dc86 100644 --- a/keyboards/melgeek/mj61/rev1/rev1.c +++ b/keyboards/melgeek/mj61/rev1/rev1.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS12_SW1, CS11_SW1, CS10_SW1}, /* RGB1 */ {0, CS12_SW2, CS11_SW2, CS10_SW2}, /* RGB2 */ {0, CS12_SW3, CS11_SW3, CS10_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mj61/rev2/rev2.c b/keyboards/melgeek/mj61/rev2/rev2.c index 9d13d52ebc..a699cf45c0 100644 --- a/keyboards/melgeek/mj61/rev2/rev2.c +++ b/keyboards/melgeek/mj61/rev2/rev2.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB3 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB4 */ diff --git a/keyboards/melgeek/mj63/rev1/rev1.c b/keyboards/melgeek/mj63/rev1/rev1.c index 69e7ab5da6..b286ec7ca6 100644 --- a/keyboards/melgeek/mj63/rev1/rev1.c +++ b/keyboards/melgeek/mj63/rev1/rev1.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mj63/rev2/rev2.c b/keyboards/melgeek/mj63/rev2/rev2.c index 5ab9cdb65a..5a04475bae 100644 --- a/keyboards/melgeek/mj63/rev2/rev2.c +++ b/keyboards/melgeek/mj63/rev2/rev2.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB3 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB4 */ diff --git a/keyboards/melgeek/mj64/rev1/rev1.c b/keyboards/melgeek/mj64/rev1/rev1.c index fff946b20a..a608f83afe 100644 --- a/keyboards/melgeek/mj64/rev1/rev1.c +++ b/keyboards/melgeek/mj64/rev1/rev1.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mj64/rev2/rev2.c b/keyboards/melgeek/mj64/rev2/rev2.c index 35da35b2e4..67c17855fd 100644 --- a/keyboards/melgeek/mj64/rev2/rev2.c +++ b/keyboards/melgeek/mj64/rev2/rev2.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mj64/rev3/rev3.c b/keyboards/melgeek/mj64/rev3/rev3.c index 942bda1487..77f86bb015 100644 --- a/keyboards/melgeek/mj64/rev3/rev3.c +++ b/keyboards/melgeek/mj64/rev3/rev3.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB3 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB4 */ diff --git a/keyboards/melgeek/mj65/rev3/rev3.c b/keyboards/melgeek/mj65/rev3/rev3.c index 6d851aa847..1ebf87e099 100644 --- a/keyboards/melgeek/mj65/rev3/rev3.c +++ b/keyboards/melgeek/mj65/rev3/rev3.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mojo68/rev1/rev1.c b/keyboards/melgeek/mojo68/rev1/rev1.c index cd6d4ec413..ea10051431 100755 --- a/keyboards/melgeek/mojo68/rev1/rev1.c +++ b/keyboards/melgeek/mojo68/rev1/rev1.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/mojo75/rev1/rev1.c b/keyboards/melgeek/mojo75/rev1/rev1.c index e64c163c78..f043108380 100644 --- a/keyboards/melgeek/mojo75/rev1/rev1.c +++ b/keyboards/melgeek/mojo75/rev1/rev1.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS6_SW1, CS5_SW1, CS4_SW1}, /* RGB1 */ {0, CS6_SW2, CS5_SW2, CS4_SW2}, /* RGB2 */ {0, CS6_SW3, CS5_SW3, CS4_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/tegic/rev1/rev1.c b/keyboards/melgeek/tegic/rev1/rev1.c index 6dc2e8d180..2b36ec7609 100755 --- a/keyboards/melgeek/tegic/rev1/rev1.c +++ b/keyboards/melgeek/tegic/rev1/rev1.c @@ -19,7 +19,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB1 */ {0, CS9_SW2, CS8_SW2, CS7_SW2}, /* RGB2 */ {0, CS9_SW3, CS8_SW3, CS7_SW3}, /* RGB3 */ diff --git a/keyboards/melgeek/z70ultra/z70ultra.c b/keyboards/melgeek/z70ultra/z70ultra.c index f978edea92..eaf03fd344 100644 --- a/keyboards/melgeek/z70ultra/z70ultra.c +++ b/keyboards/melgeek/z70ultra/z70ultra.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t PROGMEM g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS28_SW1, CS30_SW1, CS29_SW1}, /* RGB10 */ {0, CS28_SW2, CS30_SW2, CS29_SW2}, /* RGB11 */ {0, CS28_SW3, CS30_SW3, CS29_SW3}, /* RGB12 */ diff --git a/keyboards/miller/gm862/gm862.c b/keyboards/miller/gm862/gm862.c index b677ae3be4..3dcbe122fb 100644 --- a/keyboards/miller/gm862/gm862.c +++ b/keyboards/miller/gm862/gm862.c @@ -1,7 +1,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, B_1, A_1, C_1}, {0, B_2, A_2, C_2}, {0, B_3, A_3, C_3}, diff --git a/keyboards/monsgeek/m1/m1.c b/keyboards/monsgeek/m1/m1.c index b85adbc0bf..a0375b2c0f 100644 --- a/keyboards/monsgeek/m1/m1.c +++ b/keyboards/monsgeek/m1/m1.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/monsgeek/m3/m3.c b/keyboards/monsgeek/m3/m3.c index b7e197e6ac..2bdba9fa31 100644 --- a/keyboards/monsgeek/m3/m3.c +++ b/keyboards/monsgeek/m3/m3.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/monsgeek/m5/m5.c b/keyboards/monsgeek/m5/m5.c index 83dd4b6b79..2e244542ef 100644 --- a/keyboards/monsgeek/m5/m5.c +++ b/keyboards/monsgeek/m5/m5.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/monsgeek/m6/m6.c b/keyboards/monsgeek/m6/m6.c index dc20a9916f..3d0a60eb0d 100644 --- a/keyboards/monsgeek/m6/m6.c +++ b/keyboards/monsgeek/m6/m6.c @@ -17,7 +17,7 @@ #include "quantum.h" // clang-format off #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/moonlander/moonlander.c b/keyboards/moonlander/moonlander.c index 5b52ba7031..dad795d315 100644 --- a/keyboards/moonlander/moonlander.c +++ b/keyboards/moonlander/moonlander.c @@ -172,7 +172,7 @@ layer_state_t layer_state_set_kb(layer_state_t state) { #ifdef RGB_MATRIX_ENABLE // clang-format off -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/mt/mt64rgb/mt64rgb.c b/keyboards/mt/mt64rgb/mt64rgb.c index 7a6831f6d0..42e6a48dc2 100644 --- a/keyboards/mt/mt64rgb/mt64rgb.c +++ b/keyboards/mt/mt64rgb/mt64rgb.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/mt/mt84/mt84.c b/keyboards/mt/mt84/mt84.c index fd4811e63a..4dd24c30b2 100644 --- a/keyboards/mt/mt84/mt84.c +++ b/keyboards/mt/mt84/mt84.c @@ -16,7 +16,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/opendeck/32/rev1/rev1.c b/keyboards/opendeck/32/rev1/rev1.c index 0b062ecd38..da9e6569f2 100644 --- a/keyboards/opendeck/32/rev1/rev1.c +++ b/keyboards/opendeck/32/rev1/rev1.c @@ -17,7 +17,7 @@ #include "rev1.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/owlab/voice65/hotswap/hotswap.c b/keyboards/owlab/voice65/hotswap/hotswap.c index b4c0c02c32..107952d370 100644 --- a/keyboards/owlab/voice65/hotswap/hotswap.c +++ b/keyboards/owlab/voice65/hotswap/hotswap.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS3_SW1, CS2_SW1, CS1_SW1}, /* RGB0-ESC ROW0*/ {0, CS6_SW1, CS5_SW1, CS4_SW1}, /* RGB1-1 */ {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB2-2 */ diff --git a/keyboards/owlab/voice65/soldered/soldered.c b/keyboards/owlab/voice65/soldered/soldered.c index 301a5adc59..eb3b68515a 100644 --- a/keyboards/owlab/voice65/soldered/soldered.c +++ b/keyboards/owlab/voice65/soldered/soldered.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS3_SW1, CS2_SW1, CS1_SW1}, /* RGB0-ESC ROW0*/ {0, CS6_SW1, CS5_SW1, CS4_SW1}, /* RGB1-1 */ {0, CS9_SW1, CS8_SW1, CS7_SW1}, /* RGB2-2 */ diff --git a/keyboards/phentech/rpk_001/rpk_001.c b/keyboards/phentech/rpk_001/rpk_001.c index 9f1a118759..b24c0c6c0e 100644 --- a/keyboards/phentech/rpk_001/rpk_001.c +++ b/keyboards/phentech/rpk_001/rpk_001.c @@ -7,7 +7,7 @@ // clang-format off -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/planck/ez/ez.c b/keyboards/planck/ez/ez.c index dfadb820ae..532558a294 100644 --- a/keyboards/planck/ez/ez.c +++ b/keyboards/planck/ez/ez.c @@ -21,7 +21,7 @@ keyboard_config_t keyboard_config; #ifdef RGB_MATRIX_ENABLE -const is31fl3737_led_t PROGMEM g_is31fl3737_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/planck/light/light.c b/keyboards/planck/light/light.c index 828319c66d..44bd89dc11 100644 --- a/keyboards/planck/light/light.c +++ b/keyboards/planck/light/light.c @@ -16,7 +16,7 @@ #include "quantum.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/playkbtw/pk64rgb/pk64rgb.c b/keyboards/playkbtw/pk64rgb/pk64rgb.c index 427d1cf04e..17b8c74b18 100644 --- a/keyboards/playkbtw/pk64rgb/pk64rgb.c +++ b/keyboards/playkbtw/pk64rgb/pk64rgb.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c index 0d6123ac01..c5b513447b 100644 --- a/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c +++ b/keyboards/projectd/65/projectd_65_ansi/projectd_65_ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw20216s_led_t g_aw20216s_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to AW20216S manual for these locations * driver * | R location diff --git a/keyboards/projectd/75/ansi/ansi.c b/keyboards/projectd/75/ansi/ansi.c index 1df7625002..7dd38569da 100644 --- a/keyboards/projectd/75/ansi/ansi.c +++ b/keyboards/projectd/75/ansi/ansi.c @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE -const aw_led g_aw_leds[RGB_MATRIX_LED_COUNT] = { +const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/qwertykeys/qk100/ansi/ansi.c b/keyboards/qwertykeys/qk100/ansi/ansi.c index 87e1b99e1b..06f7c11fb2 100644 --- a/keyboards/qwertykeys/qk100/ansi/ansi.c +++ b/keyboards/qwertykeys/qk100/ansi/ansi.c @@ -17,7 +17,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31_led g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS2_SW1, CS3_SW1, CS1_SW1}, /* RGB0-ESC ROW0*/ {0, CS5_SW1, CS6_SW1, CS4_SW1}, /* RGB1-F1 */ {0, CS8_SW1, CS9_SW1, CS7_SW1}, /* RGB2-F2 */ diff --git a/keyboards/redragon/k667/k667.c b/keyboards/redragon/k667/k667.c index 629e120b7b..a1930f3b85 100644 --- a/keyboards/redragon/k667/k667.c +++ b/keyboards/redragon/k667/k667.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { {0, G_1, I_1, H_1}, {0, G_3, I_3, H_3}, {0, G_4, I_4, H_4}, diff --git a/keyboards/skyloong/gk61/v1/v1.c b/keyboards/skyloong/gk61/v1/v1.c index cb3772f6b4..1ee3522b50 100644 --- a/keyboards/skyloong/gk61/v1/v1.c +++ b/keyboards/skyloong/gk61/v1/v1.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const snled27351_led_t PROGMEM g_snled27351_leds[RGB_MATRIX_LED_COUNT] = { +const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = { /* Refer to SNLED27351 manual for these locations * driver * | R location diff --git a/keyboards/smallkeyboard/smallkeyboard.c b/keyboards/smallkeyboard/smallkeyboard.c index ce79c7df5d..7442444b00 100644 --- a/keyboards/smallkeyboard/smallkeyboard.c +++ b/keyboards/smallkeyboard/smallkeyboard.c @@ -17,7 +17,7 @@ #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/teleport/native/native.c b/keyboards/teleport/native/native.c index ab6d588de7..b11b63f1f6 100644 --- a/keyboards/teleport/native/native.c +++ b/keyboards/teleport/native/native.c @@ -25,7 +25,7 @@ void keyboard_post_init_kb(void) { } #ifdef RGB_MATRIX_ENABLE -const is31fl3733_led_t PROGMEM g_is31fl3733_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/terrazzo/terrazzo.c b/keyboards/terrazzo/terrazzo.c index 7717b36e65..53b0bd4c51 100644 --- a/keyboards/terrazzo/terrazzo.c +++ b/keyboards/terrazzo/terrazzo.c @@ -21,7 +21,7 @@ #include "print.h" #include "quantum.h" -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[LED_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { /* Refer to IS31 manual for these locations * https://cdn-learn.adafruit.com/downloads/pdf/adafruit-15x7-7x15-charlieplex-led-matrix-charliewing-featherwing.pdf */ diff --git a/keyboards/tkc/portico68v2/portico68v2.c b/keyboards/tkc/portico68v2/portico68v2.c index 90d8c12fca..561b4f8d10 100644 --- a/keyboards/tkc/portico68v2/portico68v2.c +++ b/keyboards/tkc/portico68v2/portico68v2.c @@ -18,7 +18,7 @@ along with this program. If not, see . #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3741_led_t g_is31fl3741_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = { {0, CS18_SW1, CS17_SW1, CS16_SW1}, /* RGB1 */ {0, CS18_SW2, CS17_SW2, CS16_SW2}, /* RGB2 */ {0, CS18_SW3, CS17_SW3, CS16_SW3}, /* RGB3 */ diff --git a/keyboards/xbows/knight/knight.c b/keyboards/xbows/knight/knight.c index 05ff84060c..87a297a5ed 100644 --- a/keyboards/xbows/knight/knight.c +++ b/keyboards/xbows/knight/knight.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE - const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { + const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_3, C2_3, C3_3}, // L01 {0, C1_4, C2_4, C3_4}, // L02 diff --git a/keyboards/xbows/knight_plus/knight_plus.c b/keyboards/xbows/knight_plus/knight_plus.c index b84f6b964b..a5335337f1 100644 --- a/keyboards/xbows/knight_plus/knight_plus.c +++ b/keyboards/xbows/knight_plus/knight_plus.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE - const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { + const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_3, C2_3, C3_3}, // L01 {0, C1_4, C2_4, C3_4}, // L02 diff --git a/keyboards/xbows/nature/nature.c b/keyboards/xbows/nature/nature.c index 1ba964e453..9fcd40c08c 100644 --- a/keyboards/xbows/nature/nature.c +++ b/keyboards/xbows/nature/nature.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE - const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { + const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C1_3, C2_3, C3_3}, // L01 {0, C1_4, C2_4, C3_4}, // L02 diff --git a/keyboards/xbows/numpad/numpad.c b/keyboards/xbows/numpad/numpad.c index 519a1b36f4..b84f59fbed 100644 --- a/keyboards/xbows/numpad/numpad.c +++ b/keyboards/xbows/numpad/numpad.c @@ -15,7 +15,7 @@ */ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE - const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { + const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C3_3, C2_3, C1_3}, // L01 {0, C3_4, C2_4, C1_4}, // L02 diff --git a/keyboards/xbows/ranger/ranger.c b/keyboards/xbows/ranger/ranger.c index 028b5fca5c..1ebb9a127c 100644 --- a/keyboards/xbows/ranger/ranger.c +++ b/keyboards/xbows/ranger/ranger.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C3_3, C2_3, C1_3}, // L01 {0, C3_4, C2_4, C1_4}, // L02 diff --git a/keyboards/xbows/woody/woody.c b/keyboards/xbows/woody/woody.c index e58ec15e10..9bfa1fd219 100644 --- a/keyboards/xbows/woody/woody.c +++ b/keyboards/xbows/woody/woody.c @@ -1,6 +1,6 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31fl3731_led_t PROGMEM g_is31fl3731_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { {0, C8_8, C7_8, C6_8}, // LA17 {0, C9_8, C7_7, C6_7}, // LA16 diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index e7bed0bf72..ef12434aa2 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -107,7 +107,7 @@ const rgb_matrix_driver_t rgb_matrix_driver = { # endif // LED color buffer -rgb_led_t rgb_matrix_ws2812_array[RGB_MATRIX_LED_COUNT]; +rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_COUNT]; bool ws2812_dirty = false; static void init(void) { @@ -116,7 +116,7 @@ static void init(void) { static void flush(void) { if (ws2812_dirty) { - ws2812_setleds(rgb_matrix_ws2812_array, RGB_MATRIX_LED_COUNT); + ws2812_setleds(rgb_matrix_ws2812_array, WS2812_LED_COUNT); ws2812_dirty = false; } } -- cgit v1.2.3 From 73758d3d3a3bbee76bd1c9946d4c663c28f166f0 Mon Sep 17 00:00:00 2001 From: Ryan Date: Wed, 20 Dec 2023 13:31:39 +1100 Subject: Rename `LED_DISABLE_WHEN_USB_SUSPENDED` -> `LED_MATRIX_SLEEP` (#22681) --- data/mappings/info_config.hjson | 5 +++-- docs/feature_led_matrix.md | 2 +- keyboards/input_club/ergodox_infinity/config.h | 2 +- keyboards/input_club/whitefox/config.h | 2 +- keyboards/keychron/c1_pro/ansi/white/config.h | 2 +- keyboards/keychron/c2_pro/ansi/white/config.h | 2 +- keyboards/keychron/s1/ansi/white/config.h | 2 +- keyboards/terrazzo/config.h | 2 +- quantum/led_matrix/led_matrix.c | 2 +- 9 files changed, 11 insertions(+), 10 deletions(-) (limited to 'quantum') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index a323865fec..52747c4a5a 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -74,12 +74,12 @@ "LEADER_TIMEOUT": {"info_key": "leader_key.timeout", "value_type": "int"}, // LED Matrix - "LED_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "led_matrix.sleep", "value_type": "bool"}, "LED_MATRIX_CENTER": {"info_key": "led_matrix.center_point", "value_type": "array.int"}, "LED_MATRIX_KEYRELEASES": {"info_key": "led_matrix.react_on_keyup", "value_type": "bool"}, "LED_MATRIX_LED_FLUSH_LIMIT": {"info_key": "led_matrix.led_flush_limit", "value_type": "int"}, "LED_MATRIX_LED_PROCESS_LIMIT": {"info_key": "led_matrix.led_process_limit", "value_type": "int", "to_json": false}, "LED_MATRIX_MAXIMUM_BRIGHTNESS": {"info_key": "led_matrix.max_brightness", "value_type": "int"}, + "LED_MATRIX_SLEEP": {"info_key": "led_matrix.sleep", "value_type": "bool"}, "LED_MATRIX_SPD_STEP": {"info_key": "led_matrix.speed_steps", "value_type": "int"}, "LED_MATRIX_SPLIT": {"info_key": "led_matrix.split_count", "value_type": "array.int"}, "LED_MATRIX_TIMEOUT": {"info_key": "led_matrix.timeout", "value_type": "int"}, @@ -218,7 +218,8 @@ "DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true, "replace_with": "DEBOUNCE"}, "DESCRIPTION": {"info_key": "_invalid.usb_description", "invalid": true}, "IGNORE_MOD_TAP_INTERRUPT": {"info_key": "_invalid.ignore_mod_tap_interrupt", "value_type": "bool", "invalid": true}, - "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "_invalid.ignore_mod_tap_interrupt_per_key", "invalid": true} + "IGNORE_MOD_TAP_INTERRUPT_PER_KEY": {"info_key": "_invalid.ignore_mod_tap_interrupt_per_key", "invalid": true}, + "LED_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "_invalid.led_matrix_sleep", "invalid": true, "replace_with": "LED_MATRIX_SLEEP"}, "NO_ACTION_FUNCTION": {"info_key": "_invalid.no_action_function", "invalid": true}, "NO_ACTION_MACRO": {"info_key": "_invalid.no_action_macro", "invalid": true}, "PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true}, diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index d803fcf101..9b23ce8884 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -357,7 +357,7 @@ For inspiration and examples, check out the built-in effects under `quantum/led_ ```c #define LED_MATRIX_KEYRELEASES // reactive effects respond to keyreleases (instead of keypresses) #define LED_MATRIX_TIMEOUT 0 // number of milliseconds to wait until led automatically turns off -#define LED_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define LED_MATRIX_SLEEP // turn off effects when suspended #define LED_MATRIX_LED_PROCESS_LIMIT (LED_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define LED_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define LED_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs diff --git a/keyboards/input_club/ergodox_infinity/config.h b/keyboards/input_club/ergodox_infinity/config.h index 3757ca3d60..f9cd406637 100644 --- a/keyboards/input_club/ergodox_infinity/config.h +++ b/keyboards/input_club/ergodox_infinity/config.h @@ -46,7 +46,7 @@ along with this program. If not, see . #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND #define LED_MATRIX_LED_COUNT 76 #define LED_MATRIX_SPLIT { 38, 38 } -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP // LED Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/input_club/whitefox/config.h b/keyboards/input_club/whitefox/config.h index 2d6affe84a..2b22fb9852 100644 --- a/keyboards/input_club/whitefox/config.h +++ b/keyboards/input_club/whitefox/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . /* LED matrix driver */ #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND #define LED_MATRIX_LED_COUNT 71 -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP /* i2c (for LED matrix) */ #define I2C1_CLOCK_SPEED 400000 diff --git a/keyboards/keychron/c1_pro/ansi/white/config.h b/keyboards/keychron/c1_pro/ansi/white/config.h index a8a836c5dd..a2122b3d8e 100644 --- a/keyboards/keychron/c1_pro/ansi/white/config.h +++ b/keyboards/keychron/c1_pro/ansi/white/config.h @@ -31,7 +31,7 @@ { 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44 } /* turn off effects when suspended */ -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP /* Enbale caps_lcok, win os and mac os indicator */ #define CAPS_LOCK_LED_INDEX 63 diff --git a/keyboards/keychron/c2_pro/ansi/white/config.h b/keyboards/keychron/c2_pro/ansi/white/config.h index 26c812ffef..531aeea0ec 100644 --- a/keyboards/keychron/c2_pro/ansi/white/config.h +++ b/keyboards/keychron/c2_pro/ansi/white/config.h @@ -33,7 +33,7 @@ #define WIN_LED_INDEX 19 /* turn off effects when suspended */ -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP // LED Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/keychron/s1/ansi/white/config.h b/keyboards/keychron/s1/ansi/white/config.h index fbe02caeb1..80ef399047 100644 --- a/keyboards/keychron/s1/ansi/white/config.h +++ b/keyboards/keychron/s1/ansi/white/config.h @@ -27,7 +27,7 @@ // { 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 } // 127mA /* Disable LED lighting when PC is in suspend */ -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP /* Enable caps-lock LED */ #define CAPS_LOCK_LED_INDEX 46 diff --git a/keyboards/terrazzo/config.h b/keyboards/terrazzo/config.h index d2e76f1de0..d9ef8f0f9d 100644 --- a/keyboards/terrazzo/config.h +++ b/keyboards/terrazzo/config.h @@ -22,7 +22,7 @@ #define LED_MATRIX_ROWS 15 #define LED_MATRIX_COLS 7 #define LED_MATRIX_MAXIMUM_BRIGHTNESS 20 -#define LED_DISABLE_WHEN_USB_SUSPENDED +#define LED_MATRIX_SLEEP // LED Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index eee43d9281..760a8b7484 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -434,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 -- cgit v1.2.3 From 8812a095814fdad3ab245fa2c00e29cb50ee2e92 Mon Sep 17 00:00:00 2001 From: Ryan Date: Wed, 20 Dec 2023 13:31:50 +1100 Subject: Rename `RGB_DISABLE_WHEN_USB_SUSPENDED` -> `RGB_MATRIX_SLEEP` (#22682) --- data/mappings/info_config.hjson | 3 ++- docs/feature_rgb_matrix.md | 2 +- keyboards/1upkeyboards/1upocarina/config.h | 2 +- keyboards/1upkeyboards/1upslider8/config.h | 2 +- keyboards/1upkeyboards/1upsuper16v3/config.h | 2 +- keyboards/1upkeyboards/pi40/config.h | 2 +- keyboards/1upkeyboards/pi50/config.h | 2 +- keyboards/1upkeyboards/pi60/config.h | 2 +- keyboards/1upkeyboards/pi60_hse/config.h | 2 +- keyboards/1upkeyboards/pi60_rgb/config.h | 2 +- keyboards/1upkeyboards/super16v2/config.h | 2 +- keyboards/1upkeyboards/sweet16v2/kb2040/config.h | 2 +- keyboards/1upkeyboards/sweet16v2/pro_micro/config.h | 2 +- keyboards/3keyecosystem/2key2/config.h | 2 +- keyboards/acheron/apollo/87h/delta/config.h | 2 +- keyboards/acheron/apollo/87h/gamma/config.h | 2 +- keyboards/acheron/apollo/87htsc/config.h | 2 +- keyboards/acheron/apollo/88htsc/config.h | 2 +- keyboards/adpenrose/akemipad/config.h | 2 +- keyboards/aeboards/satellite/rev1/config.h | 2 +- keyboards/akko/5087/config.h | 2 +- keyboards/akko/5108/config.h | 2 +- keyboards/akko/acr87/config.h | 2 +- keyboards/akko/top40/config.h | 2 +- keyboards/atlantis/ak81_ve/config.h | 2 +- keyboards/atlantis/ps17/config.h | 2 +- keyboards/axolstudio/yeti/hotswap/config.h | 2 +- keyboards/bandominedoni/config.h | 2 +- keyboards/basekeys/trifecta/config.h | 2 +- keyboards/bastardkb/charybdis/config.h | 2 +- keyboards/bastardkb/dilemma/3x5_3/config.h | 2 +- keyboards/bastardkb/dilemma/4x6_4/config.h | 2 +- keyboards/bastardkb/scylla/config.h | 2 +- keyboards/bastardkb/skeletyl/config.h | 2 +- keyboards/bastardkb/tbkmini/config.h | 2 +- keyboards/binepad/bn006/config.h | 2 +- keyboards/blockboy/ac980mini/config.h | 2 +- keyboards/boardsource/microdox/v2/config.h | 2 +- keyboards/boardsource/the_mark/config.h | 2 +- keyboards/boardsource/unicorne/config.h | 2 +- keyboards/canary/canary60rgb/v1/config.h | 2 +- keyboards/checkerboards/quark_lp/config.h | 2 +- keyboards/cherrybstudio/cb87rgb/config.h | 2 +- keyboards/chosfox/cf81/config.h | 2 +- keyboards/chromatonemini/config.h | 2 +- keyboards/churrosoft/deck8/rgb/config.h | 2 +- keyboards/clickety_split/leeloo/keymaps/default/config.h | 2 +- keyboards/clickety_split/leeloo/rev2/config.h | 2 +- keyboards/clickety_split/leeloo/rev3/config.h | 2 +- keyboards/controllerworks/mini36/keymaps/default/config.h | 2 +- keyboards/controllerworks/mini36/keymaps/via/config.h | 2 +- keyboards/controllerworks/mini42/keymaps/default/config.h | 2 +- keyboards/controllerworks/mini42/keymaps/via/config.h | 2 +- keyboards/crkbd/keymaps/bermeo/config.h | 2 +- keyboards/crkbd/keymaps/colemad/config.h | 2 +- keyboards/crkbd/keymaps/colemak_luna/config.h | 2 +- keyboards/crkbd/keymaps/crkdves/config.h | 2 +- keyboards/crkbd/keymaps/crkqwes/config.h | 2 +- keyboards/crkbd/keymaps/gotham/config.h | 2 +- keyboards/crkbd/keymaps/jpe230/config.h | 2 +- keyboards/crkbd/keymaps/kidbrazil/config.h | 2 +- keyboards/crkbd/keymaps/nimishgautam/config.h | 2 +- keyboards/crkbd/keymaps/rpbaptist/config.h | 2 +- keyboards/crkbd/keymaps/soundmonster/config.h | 2 +- keyboards/crkbd/keymaps/thunderbird2086/config.h | 2 +- keyboards/crkbd/readme.md | 2 +- keyboards/darkproject/kd83a_bfg_edition/config.h | 2 +- keyboards/darkproject/kd87a_bfg_edition/config.h | 2 +- keyboards/doio/kb12/config.h | 2 +- keyboards/doio/kb30/config.h | 2 +- keyboards/dp3000/config.h | 2 +- keyboards/dtisaac/dosa40rgb/config.h | 2 +- keyboards/dumbpad/v3x/config.h | 2 +- keyboards/durgod/dgk6x/config.h | 2 +- keyboards/dztech/dz60rgb/v1/config.h | 2 +- keyboards/dztech/dz60rgb/v2/config.h | 2 +- keyboards/dztech/dz60rgb/v2_1/config.h | 2 +- keyboards/dztech/dz60rgb_ansi/v1/config.h | 2 +- keyboards/dztech/dz60rgb_ansi/v2/config.h | 2 +- keyboards/dztech/dz60rgb_ansi/v2_1/config.h | 2 +- keyboards/dztech/dz60rgb_wkl/v1/config.h | 2 +- keyboards/dztech/dz60rgb_wkl/v2/config.h | 2 +- keyboards/dztech/dz60rgb_wkl/v2_1/config.h | 2 +- keyboards/dztech/dz64rgb/config.h | 2 +- keyboards/dztech/dz65rgb/v1/config.h | 2 +- keyboards/dztech/dz65rgb/v2/config.h | 2 +- keyboards/dztech/dz65rgb/v3/config.h | 2 +- keyboards/dztech/tofu/ii/v1/config.h | 2 +- keyboards/dztech/tofu/jr/v1/config.h | 2 +- keyboards/era/sirind/klein_sd/config.h | 2 +- keyboards/ergodox_ez/config.h | 2 +- keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h | 2 +- keyboards/flashquark/horizon_z/config.h | 2 +- keyboards/frooastboard/walnut/config.h | 2 +- keyboards/geekboards/macropad_v2/config.h | 2 +- keyboards/geekboards/tester/config.h | 2 +- keyboards/giabalanai/config.h | 2 +- keyboards/gizmo_engineering/gk6/config.h | 2 +- keyboards/gkeyboard/gpad8_2r/config.h | 2 +- keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h | 2 +- keyboards/gmmk/gmmk2/p65/config.h | 2 +- keyboards/gmmk/gmmk2/p96/config.h | 2 +- keyboards/gmmk/pro/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h | 2 +- keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h | 2 +- keyboards/handwired/colorlice/config.h | 2 +- keyboards/handwired/dactyl_minidox/keymaps/dlford/config.h | 2 +- keyboards/handwired/dygma/raise/config.h | 2 +- keyboards/handwired/hnah40rgb/config.h | 2 +- keyboards/handwired/p65rgb/config.h | 2 +- keyboards/handwired/tractyl_manuform/4x6_right/config.h | 2 +- keyboards/helix/rev3_4rows/config.h | 2 +- keyboards/helix/rev3_5rows/config.h | 2 +- keyboards/hfdkb/ac001/config.h | 2 +- keyboards/hotdox76v2/config.h | 2 +- keyboards/hs60/v1/config.h | 2 +- keyboards/idobao/id42/config.h | 2 +- keyboards/idobao/id61/config.h | 2 +- keyboards/idobao/id63/config.h | 2 +- keyboards/idobao/id67/config.h | 2 +- keyboards/idobao/id75/keymaps/paryz/config.h | 2 +- keyboards/idobao/id80/v3/ansi/config.h | 2 +- keyboards/idobao/id87/v2/config.h | 2 +- keyboards/idobao/montex/v2/config.h | 2 +- keyboards/ilumkb/simpler61/config.h | 2 +- keyboards/ilumkb/simpler64/config.h | 2 +- keyboards/inland/kb83/config.h | 2 +- keyboards/inland/mk47/config.h | 2 +- keyboards/inland/v83p/config.h | 2 +- keyboards/jacky_studio/piggy60/rev2/config.h | 2 +- keyboards/jadookb/jkb65/config.h | 2 +- keyboards/jukaie/jk01/config.h | 2 +- keyboards/junco/keymaps/default/config.h | 2 +- keyboards/junco/keymaps/deluxe/config.h | 2 +- keyboards/junco/keymaps/via/config.h | 2 +- keyboards/kbdcraft/adam64/config.h | 2 +- keyboards/kbdfans/baguette66/rgb/config.h | 2 +- keyboards/kbdfans/bella/rgb/config.h | 2 +- keyboards/kbdfans/bella/rgb_iso/config.h | 2 +- keyboards/kbdfans/boop65/rgb/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v1/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v2/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v3/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb/v4/config.h | 2 +- keyboards/kbdfans/kbd67/mkiirgb_iso/config.h | 2 +- keyboards/kbdfans/kbd75rgb/config.h | 2 +- keyboards/kbdfans/kbdmini/config.h | 2 +- keyboards/kbdfans/kbdpad/mk3/config.h | 2 +- keyboards/kbdfans/maja/config.h | 2 +- keyboards/kbdfans/odin/rgb/config.h | 2 +- keyboards/keebio/bamfk4/config.h | 2 +- keyboards/keebio/cepstrum/rev1/config.h | 2 +- keyboards/keebio/chocopad/rev2/config.h | 2 +- keyboards/keebio/convolution/rev1/config.h | 2 +- keyboards/keebio/iris/rev6/config.h | 2 +- keyboards/keebio/iris/rev7/config.h | 2 +- keyboards/keebio/iris/rev8/config.h | 2 +- keyboards/keebio/nyquist/rev4/config.h | 2 +- keyboards/keebio/nyquistpad/config.h | 2 +- keyboards/keebio/sinc/rev3/config.h | 2 +- keyboards/keebio/sinc/rev4/config.h | 2 +- keyboards/keybee/keybee65/config.h | 2 +- keyboards/keycapsss/kimiko/keymaps/oriaj3/config.h | 2 +- keyboards/keychron/c1_pro/ansi/rgb/config.h | 2 +- keyboards/keychron/c2_pro/ansi/rgb/config.h | 2 +- keyboards/keychron/q0/config.h | 2 +- keyboards/keychron/q10/config.h | 2 +- keyboards/keychron/q11/config.h | 2 +- keyboards/keychron/q12/config.h | 2 +- keyboards/keychron/q1v1/ansi/keymaps/gtg465x/config.h | 2 +- keyboards/keychron/q1v1/ansi/keymaps/mkillewald/config.h | 2 +- keyboards/keychron/q1v1/ansi/keymaps/teimor/config.h | 2 +- keyboards/keychron/q1v1/config.h | 2 +- keyboards/keychron/q1v1/iso/keymaps/kubahorak/config.h | 2 +- keyboards/keychron/q1v1/iso/keymaps/mkillewald_iso/config.h | 2 +- keyboards/keychron/q1v2/config.h | 2 +- keyboards/keychron/q2/ansi/keymaps/ladduro/config.h | 2 +- keyboards/keychron/q2/config.h | 2 +- keyboards/keychron/q3/config.h | 2 +- keyboards/keychron/q4/config.h | 2 +- keyboards/keychron/q5/config.h | 2 +- keyboards/keychron/q6/config.h | 2 +- keyboards/keychron/q60/config.h | 2 +- keyboards/keychron/q65/config.h | 2 +- keyboards/keychron/q7/config.h | 2 +- keyboards/keychron/q8/config.h | 2 +- keyboards/keychron/q9/config.h | 2 +- keyboards/keychron/q9_plus/config.h | 2 +- keyboards/keychron/s1/ansi/rgb/config.h | 2 +- keyboards/keychron/v1/config.h | 2 +- keyboards/keychron/v10/config.h | 2 +- keyboards/keychron/v2/config.h | 2 +- keyboards/keychron/v3/config.h | 2 +- keyboards/keychron/v4/config.h | 2 +- keyboards/keychron/v5/config.h | 2 +- keyboards/keychron/v6/config.h | 2 +- keyboards/keychron/v7/config.h | 2 +- keyboards/keychron/v8/config.h | 2 +- keyboards/kprepublic/bm40hsrgb/rev1/config.h | 2 +- keyboards/kprepublic/bm40hsrgb/rev2/config.h | 2 +- keyboards/kprepublic/bm60hsrgb/rev2/config.h | 2 +- keyboards/kprepublic/bm60hsrgb_ec/rev2/config.h | 2 +- keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h | 2 +- keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h | 2 +- keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h | 2 +- keyboards/kprepublic/bm68hsrgb/rev2/config.h | 2 +- keyboards/kprepublic/bm80hsrgb/config.h | 2 +- keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h | 2 +- keyboards/kprepublic/bm80v2/config.h | 2 +- keyboards/kprepublic/bm80v2/keymaps/saph1s/config.h | 2 +- keyboards/kprepublic/bm80v2_iso/config.h | 2 +- keyboards/kprepublic/cstc40/config.h | 2 +- keyboards/kuro/kuro65/config.h | 2 +- keyboards/latincompass/latin17rgb/config.h | 2 +- keyboards/latincompass/latin60rgb/config.h | 2 +- keyboards/latincompass/latin6rgb/config.h | 2 +- keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h | 2 +- keyboards/lily58/r2g/config.h | 2 +- keyboards/linworks/fave60a/config.h | 2 +- keyboards/linworks/fave65h/config.h | 2 +- keyboards/linworks/fave84h/config.h | 2 +- keyboards/linworks/fave87h/config.h | 2 +- keyboards/linworks/favepada/config.h | 2 +- keyboards/magic_force/mf17/config.h | 2 +- keyboards/marksard/rhymestone/rev1/config.h | 2 +- keyboards/massdrop/alt/keymaps/pregame/config.h | 2 +- keyboards/massdrop/alt/keymaps/urbanvanilla/config.h | 2 +- keyboards/massdrop/ctrl/keymaps/endgame/config.h | 2 +- keyboards/massdrop/ctrl/keymaps/foxx1337/config.h | 2 +- keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h | 2 +- keyboards/massdrop/ctrl/keymaps/xanimos/config.h | 2 +- keyboards/mechlovin/adelais/rgb_led/rev1/config.h | 2 +- keyboards/mechlovin/adelais/rgb_led/rev2/config.h | 2 +- keyboards/mechlovin/adelais/rgb_led/rev3/config.h | 2 +- keyboards/mechlovin/delphine/rgb_led/config.h | 2 +- keyboards/mechlovin/hannah60rgb/rev1/config.h | 2 +- keyboards/mechlovin/hannah60rgb/rev2/config.h | 2 +- keyboards/mechlovin/infinity87/rgb_rev1/config.h | 2 +- keyboards/mechlovin/infinity875/config.h | 2 +- keyboards/melgeek/mach80/config.h | 2 +- keyboards/melgeek/mj61/config.h | 2 +- keyboards/melgeek/mj63/config.h | 2 +- keyboards/melgeek/mj64/config.h | 2 +- keyboards/melgeek/mj65/config.h | 2 +- keyboards/melgeek/mojo68/config.h | 2 +- keyboards/melgeek/mojo75/config.h | 2 +- keyboards/melgeek/tegic/config.h | 2 +- keyboards/melgeek/z70ultra/config.h | 2 +- keyboards/miller/gm862/config.h | 2 +- keyboards/momokai/aurora/config.h | 2 +- keyboards/momokai/tap_duo/config.h | 2 +- keyboards/momokai/tap_trio/config.h | 2 +- keyboards/monsgeek/m1/config.h | 2 +- keyboards/monsgeek/m3/config.h | 2 +- keyboards/monsgeek/m5/config.h | 2 +- keyboards/monsgeek/m6/config.h | 2 +- keyboards/monstargear/xo87/rgb/config.h | 2 +- keyboards/moonlander/config.h | 2 +- keyboards/novelkeys/nk20/config.h | 2 +- keyboards/novelkeys/nk65b/config.h | 2 +- keyboards/novelkeys/nk87b/config.h | 2 +- keyboards/novelkeys/nk_plus/config.h | 2 +- keyboards/opendeck/32/rev1/config.h | 2 +- keyboards/owlab/voice65/hotswap/config.h | 2 +- keyboards/owlab/voice65/soldered/config.h | 2 +- keyboards/paprikman/albacore/config.h | 2 +- keyboards/percent/canoe_gen2/config.h | 2 +- keyboards/phase_studio/titan65/hotswap/config.h | 2 +- keyboards/phentech/rpk_001/config.h | 2 +- keyboards/planck/ez/config.h | 2 +- keyboards/planck/rev6/config.h | 2 +- keyboards/planck/rev6_drop/config.h | 2 +- keyboards/planck/rev7/config.h | 2 +- keyboards/projectd/65/projectd_65_ansi/config.h | 2 +- keyboards/projectd/75/ansi/config.h | 2 +- keyboards/quarkeys/z40/config.h | 2 +- keyboards/qwertykeys/qk100/ansi/config.h | 2 +- keyboards/rgbkb/mun/config.h | 2 +- keyboards/rgbkb/mun/keymaps/default/config.h | 2 +- keyboards/rgbkb/mun/keymaps/peott-fr/config.h | 2 +- keyboards/rgbkb/mun/keymaps/via/config.h | 2 +- keyboards/rgbkb/mun/keymaps/xulkal2/config.h | 2 +- keyboards/rgbkb/sol3/config.h | 2 +- keyboards/rgbkb/sol3/keymaps/default/config.h | 2 +- keyboards/rgbkb/sol3/keymaps/via/config.h | 2 +- keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h | 2 +- keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h | 2 +- keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h | 2 +- keyboards/sawnsprojects/satxri6key/config.h | 2 +- keyboards/senselessclay/ck60/config.h | 2 +- keyboards/skeletonkbd/frost68/config.h | 2 +- keyboards/skmt/15k/config.h | 2 +- keyboards/skyloong/dt40/config.h | 2 +- keyboards/skyloong/gk61/pro_48/config.h | 2 +- keyboards/skyloong/gk61/v1/config.h | 2 +- keyboards/skyloong/qk21/v1/config.h | 2 +- keyboards/smallkeyboard/config.h | 2 +- keyboards/sofle/keymaps/rgb_default/config.h | 2 +- keyboards/sofle_choc/keymaps/default/config.h | 2 +- keyboards/sofle_choc/keymaps/via/config.h | 2 +- keyboards/spaceholdings/nebula12b/config.h | 2 +- keyboards/spaceholdings/nebula68b/config.h | 2 +- keyboards/splitkb/aurora/helix/keymaps/default/config.h | 2 +- keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h | 2 +- keyboards/splitkb/aurora/sweep/keymaps/default/config.h | 2 +- keyboards/splitkb/kyria/rev1/config.h | 2 +- keyboards/splitkb/kyria/rev2/config.h | 2 +- keyboards/stront/config.h | 2 +- keyboards/synthlabs/060/config.h | 2 +- keyboards/system76/launch_1/config.h | 2 +- keyboards/teleport/native/config.h | 2 +- keyboards/tkc/portico/config.h | 2 +- keyboards/tkc/portico68v2/config.h | 2 +- keyboards/tkc/portico75/config.h | 2 +- keyboards/tominabox1/le_chiffre/config.h | 2 +- keyboards/treasure/type9s3/config.h | 2 +- keyboards/ungodly/launch_pad/config.h | 2 +- keyboards/winry/winry315/config.h | 2 +- keyboards/wolf/m60_b/config.h | 2 +- keyboards/wolf/m6_c/config.h | 2 +- keyboards/work_louder/loop/config.h | 2 +- keyboards/work_louder/micro/config.h | 2 +- keyboards/work_louder/nano/config.h | 2 +- keyboards/work_louder/numpad/config.h | 2 +- keyboards/work_louder/work_board/config.h | 2 +- keyboards/xbows/knight/config.h | 2 +- keyboards/xbows/knight_plus/config.h | 2 +- keyboards/xbows/nature/config.h | 2 +- keyboards/xbows/numpad/config.h | 2 +- keyboards/xbows/ranger/config.h | 2 +- keyboards/xbows/woody/config.h | 2 +- keyboards/xelus/la_plus/config.h | 2 +- keyboards/xelus/pachi/rgb/rev1/config.h | 2 +- keyboards/xelus/pachi/rgb/rev2/config.h | 2 +- keyboards/xelus/valor/rev2/config.h | 2 +- keyboards/yandrstudio/nz64/config.h | 2 +- keyboards/yandrstudio/nz67v2/config.h | 2 +- keyboards/yandrstudio/tg67/config.h | 2 +- keyboards/ymdk/id75/config.h | 2 +- keyboards/ymdk/ymd09/config.h | 2 +- keyboards/ymdk/ymd40/air40/config.h | 2 +- keyboards/ymdk/ymd75/rev4/iso/config.h | 2 +- keyboards/yncognito/batpad/config.h | 2 +- keyboards/yushakobo/quick17/config.h | 2 +- quantum/rgb_matrix/rgb_matrix.c | 2 +- 353 files changed, 354 insertions(+), 353 deletions(-) (limited to 'quantum') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 52747c4a5a..45c50a9242 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -122,7 +122,6 @@ "PS2_DATA_PIN": {"info_key": "ps2.data_pin"}, // RGB Matrix - "RGB_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "rgb_matrix.sleep", "value_type": "bool"}, "RGB_MATRIX_CENTER": {"info_key": "rgb_matrix.center_point", "value_type": "array.int"}, "RGB_MATRIX_HUE_STEP": {"info_key": "rgb_matrix.hue_steps", "value_type": "int"}, "RGB_MATRIX_KEYRELEASES": {"info_key": "rgb_matrix.react_on_keyup", "value_type": "bool"}, @@ -130,6 +129,7 @@ "RGB_MATRIX_LED_PROCESS_LIMIT": {"info_key": "rgb_matrix.led_process_limit", "value_type": "int", "to_json": false}, "RGB_MATRIX_MAXIMUM_BRIGHTNESS": {"info_key": "rgb_matrix.max_brightness", "value_type": "int"}, "RGB_MATRIX_SAT_STEP": {"info_key": "rgb_matrix.sat_steps", "value_type": "int"}, + "RGB_MATRIX_SLEEP": {"info_key": "rgb_matrix.sleep", "value_type": "bool"}, "RGB_MATRIX_SPD_STEP": {"info_key": "rgb_matrix.speed_steps", "value_type": "int"}, "RGB_MATRIX_SPLIT": {"info_key": "rgb_matrix.split_count", "value_type": "array.int"}, "RGB_MATRIX_TIMEOUT": {"info_key": "rgb_matrix.timeout", "value_type": "int"}, @@ -225,6 +225,7 @@ "PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true}, "QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int", "deprecated": true}, "RGB_DI_PIN": {"info_key": "rgblight.pin", "invalid": true, "replace_with": "WS2812_DI_PIN or APA102_DI_PIN"}, + "RGB_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "_invalid.rgb_matrix_sleep", "invalid": true, "replace_with": "RGB_MATRIX_SLEEP"}, "RGBLIGHT_ANIMATIONS": {"info_key": "_invalid.rgblight.animations.all", "value_type": "bool", "invalid": true}, "TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "bool", "deprecated": true}, "TAPPING_FORCE_HOLD_PER_KEY": {"info_key": "tapping.force_hold_per_key", "value_type": "bool", "deprecated": true}, diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 53e387ee70..5a67f64c1b 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -869,7 +869,7 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master ```c #define RGB_MATRIX_KEYRELEASES // reactive effects respond to keyreleases (instead of keypresses) #define RGB_MATRIX_TIMEOUT 0 // number of milliseconds to wait until rgb automatically turns off -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/1upkeyboards/1upocarina/config.h b/keyboards/1upkeyboards/1upocarina/config.h index 4431ef6bdb..a7190820cf 100644 --- a/keyboards/1upkeyboards/1upocarina/config.h +++ b/keyboards/1upkeyboards/1upocarina/config.h @@ -19,7 +19,7 @@ #define RGB_MATRIX_LED_COUNT 32 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/1upkeyboards/1upslider8/config.h b/keyboards/1upkeyboards/1upslider8/config.h index 059d16f3fa..fd945e1488 100644 --- a/keyboards/1upkeyboards/1upslider8/config.h +++ b/keyboards/1upkeyboards/1upslider8/config.h @@ -25,5 +25,5 @@ #define RGB_MATRIX_LED_COUNT 8 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/1upkeyboards/1upsuper16v3/config.h b/keyboards/1upkeyboards/1upsuper16v3/config.h index 41e1679d48..fe4110ebba 100644 --- a/keyboards/1upkeyboards/1upsuper16v3/config.h +++ b/keyboards/1upkeyboards/1upsuper16v3/config.h @@ -18,5 +18,5 @@ #define RGB_MATRIX_LED_COUNT 48 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/1upkeyboards/pi40/config.h b/keyboards/1upkeyboards/pi40/config.h index 361982d153..9b2915ebd4 100644 --- a/keyboards/1upkeyboards/pi40/config.h +++ b/keyboards/1upkeyboards/pi40/config.h @@ -13,7 +13,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_FRAMEBUFFER_EFFECTS #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/1upkeyboards/pi50/config.h b/keyboards/1upkeyboards/pi50/config.h index 4c17e6a4f0..7a053d5ae4 100644 --- a/keyboards/1upkeyboards/pi50/config.h +++ b/keyboards/1upkeyboards/pi50/config.h @@ -11,7 +11,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ #define LOCKING_SUPPORT_ENABLE diff --git a/keyboards/1upkeyboards/pi60/config.h b/keyboards/1upkeyboards/pi60/config.h index 6bbbb2293c..c54d2e4a7a 100644 --- a/keyboards/1upkeyboards/pi60/config.h +++ b/keyboards/1upkeyboards/pi60/config.h @@ -6,7 +6,7 @@ #define RGB_MATRIX_LED_COUNT 21 //#define RGB_MATRIX_FRAMEBUFFER_EFFECTS //#define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/1upkeyboards/pi60_hse/config.h b/keyboards/1upkeyboards/pi60_hse/config.h index b7c4d5e8bc..5048b1387c 100644 --- a/keyboards/1upkeyboards/pi60_hse/config.h +++ b/keyboards/1upkeyboards/pi60_hse/config.h @@ -6,7 +6,7 @@ #define RGB_MATRIX_LED_COUNT 16 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/1upkeyboards/pi60_rgb/config.h b/keyboards/1upkeyboards/pi60_rgb/config.h index b0747bd56d..e4bd317972 100644 --- a/keyboards/1upkeyboards/pi60_rgb/config.h +++ b/keyboards/1upkeyboards/pi60_rgb/config.h @@ -6,7 +6,7 @@ #define RGB_MATRIX_LED_COUNT 61 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 125 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/1upkeyboards/super16v2/config.h b/keyboards/1upkeyboards/super16v2/config.h index 73d8badc5e..fefd463686 100644 --- a/keyboards/1upkeyboards/super16v2/config.h +++ b/keyboards/1upkeyboards/super16v2/config.h @@ -22,7 +22,7 @@ #define RGB_MATRIX_LED_COUNT 20 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/1upkeyboards/sweet16v2/kb2040/config.h b/keyboards/1upkeyboards/sweet16v2/kb2040/config.h index e4609962f1..03f7842f45 100644 --- a/keyboards/1upkeyboards/sweet16v2/kb2040/config.h +++ b/keyboards/1upkeyboards/sweet16v2/kb2040/config.h @@ -19,7 +19,7 @@ #define RGB_MATRIX_LED_COUNT 20 #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h b/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h index e4609962f1..03f7842f45 100644 --- a/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h +++ b/keyboards/1upkeyboards/sweet16v2/pro_micro/config.h @@ -19,7 +19,7 @@ #define RGB_MATRIX_LED_COUNT 20 #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/3keyecosystem/2key2/config.h b/keyboards/3keyecosystem/2key2/config.h index 49bd09eb7e..d6c5e10cc1 100644 --- a/keyboards/3keyecosystem/2key2/config.h +++ b/keyboards/3keyecosystem/2key2/config.h @@ -24,7 +24,7 @@ along with this program. If not, see . #define RGB_MATRIX_DEFAULT_SPD 20 #define RGB_MATRIX_DEFAULT_VAL 128 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define ENABLE_RGB_MATRIX_ALPHAS_MODS #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/acheron/apollo/87h/delta/config.h b/keyboards/acheron/apollo/87h/delta/config.h index 0798ffa70b..6d3046ca26 100644 --- a/keyboards/acheron/apollo/87h/delta/config.h +++ b/keyboards/acheron/apollo/87h/delta/config.h @@ -36,7 +36,7 @@ along with this program. If not, see . #define RGB_MATRIX_DEFAULT_VAL 60 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/acheron/apollo/87h/gamma/config.h b/keyboards/acheron/apollo/87h/gamma/config.h index 37c0aaef64..ee75fe347c 100644 --- a/keyboards/acheron/apollo/87h/gamma/config.h +++ b/keyboards/acheron/apollo/87h/gamma/config.h @@ -33,7 +33,7 @@ along with this program. If not, see . #define RGB_MATRIX_DEFAULT_VAL 80 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_HUE_WAVE #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/acheron/apollo/87htsc/config.h b/keyboards/acheron/apollo/87htsc/config.h index e8dd40b32f..3ba0c3c224 100644 --- a/keyboards/acheron/apollo/87htsc/config.h +++ b/keyboards/acheron/apollo/87htsc/config.h @@ -36,7 +36,7 @@ along with this program. If not, see . #define RGB_MATRIX_DEFAULT_VAL 60 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/acheron/apollo/88htsc/config.h b/keyboards/acheron/apollo/88htsc/config.h index 0798ffa70b..6d3046ca26 100644 --- a/keyboards/acheron/apollo/88htsc/config.h +++ b/keyboards/acheron/apollo/88htsc/config.h @@ -36,7 +36,7 @@ along with this program. If not, see . #define RGB_MATRIX_DEFAULT_VAL 60 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/adpenrose/akemipad/config.h b/keyboards/adpenrose/akemipad/config.h index 230453c3a0..e1dac88629 100644 --- a/keyboards/adpenrose/akemipad/config.h +++ b/keyboards/adpenrose/akemipad/config.h @@ -13,7 +13,7 @@ #define RGB_MATRIX_LED_COUNT 27 #define RGB_MATRIX_CENTER { 60, 77 } #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 175 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #ifdef RGB_MATRIX_ENABLE // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/aeboards/satellite/rev1/config.h b/keyboards/aeboards/satellite/rev1/config.h index 429bc2af54..19f0f1299e 100644 --- a/keyboards/aeboards/satellite/rev1/config.h +++ b/keyboards/aeboards/satellite/rev1/config.h @@ -28,7 +28,7 @@ #define RGB_MATRIX_DEFAULT_VAL 80 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/akko/5087/config.h b/keyboards/akko/5087/config.h index 3a6b7030ee..70aefbc99b 100644 --- a/keyboards/akko/5087/config.h +++ b/keyboards/akko/5087/config.h @@ -45,7 +45,7 @@ #define RGB_MATRIX_LED_COUNT 87 #define RGB_TRIGGER_ON_KEYDOWN -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/akko/5108/config.h b/keyboards/akko/5108/config.h index 7154ce44d2..0f205d4b1f 100644 --- a/keyboards/akko/5108/config.h +++ b/keyboards/akko/5108/config.h @@ -43,7 +43,7 @@ #define RGB_MATRIX_LED_COUNT 108 #define RGB_TRIGGER_ON_KEYDOWN -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/akko/acr87/config.h b/keyboards/akko/acr87/config.h index 4c1fb9afa1..cbd3cb2a9c 100644 --- a/keyboards/akko/acr87/config.h +++ b/keyboards/akko/acr87/config.h @@ -41,7 +41,7 @@ #define RGB_MATRIX_LED_COUNT 135 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_TRIGGER_ON_KEYDOWN #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/akko/top40/config.h b/keyboards/akko/top40/config.h index 1d601a189c..36948fe1d3 100644 --- a/keyboards/akko/top40/config.h +++ b/keyboards/akko/top40/config.h @@ -39,7 +39,7 @@ #define RGB_MATRIX_LED_COUNT 76 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/atlantis/ak81_ve/config.h b/keyboards/atlantis/ak81_ve/config.h index c6e12504a3..f2ebd96e28 100644 --- a/keyboards/atlantis/ak81_ve/config.h +++ b/keyboards/atlantis/ak81_ve/config.h @@ -24,7 +24,7 @@ #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED true +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_LED_COUNT 96 #define RGB_MATRIX_DEFAULT_HUE 170 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130 diff --git a/keyboards/atlantis/ps17/config.h b/keyboards/atlantis/ps17/config.h index a41720aeb5..a125b48049 100644 --- a/keyboards/atlantis/ps17/config.h +++ b/keyboards/atlantis/ps17/config.h @@ -11,7 +11,7 @@ /* RGB matrix */ #define RGB_MATRIX_LED_COUNT 28 #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #ifdef RGB_MATRIX_ENABLE // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/axolstudio/yeti/hotswap/config.h b/keyboards/axolstudio/yeti/hotswap/config.h index 02077e05a7..dc7933bad0 100644 --- a/keyboards/axolstudio/yeti/hotswap/config.h +++ b/keyboards/axolstudio/yeti/hotswap/config.h @@ -60,7 +60,7 @@ along with this program. If not, see . # define ENABLE_RGB_MATRIX_MULTISPLASH # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // 16 is equivalent to limiting to 60fps -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND # define RGB_MATRIX_LED_COUNT 64 #endif diff --git a/keyboards/bandominedoni/config.h b/keyboards/bandominedoni/config.h index 7dfa48fbd4..47830a9f1d 100644 --- a/keyboards/bandominedoni/config.h +++ b/keyboards/bandominedoni/config.h @@ -59,7 +59,7 @@ // https://docs.qmk.fm/#/feature_rgb_matrix // Enable suspend mode. -# define RGB_DISABLE_WHEN_USB_SUSPENDED true +# define RGB_MATRIX_SLEEP # ifdef CONSOLE_ENABLE # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE diff --git a/keyboards/basekeys/trifecta/config.h b/keyboards/basekeys/trifecta/config.h index 341f6f03e0..18f189cbea 100644 --- a/keyboards/basekeys/trifecta/config.h +++ b/keyboards/basekeys/trifecta/config.h @@ -30,7 +30,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -//# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +//# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/bastardkb/charybdis/config.h b/keyboards/bastardkb/charybdis/config.h index 2cd4394da0..7da14beb8d 100644 --- a/keyboards/bastardkb/charybdis/config.h +++ b/keyboards/bastardkb/charybdis/config.h @@ -37,7 +37,7 @@ #ifdef RGB_MATRIX_ENABLE # define SPLIT_TRANSPORT_MIRROR # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES // Startup values. diff --git a/keyboards/bastardkb/dilemma/3x5_3/config.h b/keyboards/bastardkb/dilemma/3x5_3/config.h index aaac4c880a..5488579dee 100644 --- a/keyboards/bastardkb/dilemma/3x5_3/config.h +++ b/keyboards/bastardkb/dilemma/3x5_3/config.h @@ -46,7 +46,7 @@ /* RGB matrix support. */ #ifdef RGB_MATRIX_ENABLE # define SPLIT_TRANSPORT_MIRROR -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/bastardkb/dilemma/4x6_4/config.h b/keyboards/bastardkb/dilemma/4x6_4/config.h index 9c76cb76f9..bd595385b0 100644 --- a/keyboards/bastardkb/dilemma/4x6_4/config.h +++ b/keyboards/bastardkb/dilemma/4x6_4/config.h @@ -45,7 +45,7 @@ /* RGB matrix support. */ #define SPLIT_TRANSPORT_MIRROR -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/bastardkb/scylla/config.h b/keyboards/bastardkb/scylla/config.h index ec538f8a55..bc3bcb4833 100644 --- a/keyboards/bastardkb/scylla/config.h +++ b/keyboards/bastardkb/scylla/config.h @@ -24,6 +24,6 @@ # define RGB_MATRIX_LED_COUNT 58 # define RGB_MATRIX_SPLIT { 29, 29 } # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES #endif diff --git a/keyboards/bastardkb/skeletyl/config.h b/keyboards/bastardkb/skeletyl/config.h index 58dacb5c53..48254935cb 100644 --- a/keyboards/bastardkb/skeletyl/config.h +++ b/keyboards/bastardkb/skeletyl/config.h @@ -24,6 +24,6 @@ # define RGB_MATRIX_LED_COUNT 36 # define RGB_MATRIX_SPLIT { 18, 18 } # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES #endif diff --git a/keyboards/bastardkb/tbkmini/config.h b/keyboards/bastardkb/tbkmini/config.h index 1a1540b280..6705619ee3 100644 --- a/keyboards/bastardkb/tbkmini/config.h +++ b/keyboards/bastardkb/tbkmini/config.h @@ -24,6 +24,6 @@ # define RGB_MATRIX_LED_COUNT 42 # define RGB_MATRIX_SPLIT { 21, 21 } # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES #endif diff --git a/keyboards/binepad/bn006/config.h b/keyboards/binepad/bn006/config.h index 0569ccff03..9ca25f2d9e 100755 --- a/keyboards/binepad/bn006/config.h +++ b/keyboards/binepad/bn006/config.h @@ -14,7 +14,7 @@ #define RGB_MATRIX_LED_COUNT 6 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_BREATHING // Sets the default mode, if none has been set #define RGB_TRIGGER_ON_KEYDOWN // Triggers RGB keypress events on key down. This makes RGB control feel more responsive. This may cause RGB to not function properly on some boards diff --git a/keyboards/blockboy/ac980mini/config.h b/keyboards/blockboy/ac980mini/config.h index b98cb7964f..0734d9beaf 100644 --- a/keyboards/blockboy/ac980mini/config.h +++ b/keyboards/blockboy/ac980mini/config.h @@ -10,7 +10,7 @@ #ifdef RGB_MATRIX_ENABLE //# define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended //# define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/boardsource/microdox/v2/config.h b/keyboards/boardsource/microdox/v2/config.h index 236254317a..34bf18fcc8 100644 --- a/keyboards/boardsource/microdox/v2/config.h +++ b/keyboards/boardsource/microdox/v2/config.h @@ -5,7 +5,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 #define RGB_MATRIX_LED_COUNT 44 #define RGB_MATRIX_SPLIT { 22, 22 } -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define ENABLE_RGB_MATRIX_ALPHAS_MODS #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT #define ENABLE_RGB_MATRIX_BREATHING diff --git a/keyboards/boardsource/the_mark/config.h b/keyboards/boardsource/the_mark/config.h index 6d9c9642de..b87d7af2e5 100644 --- a/keyboards/boardsource/the_mark/config.h +++ b/keyboards/boardsource/the_mark/config.h @@ -19,7 +19,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_COUNT 24 # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN # define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT # define ENABLE_RGB_MATRIX_BREATHING diff --git a/keyboards/boardsource/unicorne/config.h b/keyboards/boardsource/unicorne/config.h index 5843a0c847..68172deb69 100644 --- a/keyboards/boardsource/unicorne/config.h +++ b/keyboards/boardsource/unicorne/config.h @@ -4,7 +4,7 @@ #define RGB_MATRIX_LED_COUNT 54 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_ALPHAS_MODS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RP2040_BOOTLOADER_DOUBLE_TAP_RESET diff --git a/keyboards/canary/canary60rgb/v1/config.h b/keyboards/canary/canary60rgb/v1/config.h index ab5c817000..35ce5e53b7 100644 --- a/keyboards/canary/canary60rgb/v1/config.h +++ b/keyboards/canary/canary60rgb/v1/config.h @@ -16,7 +16,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/checkerboards/quark_lp/config.h b/keyboards/checkerboards/quark_lp/config.h index ca124775d7..1921c408bd 100644 --- a/keyboards/checkerboards/quark_lp/config.h +++ b/keyboards/checkerboards/quark_lp/config.h @@ -25,7 +25,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_LED_COUNT 51 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 125 // limits maximum brightness of LEDs to 125 out of 255. Higher may cause the controller to crash. // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/cherrybstudio/cb87rgb/config.h b/keyboards/cherrybstudio/cb87rgb/config.h index a4643fae38..95352f29be 100644 --- a/keyboards/cherrybstudio/cb87rgb/config.h +++ b/keyboards/cherrybstudio/cb87rgb/config.h @@ -14,7 +14,7 @@ along with this program. If not, see . #pragma once #define RGB_MATRIX_LED_COUNT 92 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 #define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/chosfox/cf81/config.h b/keyboards/chosfox/cf81/config.h index ae0d87d935..7ecf8dd905 100644 --- a/keyboards/chosfox/cf81/config.h +++ b/keyboards/chosfox/cf81/config.h @@ -40,7 +40,7 @@ #define DRIVER_2_LED_TOTAL 20 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 22) -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_TRIGGER_ON_KEYDOWN #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/chromatonemini/config.h b/keyboards/chromatonemini/config.h index 6643e610c0..42e8f0f525 100644 --- a/keyboards/chromatonemini/config.h +++ b/keyboards/chromatonemini/config.h @@ -51,7 +51,7 @@ along with this program. If not, see . // https://docs.qmk.fm/#/feature_rgb_matrix // Enable suspend mode. -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP #endif // RGB_MATRIX_ENABLE /* Audio */ diff --git a/keyboards/churrosoft/deck8/rgb/config.h b/keyboards/churrosoft/deck8/rgb/config.h index 2454c42fba..e22e1caef3 100644 --- a/keyboards/churrosoft/deck8/rgb/config.h +++ b/keyboards/churrosoft/deck8/rgb/config.h @@ -21,7 +21,7 @@ #define RGB_MATRIX_DEFAULT_HUE 152 #define RGB_MATRIX_DEFAULT_SAT 232 #define RGB_MATRIX_DEFAULT_VAL 180 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/clickety_split/leeloo/keymaps/default/config.h b/keyboards/clickety_split/leeloo/keymaps/default/config.h index e41b3d34aa..2fa2ed15b6 100644 --- a/keyboards/clickety_split/leeloo/keymaps/default/config.h +++ b/keyboards/clickety_split/leeloo/keymaps/default/config.h @@ -23,7 +23,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 115 // limits maximum brightness of LEDs to 150 out of 255. diff --git a/keyboards/clickety_split/leeloo/rev2/config.h b/keyboards/clickety_split/leeloo/rev2/config.h index 2aa1acd972..8150511acd 100644 --- a/keyboards/clickety_split/leeloo/rev2/config.h +++ b/keyboards/clickety_split/leeloo/rev2/config.h @@ -18,5 +18,5 @@ # define RGB_MATRIX_LED_COUNT 74 # define RGB_MATRIX_SPLIT {37, 37} -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/clickety_split/leeloo/rev3/config.h b/keyboards/clickety_split/leeloo/rev3/config.h index ac93150221..a30477391b 100644 --- a/keyboards/clickety_split/leeloo/rev3/config.h +++ b/keyboards/clickety_split/leeloo/rev3/config.h @@ -18,5 +18,5 @@ # define RGB_MATRIX_LED_COUNT 58 # define RGB_MATRIX_SPLIT {29, 29} -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/controllerworks/mini36/keymaps/default/config.h b/keyboards/controllerworks/mini36/keymaps/default/config.h index 77da61828c..aeca5716c0 100644 --- a/keyboards/controllerworks/mini36/keymaps/default/config.h +++ b/keyboards/controllerworks/mini36/keymaps/default/config.h @@ -21,7 +21,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/controllerworks/mini36/keymaps/via/config.h b/keyboards/controllerworks/mini36/keymaps/via/config.h index 77da61828c..aeca5716c0 100644 --- a/keyboards/controllerworks/mini36/keymaps/via/config.h +++ b/keyboards/controllerworks/mini36/keymaps/via/config.h @@ -21,7 +21,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/controllerworks/mini42/keymaps/default/config.h b/keyboards/controllerworks/mini42/keymaps/default/config.h index 77da61828c..aeca5716c0 100644 --- a/keyboards/controllerworks/mini42/keymaps/default/config.h +++ b/keyboards/controllerworks/mini42/keymaps/default/config.h @@ -21,7 +21,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/controllerworks/mini42/keymaps/via/config.h b/keyboards/controllerworks/mini42/keymaps/via/config.h index e11d5aa37f..5e70c09343 100644 --- a/keyboards/controllerworks/mini42/keymaps/via/config.h +++ b/keyboards/controllerworks/mini42/keymaps/via/config.h @@ -22,7 +22,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/bermeo/config.h b/keyboards/crkbd/keymaps/bermeo/config.h index fce27a7265..2cd5bf0263 100644 --- a/keyboards/crkbd/keymaps/bermeo/config.h +++ b/keyboards/crkbd/keymaps/bermeo/config.h @@ -73,7 +73,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/colemad/config.h b/keyboards/crkbd/keymaps/colemad/config.h index f23a3a4177..3e4717b464 100644 --- a/keyboards/crkbd/keymaps/colemad/config.h +++ b/keyboards/crkbd/keymaps/colemad/config.h @@ -10,7 +10,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 #define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_HUE_STEP 8 diff --git a/keyboards/crkbd/keymaps/colemak_luna/config.h b/keyboards/crkbd/keymaps/colemak_luna/config.h index 1975c91366..546e01bdba 100644 --- a/keyboards/crkbd/keymaps/colemak_luna/config.h +++ b/keyboards/crkbd/keymaps/colemak_luna/config.h @@ -45,7 +45,7 @@ along with this program. If not, see . //# define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended //# define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/crkdves/config.h b/keyboards/crkbd/keymaps/crkdves/config.h index 07d930137f..e2561543b6 100644 --- a/keyboards/crkbd/keymaps/crkdves/config.h +++ b/keyboards/crkbd/keymaps/crkdves/config.h @@ -52,7 +52,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/crkqwes/config.h b/keyboards/crkbd/keymaps/crkqwes/config.h index b2209c7e6d..396e39f23d 100644 --- a/keyboards/crkbd/keymaps/crkqwes/config.h +++ b/keyboards/crkbd/keymaps/crkqwes/config.h @@ -68,7 +68,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/gotham/config.h b/keyboards/crkbd/keymaps/gotham/config.h index 753854c01c..fd9ad6eafe 100644 --- a/keyboards/crkbd/keymaps/gotham/config.h +++ b/keyboards/crkbd/keymaps/gotham/config.h @@ -42,7 +42,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. # define RGB_MATRIX_HUE_STEP 32 # define RGB_MATRIX_SAT_STEP 64 diff --git a/keyboards/crkbd/keymaps/jpe230/config.h b/keyboards/crkbd/keymaps/jpe230/config.h index 815cb90706..4f1f5471d1 100644 --- a/keyboards/crkbd/keymaps/jpe230/config.h +++ b/keyboards/crkbd/keymaps/jpe230/config.h @@ -27,7 +27,7 @@ * Common RGB Configuration * --------------------------- */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_DISABLE_TIMEOUT CUSTOM_OLED_TIMEOUT #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 #define RGB_MATRIX_DEFAULT_HUE 215 diff --git a/keyboards/crkbd/keymaps/kidbrazil/config.h b/keyboards/crkbd/keymaps/kidbrazil/config.h index 33655b4c9d..6b491686f3 100644 --- a/keyboards/crkbd/keymaps/kidbrazil/config.h +++ b/keyboards/crkbd/keymaps/kidbrazil/config.h @@ -49,7 +49,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE //# define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/nimishgautam/config.h b/keyboards/crkbd/keymaps/nimishgautam/config.h index b4c5bc9e0a..b46fa30794 100644 --- a/keyboards/crkbd/keymaps/nimishgautam/config.h +++ b/keyboards/crkbd/keymaps/nimishgautam/config.h @@ -58,7 +58,7 @@ #define RGB_MATRIX_SAT_STEP 8 #define RGB_MATRIX_VAL_STEP 8 #define RGB_MATRIX_SPD_STEP 10 - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/rpbaptist/config.h b/keyboards/crkbd/keymaps/rpbaptist/config.h index 82064abb57..84f91a035b 100644 --- a/keyboards/crkbd/keymaps/rpbaptist/config.h +++ b/keyboards/crkbd/keymaps/rpbaptist/config.h @@ -58,7 +58,7 @@ along with this program. If not, see . # define GAMING_IDLE_TIMEOUT 10000 # define RGB_MATRIX_TYPING_ACTIVE RGB_MATRIX_SOLID_REACTIVE_SIMPLE # define RGB_MATRIX_TYPING_PASSIVE RGB_MATRIX_CYCLE_ALL -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 135 # define RGB_MATRIX_HUE_STEP 6 diff --git a/keyboards/crkbd/keymaps/soundmonster/config.h b/keyboards/crkbd/keymaps/soundmonster/config.h index 97614f3b70..422d994bec 100644 --- a/keyboards/crkbd/keymaps/soundmonster/config.h +++ b/keyboards/crkbd/keymaps/soundmonster/config.h @@ -66,7 +66,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/crkbd/keymaps/thunderbird2086/config.h b/keyboards/crkbd/keymaps/thunderbird2086/config.h index 8251bc9b8f..2c6e1a9e54 100644 --- a/keyboards/crkbd/keymaps/thunderbird2086/config.h +++ b/keyboards/crkbd/keymaps/thunderbird2086/config.h @@ -55,7 +55,7 @@ # define SPLIT_LAYER_STATE_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_FRAMEBUFFER_EFFECTS -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. # define RGB_MATRIX_HUE_STEP 32 diff --git a/keyboards/crkbd/readme.md b/keyboards/crkbd/readme.md index 75267463b2..4297ee56d9 100644 --- a/keyboards/crkbd/readme.md +++ b/keyboards/crkbd/readme.md @@ -43,7 +43,7 @@ And in your `config.h` file, add the following: #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/darkproject/kd83a_bfg_edition/config.h b/keyboards/darkproject/kd83a_bfg_edition/config.h index 9cf993b861..0bc6f88ce1 100644 --- a/keyboards/darkproject/kd83a_bfg_edition/config.h +++ b/keyboards/darkproject/kd83a_bfg_edition/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/darkproject/kd87a_bfg_edition/config.h b/keyboards/darkproject/kd87a_bfg_edition/config.h index 4ac83ab9f6..a8173b53dd 100644 --- a/keyboards/darkproject/kd87a_bfg_edition/config.h +++ b/keyboards/darkproject/kd87a_bfg_edition/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/doio/kb12/config.h b/keyboards/doio/kb12/config.h index d853409b85..aaf474d3bf 100644 --- a/keyboards/doio/kb12/config.h +++ b/keyboards/doio/kb12/config.h @@ -20,7 +20,7 @@ /* RGB Matrix config */ #define RGB_MATRIX_LED_COUNT 12 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_UP_DOWN -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/doio/kb30/config.h b/keyboards/doio/kb30/config.h index 586a61c7a0..f958603a80 100644 --- a/keyboards/doio/kb30/config.h +++ b/keyboards/doio/kb30/config.h @@ -39,7 +39,7 @@ #define RGB_MATRIX_LED_COUNT 36 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_UP_DOWN -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/dp3000/config.h b/keyboards/dp3000/config.h index 26e9f037f5..8d889e2c9f 100644 --- a/keyboards/dp3000/config.h +++ b/keyboards/dp3000/config.h @@ -22,4 +22,4 @@ #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/dtisaac/dosa40rgb/config.h b/keyboards/dtisaac/dosa40rgb/config.h index 0ad383a688..8e5c59a87e 100644 --- a/keyboards/dtisaac/dosa40rgb/config.h +++ b/keyboards/dtisaac/dosa40rgb/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/dumbpad/v3x/config.h b/keyboards/dumbpad/v3x/config.h index 7667bb39d0..5c4d6bdf60 100644 --- a/keyboards/dumbpad/v3x/config.h +++ b/keyboards/dumbpad/v3x/config.h @@ -26,7 +26,7 @@ along with this program. If not, see . // Cleanup RGB #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/durgod/dgk6x/config.h b/keyboards/durgod/dgk6x/config.h index 7c85f977ba..e1626436a5 100644 --- a/keyboards/durgod/dgk6x/config.h +++ b/keyboards/durgod/dgk6x/config.h @@ -50,7 +50,7 @@ #define I2C1_TIMINGR_SCLH 0x0cU #define I2C1_TIMINGR_SCLL 0x22U -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/dztech/dz60rgb/v1/config.h b/keyboards/dztech/dz60rgb/v1/config.h index af72678922..2efe2189a5 100644 --- a/keyboards/dztech/dz60rgb/v1/config.h +++ b/keyboards/dztech/dz60rgb/v1/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/dztech/dz60rgb/v2/config.h b/keyboards/dztech/dz60rgb/v2/config.h index 2470e7b3f9..f0ddcc247f 100644 --- a/keyboards/dztech/dz60rgb/v2/config.h +++ b/keyboards/dztech/dz60rgb/v2/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz60rgb/v2_1/config.h b/keyboards/dztech/dz60rgb/v2_1/config.h index 05cfa7d4e1..9fa6c3b3c1 100644 --- a/keyboards/dztech/dz60rgb/v2_1/config.h +++ b/keyboards/dztech/dz60rgb/v2_1/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz60rgb_ansi/v1/config.h b/keyboards/dztech/dz60rgb_ansi/v1/config.h index 674871ec49..0d5c9ecfd5 100644 --- a/keyboards/dztech/dz60rgb_ansi/v1/config.h +++ b/keyboards/dztech/dz60rgb_ansi/v1/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/dztech/dz60rgb_ansi/v2/config.h b/keyboards/dztech/dz60rgb_ansi/v2/config.h index 0b458818bc..afd33f038c 100644 --- a/keyboards/dztech/dz60rgb_ansi/v2/config.h +++ b/keyboards/dztech/dz60rgb_ansi/v2/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz60rgb_ansi/v2_1/config.h b/keyboards/dztech/dz60rgb_ansi/v2_1/config.h index 75ccef8193..94b1a08a04 100644 --- a/keyboards/dztech/dz60rgb_ansi/v2_1/config.h +++ b/keyboards/dztech/dz60rgb_ansi/v2_1/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended // # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz60rgb_wkl/v1/config.h b/keyboards/dztech/dz60rgb_wkl/v1/config.h index ac79efd26c..5b1fc610fd 100644 --- a/keyboards/dztech/dz60rgb_wkl/v1/config.h +++ b/keyboards/dztech/dz60rgb_wkl/v1/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/dztech/dz60rgb_wkl/v2/config.h b/keyboards/dztech/dz60rgb_wkl/v2/config.h index a341a18e0d..200b96f85f 100644 --- a/keyboards/dztech/dz60rgb_wkl/v2/config.h +++ b/keyboards/dztech/dz60rgb_wkl/v2/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz60rgb_wkl/v2_1/config.h b/keyboards/dztech/dz60rgb_wkl/v2_1/config.h index 13169e21f5..b8d0a248da 100644 --- a/keyboards/dztech/dz60rgb_wkl/v2_1/config.h +++ b/keyboards/dztech/dz60rgb_wkl/v2_1/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/dztech/dz64rgb/config.h b/keyboards/dztech/dz64rgb/config.h index edfc7b7171..91f2d49fea 100644 --- a/keyboards/dztech/dz64rgb/config.h +++ b/keyboards/dztech/dz64rgb/config.h @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define ENABLE_RGB_MATRIX_ALPHAS_MODS #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT #define ENABLE_RGB_MATRIX_BREATHING diff --git a/keyboards/dztech/dz65rgb/v1/config.h b/keyboards/dztech/dz65rgb/v1/config.h index b9203346dd..a9993dbdd1 100644 --- a/keyboards/dztech/dz65rgb/v1/config.h +++ b/keyboards/dztech/dz65rgb/v1/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/dztech/dz65rgb/v2/config.h b/keyboards/dztech/dz65rgb/v2/config.h index 600687c245..b079ce2b14 100644 --- a/keyboards/dztech/dz65rgb/v2/config.h +++ b/keyboards/dztech/dz65rgb/v2/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/dztech/dz65rgb/v3/config.h b/keyboards/dztech/dz65rgb/v3/config.h index 1398a378f8..c88dc665c9 100755 --- a/keyboards/dztech/dz65rgb/v3/config.h +++ b/keyboards/dztech/dz65rgb/v3/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define USB_SUSPEND_WAKEUP_DELAY 5000 # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/dztech/tofu/ii/v1/config.h b/keyboards/dztech/tofu/ii/v1/config.h index 36741e1168..db4bb543ab 100644 --- a/keyboards/dztech/tofu/ii/v1/config.h +++ b/keyboards/dztech/tofu/ii/v1/config.h @@ -24,7 +24,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define USB_SUSPEND_WAKEUP_DELAY 5000 # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/dztech/tofu/jr/v1/config.h b/keyboards/dztech/tofu/jr/v1/config.h index 74e5ed0848..c5a8140def 100644 --- a/keyboards/dztech/tofu/jr/v1/config.h +++ b/keyboards/dztech/tofu/jr/v1/config.h @@ -24,7 +24,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define USB_SUSPEND_WAKEUP_DELAY 5000 # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/era/sirind/klein_sd/config.h b/keyboards/era/sirind/klein_sd/config.h index ae1d4a9e1d..28c37979dd 100644 --- a/keyboards/era/sirind/klein_sd/config.h +++ b/keyboards/era/sirind/klein_sd/config.h @@ -22,4 +22,4 @@ /* RGB Matrix */ #define RGB_MATRIX_DEFAULT_VAL 60 -#define RGB_DISABLE_WHEN_USB_SUSPENDED \ No newline at end of file +#define RGB_MATRIX_SLEEP \ No newline at end of file diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h index af1e14c49f..b33de876e8 100644 --- a/keyboards/ergodox_ez/config.h +++ b/keyboards/ergodox_ez/config.h @@ -100,7 +100,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_PROCESS_LIMIT 5 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h index 05d30392ff..b9617654e8 100644 --- a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h +++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h @@ -13,7 +13,7 @@ #define DEBOUNCE 15 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #undef FORCE_NKRO #define FORCE_NKRO diff --git a/keyboards/flashquark/horizon_z/config.h b/keyboards/flashquark/horizon_z/config.h index ddeafe578d..65ff45eca1 100755 --- a/keyboards/flashquark/horizon_z/config.h +++ b/keyboards/flashquark/horizon_z/config.h @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/frooastboard/walnut/config.h b/keyboards/frooastboard/walnut/config.h index 710cd19342..e7ec99d5de 100644 --- a/keyboards/frooastboard/walnut/config.h +++ b/keyboards/frooastboard/walnut/config.h @@ -9,7 +9,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 191 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT diff --git a/keyboards/geekboards/macropad_v2/config.h b/keyboards/geekboards/macropad_v2/config.h index 47f9064e45..c18d20ac60 100644 --- a/keyboards/geekboards/macropad_v2/config.h +++ b/keyboards/geekboards/macropad_v2/config.h @@ -83,5 +83,5 @@ # define RGB_MATRIX_DEFAULT_SPD 30 #endif //RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define WAIT_FOR_USB diff --git a/keyboards/geekboards/tester/config.h b/keyboards/geekboards/tester/config.h index c71ee9f351..acbe1c7c14 100644 --- a/keyboards/geekboards/tester/config.h +++ b/keyboards/geekboards/tester/config.h @@ -4,7 +4,7 @@ #define LOCKING_RESYNC_ENABLE #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/giabalanai/config.h b/keyboards/giabalanai/config.h index e4946a3bb3..d7a6167620 100644 --- a/keyboards/giabalanai/config.h +++ b/keyboards/giabalanai/config.h @@ -69,7 +69,7 @@ along with this program. If not, see . // https://docs.qmk.fm/#/feature_rgb_matrix // Enable suspend mode. -// # define RGB_DISABLE_WHEN_USB_SUSPENDED true +// # define RGB_MATRIX_SLEEP # define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT diff --git a/keyboards/gizmo_engineering/gk6/config.h b/keyboards/gizmo_engineering/gk6/config.h index 5204496e66..9273b6117b 100755 --- a/keyboards/gizmo_engineering/gk6/config.h +++ b/keyboards/gizmo_engineering/gk6/config.h @@ -26,7 +26,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT diff --git a/keyboards/gkeyboard/gpad8_2r/config.h b/keyboards/gkeyboard/gpad8_2r/config.h index 88debbe193..4c3c692a43 100644 --- a/keyboards/gkeyboard/gpad8_2r/config.h +++ b/keyboards/gkeyboard/gpad8_2r/config.h @@ -6,7 +6,7 @@ #define RGB_MATRIX_LED_COUNT 16 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h index b3970ff04a..2289031f11 100644 --- a/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h +++ b/keyboards/gl516/j73gl/keymaps/via_rgb_matrix/config.h @@ -31,7 +31,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // enable framebuffer effects - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/gmmk/gmmk2/p65/config.h b/keyboards/gmmk/gmmk2/p65/config.h index ce9ff69433..6153e9a6e4 100644 --- a/keyboards/gmmk/gmmk2/p65/config.h +++ b/keyboards/gmmk/gmmk2/p65/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* SPI Config for LED Driver */ #define SPI_DRIVER SPIDM2 diff --git a/keyboards/gmmk/gmmk2/p96/config.h b/keyboards/gmmk/gmmk2/p96/config.h index fb21c571f5..aade71629b 100644 --- a/keyboards/gmmk/gmmk2/p96/config.h +++ b/keyboards/gmmk/gmmk2/p96/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 995dd95ec8..eb684363d0 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -31,7 +31,7 @@ #define AW20216S_EN_PIN_1 C13 #define AW20216S_EN_PIN_2 C13 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h index 18271fb4d2..80b75eed52 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrebrait/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms) -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP #endif // A debounce of 8 represents a minimum key press time of just under 1 refresh at 120Hz diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h index dc3dfefab0..af4e385727 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/andrewcharnley/config.h @@ -18,7 +18,7 @@ #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_LIGHT #define RGBLIGHT_DEFAULT_SAT 0 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h index 845262b7e8..e5c100f82c 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/hachetman/config.h @@ -18,5 +18,5 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_TIMEOUT 1200000 // 20 minutes (20 * 60 * 1000ms) - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #endif diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h index 74c018f7f1..94248fdf38 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/lalitmaganti/config.h @@ -16,4 +16,4 @@ along with this program. If not, see . #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED \ No newline at end of file +#define RGB_MATRIX_SLEEP \ No newline at end of file diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h index f37ff59c44..16918492fb 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/macos/config.h @@ -23,7 +23,7 @@ // #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR // Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP // Effects #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h index ece08ecfee..e8f906c1c1 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/mike1808/config.h @@ -17,7 +17,7 @@ #define COMBO_TERM 100 #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_TIMEOUT 90000 #define MACRO_TIMER 5 diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h index 8d8c35af49..0f4687fb71 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP #endif #define FORCE_NKRO diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h index 91d731faca..585032c245 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/stickandgum/config.h @@ -25,7 +25,7 @@ // #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR // Below added per: https://beta.docs.qmk.fm/using-qmk/hardware-features/lighting/feature_rgb_matrix#suspended-state-id-suspended-state - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h index 1cc3cdf228..7a35f5e0c6 100644 --- a/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h +++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/trwnh/config.h @@ -3,7 +3,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Heatmap, Rain #define RGB_MATRIX_KEYPRESSES // REACTIVE, SPLASH modes diff --git a/keyboards/handwired/colorlice/config.h b/keyboards/handwired/colorlice/config.h index 5c52df9ffa..c973aeb3d3 100644 --- a/keyboards/handwired/colorlice/config.h +++ b/keyboards/handwired/colorlice/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . #define LOCKING_RESYNC_ENABLE /* RGB LEDs */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/handwired/dactyl_minidox/keymaps/dlford/config.h b/keyboards/handwired/dactyl_minidox/keymaps/dlford/config.h index 783a2c46b1..a37a54c8fc 100644 --- a/keyboards/handwired/dactyl_minidox/keymaps/dlford/config.h +++ b/keyboards/handwired/dactyl_minidox/keymaps/dlford/config.h @@ -43,7 +43,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE // # define RGB_MATRIX_TIMEOUT 300000 // number of milliseconds to wait until disabling effects -// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// # define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. diff --git a/keyboards/handwired/dygma/raise/config.h b/keyboards/handwired/dygma/raise/config.h index f32a9ea4f0..6094235221 100644 --- a/keyboards/handwired/dygma/raise/config.h +++ b/keyboards/handwired/dygma/raise/config.h @@ -34,7 +34,7 @@ // At 100ms (10 fps), the matrix scan rate is ~355 scans per second under full load, and typing // accuracy is reasonably good. #define RGB_MATRIX_LED_FLUSH_LIMIT 100 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/handwired/hnah40rgb/config.h b/keyboards/handwired/hnah40rgb/config.h index 7b61de013b..39c502038a 100644 --- a/keyboards/handwired/hnah40rgb/config.h +++ b/keyboards/handwired/hnah40rgb/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/handwired/p65rgb/config.h b/keyboards/handwired/p65rgb/config.h index 326789b998..176aa6ec67 100644 --- a/keyboards/handwired/p65rgb/config.h +++ b/keyboards/handwired/p65rgb/config.h @@ -17,7 +17,7 @@ along with this program. If not, see . #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/config.h b/keyboards/handwired/tractyl_manuform/4x6_right/config.h index a1cbfedc0c..6a833fcd8e 100644 --- a/keyboards/handwired/tractyl_manuform/4x6_right/config.h +++ b/keyboards/handwired/tractyl_manuform/4x6_right/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . // WS2812 RGB LED strip input and number of LEDs #define RGB_MATRIX_LED_COUNT 62 #define RGB_MATRIX_SPLIT { 32, 30 } -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES // #define RGB_MATRIX_KEYRELEASES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/helix/rev3_4rows/config.h b/keyboards/helix/rev3_4rows/config.h index 000f99834a..5ab812c29b 100644 --- a/keyboards/helix/rev3_4rows/config.h +++ b/keyboards/helix/rev3_4rows/config.h @@ -45,7 +45,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 50 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/helix/rev3_5rows/config.h b/keyboards/helix/rev3_5rows/config.h index 44bbc5f194..7f1152979c 100644 --- a/keyboards/helix/rev3_5rows/config.h +++ b/keyboards/helix/rev3_5rows/config.h @@ -45,7 +45,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 64 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/hfdkb/ac001/config.h b/keyboards/hfdkb/ac001/config.h index 7d38c7392c..e10fe53456 100644 --- a/keyboards/hfdkb/ac001/config.h +++ b/keyboards/hfdkb/ac001/config.h @@ -33,7 +33,7 @@ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/hotdox76v2/config.h b/keyboards/hotdox76v2/config.h index 3d80775073..2788ae392e 100644 --- a/keyboards/hotdox76v2/config.h +++ b/keyboards/hotdox76v2/config.h @@ -26,7 +26,7 @@ #define RGB_MATRIX_LED_COUNT 86 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_CENTER \ { 112, 32 } diff --git a/keyboards/hs60/v1/config.h b/keyboards/hs60/v1/config.h index c864464390..c7b5329613 100644 --- a/keyboards/hs60/v1/config.h +++ b/keyboards/hs60/v1/config.h @@ -38,7 +38,7 @@ along with this program. If not, see . //This is experimental do not enable yet //#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 215 #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND diff --git a/keyboards/idobao/id42/config.h b/keyboards/idobao/id42/config.h index bac9dbf1bd..a5f0f96a76 100755 --- a/keyboards/idobao/id42/config.h +++ b/keyboards/idobao/id42/config.h @@ -8,7 +8,7 @@ #define RGB_MATRIX_LED_COUNT 42 - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to x out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES // enable key press effects diff --git a/keyboards/idobao/id61/config.h b/keyboards/idobao/id61/config.h index 5513787c4e..b7707bf180 100644 --- a/keyboards/idobao/id61/config.h +++ b/keyboards/idobao/id61/config.h @@ -17,7 +17,7 @@ #define RGB_MATRIX_LED_COUNT 61 // = 71 - 10 #endif - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to {x} out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/idobao/id63/config.h b/keyboards/idobao/id63/config.h index 214fb6ba6d..ddca9576b0 100644 --- a/keyboards/idobao/id63/config.h +++ b/keyboards/idobao/id63/config.h @@ -24,7 +24,7 @@ #define RGB_MATRIX_LED_COUNT (75 - 12) #endif - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to x out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/idobao/id67/config.h b/keyboards/idobao/id67/config.h index 7834bd33bb..e0685f4a8a 100644 --- a/keyboards/idobao/id67/config.h +++ b/keyboards/idobao/id67/config.h @@ -13,7 +13,7 @@ #define RGB_MATRIX_LED_COUNT (77 - 10) #endif - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to x out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/idobao/id75/keymaps/paryz/config.h b/keyboards/idobao/id75/keymaps/paryz/config.h index 625ce7a257..38c82875fa 100644 --- a/keyboards/idobao/id75/keymaps/paryz/config.h +++ b/keyboards/idobao/id75/keymaps/paryz/config.h @@ -16,5 +16,5 @@ #pragma once #define RGBLIGHT_SLEEP -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 diff --git a/keyboards/idobao/id80/v3/ansi/config.h b/keyboards/idobao/id80/v3/ansi/config.h index afe880fa8a..9b5b0ea291 100644 --- a/keyboards/idobao/id80/v3/ansi/config.h +++ b/keyboards/idobao/id80/v3/ansi/config.h @@ -12,7 +12,7 @@ #define RGB_MATRIX_LED_COUNT 94 - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to x out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/idobao/id87/v2/config.h b/keyboards/idobao/id87/v2/config.h index 17b63471fa..2a6237fd91 100644 --- a/keyboards/idobao/id87/v2/config.h +++ b/keyboards/idobao/id87/v2/config.h @@ -13,7 +13,7 @@ #define RGB_MATRIX_LED_COUNT 103 - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to x out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/idobao/montex/v2/config.h b/keyboards/idobao/montex/v2/config.h index a7cd0d6114..9f4dd7acf4 100755 --- a/keyboards/idobao/montex/v2/config.h +++ b/keyboards/idobao/montex/v2/config.h @@ -13,7 +13,7 @@ // #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // don't use, too few key to make it look good #define RGB_MATRIX_KEYPRESSES - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/ilumkb/simpler61/config.h b/keyboards/ilumkb/simpler61/config.h index 7978b495de..65f922631f 100644 --- a/keyboards/ilumkb/simpler61/config.h +++ b/keyboards/ilumkb/simpler61/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/ilumkb/simpler64/config.h b/keyboards/ilumkb/simpler64/config.h index 09dc7dc80f..4f47e5e4cd 100644 --- a/keyboards/ilumkb/simpler64/config.h +++ b/keyboards/ilumkb/simpler64/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/inland/kb83/config.h b/keyboards/inland/kb83/config.h index be26cf869c..e8f47d54e1 100644 --- a/keyboards/inland/kb83/config.h +++ b/keyboards/inland/kb83/config.h @@ -45,7 +45,7 @@ #define DRIVER_2_LED_TOTAL 21 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 10) -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/inland/mk47/config.h b/keyboards/inland/mk47/config.h index e5026bd0e7..6b673f5a3d 100644 --- a/keyboards/inland/mk47/config.h +++ b/keyboards/inland/mk47/config.h @@ -32,7 +32,7 @@ #define I2C1_CLOCK_SPEED 400000 #define RGB_MATRIX_LED_COUNT 47 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/inland/v83p/config.h b/keyboards/inland/v83p/config.h index c39cb6421f..0fb6ecd140 100644 --- a/keyboards/inland/v83p/config.h +++ b/keyboards/inland/v83p/config.h @@ -14,7 +14,7 @@ #define I2C1_CLOCK_SPEED 400000 #define RGB_MATRIX_LED_COUNT 92 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* SPI Config for spi flash*/ #define SPI_DRIVER SPIDQ diff --git a/keyboards/jacky_studio/piggy60/rev2/config.h b/keyboards/jacky_studio/piggy60/rev2/config.h index fa884d5f18..1114d0a217 100644 --- a/keyboards/jacky_studio/piggy60/rev2/config.h +++ b/keyboards/jacky_studio/piggy60/rev2/config.h @@ -18,7 +18,7 @@ #define RGB_MATRIX_LED_COUNT 14 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/jadookb/jkb65/config.h b/keyboards/jadookb/jkb65/config.h index 8e0534fa2c..f3622be4a3 100644 --- a/keyboards/jadookb/jkb65/config.h +++ b/keyboards/jadookb/jkb65/config.h @@ -18,7 +18,7 @@ #define RGB_MATRIX_LED_COUNT 67 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/jukaie/jk01/config.h b/keyboards/jukaie/jk01/config.h index 62c709a917..0aaa2ef64c 100644 --- a/keyboards/jukaie/jk01/config.h +++ b/keyboards/jukaie/jk01/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/junco/keymaps/default/config.h b/keyboards/junco/keymaps/default/config.h index 43c47b9122..8a1acc5fd3 100644 --- a/keyboards/junco/keymaps/default/config.h +++ b/keyboards/junco/keymaps/default/config.h @@ -23,7 +23,7 @@ # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Turns off RGB effects when there is no longer a USB connection -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP // Key press reactive animations # define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations diff --git a/keyboards/junco/keymaps/deluxe/config.h b/keyboards/junco/keymaps/deluxe/config.h index bec55fbd4c..db185a4849 100644 --- a/keyboards/junco/keymaps/deluxe/config.h +++ b/keyboards/junco/keymaps/deluxe/config.h @@ -39,7 +39,7 @@ # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Turns off RGB effects when there is no longer a USB connection -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP // Throttling of RGB to increase keyboard responsiveness, set to 1.5x the default limits # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 6 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) diff --git a/keyboards/junco/keymaps/via/config.h b/keyboards/junco/keymaps/via/config.h index c4ce821594..897313cd66 100644 --- a/keyboards/junco/keymaps/via/config.h +++ b/keyboards/junco/keymaps/via/config.h @@ -26,7 +26,7 @@ # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Turns off RGB effects when there is no longer a USB connection -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP // Allow keypress reactive animations # define SPLIT_TRANSPORT_MIRROR // Necessary setting for key press animations on a split diff --git a/keyboards/kbdcraft/adam64/config.h b/keyboards/kbdcraft/adam64/config.h index 511eb7f8ab..b5652d9079 100644 --- a/keyboards/kbdcraft/adam64/config.h +++ b/keyboards/kbdcraft/adam64/config.h @@ -27,7 +27,7 @@ #define RGB_MATRIX_LED_COUNT 64 /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/kbdfans/baguette66/rgb/config.h b/keyboards/kbdfans/baguette66/rgb/config.h index c989f1b121..2a65b1872d 100644 --- a/keyboards/kbdfans/baguette66/rgb/config.h +++ b/keyboards/kbdfans/baguette66/rgb/config.h @@ -47,7 +47,7 @@ #define ENABLE_RGB_MATRIX_PIXEL_FLOW #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL #define ENABLE_RGB_MATRIX_TYPING_HEATMAP -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspendedz +#define RGB_MATRIX_SLEEP // turn off effects when suspendedz #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/kbdfans/bella/rgb/config.h b/keyboards/kbdfans/bella/rgb/config.h index 754f4e1eb8..26b629b918 100644 --- a/keyboards/kbdfans/bella/rgb/config.h +++ b/keyboards/kbdfans/bella/rgb/config.h @@ -16,7 +16,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/kbdfans/bella/rgb_iso/config.h b/keyboards/kbdfans/bella/rgb_iso/config.h index 48284a5160..d99205c771 100644 --- a/keyboards/kbdfans/bella/rgb_iso/config.h +++ b/keyboards/kbdfans/bella/rgb_iso/config.h @@ -16,7 +16,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/kbdfans/boop65/rgb/config.h b/keyboards/kbdfans/boop65/rgb/config.h index e37e2d1763..10b0ee7fab 100644 --- a/keyboards/kbdfans/boop65/rgb/config.h +++ b/keyboards/kbdfans/boop65/rgb/config.h @@ -19,7 +19,7 @@ #define USB_SUSPEND_WAKEUP_DELAY 5000 #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h index dcc998f035..a1ba1fd43e 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb/keymaps/pascalpfeil/config.h @@ -23,7 +23,7 @@ #define FORCE_NKRO #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # undef RGB_MATRIX_TIMEOUT # define RGB_MATRIX_TIMEOUT 900000 #endif diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h index 51b88510e5..5550fa67c8 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb/v1/config.h @@ -2,7 +2,7 @@ #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h index bba655107d..d1f371f077 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb/v2/config.h @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v3/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v3/config.h index 8dd12678ee..528a721c0c 100755 --- a/keyboards/kbdfans/kbd67/mkiirgb/v3/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb/v3/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define USB_SUSPEND_WAKEUP_DELAY 5000 #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/kbdfans/kbd67/mkiirgb/v4/config.h b/keyboards/kbdfans/kbd67/mkiirgb/v4/config.h index 10f0bc0ec2..7799b7b2fa 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb/v4/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb/v4/config.h @@ -22,7 +22,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/kbdfans/kbd67/mkiirgb_iso/config.h b/keyboards/kbdfans/kbd67/mkiirgb_iso/config.h index 10f0bc0ec2..7799b7b2fa 100644 --- a/keyboards/kbdfans/kbd67/mkiirgb_iso/config.h +++ b/keyboards/kbdfans/kbd67/mkiirgb_iso/config.h @@ -22,7 +22,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/kbdfans/kbd75rgb/config.h b/keyboards/kbdfans/kbd75rgb/config.h index a8b20051ec..1fdc1349ed 100644 --- a/keyboards/kbdfans/kbd75rgb/config.h +++ b/keyboards/kbdfans/kbd75rgb/config.h @@ -47,7 +47,7 @@ #define ENABLE_RGB_MATRIX_PIXEL_FLOW #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL #define ENABLE_RGB_MATRIX_TYPING_HEATMAP -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspendedz +#define RGB_MATRIX_SLEEP // turn off effects when suspendedz #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/kbdfans/kbdmini/config.h b/keyboards/kbdfans/kbdmini/config.h index be985880d0..dfa3052ba7 100644 --- a/keyboards/kbdfans/kbdmini/config.h +++ b/keyboards/kbdfans/kbdmini/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/kbdfans/kbdpad/mk3/config.h b/keyboards/kbdfans/kbdpad/mk3/config.h index 16eb12d1f5..453e6f8be3 100644 --- a/keyboards/kbdfans/kbdpad/mk3/config.h +++ b/keyboards/kbdfans/kbdpad/mk3/config.h @@ -17,7 +17,7 @@ #pragma once #define RGB_MATRIX_LED_COUNT 21 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_KEYPRESSES #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/kbdfans/maja/config.h b/keyboards/kbdfans/maja/config.h index e07c5adf93..2275a3144f 100755 --- a/keyboards/kbdfans/maja/config.h +++ b/keyboards/kbdfans/maja/config.h @@ -2,7 +2,7 @@ #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/kbdfans/odin/rgb/config.h b/keyboards/kbdfans/odin/rgb/config.h index 9cc883891a..9a3013e1c3 100644 --- a/keyboards/kbdfans/odin/rgb/config.h +++ b/keyboards/kbdfans/odin/rgb/config.h @@ -19,7 +19,7 @@ #define RGB_MATRIX_LED_COUNT 104 #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 diff --git a/keyboards/keebio/bamfk4/config.h b/keyboards/keebio/bamfk4/config.h index eddc52e8aa..b31e7bf920 100644 --- a/keyboards/keebio/bamfk4/config.h +++ b/keyboards/keebio/bamfk4/config.h @@ -46,7 +46,7 @@ # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 160 # define RGB_MATRIX_LED_COUNT 32 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES //# endif diff --git a/keyboards/keebio/cepstrum/rev1/config.h b/keyboards/keebio/cepstrum/rev1/config.h index 72f182b156..e0ef9ce2ed 100644 --- a/keyboards/keebio/cepstrum/rev1/config.h +++ b/keyboards/keebio/cepstrum/rev1/config.h @@ -56,7 +56,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_LED_COUNT 96 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/keebio/chocopad/rev2/config.h b/keyboards/keebio/chocopad/rev2/config.h index 366d639bf0..178ece8ba3 100644 --- a/keyboards/keebio/chocopad/rev2/config.h +++ b/keyboards/keebio/chocopad/rev2/config.h @@ -8,6 +8,6 @@ // RGB Matrix #define RGB_MATRIX_LED_COUNT 20 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/keebio/convolution/rev1/config.h b/keyboards/keebio/convolution/rev1/config.h index b46ba583d7..a758121351 100644 --- a/keyboards/keebio/convolution/rev1/config.h +++ b/keyboards/keebio/convolution/rev1/config.h @@ -18,7 +18,7 @@ along with this program. If not, see . // RGB Matrix #define RGB_MATRIX_LED_COUNT 16 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define ENABLE_RGB_MATRIX_ALPHAS_MODS #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/keebio/iris/rev6/config.h b/keyboards/keebio/iris/rev6/config.h index 80e85052de..305ffdedaf 100644 --- a/keyboards/keebio/iris/rev6/config.h +++ b/keyboards/keebio/iris/rev6/config.h @@ -63,6 +63,6 @@ along with this program. If not, see . # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 160 # define RGB_MATRIX_LED_COUNT 68 # define RGB_MATRIX_SPLIT { 34, 34 } -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES # endif diff --git a/keyboards/keebio/iris/rev7/config.h b/keyboards/keebio/iris/rev7/config.h index 37769d67e7..4e19525de8 100644 --- a/keyboards/keebio/iris/rev7/config.h +++ b/keyboards/keebio/iris/rev7/config.h @@ -63,6 +63,6 @@ along with this program. If not, see . # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 # define RGB_MATRIX_LED_COUNT 68 # define RGB_MATRIX_SPLIT { 34, 34 } -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES //# endif diff --git a/keyboards/keebio/iris/rev8/config.h b/keyboards/keebio/iris/rev8/config.h index 96eb75c97a..e1a3a155f0 100644 --- a/keyboards/keebio/iris/rev8/config.h +++ b/keyboards/keebio/iris/rev8/config.h @@ -17,6 +17,6 @@ // RGB Matrix #define RGB_MATRIX_LED_COUNT 68 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/keebio/nyquist/rev4/config.h b/keyboards/keebio/nyquist/rev4/config.h index 501e4edaf7..e4adb125d6 100644 --- a/keyboards/keebio/nyquist/rev4/config.h +++ b/keyboards/keebio/nyquist/rev4/config.h @@ -17,6 +17,6 @@ // RGB Matrix #define RGB_MATRIX_LED_COUNT 72 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/keebio/nyquistpad/config.h b/keyboards/keebio/nyquistpad/config.h index 82a64e39bf..adc0f37de1 100644 --- a/keyboards/keebio/nyquistpad/config.h +++ b/keyboards/keebio/nyquistpad/config.h @@ -8,6 +8,6 @@ // RGB Matrix #define RGB_MATRIX_LED_COUNT 36 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/keebio/sinc/rev3/config.h b/keyboards/keebio/sinc/rev3/config.h index 66cfe454c4..9bb698182d 100644 --- a/keyboards/keebio/sinc/rev3/config.h +++ b/keyboards/keebio/sinc/rev3/config.h @@ -68,7 +68,7 @@ along with this program. If not, see . #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_LED_COUNT 113 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/keebio/sinc/rev4/config.h b/keyboards/keebio/sinc/rev4/config.h index bed0f11243..d9ae6313a6 100644 --- a/keyboards/keebio/sinc/rev4/config.h +++ b/keyboards/keebio/sinc/rev4/config.h @@ -65,7 +65,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_LED_COUNT 117 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define SPLIT_TRANSPORT_MIRROR diff --git a/keyboards/keybee/keybee65/config.h b/keyboards/keybee/keybee65/config.h index 5c89632272..4c619c5a6a 100644 --- a/keyboards/keybee/keybee65/config.h +++ b/keyboards/keybee/keybee65/config.h @@ -21,4 +21,4 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 68 #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/keycapsss/kimiko/keymaps/oriaj3/config.h b/keyboards/keycapsss/kimiko/keymaps/oriaj3/config.h index 2fd384b986..decbd67681 100644 --- a/keyboards/keycapsss/kimiko/keymaps/oriaj3/config.h +++ b/keyboards/keycapsss/kimiko/keymaps/oriaj3/config.h @@ -42,7 +42,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/keychron/c1_pro/ansi/rgb/config.h b/keyboards/keychron/c1_pro/ansi/rgb/config.h index a88319a63d..537f73b3d6 100644 --- a/keyboards/keychron/c1_pro/ansi/rgb/config.h +++ b/keyboards/keychron/c1_pro/ansi/rgb/config.h @@ -34,7 +34,7 @@ { 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44, 0x9D, 0x9D, 0x44 } /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* Enable caps_lock, win os and mac os indicator */ #define CAPS_MAC_WIN_LED_INDEX 63 diff --git a/keyboards/keychron/c2_pro/ansi/rgb/config.h b/keyboards/keychron/c2_pro/ansi/rgb/config.h index 47b47b920d..61e0b15edc 100644 --- a/keyboards/keychron/c2_pro/ansi/rgb/config.h +++ b/keyboards/keychron/c2_pro/ansi/rgb/config.h @@ -36,7 +36,7 @@ #define WIN_LED_INDEX 19 /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/keychron/q0/config.h b/keyboards/keychron/q0/config.h index 24b629a520..a75d26b478 100644 --- a/keyboards/keychron/q0/config.h +++ b/keyboards/keychron/q0/config.h @@ -19,7 +19,7 @@ #define SNLED27351_CURRENT_TUNE { 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70, 0xFF, 0xFF, 0x70 } /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS \ No newline at end of file diff --git a/keyboards/keychron/q10/config.h b/keyboards/keychron/q10/config.h index eb3a56e9ad..e999515abc 100644 --- a/keyboards/keychron/q10/config.h +++ b/keyboards/keychron/q10/config.h @@ -51,7 +51,7 @@ #define MATRIX_MASKED /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/q11/config.h b/keyboards/keychron/q11/config.h index 0d6b9c9c48..1a706b1bf7 100755 --- a/keyboards/keychron/q11/config.h +++ b/keyboards/keychron/q11/config.h @@ -50,7 +50,7 @@ #define ENCODER_DEFAULT_POS 0x3 /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/keychron/q12/config.h b/keyboards/keychron/q12/config.h index cc24578c16..2f6a277439 100644 --- a/keyboards/keychron/q12/config.h +++ b/keyboards/keychron/q12/config.h @@ -50,7 +50,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ // #define WEAR_LEVELING_LOGICAL_SIZE 2048 // default diff --git a/keyboards/keychron/q1v1/ansi/keymaps/gtg465x/config.h b/keyboards/keychron/q1v1/ansi/keymaps/gtg465x/config.h index 5ac05d04c1..4bab25c923 100644 --- a/keyboards/keychron/q1v1/ansi/keymaps/gtg465x/config.h +++ b/keyboards/keychron/q1v1/ansi/keymaps/gtg465x/config.h @@ -18,7 +18,7 @@ /* RGB Matrix Configuration */ #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define CAPS_LOCK_INDICATOR_COLOR RGB_RED # define CAPS_LOCK_INDICATOR_LIGHT_ALPHAS # define FN_LAYER_TRANSPARENT_KEYS_OFF diff --git a/keyboards/keychron/q1v1/ansi/keymaps/mkillewald/config.h b/keyboards/keychron/q1v1/ansi/keymaps/mkillewald/config.h index bc9fe405c3..acd208b8c6 100644 --- a/keyboards/keychron/q1v1/ansi/keymaps/mkillewald/config.h +++ b/keyboards/keychron/q1v1/ansi/keymaps/mkillewald/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define CAPS_LOCK_INDICATOR_COLOR RGB_RED # define FN_LAYER_COLOR RGB_ORANGE #endif \ No newline at end of file diff --git a/keyboards/keychron/q1v1/ansi/keymaps/teimor/config.h b/keyboards/keychron/q1v1/ansi/keymaps/teimor/config.h index 4378af4f58..cd49d7b3d8 100644 --- a/keyboards/keychron/q1v1/ansi/keymaps/teimor/config.h +++ b/keyboards/keychron/q1v1/ansi/keymaps/teimor/config.h @@ -21,7 +21,7 @@ /* RGB Matrix Configuration */ #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define MAC_LAYER_DEFAULT_COLOR RGB_CYAN # define WIN_LAYER_DEFAULT_COLOR RGB_GREEN # define CAPS_LOCK_INDICATOR_COLOR RGB_RED diff --git a/keyboards/keychron/q1v1/config.h b/keyboards/keychron/q1v1/config.h index ec1bcc5794..aaada2702e 100644 --- a/keyboards/keychron/q1v1/config.h +++ b/keyboards/keychron/q1v1/config.h @@ -30,7 +30,7 @@ #define ENCODER_DEFAULT_POS 0x3 /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS \ No newline at end of file diff --git a/keyboards/keychron/q1v1/iso/keymaps/kubahorak/config.h b/keyboards/keychron/q1v1/iso/keymaps/kubahorak/config.h index 55dbb74d4a..854c1d18ee 100644 --- a/keyboards/keychron/q1v1/iso/keymaps/kubahorak/config.h +++ b/keyboards/keychron/q1v1/iso/keymaps/kubahorak/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE /* from rev_0100/keymaps/gtg465x */ -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define CAPS_LOCK_INDICATOR_COLOR RGB_RED # define CAPS_LOCK_INDICATOR_LIGHT_ALPHAS # define FN_LAYER_TRANSPARENT_KEYS_OFF diff --git a/keyboards/keychron/q1v1/iso/keymaps/mkillewald_iso/config.h b/keyboards/keychron/q1v1/iso/keymaps/mkillewald_iso/config.h index bc9fe405c3..acd208b8c6 100644 --- a/keyboards/keychron/q1v1/iso/keymaps/mkillewald_iso/config.h +++ b/keyboards/keychron/q1v1/iso/keymaps/mkillewald_iso/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define CAPS_LOCK_INDICATOR_COLOR RGB_RED # define FN_LAYER_COLOR RGB_ORANGE #endif \ No newline at end of file diff --git a/keyboards/keychron/q1v2/config.h b/keyboards/keychron/q1v2/config.h index 5e2a7eaa54..67c7cae5bb 100644 --- a/keyboards/keychron/q1v2/config.h +++ b/keyboards/keychron/q1v2/config.h @@ -37,7 +37,7 @@ #define MATRIX_MASKED /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/q2/ansi/keymaps/ladduro/config.h b/keyboards/keychron/q2/ansi/keymaps/ladduro/config.h index a8ad37d003..a357fbb164 100644 --- a/keyboards/keychron/q2/ansi/keymaps/ladduro/config.h +++ b/keyboards/keychron/q2/ansi/keymaps/ladduro/config.h @@ -18,7 +18,7 @@ /* RGB Matrix Configuration */ #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define CAPS_LOCK_INDICATOR_COLOR RGB_RED # define CAPS_LOCK_INDICATOR_LIGHT_ALPHAS # define FN_LAYER_TRANSPARENT_KEYS_OFF diff --git a/keyboards/keychron/q2/config.h b/keyboards/keychron/q2/config.h index 831612326b..d0beff49f0 100644 --- a/keyboards/keychron/q2/config.h +++ b/keyboards/keychron/q2/config.h @@ -31,7 +31,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* Encoder Configuration*/ #define ENCODER_DEFAULT_POS 0x3 diff --git a/keyboards/keychron/q3/config.h b/keyboards/keychron/q3/config.h index f93da42353..6af0afd18f 100644 --- a/keyboards/keychron/q3/config.h +++ b/keyboards/keychron/q3/config.h @@ -39,7 +39,7 @@ #define ENCODER_DEFAULT_POS 0x3 /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/keychron/q4/config.h b/keyboards/keychron/q4/config.h index 62f8294966..97f480ea31 100644 --- a/keyboards/keychron/q4/config.h +++ b/keyboards/keychron/q4/config.h @@ -23,7 +23,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define SNLED27351_CURRENT_TUNE \ { 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60, 0xCA, 0xCA, 0x60 } diff --git a/keyboards/keychron/q5/config.h b/keyboards/keychron/q5/config.h index 0640331997..d9f5cfa76b 100644 --- a/keyboards/keychron/q5/config.h +++ b/keyboards/keychron/q5/config.h @@ -43,7 +43,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/q6/config.h b/keyboards/keychron/q6/config.h index 2edceb09d7..ff8cd1142b 100644 --- a/keyboards/keychron/q6/config.h +++ b/keyboards/keychron/q6/config.h @@ -37,7 +37,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/q60/config.h b/keyboards/keychron/q60/config.h index 6b6c3c5f48..3a6c3ea8ee 100644 --- a/keyboards/keychron/q60/config.h +++ b/keyboards/keychron/q60/config.h @@ -36,7 +36,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 6 diff --git a/keyboards/keychron/q65/config.h b/keyboards/keychron/q65/config.h index 84c4e9fc17..99eb4572cf 100644 --- a/keyboards/keychron/q65/config.h +++ b/keyboards/keychron/q65/config.h @@ -47,7 +47,7 @@ #define DIP_SWITCH_MATRIX_GRID { {4,4} } /* Turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/q7/config.h b/keyboards/keychron/q7/config.h index 4794c80011..c71d386b1d 100644 --- a/keyboards/keychron/q7/config.h +++ b/keyboards/keychron/q7/config.h @@ -38,7 +38,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/q8/config.h b/keyboards/keychron/q8/config.h index c7929db001..163d3775d9 100644 --- a/keyboards/keychron/q8/config.h +++ b/keyboards/keychron/q8/config.h @@ -44,4 +44,4 @@ #define ENCODER_DEFAULT_POS 0x3 /* Turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED \ No newline at end of file +#define RGB_MATRIX_SLEEP \ No newline at end of file diff --git a/keyboards/keychron/q9/config.h b/keyboards/keychron/q9/config.h index 4226980d3e..609e5c4079 100644 --- a/keyboards/keychron/q9/config.h +++ b/keyboards/keychron/q9/config.h @@ -36,7 +36,7 @@ { 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70 } /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/q9_plus/config.h b/keyboards/keychron/q9_plus/config.h index c9ef05b613..cbd3c8b11b 100755 --- a/keyboards/keychron/q9_plus/config.h +++ b/keyboards/keychron/q9_plus/config.h @@ -37,7 +37,7 @@ { 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70, 0xF8, 0xF8, 0x70 } /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/s1/ansi/rgb/config.h b/keyboards/keychron/s1/ansi/rgb/config.h index 647a877a4c..b4c9370bd0 100644 --- a/keyboards/keychron/s1/ansi/rgb/config.h +++ b/keyboards/keychron/s1/ansi/rgb/config.h @@ -28,7 +28,7 @@ { 0xA0, 0xA0, 0x48, 0xA0, 0xA0, 0x48, 0xA0, 0xA0, 0x48, 0xA0, 0xA0, 0x48 } /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* Enable caps-lock LED */ #define CAPS_LOCK_LED_INDEX 46 diff --git a/keyboards/keychron/v1/config.h b/keyboards/keychron/v1/config.h index e5b6805859..84334306dd 100644 --- a/keyboards/keychron/v1/config.h +++ b/keyboards/keychron/v1/config.h @@ -45,7 +45,7 @@ #define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/v10/config.h b/keyboards/keychron/v10/config.h index d643049c03..01d3b3e042 100644 --- a/keyboards/keychron/v10/config.h +++ b/keyboards/keychron/v10/config.h @@ -51,7 +51,7 @@ #define MATRIX_MASKED /* Disable RGB lighting when PC is in suspend */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/v2/config.h b/keyboards/keychron/v2/config.h index 7efbf8c549..f42e87368b 100644 --- a/keyboards/keychron/v2/config.h +++ b/keyboards/keychron/v2/config.h @@ -39,7 +39,7 @@ #define DIP_SWITCH_MATRIX_GRID { {4,4} } /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/v3/config.h b/keyboards/keychron/v3/config.h index d3e02d8f81..9532062aaa 100644 --- a/keyboards/keychron/v3/config.h +++ b/keyboards/keychron/v3/config.h @@ -39,7 +39,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/v4/config.h b/keyboards/keychron/v4/config.h index 8325317c27..27147555ea 100644 --- a/keyboards/keychron/v4/config.h +++ b/keyboards/keychron/v4/config.h @@ -36,7 +36,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/v5/config.h b/keyboards/keychron/v5/config.h index 8c4128a43e..128c0aa9f1 100644 --- a/keyboards/keychron/v5/config.h +++ b/keyboards/keychron/v5/config.h @@ -46,7 +46,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/v6/config.h b/keyboards/keychron/v6/config.h index eb2296a172..129f3925bb 100644 --- a/keyboards/keychron/v6/config.h +++ b/keyboards/keychron/v6/config.h @@ -41,7 +41,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* EEPROM Driver Configuration */ #define WEAR_LEVELING_LOGICAL_SIZE 2048 diff --git a/keyboards/keychron/v7/config.h b/keyboards/keychron/v7/config.h index cff96774e3..500e4df30d 100644 --- a/keyboards/keychron/v7/config.h +++ b/keyboards/keychron/v7/config.h @@ -37,7 +37,7 @@ #define MATRIX_MASKED /* turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/keychron/v8/config.h b/keyboards/keychron/v8/config.h index 3a860e8eb6..c9db5c0755 100644 --- a/keyboards/keychron/v8/config.h +++ b/keyboards/keychron/v8/config.h @@ -40,7 +40,7 @@ #define MATRIX_MASKED /* Turn off effects when suspended */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define DYNAMIC_KEYMAP_LAYER_COUNT 5 diff --git a/keyboards/kprepublic/bm40hsrgb/rev1/config.h b/keyboards/kprepublic/bm40hsrgb/rev1/config.h index ac0261a608..29e7af3a64 100755 --- a/keyboards/kprepublic/bm40hsrgb/rev1/config.h +++ b/keyboards/kprepublic/bm40hsrgb/rev1/config.h @@ -24,7 +24,7 @@ #define RGB_MATRIX_LED_COUNT 53 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/kprepublic/bm40hsrgb/rev2/config.h b/keyboards/kprepublic/bm40hsrgb/rev2/config.h index 1cd3f7a6d3..edc61c36e8 100755 --- a/keyboards/kprepublic/bm40hsrgb/rev2/config.h +++ b/keyboards/kprepublic/bm40hsrgb/rev2/config.h @@ -18,4 +18,4 @@ #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define RGB_MATRIX_LED_COUNT 47 #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended diff --git a/keyboards/kprepublic/bm60hsrgb/rev2/config.h b/keyboards/kprepublic/bm60hsrgb/rev2/config.h index e4089e9fd5..96cb1de5a2 100644 --- a/keyboards/kprepublic/bm60hsrgb/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb/rev2/config.h @@ -17,7 +17,7 @@ #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD -#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/kprepublic/bm60hsrgb_ec/rev2/config.h b/keyboards/kprepublic/bm60hsrgb_ec/rev2/config.h index eb1b76382b..3cd50bfea3 100644 --- a/keyboards/kprepublic/bm60hsrgb_ec/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb_ec/rev2/config.h @@ -17,7 +17,7 @@ #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD -# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND # define DRIVER_1_LED_TOTAL 63 # define RGB_MATRIX_LED_COUNT DRIVER_1_LED_TOTAL diff --git a/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h b/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h index 00d55f8ee0..0a3e628c1c 100644 --- a/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb_iso/rev2/config.h @@ -19,7 +19,7 @@ #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD -# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL # define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT diff --git a/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h b/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h index a877e182a6..fdeb9b61e9 100644 --- a/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h +++ b/keyboards/kprepublic/bm60hsrgb_poker/rev2/config.h @@ -17,7 +17,7 @@ #define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_MOOD -# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES #define ENABLE_RGB_MATRIX_ALPHAS_MODS #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN diff --git a/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h index 13eefdef65..854b36d862 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h +++ b/keyboards/kprepublic/bm68hsrgb/rev1/keymaps/peepeetee/config.h @@ -60,7 +60,7 @@ // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/kprepublic/bm68hsrgb/rev2/config.h b/keyboards/kprepublic/bm68hsrgb/rev2/config.h index 078085779b..20fa1a8314 100644 --- a/keyboards/kprepublic/bm68hsrgb/rev2/config.h +++ b/keyboards/kprepublic/bm68hsrgb/rev2/config.h @@ -26,7 +26,7 @@ #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // Limit to vendor-recommended value diff --git a/keyboards/kprepublic/bm80hsrgb/config.h b/keyboards/kprepublic/bm80hsrgb/config.h index e0a7f47a4d..9d4ca3770e 100644 --- a/keyboards/kprepublic/bm80hsrgb/config.h +++ b/keyboards/kprepublic/bm80hsrgb/config.h @@ -74,7 +74,7 @@ along with this program. If not, see . #define ENABLE_RGB_MATRIX_SOLID_SPLASH #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// # define RGB_MATRIX_SLEEP // turn off effects when suspended // does not work for some reason, might revisit /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ diff --git a/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h b/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h index 06a7409110..bf64e8be78 100644 --- a/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h +++ b/keyboards/kprepublic/bm80hsrgb/keymaps/peepeetee/config.h @@ -42,7 +42,7 @@ // #define RGB_MATRIX_KEYPRESSES // reacts to keypresses // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_ALPHAS_MODS // Sets the default mode, if none has been set -// #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/kprepublic/bm80v2/config.h b/keyboards/kprepublic/bm80v2/config.h index 91ad6350e0..3cf86e36e3 100644 --- a/keyboards/kprepublic/bm80v2/config.h +++ b/keyboards/kprepublic/bm80v2/config.h @@ -14,7 +14,7 @@ */ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/kprepublic/bm80v2/keymaps/saph1s/config.h b/keyboards/kprepublic/bm80v2/keymaps/saph1s/config.h index 4726396806..7989b68f7d 100644 --- a/keyboards/kprepublic/bm80v2/keymaps/saph1s/config.h +++ b/keyboards/kprepublic/bm80v2/keymaps/saph1s/config.h @@ -19,5 +19,5 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE #undef RGB_MATRIX_DEFAULT_MODE #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #endif diff --git a/keyboards/kprepublic/bm80v2_iso/config.h b/keyboards/kprepublic/bm80v2_iso/config.h index a086185993..a8fdc5e18d 100644 --- a/keyboards/kprepublic/bm80v2_iso/config.h +++ b/keyboards/kprepublic/bm80v2_iso/config.h @@ -15,7 +15,7 @@ #pragma once /* disable these deprecated features by default */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL #define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/kprepublic/cstc40/config.h b/keyboards/kprepublic/cstc40/config.h index 75ddd104ae..5e05574672 100644 --- a/keyboards/kprepublic/cstc40/config.h +++ b/keyboards/kprepublic/cstc40/config.h @@ -55,4 +55,4 @@ #define ENABLE_RGB_MATRIX_SOLID_SPLASH #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/kuro/kuro65/config.h b/keyboards/kuro/kuro65/config.h index f782e9069b..d84264b39c 100644 --- a/keyboards/kuro/kuro65/config.h +++ b/keyboards/kuro/kuro65/config.h @@ -22,7 +22,7 @@ // The number of LEDs connected # define RGB_MATRIX_LED_COUNT 69 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define USB_SUSPEND_WAKEUP_DELAY 5000 # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/latincompass/latin17rgb/config.h b/keyboards/latincompass/latin17rgb/config.h index fbeb499c4e..708348c405 100644 --- a/keyboards/latincompass/latin17rgb/config.h +++ b/keyboards/latincompass/latin17rgb/config.h @@ -17,7 +17,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/latincompass/latin60rgb/config.h b/keyboards/latincompass/latin60rgb/config.h index a25d3b0696..10b9abdf51 100644 --- a/keyboards/latincompass/latin60rgb/config.h +++ b/keyboards/latincompass/latin60rgb/config.h @@ -16,7 +16,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/latincompass/latin6rgb/config.h b/keyboards/latincompass/latin6rgb/config.h index 584e39a327..80e7706af0 100644 --- a/keyboards/latincompass/latin6rgb/config.h +++ b/keyboards/latincompass/latin6rgb/config.h @@ -18,7 +18,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h index c70c7d8817..924da8d04d 100644 --- a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h +++ b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/config.h @@ -22,6 +22,6 @@ /* Force NKRO on boot up */ #define FORCE_NKRO -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_TIMEOUT 900000 diff --git a/keyboards/lily58/r2g/config.h b/keyboards/lily58/r2g/config.h index 955cf70161..07fb9aa631 100644 --- a/keyboards/lily58/r2g/config.h +++ b/keyboards/lily58/r2g/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_COUNT 74 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_LED_FLUSH_LIMIT 16 # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/linworks/fave60a/config.h b/keyboards/linworks/fave60a/config.h index fd70ee7c38..71bc154161 100644 --- a/keyboards/linworks/fave60a/config.h +++ b/keyboards/linworks/fave60a/config.h @@ -6,7 +6,7 @@ /* Define RGB */ #define RGB_MATRIX_LED_COUNT 91 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/linworks/fave65h/config.h b/keyboards/linworks/fave65h/config.h index 3f549797d8..b37b2855ab 100644 --- a/keyboards/linworks/fave65h/config.h +++ b/keyboards/linworks/fave65h/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/linworks/fave84h/config.h b/keyboards/linworks/fave84h/config.h index 5ce329db0a..521bf6e938 100644 --- a/keyboards/linworks/fave84h/config.h +++ b/keyboards/linworks/fave84h/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 126 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/linworks/fave87h/config.h b/keyboards/linworks/fave87h/config.h index e84a0ec929..69036815b7 100644 --- a/keyboards/linworks/fave87h/config.h +++ b/keyboards/linworks/fave87h/config.h @@ -22,7 +22,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/linworks/favepada/config.h b/keyboards/linworks/favepada/config.h index bee089bb43..e87c7024ed 100644 --- a/keyboards/linworks/favepada/config.h +++ b/keyboards/linworks/favepada/config.h @@ -5,7 +5,7 @@ /* Define RGB */ #define RGB_MATRIX_LED_COUNT 37 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/magic_force/mf17/config.h b/keyboards/magic_force/mf17/config.h index 6e9f18cd5d..e9636796b1 100644 --- a/keyboards/magic_force/mf17/config.h +++ b/keyboards/magic_force/mf17/config.h @@ -10,5 +10,5 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // +#define RGB_MATRIX_SLEEP diff --git a/keyboards/marksard/rhymestone/rev1/config.h b/keyboards/marksard/rhymestone/rev1/config.h index bd9aeeecdb..bff4423122 100644 --- a/keyboards/marksard/rhymestone/rev1/config.h +++ b/keyboards/marksard/rhymestone/rev1/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 40 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/massdrop/alt/keymaps/pregame/config.h b/keyboards/massdrop/alt/keymaps/pregame/config.h index 27bf1a8332..e2234da2ec 100644 --- a/keyboards/massdrop/alt/keymaps/pregame/config.h +++ b/keyboards/massdrop/alt/keymaps/pregame/config.h @@ -85,7 +85,7 @@ // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGBLIGHT_EFFECT_ALTERNATING // Enable alternating animation mode. diff --git a/keyboards/massdrop/alt/keymaps/urbanvanilla/config.h b/keyboards/massdrop/alt/keymaps/urbanvanilla/config.h index f2a7e50386..64f73b800f 100644 --- a/keyboards/massdrop/alt/keymaps/urbanvanilla/config.h +++ b/keyboards/massdrop/alt/keymaps/urbanvanilla/config.h @@ -24,4 +24,4 @@ along with this program. If not, see . #define RGB_MATRIX_LED_PROCESS_LIMIT 15 #define RGB_MATRIX_LED_FLUSH_LIMIT 10 -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended diff --git a/keyboards/massdrop/ctrl/keymaps/endgame/config.h b/keyboards/massdrop/ctrl/keymaps/endgame/config.h index 34aa3cd666..1bf82d3730 100644 --- a/keyboards/massdrop/ctrl/keymaps/endgame/config.h +++ b/keyboards/massdrop/ctrl/keymaps/endgame/config.h @@ -45,7 +45,7 @@ // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/massdrop/ctrl/keymaps/foxx1337/config.h b/keyboards/massdrop/ctrl/keymaps/foxx1337/config.h index 9b9d199f08..497ae1d11f 100644 --- a/keyboards/massdrop/ctrl/keymaps/foxx1337/config.h +++ b/keyboards/massdrop/ctrl/keymaps/foxx1337/config.h @@ -32,7 +32,7 @@ // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h b/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h index a17e3e76bf..a36ea3fab9 100644 --- a/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h +++ b/keyboards/massdrop/ctrl/keymaps/matthewrobo/config.h @@ -63,7 +63,7 @@ along with this program. If not, see . // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/massdrop/ctrl/keymaps/xanimos/config.h b/keyboards/massdrop/ctrl/keymaps/xanimos/config.h index 0c08219181..52a90d332a 100644 --- a/keyboards/massdrop/ctrl/keymaps/xanimos/config.h +++ b/keyboards/massdrop/ctrl/keymaps/xanimos/config.h @@ -61,7 +61,7 @@ // #define RGBLIGHT_HUE_STEP 12 // Units to step when in/decreasing hue // #define RGBLIGHT_SAT_STEP 25 // Units to step when in/decreasing saturation // #define RGBLIGHT_VAL_STEP 12 // Units to step when in/decreasing value (brightness) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended // #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/mechlovin/adelais/rgb_led/rev1/config.h b/keyboards/mechlovin/adelais/rgb_led/rev1/config.h index 909bc7f83a..3db66128b9 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev1/config.h +++ b/keyboards/mechlovin/adelais/rgb_led/rev1/config.h @@ -4,7 +4,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 220 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/config.h b/keyboards/mechlovin/adelais/rgb_led/rev2/config.h index 6bdd06aba8..bdfdafecb5 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev2/config.h +++ b/keyboards/mechlovin/adelais/rgb_led/rev2/config.h @@ -9,7 +9,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/config.h b/keyboards/mechlovin/adelais/rgb_led/rev3/config.h index ba93133857..6af065ee85 100644 --- a/keyboards/mechlovin/adelais/rgb_led/rev3/config.h +++ b/keyboards/mechlovin/adelais/rgb_led/rev3/config.h @@ -30,7 +30,7 @@ along with this program. If not, see . #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/mechlovin/delphine/rgb_led/config.h b/keyboards/mechlovin/delphine/rgb_led/config.h index 60dc290bfb..2dc5f2dcd9 100644 --- a/keyboards/mechlovin/delphine/rgb_led/config.h +++ b/keyboards/mechlovin/delphine/rgb_led/config.h @@ -5,7 +5,7 @@ #define RGB_MATRIX_LED_COUNT 25 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/mechlovin/hannah60rgb/rev1/config.h b/keyboards/mechlovin/hannah60rgb/rev1/config.h index 08006aa996..f993212f70 100644 --- a/keyboards/mechlovin/hannah60rgb/rev1/config.h +++ b/keyboards/mechlovin/hannah60rgb/rev1/config.h @@ -5,7 +5,7 @@ # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) # define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// # define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 # define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/mechlovin/hannah60rgb/rev2/config.h b/keyboards/mechlovin/hannah60rgb/rev2/config.h index 4a4f4c7556..5324684e9d 100644 --- a/keyboards/mechlovin/hannah60rgb/rev2/config.h +++ b/keyboards/mechlovin/hannah60rgb/rev2/config.h @@ -9,7 +9,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_PINWHEEL // Sets the default mode, if none has been set diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/config.h b/keyboards/mechlovin/infinity87/rgb_rev1/config.h index 6e73aba5d9..c5a1f53bc7 100644 --- a/keyboards/mechlovin/infinity87/rgb_rev1/config.h +++ b/keyboards/mechlovin/infinity87/rgb_rev1/config.h @@ -17,7 +17,7 @@ #pragma once //rgb matrix setting -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #undef ENABLE_RGB_MATRIX_SPLASH #undef ENABLE_RGB_MATRIX_MULTISPLASH diff --git a/keyboards/mechlovin/infinity875/config.h b/keyboards/mechlovin/infinity875/config.h index eee31e69ef..91a364aacd 100644 --- a/keyboards/mechlovin/infinity875/config.h +++ b/keyboards/mechlovin/infinity875/config.h @@ -40,7 +40,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_LED_COUNT 42 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 220 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #endif diff --git a/keyboards/melgeek/mach80/config.h b/keyboards/melgeek/mach80/config.h index cc4d7bc6bf..0c3c0b4988 100755 --- a/keyboards/melgeek/mach80/config.h +++ b/keyboards/melgeek/mach80/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mj61/config.h b/keyboards/melgeek/mj61/config.h index 704699ece9..22dba89fac 100644 --- a/keyboards/melgeek/mj61/config.h +++ b/keyboards/melgeek/mj61/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mj63/config.h b/keyboards/melgeek/mj63/config.h index 704699ece9..22dba89fac 100644 --- a/keyboards/melgeek/mj63/config.h +++ b/keyboards/melgeek/mj63/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mj64/config.h b/keyboards/melgeek/mj64/config.h index 704699ece9..22dba89fac 100644 --- a/keyboards/melgeek/mj64/config.h +++ b/keyboards/melgeek/mj64/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mj65/config.h b/keyboards/melgeek/mj65/config.h index 704699ece9..22dba89fac 100644 --- a/keyboards/melgeek/mj65/config.h +++ b/keyboards/melgeek/mj65/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mojo68/config.h b/keyboards/melgeek/mojo68/config.h index e661efb2a9..b52fa44cbb 100755 --- a/keyboards/melgeek/mojo68/config.h +++ b/keyboards/melgeek/mojo68/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/mojo75/config.h b/keyboards/melgeek/mojo75/config.h index a4e89e5a90..790c1542ca 100644 --- a/keyboards/melgeek/mojo75/config.h +++ b/keyboards/melgeek/mojo75/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/tegic/config.h b/keyboards/melgeek/tegic/config.h index 723706d610..edbe524af9 100755 --- a/keyboards/melgeek/tegic/config.h +++ b/keyboards/melgeek/tegic/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/melgeek/z70ultra/config.h b/keyboards/melgeek/z70ultra/config.h index d78cbab672..e046d8f6ae 100644 --- a/keyboards/melgeek/z70ultra/config.h +++ b/keyboards/melgeek/z70ultra/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/miller/gm862/config.h b/keyboards/miller/gm862/config.h index 2bda7f75bb..1609c0245c 100644 --- a/keyboards/miller/gm862/config.h +++ b/keyboards/miller/gm862/config.h @@ -1,7 +1,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/momokai/aurora/config.h b/keyboards/momokai/aurora/config.h index 8fd619bdbf..2d3d707796 100644 --- a/keyboards/momokai/aurora/config.h +++ b/keyboards/momokai/aurora/config.h @@ -23,7 +23,7 @@ #define RGB_MATRIX_LED_COUNT 6 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/momokai/tap_duo/config.h b/keyboards/momokai/tap_duo/config.h index 153f611690..8817530408 100644 --- a/keyboards/momokai/tap_duo/config.h +++ b/keyboards/momokai/tap_duo/config.h @@ -34,7 +34,7 @@ #define RGB_MATRIX_LED_COUNT 4 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/momokai/tap_trio/config.h b/keyboards/momokai/tap_trio/config.h index a4a21d3f24..d1779ca496 100644 --- a/keyboards/momokai/tap_trio/config.h +++ b/keyboards/momokai/tap_trio/config.h @@ -24,7 +24,7 @@ #define RGB_MATRIX_LED_COUNT 5 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/monsgeek/m1/config.h b/keyboards/monsgeek/m1/config.h index 3963f1fbae..cd17ce67ce 100644 --- a/keyboards/monsgeek/m1/config.h +++ b/keyboards/monsgeek/m1/config.h @@ -42,7 +42,7 @@ #define DRIVER_2_LED_TOTAL 21 #define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL + 22) -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_TRIGGER_ON_KEYDOWN #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/monsgeek/m3/config.h b/keyboards/monsgeek/m3/config.h index 02c0fc6abc..d30ef18777 100644 --- a/keyboards/monsgeek/m3/config.h +++ b/keyboards/monsgeek/m3/config.h @@ -43,6 +43,6 @@ #define RGB_MATRIX_LED_COUNT 87 #define RGB_TRIGGER_ON_KEYDOWN -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/monsgeek/m5/config.h b/keyboards/monsgeek/m5/config.h index 20c69b34f1..cd976d262b 100644 --- a/keyboards/monsgeek/m5/config.h +++ b/keyboards/monsgeek/m5/config.h @@ -43,7 +43,7 @@ #define RGB_MATRIX_LED_COUNT 108 #define RGB_TRIGGER_ON_KEYDOWN -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/monsgeek/m6/config.h b/keyboards/monsgeek/m6/config.h index f01b8abb68..7987cf78be 100644 --- a/keyboards/monsgeek/m6/config.h +++ b/keyboards/monsgeek/m6/config.h @@ -39,7 +39,7 @@ #define RGB_MATRIX_LED_COUNT 92 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_TRIGGER_ON_KEYDOWN #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/monstargear/xo87/rgb/config.h b/keyboards/monstargear/xo87/rgb/config.h index 770c20f019..e0eb2b1db7 100644 --- a/keyboards/monstargear/xo87/rgb/config.h +++ b/keyboards/monstargear/xo87/rgb/config.h @@ -17,7 +17,7 @@ #pragma once #define RGB_MATRIX_LED_COUNT 110 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100 // limits maximum brightness of LEDs to 100 out of 255. #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/moonlander/config.h b/keyboards/moonlander/config.h index 3ceb45f54d..76e9906d3d 100644 --- a/keyboards/moonlander/config.h +++ b/keyboards/moonlander/config.h @@ -75,7 +75,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 175 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/novelkeys/nk20/config.h b/keyboards/novelkeys/nk20/config.h index 55d8b53e83..2c53f2d800 100644 --- a/keyboards/novelkeys/nk20/config.h +++ b/keyboards/novelkeys/nk20/config.h @@ -27,7 +27,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 20 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 210 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/novelkeys/nk65b/config.h b/keyboards/novelkeys/nk65b/config.h index e236351344..a428ed2c8d 100755 --- a/keyboards/novelkeys/nk65b/config.h +++ b/keyboards/novelkeys/nk65b/config.h @@ -27,7 +27,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 68 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/novelkeys/nk87b/config.h b/keyboards/novelkeys/nk87b/config.h index a0bbb315d4..7b8ada06b1 100644 --- a/keyboards/novelkeys/nk87b/config.h +++ b/keyboards/novelkeys/nk87b/config.h @@ -27,7 +27,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 87 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 114 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/novelkeys/nk_plus/config.h b/keyboards/novelkeys/nk_plus/config.h index 2d3322bab2..38b0ab195d 100644 --- a/keyboards/novelkeys/nk_plus/config.h +++ b/keyboards/novelkeys/nk_plus/config.h @@ -26,7 +26,7 @@ along with this program. If not, see . #define WS2812_DMA_CHANNEL 3 #define RGB_MATRIX_LED_COUNT 76 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/opendeck/32/rev1/config.h b/keyboards/opendeck/32/rev1/config.h index d5e824fdfb..c8cce9b630 100644 --- a/keyboards/opendeck/32/rev1/config.h +++ b/keyboards/opendeck/32/rev1/config.h @@ -18,7 +18,7 @@ // RGB matrix #define IS31FL3731_I2C_ADDRESS_1 IS31FL3731_I2C_ADDRESS_GND #define RGB_MATRIX_LED_COUNT (4 * 8 * 3) -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_SPIRAL #define RGB_MATRIX_DISABLE_KEYCODES // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/owlab/voice65/hotswap/config.h b/keyboards/owlab/voice65/hotswap/config.h index 8599c084d2..28d6e62285 100644 --- a/keyboards/owlab/voice65/hotswap/config.h +++ b/keyboards/owlab/voice65/hotswap/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define USE_I2CV2 # define RGB_MATRIX_DISABLE_KEYCODES -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/owlab/voice65/soldered/config.h b/keyboards/owlab/voice65/soldered/config.h index 9533e00a02..6fba9a27cf 100644 --- a/keyboards/owlab/voice65/soldered/config.h +++ b/keyboards/owlab/voice65/soldered/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define USE_I2CV2 # define RGB_MATRIX_DISABLE_KEYCODES -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/paprikman/albacore/config.h b/keyboards/paprikman/albacore/config.h index ede3d42de5..1ccc039b12 100644 --- a/keyboards/paprikman/albacore/config.h +++ b/keyboards/paprikman/albacore/config.h @@ -19,7 +19,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_LED_COUNT 8 - #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 220 #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN #define DISABLE_RGB_MATRIX_BAND_SAT diff --git a/keyboards/percent/canoe_gen2/config.h b/keyboards/percent/canoe_gen2/config.h index 062ba8102e..a18dd8b6cf 100644 --- a/keyboards/percent/canoe_gen2/config.h +++ b/keyboards/percent/canoe_gen2/config.h @@ -28,7 +28,7 @@ along with this program. If not, see . #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/phase_studio/titan65/hotswap/config.h b/keyboards/phase_studio/titan65/hotswap/config.h index 8724fc556d..a4f9ce84d9 100644 --- a/keyboards/phase_studio/titan65/hotswap/config.h +++ b/keyboards/phase_studio/titan65/hotswap/config.h @@ -18,5 +18,5 @@ #define RGB_MATRIX_LED_COUNT 67 #define RGB_MATRIX_KEYPRESSES // reacts to keypresses -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/phentech/rpk_001/config.h b/keyboards/phentech/rpk_001/config.h index baa207f065..ad95ed6f10 100644 --- a/keyboards/phentech/rpk_001/config.h +++ b/keyboards/phentech/rpk_001/config.h @@ -18,7 +18,7 @@ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12 /* RGB Matrix */ -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES diff --git a/keyboards/planck/ez/config.h b/keyboards/planck/ez/config.h index 93d0823714..f8ecfaf152 100644 --- a/keyboards/planck/ez/config.h +++ b/keyboards/planck/ez/config.h @@ -56,7 +56,7 @@ #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_LED_PROCESS_LIMIT 5 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 diff --git a/keyboards/planck/rev6/config.h b/keyboards/planck/rev6/config.h index a0a997f860..439284aa47 100644 --- a/keyboards/planck/rev6/config.h +++ b/keyboards/planck/rev6/config.h @@ -51,4 +51,4 @@ #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 #define WS2812_DMA_CHANNEL 2 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/planck/rev6_drop/config.h b/keyboards/planck/rev6_drop/config.h index a0a997f860..439284aa47 100644 --- a/keyboards/planck/rev6_drop/config.h +++ b/keyboards/planck/rev6_drop/config.h @@ -51,4 +51,4 @@ #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 #define WS2812_DMA_CHANNEL 2 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/planck/rev7/config.h b/keyboards/planck/rev7/config.h index 678cb1d438..c4009680a1 100644 --- a/keyboards/planck/rev7/config.h +++ b/keyboards/planck/rev7/config.h @@ -30,7 +30,7 @@ #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 #define WS2812_DMA_CHANNEL 2 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* * Feature disable options diff --git a/keyboards/projectd/65/projectd_65_ansi/config.h b/keyboards/projectd/65/projectd_65_ansi/config.h index 8b162a2149..429254c06e 100644 --- a/keyboards/projectd/65/projectd_65_ansi/config.h +++ b/keyboards/projectd/65/projectd_65_ansi/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/projectd/75/ansi/config.h b/keyboards/projectd/75/ansi/config.h index 3b685c09b8..250abf1724 100644 --- a/keyboards/projectd/75/ansi/config.h +++ b/keyboards/projectd/75/ansi/config.h @@ -21,7 +21,7 @@ /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP /* External spi flash */ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B14 diff --git a/keyboards/quarkeys/z40/config.h b/keyboards/quarkeys/z40/config.h index 84b3e5c03e..89c2057b29 100644 --- a/keyboards/quarkeys/z40/config.h +++ b/keyboards/quarkeys/z40/config.h @@ -18,7 +18,7 @@ #define RGB_MATRIX_LED_COUNT 47 #define RGB_MATRIX_KEYPRESSES // Reacts to Keypresses #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED // Turn off effects when suspended +#define RGB_MATRIX_SLEEP // Turn off effects when suspended #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130 // Limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash. // RGB_MATRIX effects diff --git a/keyboards/qwertykeys/qk100/ansi/config.h b/keyboards/qwertykeys/qk100/ansi/config.h index 82766b8834..c210fdf1eb 100644 --- a/keyboards/qwertykeys/qk100/ansi/config.h +++ b/keyboards/qwertykeys/qk100/ansi/config.h @@ -32,7 +32,7 @@ along with this program. If not, see . #define I2C1_CLOCK_SPEED 400000 #define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2 # define RGB_MATRIX_DISABLE_KEYCODES -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_LED_PROCESS_LIMIT 4 diff --git a/keyboards/rgbkb/mun/config.h b/keyboards/rgbkb/mun/config.h index 87a7fe1319..7b10bc8d9d 100644 --- a/keyboards/rgbkb/mun/config.h +++ b/keyboards/rgbkb/mun/config.h @@ -50,7 +50,7 @@ #define RGB_MATRIX_LED_PROCESS_LIMIT 10 #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/rgbkb/mun/keymaps/default/config.h b/keyboards/rgbkb/mun/keymaps/default/config.h index 88bdc06dee..7b8e106b46 100644 --- a/keyboards/rgbkb/mun/keymaps/default/config.h +++ b/keyboards/rgbkb/mun/keymaps/default/config.h @@ -18,4 +18,4 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/rgbkb/mun/keymaps/peott-fr/config.h b/keyboards/rgbkb/mun/keymaps/peott-fr/config.h index a0b6cced11..8839c9c666 100644 --- a/keyboards/rgbkb/mun/keymaps/peott-fr/config.h +++ b/keyboards/rgbkb/mun/keymaps/peott-fr/config.h @@ -18,6 +18,6 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define STM32_ONBOARD_EEPROM_SIZE 2048 diff --git a/keyboards/rgbkb/mun/keymaps/via/config.h b/keyboards/rgbkb/mun/keymaps/via/config.h index a0f581b50a..67ad76d191 100644 --- a/keyboards/rgbkb/mun/keymaps/via/config.h +++ b/keyboards/rgbkb/mun/keymaps/via/config.h @@ -18,7 +18,7 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2 // 224B per layer right now diff --git a/keyboards/rgbkb/mun/keymaps/xulkal2/config.h b/keyboards/rgbkb/mun/keymaps/xulkal2/config.h index c945db1417..b34b40c785 100644 --- a/keyboards/rgbkb/mun/keymaps/xulkal2/config.h +++ b/keyboards/rgbkb/mun/keymaps/xulkal2/config.h @@ -30,7 +30,7 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define OLED_SCROLL_TIMEOUT 20000 #define ONESHOT_TAP_TOGGLE 2 diff --git a/keyboards/rgbkb/sol3/config.h b/keyboards/rgbkb/sol3/config.h index 102ebcda95..561cacb76a 100644 --- a/keyboards/rgbkb/sol3/config.h +++ b/keyboards/rgbkb/sol3/config.h @@ -49,7 +49,7 @@ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 #define RGB_MATRIX_LED_FLUSH_LIMIT 33 #define RGB_MATRIX_LED_PROCESS_LIMIT 10 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/rgbkb/sol3/keymaps/default/config.h b/keyboards/rgbkb/sol3/keymaps/default/config.h index 88bdc06dee..7b8e106b46 100644 --- a/keyboards/rgbkb/sol3/keymaps/default/config.h +++ b/keyboards/rgbkb/sol3/keymaps/default/config.h @@ -18,4 +18,4 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP diff --git a/keyboards/rgbkb/sol3/keymaps/via/config.h b/keyboards/rgbkb/sol3/keymaps/via/config.h index 7b7f806261..8206f72fa6 100644 --- a/keyboards/rgbkb/sol3/keymaps/via/config.h +++ b/keyboards/rgbkb/sol3/keymaps/via/config.h @@ -18,7 +18,7 @@ // 20m timeout (20m * 60s * 1000mil) // #define RGB_MATRIX_TIMEOUT 1200000 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2 diff --git a/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h index b8a6b843ce..94b5ebf0c8 100644 --- a/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h +++ b/keyboards/salicylic_acid3/naked48/keymaps/salicylic/config.h @@ -30,7 +30,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) // # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h index 36be4d6868..a967ffd3c1 100644 --- a/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h +++ b/keyboards/salicylic_acid3/naked48/keymaps/via_rgb_matrix/config.h @@ -31,7 +31,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) // #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // enable framebuffer effects - #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended + #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h index 540c819c2b..590edd0f02 100644 --- a/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h +++ b/keyboards/salicylic_acid3/setta21/keymaps/salicylic/config.h @@ -26,7 +26,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) // # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 diff --git a/keyboards/sawnsprojects/satxri6key/config.h b/keyboards/sawnsprojects/satxri6key/config.h index d649c698ab..4703b5a937 100644 --- a/keyboards/sawnsprojects/satxri6key/config.h +++ b/keyboards/sawnsprojects/satxri6key/config.h @@ -20,7 +20,7 @@ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// #define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +// #define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Sets the default mode, if none has been set diff --git a/keyboards/senselessclay/ck60/config.h b/keyboards/senselessclay/ck60/config.h index 44f0121915..674a4b03e8 100644 --- a/keyboards/senselessclay/ck60/config.h +++ b/keyboards/senselessclay/ck60/config.h @@ -23,7 +23,7 @@ along with this program. If not, see . #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 160 // limit brightness to not overamp the USB #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // 16 is equivalent to limiting to 60fps -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/skeletonkbd/frost68/config.h b/keyboards/skeletonkbd/frost68/config.h index eaf7a31fb6..de768e745b 100644 --- a/keyboards/skeletonkbd/frost68/config.h +++ b/keyboards/skeletonkbd/frost68/config.h @@ -6,7 +6,7 @@ #define WS2812_PIO_USE_PIO1 #define RGB_MATRIX_LED_COUNT 68 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define USB_SUSPEND_WAKEUP_DELAY 200 #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/skmt/15k/config.h b/keyboards/skmt/15k/config.h index 6e0360ec7b..86ce343ca8 100644 --- a/keyboards/skmt/15k/config.h +++ b/keyboards/skmt/15k/config.h @@ -20,7 +20,7 @@ //#define NO_ACTION_ONESHOT #define RGB_MATRIX_LED_COUNT 15 // Number of LEDs -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 #define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/skyloong/dt40/config.h b/keyboards/skyloong/dt40/config.h index e67b7ae0a9..87cea4a152 100644 --- a/keyboards/skyloong/dt40/config.h +++ b/keyboards/skyloong/dt40/config.h @@ -17,7 +17,7 @@ #define RGB_MATRIX_LED_COUNT 44 //The number of LEDs connected #define RGB_MATRIX_KEYPRESSES //Reacts to keypress -#define RGB_DISABLE_WHEN_USB_SUSPENDED //turn off effects when suspended +#define RGB_MATRIX_SLEEP //turn off effects when suspended #define RGB_MATRIX_DEFAULT_VAL 150 //Sets the default mode, if none has been set #define RGB_TRIGGER_ON_KEYDOWN //Triggers RGB keypress events on key down diff --git a/keyboards/skyloong/gk61/pro_48/config.h b/keyboards/skyloong/gk61/pro_48/config.h index df94455a9e..4e8d9f0224 100644 --- a/keyboards/skyloong/gk61/pro_48/config.h +++ b/keyboards/skyloong/gk61/pro_48/config.h @@ -9,7 +9,7 @@ #define MAC_MOD_INDEX 17 #define SDB A4 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/skyloong/gk61/v1/config.h b/keyboards/skyloong/gk61/v1/config.h index bd9cab743f..f824515142 100644 --- a/keyboards/skyloong/gk61/v1/config.h +++ b/keyboards/skyloong/gk61/v1/config.h @@ -21,5 +21,5 @@ #define RGB_MATRIX_FRAMEBUFFER_EFFECTS //Enable frame effects #define RGB_MATRIX_KEYPRESSES //Reacts to keypress -#define RGB_DISABLE_WHEN_USB_SUSPENDED //turn off effects when suspended +#define RGB_MATRIX_SLEEP //turn off effects when suspended #define SDB C1 diff --git a/keyboards/skyloong/qk21/v1/config.h b/keyboards/skyloong/qk21/v1/config.h index c74d5cce78..c862fc87d5 100644 --- a/keyboards/skyloong/qk21/v1/config.h +++ b/keyboards/skyloong/qk21/v1/config.h @@ -9,4 +9,4 @@ #define RGB_MATRIX_LED_COUNT 21 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS //Enable frame effects #define RGB_MATRIX_KEYPRESSES //Reacts to keypress -#define RGB_DISABLE_WHEN_USB_SUSPENDED //turn off effects when suspended +#define RGB_MATRIX_SLEEP //turn off effects when suspended diff --git a/keyboards/smallkeyboard/config.h b/keyboards/smallkeyboard/config.h index d98a2b6ef2..3a70b4e27a 100644 --- a/keyboards/smallkeyboard/config.h +++ b/keyboards/smallkeyboard/config.h @@ -18,7 +18,7 @@ #pragma once #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/sofle/keymaps/rgb_default/config.h b/keyboards/sofle/keymaps/rgb_default/config.h index ee137625c0..314322c929 100644 --- a/keyboards/sofle/keymaps/rgb_default/config.h +++ b/keyboards/sofle/keymaps/rgb_default/config.h @@ -82,7 +82,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/sofle_choc/keymaps/default/config.h b/keyboards/sofle_choc/keymaps/default/config.h index 93f173e84d..d48529d816 100644 --- a/keyboards/sofle_choc/keymaps/default/config.h +++ b/keyboards/sofle_choc/keymaps/default/config.h @@ -24,6 +24,6 @@ // I've found this helps with some ProMicros where the slave does not boot #define SPLIT_USB_DETECT -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define SPLIT_TRANSPORT_MIRROR // If LED_MATRIX_KEYPRESSES or LED_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100 // limits maximum brightness of LEDs (max 255). Higher may cause the controller to crash. diff --git a/keyboards/sofle_choc/keymaps/via/config.h b/keyboards/sofle_choc/keymaps/via/config.h index 93f173e84d..d48529d816 100644 --- a/keyboards/sofle_choc/keymaps/via/config.h +++ b/keyboards/sofle_choc/keymaps/via/config.h @@ -24,6 +24,6 @@ // I've found this helps with some ProMicros where the slave does not boot #define SPLIT_USB_DETECT -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define SPLIT_TRANSPORT_MIRROR // If LED_MATRIX_KEYPRESSES or LED_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100 // limits maximum brightness of LEDs (max 255). Higher may cause the controller to crash. diff --git a/keyboards/spaceholdings/nebula12b/config.h b/keyboards/spaceholdings/nebula12b/config.h index aba496d469..dbff3e8a82 100755 --- a/keyboards/spaceholdings/nebula12b/config.h +++ b/keyboards/spaceholdings/nebula12b/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 16 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/spaceholdings/nebula68b/config.h b/keyboards/spaceholdings/nebula68b/config.h index 4da2b5894a..b87fe0101a 100755 --- a/keyboards/spaceholdings/nebula68b/config.h +++ b/keyboards/spaceholdings/nebula68b/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 79 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/splitkb/aurora/helix/keymaps/default/config.h b/keyboards/splitkb/aurora/helix/keymaps/default/config.h index 869e99b779..a6863a01e8 100644 --- a/keyboards/splitkb/aurora/helix/keymaps/default/config.h +++ b/keyboards/splitkb/aurora/helix/keymaps/default/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE #define ENABLE_RGB_MATRIX_SOLID_SPLASH diff --git a/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h index 353c0ee349..75d233f42e 100644 --- a/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h +++ b/keyboards/splitkb/aurora/sofle_v2/keymaps/default/config.h @@ -16,7 +16,7 @@ #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE #define ENABLE_RGB_MATRIX_SOLID_SPLASH diff --git a/keyboards/splitkb/aurora/sweep/keymaps/default/config.h b/keyboards/splitkb/aurora/sweep/keymaps/default/config.h index b35ec79511..4605cb782a 100644 --- a/keyboards/splitkb/aurora/sweep/keymaps/default/config.h +++ b/keyboards/splitkb/aurora/sweep/keymaps/default/config.h @@ -18,7 +18,7 @@ // Not yet available in `keymap.json` format #ifdef RGB_MATRIX_ENABLE -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE # define ENABLE_RGB_MATRIX_SOLID_SPLASH diff --git a/keyboards/splitkb/kyria/rev1/config.h b/keyboards/splitkb/kyria/rev1/config.h index 6c21b12a84..2938523aee 100644 --- a/keyboards/splitkb/kyria/rev1/config.h +++ b/keyboards/splitkb/kyria/rev1/config.h @@ -52,5 +52,5 @@ along with this program. If not, see . # define RGB_MATRIX_LED_COUNT 20 // Number of LEDs # define RGB_MATRIX_SPLIT { 10, 10 } # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP #endif diff --git a/keyboards/splitkb/kyria/rev2/config.h b/keyboards/splitkb/kyria/rev2/config.h index 198688772b..d39b8eca88 100644 --- a/keyboards/splitkb/kyria/rev2/config.h +++ b/keyboards/splitkb/kyria/rev2/config.h @@ -58,5 +58,5 @@ along with this program. If not, see . # define RGB_MATRIX_LED_COUNT 20 // Number of LEDs # define RGB_MATRIX_SPLIT { 10, 10 } # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP #endif diff --git a/keyboards/stront/config.h b/keyboards/stront/config.h index 0694b9dd3c..dfa84ada8e 100644 --- a/keyboards/stront/config.h +++ b/keyboards/stront/config.h @@ -39,7 +39,7 @@ #ifdef RGB_MATRIX_ENABLE # define SPLIT_TRANSPORT_MIRROR # define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_FRAMEBUFFER_EFFECTS # define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/synthlabs/060/config.h b/keyboards/synthlabs/060/config.h index 4a475316ed..666ca4ba4b 100644 --- a/keyboards/synthlabs/060/config.h +++ b/keyboards/synthlabs/060/config.h @@ -6,7 +6,7 @@ /* Backlighting */ #define RGB_MATRIX_LED_COUNT 63 #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes // For full list of effects, see: diff --git a/keyboards/system76/launch_1/config.h b/keyboards/system76/launch_1/config.h index 27e3025fe3..1583af064e 100644 --- a/keyboards/system76/launch_1/config.h +++ b/keyboards/system76/launch_1/config.h @@ -22,7 +22,7 @@ # define RGB_MATRIX_KEYPRESSES // Reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // Reacts to keyreleases (instead of keypresses) // # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enables framebuffer effects -# define RGB_DISABLE_WHEN_USB_SUSPENDED // Turns off effects when suspended +# define RGB_MATRIX_SLEEP // Turns off effects when suspended // Limit brightness to support USB-A at 0.5 A // TODO: Do this dynamically based on power source # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 176 // Limits maximum brightness of LEDs to 176 out of 255. If not defined, maximum brightness is set to 255 diff --git a/keyboards/teleport/native/config.h b/keyboards/teleport/native/config.h index 99c82df12e..08fdfcbc49 100644 --- a/keyboards/teleport/native/config.h +++ b/keyboards/teleport/native/config.h @@ -37,7 +37,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_FLUSH_LIMIT 32 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_DEFAULT_SPD 40 #define RGB_MATRIX_DEFAULT_VAL 220 diff --git a/keyboards/tkc/portico/config.h b/keyboards/tkc/portico/config.h index 265e0abbc3..bee9627188 100644 --- a/keyboards/tkc/portico/config.h +++ b/keyboards/tkc/portico/config.h @@ -20,7 +20,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN # undef ENABLE_RGB_MATRIX_BAND_SAT diff --git a/keyboards/tkc/portico68v2/config.h b/keyboards/tkc/portico68v2/config.h index 2c8ecf806d..69b5090764 100644 --- a/keyboards/tkc/portico68v2/config.h +++ b/keyboards/tkc/portico68v2/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 175 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/tkc/portico75/config.h b/keyboards/tkc/portico75/config.h index 8146141bf0..727b0cccaf 100644 --- a/keyboards/tkc/portico75/config.h +++ b/keyboards/tkc/portico75/config.h @@ -20,7 +20,7 @@ along with this program. If not, see . #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/tominabox1/le_chiffre/config.h b/keyboards/tominabox1/le_chiffre/config.h index 9b01cb3da4..13ea91148e 100644 --- a/keyboards/tominabox1/le_chiffre/config.h +++ b/keyboards/tominabox1/le_chiffre/config.h @@ -24,4 +24,4 @@ * WS2812 Underglow Matrix options */ #define RGB_MATRIX_LED_COUNT 11 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended diff --git a/keyboards/treasure/type9s3/config.h b/keyboards/treasure/type9s3/config.h index b87cd59b2f..ba9969bcec 100644 --- a/keyboards/treasure/type9s3/config.h +++ b/keyboards/treasure/type9s3/config.h @@ -10,7 +10,7 @@ #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT diff --git a/keyboards/ungodly/launch_pad/config.h b/keyboards/ungodly/launch_pad/config.h index f3431bd412..4a87ec355b 100644 --- a/keyboards/ungodly/launch_pad/config.h +++ b/keyboards/ungodly/launch_pad/config.h @@ -24,7 +24,7 @@ # define RGB_MATRIX_LED_COUNT 22 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/keyboards/winry/winry315/config.h b/keyboards/winry/winry315/config.h index 4a3c8c3e27..40de98e7cf 100644 --- a/keyboards/winry/winry315/config.h +++ b/keyboards/winry/winry315/config.h @@ -13,7 +13,7 @@ # define RGB_MATRIX_CENTER \ { 35, 35 } -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP // This option is required for the TYPING_HEATMAP and DIGITAL_RAIN effects, // both of which are disabled below, so the common support for those effects is diff --git a/keyboards/wolf/m60_b/config.h b/keyboards/wolf/m60_b/config.h index a0d44d48e3..ec25c261fa 100644 --- a/keyboards/wolf/m60_b/config.h +++ b/keyboards/wolf/m60_b/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 62 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 diff --git a/keyboards/wolf/m6_c/config.h b/keyboards/wolf/m6_c/config.h index d5f391bcdd..6469e63379 100644 --- a/keyboards/wolf/m6_c/config.h +++ b/keyboards/wolf/m6_c/config.h @@ -3,7 +3,7 @@ #pragma once #define RGB_MATRIX_LED_COUNT 6 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/work_louder/loop/config.h b/keyboards/work_louder/loop/config.h index 28c506d867..accf64139d 100644 --- a/keyboards/work_louder/loop/config.h +++ b/keyboards/work_louder/loop/config.h @@ -26,7 +26,7 @@ along with this program. If not, see . #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/work_louder/micro/config.h b/keyboards/work_louder/micro/config.h index 98f2b86973..f2c2d20f8a 100644 --- a/keyboards/work_louder/micro/config.h +++ b/keyboards/work_louder/micro/config.h @@ -7,7 +7,7 @@ #define RGB_MATRIX_LED_COUNT 12 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 #define RGB_MATRIX_DISABLE_KEYCODES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/work_louder/nano/config.h b/keyboards/work_louder/nano/config.h index 22c6f7b1bd..302655c564 100644 --- a/keyboards/work_louder/nano/config.h +++ b/keyboards/work_louder/nano/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 2 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/work_louder/numpad/config.h b/keyboards/work_louder/numpad/config.h index f6a70b90b0..08ec8472e2 100644 --- a/keyboards/work_louder/numpad/config.h +++ b/keyboards/work_louder/numpad/config.h @@ -22,7 +22,7 @@ #define RGB_MATRIX_LED_COUNT 16 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 #define RGB_MATRIX_DISABLE_KEYCODES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/work_louder/work_board/config.h b/keyboards/work_louder/work_board/config.h index de91d98de9..520da36a9f 100644 --- a/keyboards/work_louder/work_board/config.h +++ b/keyboards/work_louder/work_board/config.h @@ -25,7 +25,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 49 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120 #define RGB_MATRIX_DISABLE_KEYCODES -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // #define RGB_MATRIX_FRAMEBUFFER_EFFECTS // #define RGB_MATRIX_KEYPRESSES diff --git a/keyboards/xbows/knight/config.h b/keyboards/xbows/knight/config.h index d28ca9eac4..c19090c7f3 100644 --- a/keyboards/xbows/knight/config.h +++ b/keyboards/xbows/knight/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 18 # define RGB_MATRIX_LED_FLUSH_LIMIT 16 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 # define RGB_MATRIX_CENTER \ diff --git a/keyboards/xbows/knight_plus/config.h b/keyboards/xbows/knight_plus/config.h index 433d8d994f..67543d16f5 100644 --- a/keyboards/xbows/knight_plus/config.h +++ b/keyboards/xbows/knight_plus/config.h @@ -19,7 +19,7 @@ # define RGB_MATRIX_LED_PROCESS_LIMIT 18 # define RGB_MATRIX_LED_FLUSH_LIMIT 16 # define RGB_MATRIX_KEYPRESSES -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 # define RGB_MATRIX_CENTER \ { 92, 33 } diff --git a/keyboards/xbows/nature/config.h b/keyboards/xbows/nature/config.h index 1710e17c2f..6e8741567a 100644 --- a/keyboards/xbows/nature/config.h +++ b/keyboards/xbows/nature/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 18 # define RGB_MATRIX_LED_FLUSH_LIMIT 16 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 # define RGB_MATRIX_CENTER \ diff --git a/keyboards/xbows/numpad/config.h b/keyboards/xbows/numpad/config.h index df025a850d..2cad3d2251 100644 --- a/keyboards/xbows/numpad/config.h +++ b/keyboards/xbows/numpad/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 18 # define RGB_MATRIX_LED_FLUSH_LIMIT 16 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 # define RGB_MATRIX_CENTER \ diff --git a/keyboards/xbows/ranger/config.h b/keyboards/xbows/ranger/config.h index 92bcfa492c..033e1d2cbe 100644 --- a/keyboards/xbows/ranger/config.h +++ b/keyboards/xbows/ranger/config.h @@ -18,7 +18,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_LED_PROCESS_LIMIT 18 # define RGB_MATRIX_LED_FLUSH_LIMIT 16 -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 # define RGB_MATRIX_CENTER { 103, 32 } diff --git a/keyboards/xbows/woody/config.h b/keyboards/xbows/woody/config.h index 7d06b7abda..8b701609ce 100644 --- a/keyboards/xbows/woody/config.h +++ b/keyboards/xbows/woody/config.h @@ -3,7 +3,7 @@ #ifdef RGB_MATRIX_ENABLE #define RGB_MATRIX_LED_PROCESS_LIMIT 4 #define RGB_MATRIX_LED_FLUSH_LIMIT 26 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 diff --git a/keyboards/xelus/la_plus/config.h b/keyboards/xelus/la_plus/config.h index 6e3a51166e..c40aea16e2 100755 --- a/keyboards/xelus/la_plus/config.h +++ b/keyboards/xelus/la_plus/config.h @@ -27,7 +27,7 @@ #define RGB_MATRIX_LED_COUNT 32 #define RGB_MATRIX_DEFAULT_VAL 80 -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 diff --git a/keyboards/xelus/pachi/rgb/rev1/config.h b/keyboards/xelus/pachi/rgb/rev1/config.h index e12b1af443..870a0c61a1 100644 --- a/keyboards/xelus/pachi/rgb/rev1/config.h +++ b/keyboards/xelus/pachi/rgb/rev1/config.h @@ -45,7 +45,7 @@ #define RGB_MATRIX_DEFAULT_VAL 80 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/xelus/pachi/rgb/rev2/config.h b/keyboards/xelus/pachi/rgb/rev2/config.h index f852602705..059bafcf32 100644 --- a/keyboards/xelus/pachi/rgb/rev2/config.h +++ b/keyboards/xelus/pachi/rgb/rev2/config.h @@ -45,7 +45,7 @@ #define RGB_MATRIX_DEFAULT_VAL 80 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES -#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +#define RGB_MATRIX_SLEEP // turn off effects when suspended #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL #define ENABLE_RGB_MATRIX_ALPHAS_MODS diff --git a/keyboards/xelus/valor/rev2/config.h b/keyboards/xelus/valor/rev2/config.h index 9a0146172d..11d1dac4bd 100644 --- a/keyboards/xelus/valor/rev2/config.h +++ b/keyboards/xelus/valor/rev2/config.h @@ -55,7 +55,7 @@ #define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CUSTOM_test_mode // RGB Matrix Animation modes. Explicitly enabled diff --git a/keyboards/yandrstudio/nz64/config.h b/keyboards/yandrstudio/nz64/config.h index 4aa37c5f20..18a4241fb7 100644 --- a/keyboards/yandrstudio/nz64/config.h +++ b/keyboards/yandrstudio/nz64/config.h @@ -27,7 +27,7 @@ # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 -# define RGB_DISABLE_WHEN_USB_SUSPENDED true +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_CENTER { 96, 32 } # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/yandrstudio/nz67v2/config.h b/keyboards/yandrstudio/nz67v2/config.h index dba2f77395..527a56b6c6 100644 --- a/keyboards/yandrstudio/nz67v2/config.h +++ b/keyboards/yandrstudio/nz67v2/config.h @@ -22,7 +22,7 @@ # define RGB_MATRIX_LED_COUNT 86 # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/yandrstudio/tg67/config.h b/keyboards/yandrstudio/tg67/config.h index 3386838c74..484c50efd3 100644 --- a/keyboards/yandrstudio/tg67/config.h +++ b/keyboards/yandrstudio/tg67/config.h @@ -21,7 +21,7 @@ # define RGB_MATRIX_LED_COUNT 69 # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 250 -# define RGB_DISABLE_WHEN_USB_SUSPENDED +# define RGB_MATRIX_SLEEP # define RGB_MATRIX_KEYPRESSES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/ymdk/id75/config.h b/keyboards/ymdk/id75/config.h index ed0d3f9539..b60d0178c6 100644 --- a/keyboards/ymdk/id75/config.h +++ b/keyboards/ymdk/id75/config.h @@ -18,7 +18,7 @@ #define RGB_MATRIX_LED_COUNT 89 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/ymdk/ymd09/config.h b/keyboards/ymdk/ymd09/config.h index b66c41ad69..4fe12b8fc3 100644 --- a/keyboards/ymdk/ymd09/config.h +++ b/keyboards/ymdk/ymd09/config.h @@ -20,7 +20,7 @@ along with this program. If not, see . #define RGB_MATRIX_LED_COUNT 9 -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: diff --git a/keyboards/ymdk/ymd40/air40/config.h b/keyboards/ymdk/ymd40/air40/config.h index 2f64f97d93..b6e3a5c6c1 100644 --- a/keyboards/ymdk/ymd40/air40/config.h +++ b/keyboards/ymdk/ymd40/air40/config.h @@ -20,7 +20,7 @@ #ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_KEYPRESSES // reacts to keypresses # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130 // Limit to vendor-recommended value -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended // RGB Matrix Animation modes. Explicitly enabled // For full list of effects, see: // https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects diff --git a/keyboards/ymdk/ymd75/rev4/iso/config.h b/keyboards/ymdk/ymd75/rev4/iso/config.h index 317c0ec236..210d6f9233 100644 --- a/keyboards/ymdk/ymd75/rev4/iso/config.h +++ b/keyboards/ymdk/ymd75/rev4/iso/config.h @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#define RGB_DISABLE_WHEN_USB_SUSPENDED +#define RGB_MATRIX_SLEEP #define WS2812_PWM_DRIVER PWMD4 #define WS2812_PWM_CHANNEL 4 diff --git a/keyboards/yncognito/batpad/config.h b/keyboards/yncognito/batpad/config.h index d44817cae9..dc219023ef 100644 --- a/keyboards/yncognito/batpad/config.h +++ b/keyboards/yncognito/batpad/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . #define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYRELEASES #define RGB_MATRIX_FRAMEBUFFER_EFFECTS -// #define RGB_DISABLE_WHEN_USB_SUSPENDED +// #define RGB_MATRIX_SLEEP #define RGB_MATRIX_LED_FLUSH_LIMIT 16 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255 #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_ALL diff --git a/keyboards/yushakobo/quick17/config.h b/keyboards/yushakobo/quick17/config.h index 1d3b4dd3ee..67951cde59 100644 --- a/keyboards/yushakobo/quick17/config.h +++ b/keyboards/yushakobo/quick17/config.h @@ -21,7 +21,7 @@ along with this program. If not, see . # define RGB_MATRIX_LED_COUNT 18 # define RGB_MATRIX_KEYPRESSES // reacts to keypresses // # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses) -# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended +# define RGB_MATRIX_SLEEP // turn off effects when suspended # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // # define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) // # define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index fb7f20c210..4865664ac0 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -469,7 +469,7 @@ void rgb_matrix_init(void) { } void rgb_matrix_set_suspend_state(bool state) { -#ifdef RGB_DISABLE_WHEN_USB_SUSPENDED +#ifdef RGB_MATRIX_SLEEP if (state && !suspend_state) { // only run if turning off, and only once rgb_task_render(0); // turn off all LEDs when suspending rgb_task_flush(0); // and actually flash led state to LEDs -- cgit v1.2.3 From b824faca71e1db86c158a0e09f225410c1e7e0a8 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 24 Dec 2023 06:52:41 +0000 Subject: Align location of tap dance keycode (#22742) --- docs/feature_tap_dance.md | 2 +- quantum/process_keycode/process_tap_dance.c | 6 +++--- quantum/process_keycode/process_tap_dance.h | 4 ++-- quantum/quantum_keycodes.h | 4 ++++ tests/tap_dance/examples.c | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) (limited to 'quantum') diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md index 42ea233962..bb1c2c8034 100644 --- a/docs/feature_tap_dance.md +++ b/docs/feature_tap_dance.md @@ -173,7 +173,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case TD(CT_CLN): // list all tap dance keycodes with tap-hold configurations - action = &tap_dance_actions[TD_INDEX(keycode)]; + action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)]; if (!record->event.pressed && action->state.count && !action->state.finished) { tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data; tap_code16(tap_hold->tap); diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c index b8a8d32f35..ce3b8fc81f 100644 --- a/quantum/process_keycode/process_tap_dance.c +++ b/quantum/process_keycode/process_tap_dance.c @@ -133,7 +133,7 @@ bool preprocess_tap_dance(uint16_t keycode, keyrecord_t *record) { if (!active_td || keycode == active_td) return false; - action = &tap_dance_actions[TD_INDEX(active_td)]; + action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(active_td)]; action->state.interrupted = true; action->state.interrupting_keycode = keycode; process_tap_dance_action_on_dance_finished(action); @@ -154,7 +154,7 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case QK_TAP_DANCE ... QK_TAP_DANCE_MAX: - action = &tap_dance_actions[TD_INDEX(keycode)]; + action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)]; action->state.pressed = record->event.pressed; if (record->event.pressed) { @@ -182,7 +182,7 @@ void tap_dance_task(void) { if (!active_td || timer_elapsed(last_tap_time) <= GET_TAPPING_TERM(active_td, &(keyrecord_t){})) return; - action = &tap_dance_actions[TD_INDEX(active_td)]; + action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(active_td)]; if (!action->state.interrupted) { process_tap_dance_action_on_dance_finished(action); } diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h index 2b114dabd3..c0137c14a3 100644 --- a/quantum/process_keycode/process_tap_dance.h +++ b/quantum/process_keycode/process_tap_dance.h @@ -19,6 +19,7 @@ #include #include #include "action.h" +#include "quantum_keycodes.h" typedef struct { uint16_t interrupting_keycode; @@ -74,8 +75,7 @@ typedef struct { #define ACTION_TAP_DANCE_FN_ADVANCED_WITH_RELEASE(user_fn_on_each_tap, user_fn_on_each_release, user_fn_on_dance_finished, user_fn_on_dance_reset) \ { .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, user_fn_on_each_release}, .user_data = NULL, } -#define TD(n) (QK_TAP_DANCE | TD_INDEX(n)) -#define TD_INDEX(code) ((code)&0xFF) +#define TD_INDEX(code) QK_TAP_DANCE_GET_INDEX(code) #define TAP_DANCE_KEYCODE(state) TD(((tap_dance_action_t *)state) - tap_dance_actions) extern tap_dance_action_t tap_dance_actions[]; diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index d3249bd455..882e1d07ae 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -190,6 +190,10 @@ #define SH_T(kc) (QK_SWAP_HANDS | ((kc)&0xFF)) #define QK_SWAP_HANDS_GET_TAP_KEYCODE(kc) ((kc)&0xFF) +// Tap dance +#define TD(i) (QK_TAP_DANCE | ((i)&0xFF)) +#define QK_TAP_DANCE_GET_INDEX(kc) ((kc)&0xFF) + // MIDI aliases #define MIDI_TONE_MIN QK_MIDI_NOTE_C_0 #define MIDI_TONE_MAX QK_MIDI_NOTE_B_5 diff --git a/tests/tap_dance/examples.c b/tests/tap_dance/examples.c index 13086bbb4b..5377b397d3 100644 --- a/tests/tap_dance/examples.c +++ b/tests/tap_dance/examples.c @@ -83,7 +83,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case TD(CT_CLN): - action = &tap_dance_actions[TD_INDEX(keycode)]; + action = &tap_dance_actions[QK_TAP_DANCE_GET_INDEX(keycode)]; if (!record->event.pressed && action->state.count && !action->state.finished) { tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data; tap_code16(tap_hold->tap); -- cgit v1.2.3 From b24bd2351a8536b85422db4157b06ee65cc9e90f Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 24 Dec 2023 06:52:58 +0000 Subject: Remove redundant audio eeconfig init (#22736) --- data/mappings/info_config.hjson | 2 ++ data/schemas/keyboard.jsonschema | 8 ++++++++ docs/reference_info_json.md | 7 +++++++ quantum/audio/audio.c | 37 ++++++++++++++++++++++--------------- quantum/audio/audio.h | 3 ++- quantum/eeconfig.c | 2 +- 6 files changed, 42 insertions(+), 17 deletions(-) (limited to 'quantum') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 45c50a9242..7930eed642 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -17,6 +17,8 @@ "APA102_DI_PIN": {"info_key": "apa102.data_pin"}, // Audio + "AUDIO_DEFAULT_ON": {"info_key": "audio.default.on", "value_type": "bool"}, + "AUDIO_DEFAULT_CLICKY_ON": {"info_key": "audio.default.clicky", "value_type": "bool"}, "AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"}, "SENDSTRING_BELL": {"info_key": "audio.macro_beep", "value_type": "bool"}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 32d737a1d8..4836cf1fca 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -123,6 +123,14 @@ "type": "object", "additionalProperties": false, "properties": { + "default": { + "type": "object", + "additionalProperties": false, + "properties": { + "on": {"type": "boolean"}, + "clicky": {"type": "boolean"} + } + }, "macro_beep": {"type": "boolean"}, "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "voices": {"type": "boolean"} diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index e102b9bfb9..1f73ec8fae 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -111,6 +111,13 @@ Configures the [APA102](apa102_driver.md) driver. Configures the [Audio](feature_audio.md) feature. * `audio` + * `default` + * `on` + * The default audio enabled state. + * Default: `true` + * `clicky` + * The default audio clicky enabled state. + * Default: `true` * `macro_beep` * Play a short beep for `\a` (ASCII `BEL`) characters in Send String macros. * Default: `false` diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index 28c8267517..c1a1500493 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -17,6 +17,7 @@ #include "audio.h" #include "eeconfig.h" #include "timer.h" +#include "debug.h" #include "wait.h" #include "util.h" @@ -62,6 +63,13 @@ * the internal state of the audio system does its calculations with the later - ms */ +#ifndef AUDIO_DEFAULT_ON +# define AUDIO_DEFAULT_ON true +#endif +#ifndef AUDIO_DEFAULT_CLICKY_ON +# define AUDIO_DEFAULT_CLICKY_ON true +#endif + #ifndef AUDIO_TONE_STACKSIZE # define AUDIO_TONE_STACKSIZE 8 #endif @@ -117,32 +125,31 @@ void eeconfig_update_audio_current(void) { eeconfig_update_audio(audio_config.raw); } +void eeconfig_update_audio_default(void) { + audio_config.valid = true; + audio_config.enable = AUDIO_DEFAULT_ON; + audio_config.clicky_enable = AUDIO_DEFAULT_CLICKY_ON; + eeconfig_update_audio(audio_config.raw); +} + void audio_init(void) { if (audio_initialized) { return; } - // Check EEPROM -#ifdef EEPROM_ENABLE - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } audio_config.raw = eeconfig_read_audio(); -#else // EEPROM settings - audio_config.enable = true; -# ifdef AUDIO_CLICKY_ON - audio_config.clicky_enable = true; -# endif -#endif // EEPROM settings + if (!audio_config.valid) { + dprintf("audio_init audio_config.valid = 0. Write default values to EEPROM.\n"); + eeconfig_update_audio_default(); + } for (uint8_t i = 0; i < AUDIO_TONE_STACKSIZE; i++) { tones[i] = (musical_tone_t){.time_started = 0, .pitch = -1.0f, .duration = 0}; } - if (!audio_initialized) { - audio_driver_initialize(); - audio_initialized = true; - } + audio_driver_initialize(); + audio_initialized = true; + stop_all_notes(); #ifndef AUDIO_INIT_DELAY audio_startup(); diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index a4a908b43c..eb0bedc6f9 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -33,7 +33,8 @@ typedef union { struct { bool enable : 1; bool clicky_enable : 1; - uint8_t level : 6; + bool valid : 1; + uint8_t reserved : 5; }; } audio_config_t; diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c index d9eea13758..2d2180b4b4 100644 --- a/quantum/eeconfig.c +++ b/quantum/eeconfig.c @@ -54,7 +54,7 @@ void eeconfig_init_quantum(void) { // Enable oneshot and autocorrect by default: 0b0001 0100 0000 0000 eeprom_update_word(EECONFIG_KEYMAP, 0x1400); eeprom_update_byte(EECONFIG_BACKLIGHT, 0); - eeprom_update_byte(EECONFIG_AUDIO, 0xFF); // On by default + eeprom_update_byte(EECONFIG_AUDIO, 0); eeprom_update_dword(EECONFIG_RGBLIGHT, 0); eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, 0); eeprom_update_byte(EECONFIG_UNUSED, 0); -- cgit v1.2.3 From e1c0bd8a7c8d86ca573b430d5a914cf649c8d9b2 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 1 Jan 2024 12:40:35 +1100 Subject: LED drivers: extract IS31FL3742A from IS31COMMON (#22620) --- builddefs/common_features.mk | 6 +- drivers/led/issi/is31fl3742.h | 299 -------------------------------- drivers/led/issi/is31fl3742a-simple.c | 206 ++++++++++++++++++++++ drivers/led/issi/is31fl3742a-simple.h | 297 +++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3742a.c | 210 ++++++++++++++++++++++ drivers/led/issi/is31fl3742a.h | 299 ++++++++++++++++++++++++++++++++ drivers/led/issi/is31flcommon.h | 4 +- quantum/led_matrix/led_matrix_drivers.c | 8 + quantum/led_matrix/led_matrix_drivers.h | 2 + quantum/rgb_matrix/rgb_matrix_drivers.c | 8 + quantum/rgb_matrix/rgb_matrix_drivers.h | 2 + 11 files changed, 1035 insertions(+), 306 deletions(-) delete mode 100644 drivers/led/issi/is31fl3742.h create mode 100644 drivers/led/issi/is31fl3742a-simple.c create mode 100644 drivers/led/issi/is31fl3742a-simple.h create mode 100644 drivers/led/issi/is31fl3742a.c create mode 100644 drivers/led/issi/is31fl3742a.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 5e93480e4d..f049b09247 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -396,10 +396,9 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3742a-simple.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a) @@ -503,10 +502,9 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3742a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3742a.c endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a) diff --git a/drivers/led/issi/is31fl3742.h b/drivers/led/issi/is31fl3742.h deleted file mode 100644 index c96f12d0f1..0000000000 --- a/drivers/led/issi/is31fl3742.h +++ /dev/null @@ -1,299 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// This is a 7-bit address, that gets left-shifted and bit 0 -// set to 0 for write, 1 for read (as per I2C protocol) -// The address will vary depending on your wiring: -// 00 <-> GND -// 01 <-> SCL -// 10 <-> SDA -// 11 <-> VCC -// ADDR represents A1:A0 of the 7-bit address. -// The result is: 0b01100(ADDR) -#ifndef DRIVER_ADDR_1 -# define DRIVER_ADDR_1 0b0110000 -#endif - -// Command Registers -#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE -#define ISSI_COMMANDREGISTER 0xFD -#define ISSI_IDREGISTER 0xFC -#define ISSI_REGISTER_UNLOCK 0xC5 - -// Response Registers -#define ISSI_PAGE_PWM 0x00 -#define ISSI_PAGE_SCALING 0x02 -#define ISSI_PAGE_FUNCTION 0x04 - -// Registers under Function Register -#define ISSI_REG_CONFIGURATION 0x00 -#define ISSI_REG_GLOBALCURRENT 0x01 -#define ISSI_REG_PULLDOWNUP 0x02 -#define ISSI_REG_SSR 0x41 -#define ISSI_REG_RESET 0x3F -#define ISSI_REG_PWM_SET 0x36 - -// Set defaults for Function Registers -#ifndef ISSI_CONFIGURATION -# define ISSI_CONFIGURATION 0x31 -#endif -#ifndef ISSI_GLOBALCURRENT -# define ISSI_GLOBALCURRENT 0xFF -#endif -#ifndef ISSI_PULLDOWNUP -# define ISSI_PULLDOWNUP 0x55 -#endif -#ifndef ISSI_PWM_SET -# define ISSI_PWM_SET 0x00 -#endif - -// Set defaults for Spread Spectrum Register -#ifndef ISSI_SSR_1 -# define ISSI_SSR_1 0x00 -#endif -#ifndef ISSI_SSR_2 -# define ISSI_SSR_2 0x00 -#endif -#ifndef ISSI_SSR_3 -# define ISSI_SSR_3 0x00 -#endif -#ifndef ISSI_SSR_4 -# define ISSI_SSR_4 0x00 -#endif - -// Set defaults for Scaling registers -#ifndef ISSI_SCAL_RED -# define ISSI_SCAL_RED 0xFF -#endif -#ifndef ISSI_SCAL_BLUE -# define ISSI_SCAL_BLUE 0xFF -#endif -#ifndef ISSI_SCAL_GREEN -# define ISSI_SCAL_GREEN 0xFF -#endif -#define ISSI_SCAL_RED_OFF 0x00 -#define ISSI_SCAL_GREEN_OFF 0x00 -#define ISSI_SCAL_BLUE_OFF 0x00 - -#ifndef ISSI_SCAL_LED -# define ISSI_SCAL_LED 0xFF -#endif -#define ISSI_SCAL_LED_OFF 0x00 - -// Set buffer sizes -#define ISSI_MAX_LEDS 180 -#define ISSI_SCALING_SIZE 180 -#define ISSI_PWM_TRF_SIZE 18 -#define ISSI_SCALING_TRF_SIZE 18 - -// Location of 1st bit for PWM and Scaling registers -#define ISSI_PWM_REG_1ST 0x00 -#define ISSI_SCL_REG_1ST 0x00 - -// Map CS SW locations to order in PWM / Scaling buffers -// This matches the ORDER in the Datasheet Register not the POSITION -// It will always count from 0x00 to (ISSI_MAX_LEDS - 1) -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 -#define CS19_SW1 0x12 -#define CS20_SW1 0x13 -#define CS21_SW1 0x14 -#define CS22_SW1 0x15 -#define CS23_SW1 0x16 -#define CS24_SW1 0x17 -#define CS25_SW1 0x18 -#define CS26_SW1 0x19 -#define CS27_SW1 0x1A -#define CS28_SW1 0x1B -#define CS29_SW1 0x1C -#define CS30_SW1 0x1D - -#define CS1_SW2 0x1E -#define CS2_SW2 0x1F -#define CS3_SW2 0x20 -#define CS4_SW2 0x21 -#define CS5_SW2 0x22 -#define CS6_SW2 0x23 -#define CS7_SW2 0x24 -#define CS8_SW2 0x25 -#define CS9_SW2 0x26 -#define CS10_SW2 0x27 -#define CS11_SW2 0x28 -#define CS12_SW2 0x29 -#define CS13_SW2 0x2A -#define CS14_SW2 0x2B -#define CS15_SW2 0x2C -#define CS16_SW2 0x2D -#define CS17_SW2 0x2E -#define CS18_SW2 0x2F -#define CS19_SW2 0x30 -#define CS20_SW2 0x31 -#define CS21_SW2 0x32 -#define CS22_SW2 0x33 -#define CS23_SW2 0x34 -#define CS24_SW2 0x35 -#define CS25_SW2 0x36 -#define CS26_SW2 0x37 -#define CS27_SW2 0x38 -#define CS28_SW2 0x39 -#define CS29_SW2 0x3A -#define CS30_SW2 0x3B - -#define CS1_SW3 0x3C -#define CS2_SW3 0x3D -#define CS3_SW3 0x3E -#define CS4_SW3 0x3F -#define CS5_SW3 0x40 -#define CS6_SW3 0x41 -#define CS7_SW3 0x42 -#define CS8_SW3 0x43 -#define CS9_SW3 0x44 -#define CS10_SW3 0x45 -#define CS11_SW3 0x46 -#define CS12_SW3 0x47 -#define CS13_SW3 0x48 -#define CS14_SW3 0x49 -#define CS15_SW3 0x4A -#define CS16_SW3 0x4B -#define CS17_SW3 0x4C -#define CS18_SW3 0x4D -#define CS19_SW3 0x4E -#define CS20_SW3 0x4F -#define CS21_SW3 0x50 -#define CS22_SW3 0x51 -#define CS23_SW3 0x52 -#define CS24_SW3 0x53 -#define CS25_SW3 0x54 -#define CS26_SW3 0x55 -#define CS27_SW3 0x56 -#define CS28_SW3 0x57 -#define CS29_SW3 0x58 -#define CS30_SW3 0x59 - -#define CS1_SW4 0x5A -#define CS2_SW4 0x5B -#define CS3_SW4 0x5C -#define CS4_SW4 0x5D -#define CS5_SW4 0x5E -#define CS6_SW4 0x5F -#define CS7_SW4 0x60 -#define CS8_SW4 0x61 -#define CS9_SW4 0x62 -#define CS10_SW4 0x63 -#define CS11_SW4 0x64 -#define CS12_SW4 0x65 -#define CS13_SW4 0x66 -#define CS14_SW4 0x67 -#define CS15_SW4 0x68 -#define CS16_SW4 0x69 -#define CS17_SW4 0x6A -#define CS18_SW4 0x6B -#define CS19_SW4 0x6C -#define CS20_SW4 0x6D -#define CS21_SW4 0x6E -#define CS22_SW4 0x6F -#define CS23_SW4 0x70 -#define CS24_SW4 0x71 -#define CS25_SW4 0x72 -#define CS26_SW4 0x73 -#define CS27_SW4 0x74 -#define CS28_SW4 0x75 -#define CS29_SW4 0x76 -#define CS30_SW4 0x77 - -#define CS1_SW5 0x78 -#define CS2_SW5 0x79 -#define CS3_SW5 0x7A -#define CS4_SW5 0x7B -#define CS5_SW5 0x7C -#define CS6_SW5 0x7D -#define CS7_SW5 0x7E -#define CS8_SW5 0x7F -#define CS9_SW5 0x80 -#define CS10_SW5 0x81 -#define CS11_SW5 0x82 -#define CS12_SW5 0x83 -#define CS13_SW5 0x84 -#define CS14_SW5 0x85 -#define CS15_SW5 0x86 -#define CS16_SW5 0x87 -#define CS17_SW5 0x88 -#define CS18_SW5 0x89 -#define CS19_SW5 0x8A -#define CS20_SW5 0x8B -#define CS21_SW5 0x8C -#define CS22_SW5 0x8D -#define CS23_SW5 0x8E -#define CS24_SW5 0x8F -#define CS25_SW5 0x90 -#define CS26_SW5 0x91 -#define CS27_SW5 0x92 -#define CS28_SW5 0x93 -#define CS29_SW5 0x94 -#define CS30_SW5 0x95 - -#define CS1_SW6 0x96 -#define CS2_SW6 0x97 -#define CS3_SW6 0x98 -#define CS4_SW6 0x99 -#define CS5_SW6 0x9A -#define CS6_SW6 0x9B -#define CS7_SW6 0x9C -#define CS8_SW6 0x9D -#define CS9_SW6 0x9E -#define CS10_SW6 0x9F -#define CS11_SW6 0xA0 -#define CS12_SW6 0xA1 -#define CS13_SW6 0xA2 -#define CS14_SW6 0xA3 -#define CS15_SW6 0xA4 -#define CS16_SW6 0xA5 -#define CS17_SW6 0xA6 -#define CS18_SW6 0xA7 -#define CS19_SW6 0xA8 -#define CS20_SW6 0xA9 -#define CS21_SW6 0xAA -#define CS22_SW6 0xAB -#define CS23_SW6 0xAC -#define CS24_SW6 0xAD -#define CS25_SW6 0xAE -#define CS26_SW6 0xAF -#define CS27_SW6 0xB0 -#define CS28_SW6 0xB1 -#define CS29_SW6 0xB2 -#define CS30_SW6 0xB3 diff --git a/drivers/led/issi/is31fl3742a-simple.c b/drivers/led/issi/is31fl3742a-simple.c new file mode 100644 index 0000000000..ee6e8741b9 --- /dev/null +++ b/drivers/led/issi/is31fl3742a-simple.c @@ -0,0 +1,206 @@ +#include "is31fl3742a-simple.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3742A_PWM_REGISTER_COUNT 180 +#define IS31FL3742A_SCALING_REGISTER_COUNT 180 + +#ifndef IS31FL3742A_I2C_TIMEOUT +# define IS31FL3742A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3742A_I2C_PERSISTENCE +# define IS31FL3742A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3742A_CONFIGURATION +# define IS31FL3742A_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3742A_PWM_FREQUENCY +# define IS31FL3742A_PWM_FREQUENCY IS31FL3742A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3742A_SW_PULLDOWN +# define IS31FL3742A_SW_PULLDOWN IS31FL3742A_PDR_8K_OHM +#endif + +#ifndef IS31FL3742A_CS_PULLUP +# define IS31FL3742A_CS_PULLUP IS31FL3742A_PUR_8K_OHM +#endif + +#ifndef IS31FL3742A_GLOBAL_CURRENT +# define IS31FL3742A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_SCALING_REGISTER_COUNT]; + +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT); +#endif +} + +void is31fl3742a_select_page(uint8_t addr, uint8_t page) { + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND_WRITE_LOCK, IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND, page); +} + +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3742a_init_drivers(void) { + i2c_init(); + + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_1); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_2); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_3); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_scaling_register(i, 0xFF); + } + + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3742a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_FUNCTION); + + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PULLDOWNUP, (IS31FL3742A_SW_PULLDOWN << 4) | IS31FL3742A_CS_PULLUP); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3742A_GLOBAL_CURRENT); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3742A_PWM_FREQUENCY & 0b0111)); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_CONFIGURATION, IS31FL3742A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3742a_set_value(int index, uint8_t value) { + is31fl3742a_led_t led; + if (index >= 0 && index < IS31FL3742A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3742a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_value(i, value); + } +} + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3742a_led_t led; + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3742a_flush(void) { + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3742a-simple.h b/drivers/led/issi/is31fl3742a-simple.h new file mode 100644 index 0000000000..04614e4f6e --- /dev/null +++ b/drivers/led/issi/is31fl3742a-simple.h @@ -0,0 +1,297 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3742A_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3742A_REG_INTERRUPT_STATUS 0xF1 +#define IS31FL3742A_REG_ID 0xFC + +#define IS31FL3742A_REG_COMMAND 0xFD + +#define IS31FL3742A_COMMAND_PWM 0x00 +#define IS31FL3742A_COMMAND_SCALING 0x02 +#define IS31FL3742A_COMMAND_FUNCTION 0x04 + +#define IS31FL3742A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3742A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY 0x36 +#define IS31FL3742A_FUNCTION_REG_RESET 0x3F +#define IS31FL3742A_FUNCTION_REG_SPREAD_SPECTRUM 0x41 + +#define IS31FL3742A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3742A_I2C_ADDRESS_GND 0x30 +#define IS31FL3742A_I2C_ADDRESS_SCL 0x31 +#define IS31FL3742A_I2C_ADDRESS_SDA 0x32 +#define IS31FL3742A_I2C_ADDRESS_VCC 0x33 + +#if defined(LED_MATRIX_IS31FL3742A) +# define IS31FL3742A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3742A_I2C_ADDRESS_4) +# define IS31FL3742A_DRIVER_COUNT 4 +#elif defined(IS31FL3742A_I2C_ADDRESS_3) +# define IS31FL3742A_DRIVER_COUNT 3 +#elif defined(IS31FL3742A_I2C_ADDRESS_2) +# define IS31FL3742A_DRIVER_COUNT 2 +#elif defined(IS31FL3742A_I2C_ADDRESS_1) +# define IS31FL3742A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3742a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3742a_led_t; + +extern const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT]; + +void is31fl3742a_init_drivers(void); +void is31fl3742a_init(uint8_t addr); +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3742a_select_page(uint8_t addr, uint8_t page); +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3742a_set_value(int index, uint8_t value); +void is31fl3742a_set_value_all(uint8_t value); + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3742a_flush(void); + +#define IS31FL3742A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3742A_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3742A_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PWM_FREQUENCY_29K_HZ 0b0000 +#define IS31FL3742A_PWM_FREQUENCY_3K6_HZ 0b0011 +#define IS31FL3742A_PWM_FREQUENCY_1K8_HZ 0b0111 +#define IS31FL3742A_PWM_FREQUENCY_900_HZ 0b1011 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 +#define CS19_SW1 0x12 +#define CS20_SW1 0x13 +#define CS21_SW1 0x14 +#define CS22_SW1 0x15 +#define CS23_SW1 0x16 +#define CS24_SW1 0x17 +#define CS25_SW1 0x18 +#define CS26_SW1 0x19 +#define CS27_SW1 0x1A +#define CS28_SW1 0x1B +#define CS29_SW1 0x1C +#define CS30_SW1 0x1D + +#define CS1_SW2 0x1E +#define CS2_SW2 0x1F +#define CS3_SW2 0x20 +#define CS4_SW2 0x21 +#define CS5_SW2 0x22 +#define CS6_SW2 0x23 +#define CS7_SW2 0x24 +#define CS8_SW2 0x25 +#define CS9_SW2 0x26 +#define CS10_SW2 0x27 +#define CS11_SW2 0x28 +#define CS12_SW2 0x29 +#define CS13_SW2 0x2A +#define CS14_SW2 0x2B +#define CS15_SW2 0x2C +#define CS16_SW2 0x2D +#define CS17_SW2 0x2E +#define CS18_SW2 0x2F +#define CS19_SW2 0x30 +#define CS20_SW2 0x31 +#define CS21_SW2 0x32 +#define CS22_SW2 0x33 +#define CS23_SW2 0x34 +#define CS24_SW2 0x35 +#define CS25_SW2 0x36 +#define CS26_SW2 0x37 +#define CS27_SW2 0x38 +#define CS28_SW2 0x39 +#define CS29_SW2 0x3A +#define CS30_SW2 0x3B + +#define CS1_SW3 0x3C +#define CS2_SW3 0x3D +#define CS3_SW3 0x3E +#define CS4_SW3 0x3F +#define CS5_SW3 0x40 +#define CS6_SW3 0x41 +#define CS7_SW3 0x42 +#define CS8_SW3 0x43 +#define CS9_SW3 0x44 +#define CS10_SW3 0x45 +#define CS11_SW3 0x46 +#define CS12_SW3 0x47 +#define CS13_SW3 0x48 +#define CS14_SW3 0x49 +#define CS15_SW3 0x4A +#define CS16_SW3 0x4B +#define CS17_SW3 0x4C +#define CS18_SW3 0x4D +#define CS19_SW3 0x4E +#define CS20_SW3 0x4F +#define CS21_SW3 0x50 +#define CS22_SW3 0x51 +#define CS23_SW3 0x52 +#define CS24_SW3 0x53 +#define CS25_SW3 0x54 +#define CS26_SW3 0x55 +#define CS27_SW3 0x56 +#define CS28_SW3 0x57 +#define CS29_SW3 0x58 +#define CS30_SW3 0x59 + +#define CS1_SW4 0x5A +#define CS2_SW4 0x5B +#define CS3_SW4 0x5C +#define CS4_SW4 0x5D +#define CS5_SW4 0x5E +#define CS6_SW4 0x5F +#define CS7_SW4 0x60 +#define CS8_SW4 0x61 +#define CS9_SW4 0x62 +#define CS10_SW4 0x63 +#define CS11_SW4 0x64 +#define CS12_SW4 0x65 +#define CS13_SW4 0x66 +#define CS14_SW4 0x67 +#define CS15_SW4 0x68 +#define CS16_SW4 0x69 +#define CS17_SW4 0x6A +#define CS18_SW4 0x6B +#define CS19_SW4 0x6C +#define CS20_SW4 0x6D +#define CS21_SW4 0x6E +#define CS22_SW4 0x6F +#define CS23_SW4 0x70 +#define CS24_SW4 0x71 +#define CS25_SW4 0x72 +#define CS26_SW4 0x73 +#define CS27_SW4 0x74 +#define CS28_SW4 0x75 +#define CS29_SW4 0x76 +#define CS30_SW4 0x77 + +#define CS1_SW5 0x78 +#define CS2_SW5 0x79 +#define CS3_SW5 0x7A +#define CS4_SW5 0x7B +#define CS5_SW5 0x7C +#define CS6_SW5 0x7D +#define CS7_SW5 0x7E +#define CS8_SW5 0x7F +#define CS9_SW5 0x80 +#define CS10_SW5 0x81 +#define CS11_SW5 0x82 +#define CS12_SW5 0x83 +#define CS13_SW5 0x84 +#define CS14_SW5 0x85 +#define CS15_SW5 0x86 +#define CS16_SW5 0x87 +#define CS17_SW5 0x88 +#define CS18_SW5 0x89 +#define CS19_SW5 0x8A +#define CS20_SW5 0x8B +#define CS21_SW5 0x8C +#define CS22_SW5 0x8D +#define CS23_SW5 0x8E +#define CS24_SW5 0x8F +#define CS25_SW5 0x90 +#define CS26_SW5 0x91 +#define CS27_SW5 0x92 +#define CS28_SW5 0x93 +#define CS29_SW5 0x94 +#define CS30_SW5 0x95 + +#define CS1_SW6 0x96 +#define CS2_SW6 0x97 +#define CS3_SW6 0x98 +#define CS4_SW6 0x99 +#define CS5_SW6 0x9A +#define CS6_SW6 0x9B +#define CS7_SW6 0x9C +#define CS8_SW6 0x9D +#define CS9_SW6 0x9E +#define CS10_SW6 0x9F +#define CS11_SW6 0xA0 +#define CS12_SW6 0xA1 +#define CS13_SW6 0xA2 +#define CS14_SW6 0xA3 +#define CS15_SW6 0xA4 +#define CS16_SW6 0xA5 +#define CS17_SW6 0xA6 +#define CS18_SW6 0xA7 +#define CS19_SW6 0xA8 +#define CS20_SW6 0xA9 +#define CS21_SW6 0xAA +#define CS22_SW6 0xAB +#define CS23_SW6 0xAC +#define CS24_SW6 0xAD +#define CS25_SW6 0xAE +#define CS26_SW6 0xAF +#define CS27_SW6 0xB0 +#define CS28_SW6 0xB1 +#define CS29_SW6 0xB2 +#define CS30_SW6 0xB3 diff --git a/drivers/led/issi/is31fl3742a.c b/drivers/led/issi/is31fl3742a.c new file mode 100644 index 0000000000..766ba0ba34 --- /dev/null +++ b/drivers/led/issi/is31fl3742a.c @@ -0,0 +1,210 @@ +#include "is31fl3742a.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3742A_PWM_REGISTER_COUNT 180 +#define IS31FL3742A_SCALING_REGISTER_COUNT 180 + +#ifndef IS31FL3742A_I2C_TIMEOUT +# define IS31FL3742A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3742A_I2C_PERSISTENCE +# define IS31FL3742A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3742A_CONFIGURATION +# define IS31FL3742A_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3742A_PWM_FREQUENCY +# define IS31FL3742A_PWM_FREQUENCY IS31FL3742A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3742A_SW_PULLDOWN +# define IS31FL3742A_SW_PULLDOWN IS31FL3742A_PDR_8K_OHM +#endif + +#ifndef IS31FL3742A_CS_PULLUP +# define IS31FL3742A_CS_PULLUP IS31FL3742A_PUR_8K_OHM +#endif + +#ifndef IS31FL3742A_GLOBAL_CURRENT +# define IS31FL3742A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_SCALING_REGISTER_COUNT]; + +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT); +#endif +} + +void is31fl3742a_select_page(uint8_t addr, uint8_t page) { + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND_WRITE_LOCK, IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND, page); +} + +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3742a_init_drivers(void) { + i2c_init(); + + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_1); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_2); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_3); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_scaling_register(i, 0xFF, 0xFF, 0xFF); + } + + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3742a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_FUNCTION); + + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PULLDOWNUP, (IS31FL3742A_SW_PULLDOWN << 4) | IS31FL3742A_CS_PULLUP); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3742A_GLOBAL_CURRENT); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3742A_PWM_FREQUENCY & 0b0111)); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_CONFIGURATION, IS31FL3742A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3742a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3742a_led_t led; + if (index >= 0 && index < IS31FL3742A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { + return; + } + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3742a_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_color(i, red, green, blue); + } +} + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3742a_led_t led; + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.r] = red; + g_scaling_registers[led.driver][led.g] = green; + g_scaling_registers[led.driver][led.b] = blue; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3742a_flush(void) { + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3742a.h b/drivers/led/issi/is31fl3742a.h new file mode 100644 index 0000000000..304dd5925b --- /dev/null +++ b/drivers/led/issi/is31fl3742a.h @@ -0,0 +1,299 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3742A_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3742A_REG_INTERRUPT_STATUS 0xF1 +#define IS31FL3742A_REG_ID 0xFC + +#define IS31FL3742A_REG_COMMAND 0xFD + +#define IS31FL3742A_COMMAND_PWM 0x00 +#define IS31FL3742A_COMMAND_SCALING 0x02 +#define IS31FL3742A_COMMAND_FUNCTION 0x04 + +#define IS31FL3742A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3742A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY 0x36 +#define IS31FL3742A_FUNCTION_REG_RESET 0x3F +#define IS31FL3742A_FUNCTION_REG_SPREAD_SPECTRUM 0x41 + +#define IS31FL3742A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3742A_I2C_ADDRESS_GND 0x30 +#define IS31FL3742A_I2C_ADDRESS_SCL 0x31 +#define IS31FL3742A_I2C_ADDRESS_SDA 0x32 +#define IS31FL3742A_I2C_ADDRESS_VCC 0x33 + +#if defined(RGB_MATRIX_IS31FL3742A) +# define IS31FL3742A_LED_COUNT RGB_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3742A_I2C_ADDRESS_4) +# define IS31FL3742A_DRIVER_COUNT 4 +#elif defined(IS31FL3742A_I2C_ADDRESS_3) +# define IS31FL3742A_DRIVER_COUNT 3 +#elif defined(IS31FL3742A_I2C_ADDRESS_2) +# define IS31FL3742A_DRIVER_COUNT 2 +#elif defined(IS31FL3742A_I2C_ADDRESS_1) +# define IS31FL3742A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3742a_led_t { + uint8_t driver : 2; + uint8_t r; + uint8_t g; + uint8_t b; +} PACKED is31fl3742a_led_t; + +extern const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT]; + +void is31fl3742a_init_drivers(void); +void is31fl3742a_init(uint8_t addr); +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3742a_select_page(uint8_t addr, uint8_t page); +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3742a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void is31fl3742a_set_color_all(uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3742a_flush(void); + +#define IS31FL3742A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3742A_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3742A_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PWM_FREQUENCY_29K_HZ 0b0000 +#define IS31FL3742A_PWM_FREQUENCY_3K6_HZ 0b0011 +#define IS31FL3742A_PWM_FREQUENCY_1K8_HZ 0b0111 +#define IS31FL3742A_PWM_FREQUENCY_900_HZ 0b1011 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 +#define CS19_SW1 0x12 +#define CS20_SW1 0x13 +#define CS21_SW1 0x14 +#define CS22_SW1 0x15 +#define CS23_SW1 0x16 +#define CS24_SW1 0x17 +#define CS25_SW1 0x18 +#define CS26_SW1 0x19 +#define CS27_SW1 0x1A +#define CS28_SW1 0x1B +#define CS29_SW1 0x1C +#define CS30_SW1 0x1D + +#define CS1_SW2 0x1E +#define CS2_SW2 0x1F +#define CS3_SW2 0x20 +#define CS4_SW2 0x21 +#define CS5_SW2 0x22 +#define CS6_SW2 0x23 +#define CS7_SW2 0x24 +#define CS8_SW2 0x25 +#define CS9_SW2 0x26 +#define CS10_SW2 0x27 +#define CS11_SW2 0x28 +#define CS12_SW2 0x29 +#define CS13_SW2 0x2A +#define CS14_SW2 0x2B +#define CS15_SW2 0x2C +#define CS16_SW2 0x2D +#define CS17_SW2 0x2E +#define CS18_SW2 0x2F +#define CS19_SW2 0x30 +#define CS20_SW2 0x31 +#define CS21_SW2 0x32 +#define CS22_SW2 0x33 +#define CS23_SW2 0x34 +#define CS24_SW2 0x35 +#define CS25_SW2 0x36 +#define CS26_SW2 0x37 +#define CS27_SW2 0x38 +#define CS28_SW2 0x39 +#define CS29_SW2 0x3A +#define CS30_SW2 0x3B + +#define CS1_SW3 0x3C +#define CS2_SW3 0x3D +#define CS3_SW3 0x3E +#define CS4_SW3 0x3F +#define CS5_SW3 0x40 +#define CS6_SW3 0x41 +#define CS7_SW3 0x42 +#define CS8_SW3 0x43 +#define CS9_SW3 0x44 +#define CS10_SW3 0x45 +#define CS11_SW3 0x46 +#define CS12_SW3 0x47 +#define CS13_SW3 0x48 +#define CS14_SW3 0x49 +#define CS15_SW3 0x4A +#define CS16_SW3 0x4B +#define CS17_SW3 0x4C +#define CS18_SW3 0x4D +#define CS19_SW3 0x4E +#define CS20_SW3 0x4F +#define CS21_SW3 0x50 +#define CS22_SW3 0x51 +#define CS23_SW3 0x52 +#define CS24_SW3 0x53 +#define CS25_SW3 0x54 +#define CS26_SW3 0x55 +#define CS27_SW3 0x56 +#define CS28_SW3 0x57 +#define CS29_SW3 0x58 +#define CS30_SW3 0x59 + +#define CS1_SW4 0x5A +#define CS2_SW4 0x5B +#define CS3_SW4 0x5C +#define CS4_SW4 0x5D +#define CS5_SW4 0x5E +#define CS6_SW4 0x5F +#define CS7_SW4 0x60 +#define CS8_SW4 0x61 +#define CS9_SW4 0x62 +#define CS10_SW4 0x63 +#define CS11_SW4 0x64 +#define CS12_SW4 0x65 +#define CS13_SW4 0x66 +#define CS14_SW4 0x67 +#define CS15_SW4 0x68 +#define CS16_SW4 0x69 +#define CS17_SW4 0x6A +#define CS18_SW4 0x6B +#define CS19_SW4 0x6C +#define CS20_SW4 0x6D +#define CS21_SW4 0x6E +#define CS22_SW4 0x6F +#define CS23_SW4 0x70 +#define CS24_SW4 0x71 +#define CS25_SW4 0x72 +#define CS26_SW4 0x73 +#define CS27_SW4 0x74 +#define CS28_SW4 0x75 +#define CS29_SW4 0x76 +#define CS30_SW4 0x77 + +#define CS1_SW5 0x78 +#define CS2_SW5 0x79 +#define CS3_SW5 0x7A +#define CS4_SW5 0x7B +#define CS5_SW5 0x7C +#define CS6_SW5 0x7D +#define CS7_SW5 0x7E +#define CS8_SW5 0x7F +#define CS9_SW5 0x80 +#define CS10_SW5 0x81 +#define CS11_SW5 0x82 +#define CS12_SW5 0x83 +#define CS13_SW5 0x84 +#define CS14_SW5 0x85 +#define CS15_SW5 0x86 +#define CS16_SW5 0x87 +#define CS17_SW5 0x88 +#define CS18_SW5 0x89 +#define CS19_SW5 0x8A +#define CS20_SW5 0x8B +#define CS21_SW5 0x8C +#define CS22_SW5 0x8D +#define CS23_SW5 0x8E +#define CS24_SW5 0x8F +#define CS25_SW5 0x90 +#define CS26_SW5 0x91 +#define CS27_SW5 0x92 +#define CS28_SW5 0x93 +#define CS29_SW5 0x94 +#define CS30_SW5 0x95 + +#define CS1_SW6 0x96 +#define CS2_SW6 0x97 +#define CS3_SW6 0x98 +#define CS4_SW6 0x99 +#define CS5_SW6 0x9A +#define CS6_SW6 0x9B +#define CS7_SW6 0x9C +#define CS8_SW6 0x9D +#define CS9_SW6 0x9E +#define CS10_SW6 0x9F +#define CS11_SW6 0xA0 +#define CS12_SW6 0xA1 +#define CS13_SW6 0xA2 +#define CS14_SW6 0xA3 +#define CS15_SW6 0xA4 +#define CS16_SW6 0xA5 +#define CS17_SW6 0xA6 +#define CS18_SW6 0xA7 +#define CS19_SW6 0xA8 +#define CS20_SW6 0xA9 +#define CS21_SW6 0xAA +#define CS22_SW6 0xAB +#define CS23_SW6 0xAC +#define CS24_SW6 0xAD +#define CS25_SW6 0xAE +#define CS26_SW6 0xAF +#define CS27_SW6 0xB0 +#define CS28_SW6 0xB1 +#define CS29_SW6 0xB2 +#define CS30_SW6 0xB3 diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h index 10613a6eed..1ba57c6cf7 100644 --- a/drivers/led/issi/is31flcommon.h +++ b/drivers/led/issi/is31flcommon.h @@ -26,9 +26,7 @@ #include "util.h" // Which variant header file to use -#if defined(LED_MATRIX_IS31FL3742A) || defined(RGB_MATRIX_IS31FL3742A) -# include "is31fl3742.h" -#elif defined(LED_MATRIX_IS31FL3743A) || defined(RGB_MATRIX_IS31FL3743A) +#if defined(LED_MATRIX_IS31FL3743A) || defined(RGB_MATRIX_IS31FL3743A) # include "is31fl3743.h" #elif defined(LED_MATRIX_IS31FL3745) || defined(RGB_MATRIX_IS31FL3745) # include "is31fl3745.h" diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index 672238a260..26179dfa4e 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -73,6 +73,14 @@ const led_matrix_driver_t led_matrix_driver = { .set_value_all = is31fl3741_set_value_all, }; +#elif defined(LED_MATRIX_IS31FL3742A) +const led_matrix_driver_t led_matrix_driver = { + .init = is31fl3742a_init_drivers, + .flush = is31fl3742a_flush, + .set_value = is31fl3742a_set_value, + .set_value_all = is31fl3742a_set_value_all, +}; + #elif defined(IS31FLCOMMON) const led_matrix_driver_t led_matrix_driver = { .init = IS31FL_simple_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index b0ef3dfafc..88ceebc04b 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -17,6 +17,8 @@ # include "is31fl3737-simple.h" #elif defined(LED_MATRIX_IS31FL3741) # include "is31fl3741-simple.h" +#elif defined(LED_MATRIX_IS31FL3742A) +# include "is31fl3742a-simple.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(LED_MATRIX_SNLED27351) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index ef12434aa2..79f82a0c87 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -76,6 +76,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3741_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3742A) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3742a_init_drivers, + .flush = is31fl3742a_flush, + .set_color = is31fl3742a_set_color, + .set_color_all = is31fl3742a_set_color_all, +}; + #elif defined(IS31FLCOMMON) const rgb_matrix_driver_t rgb_matrix_driver = { .init = IS31FL_RGB_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 991344f087..298167e6ed 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -19,6 +19,8 @@ # include "is31fl3737.h" #elif defined(RGB_MATRIX_IS31FL3741) # include "is31fl3741.h" +#elif defined(RGB_MATRIX_IS31FL3742A) +# include "is31fl3742a.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(RGB_MATRIX_SNLED27351) -- cgit v1.2.3 From b12b5485bce9be56c33fd154bb96b38e82b736ad Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Sun, 31 Dec 2023 21:25:20 -0500 Subject: Update copyright year on generated files (#22795) --- quantum/keycodes.h | 2 +- quantum/keymap_extras/keymap_belgian.h | 2 +- quantum/keymap_extras/keymap_bepo.h | 2 +- quantum/keymap_extras/keymap_brazilian_abnt2.h | 2 +- quantum/keymap_extras/keymap_canadian_multilingual.h | 2 +- quantum/keymap_extras/keymap_colemak.h | 2 +- quantum/keymap_extras/keymap_croatian.h | 2 +- quantum/keymap_extras/keymap_czech.h | 2 +- quantum/keymap_extras/keymap_danish.h | 2 +- quantum/keymap_extras/keymap_dvorak.h | 2 +- quantum/keymap_extras/keymap_dvorak_fr.h | 2 +- quantum/keymap_extras/keymap_dvorak_programmer.h | 2 +- quantum/keymap_extras/keymap_estonian.h | 2 +- quantum/keymap_extras/keymap_finnish.h | 2 +- quantum/keymap_extras/keymap_french.h | 2 +- quantum/keymap_extras/keymap_french_afnor.h | 2 +- quantum/keymap_extras/keymap_french_mac_iso.h | 2 +- quantum/keymap_extras/keymap_german.h | 2 +- quantum/keymap_extras/keymap_german_mac_iso.h | 2 +- quantum/keymap_extras/keymap_greek.h | 2 +- quantum/keymap_extras/keymap_hebrew.h | 2 +- quantum/keymap_extras/keymap_hungarian.h | 2 +- quantum/keymap_extras/keymap_icelandic.h | 2 +- quantum/keymap_extras/keymap_irish.h | 2 +- quantum/keymap_extras/keymap_italian.h | 2 +- quantum/keymap_extras/keymap_italian_mac_ansi.h | 2 +- quantum/keymap_extras/keymap_italian_mac_iso.h | 2 +- quantum/keymap_extras/keymap_japanese.h | 2 +- quantum/keymap_extras/keymap_korean.h | 2 +- quantum/keymap_extras/keymap_latvian.h | 2 +- quantum/keymap_extras/keymap_lithuanian_azerty.h | 2 +- quantum/keymap_extras/keymap_lithuanian_qwerty.h | 2 +- quantum/keymap_extras/keymap_neo2.h | 2 +- quantum/keymap_extras/keymap_nordic.h | 2 +- quantum/keymap_extras/keymap_norman.h | 2 +- quantum/keymap_extras/keymap_norwegian.h | 2 +- quantum/keymap_extras/keymap_plover.h | 2 +- quantum/keymap_extras/keymap_plover_dvorak.h | 2 +- quantum/keymap_extras/keymap_polish.h | 2 +- quantum/keymap_extras/keymap_portuguese.h | 2 +- quantum/keymap_extras/keymap_portuguese_mac_iso.h | 2 +- quantum/keymap_extras/keymap_romanian.h | 2 +- quantum/keymap_extras/keymap_russian.h | 2 +- quantum/keymap_extras/keymap_russian_typewriter.h | 2 +- quantum/keymap_extras/keymap_serbian.h | 2 +- quantum/keymap_extras/keymap_serbian_latin.h | 2 +- quantum/keymap_extras/keymap_slovak.h | 2 +- quantum/keymap_extras/keymap_slovenian.h | 2 +- quantum/keymap_extras/keymap_spanish.h | 2 +- quantum/keymap_extras/keymap_spanish_dvorak.h | 2 +- quantum/keymap_extras/keymap_spanish_latin_america.h | 2 +- quantum/keymap_extras/keymap_swedish.h | 2 +- quantum/keymap_extras/keymap_swedish_mac_ansi.h | 2 +- quantum/keymap_extras/keymap_swedish_mac_iso.h | 2 +- quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h | 2 +- quantum/keymap_extras/keymap_swedish_pro_mac_iso.h | 2 +- quantum/keymap_extras/keymap_swiss_de.h | 2 +- quantum/keymap_extras/keymap_swiss_fr.h | 2 +- quantum/keymap_extras/keymap_turkish_f.h | 2 +- quantum/keymap_extras/keymap_turkish_q.h | 2 +- quantum/keymap_extras/keymap_uk.h | 2 +- quantum/keymap_extras/keymap_ukrainian.h | 2 +- quantum/keymap_extras/keymap_us.h | 2 +- quantum/keymap_extras/keymap_us_extended.h | 2 +- quantum/keymap_extras/keymap_us_international.h | 2 +- quantum/keymap_extras/keymap_us_international_linux.h | 2 +- quantum/keymap_extras/keymap_workman.h | 2 +- quantum/keymap_extras/keymap_workman_zxcvm.h | 2 +- quantum/rgblight/rgblight_breathe_table.h | 2 +- tests/test_common/keycode_table.cpp | 2 +- 70 files changed, 70 insertions(+), 70 deletions(-) (limited to 'quantum') diff --git a/quantum/keycodes.h b/quantum/keycodes.h index 39fd2e2726..69d62b5731 100644 --- a/quantum/keycodes.h +++ b/quantum/keycodes.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_belgian.h b/quantum/keymap_extras/keymap_belgian.h index 6851c6b4e8..e553894b52 100644 --- a/quantum/keymap_extras/keymap_belgian.h +++ b/quantum/keymap_extras/keymap_belgian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h index 448727dece..d1886efb10 100644 --- a/quantum/keymap_extras/keymap_bepo.h +++ b/quantum/keymap_extras/keymap_bepo.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_brazilian_abnt2.h b/quantum/keymap_extras/keymap_brazilian_abnt2.h index 8fac7666c2..7dfc2cbb3d 100644 --- a/quantum/keymap_extras/keymap_brazilian_abnt2.h +++ b/quantum/keymap_extras/keymap_brazilian_abnt2.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index 5b9b03babb..baeafa4077 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_colemak.h b/quantum/keymap_extras/keymap_colemak.h index d63309f010..b1b2fdcf80 100644 --- a/quantum/keymap_extras/keymap_colemak.h +++ b/quantum/keymap_extras/keymap_colemak.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_croatian.h b/quantum/keymap_extras/keymap_croatian.h index 3e7c681ced..3ed6e29dfb 100644 --- a/quantum/keymap_extras/keymap_croatian.h +++ b/quantum/keymap_extras/keymap_croatian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_czech.h b/quantum/keymap_extras/keymap_czech.h index 351c51ad41..ab00f83820 100644 --- a/quantum/keymap_extras/keymap_czech.h +++ b/quantum/keymap_extras/keymap_czech.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_danish.h b/quantum/keymap_extras/keymap_danish.h index cea9444896..9e397af135 100644 --- a/quantum/keymap_extras/keymap_danish.h +++ b/quantum/keymap_extras/keymap_danish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index 9205a72057..d83f311e2a 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak_fr.h b/quantum/keymap_extras/keymap_dvorak_fr.h index b206767614..6c9ca139d6 100644 --- a/quantum/keymap_extras/keymap_dvorak_fr.h +++ b/quantum/keymap_extras/keymap_dvorak_fr.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak_programmer.h b/quantum/keymap_extras/keymap_dvorak_programmer.h index 19187ed13b..80f39f56d4 100644 --- a/quantum/keymap_extras/keymap_dvorak_programmer.h +++ b/quantum/keymap_extras/keymap_dvorak_programmer.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_estonian.h b/quantum/keymap_extras/keymap_estonian.h index ea9c56c12a..3b6bf66c5c 100644 --- a/quantum/keymap_extras/keymap_estonian.h +++ b/quantum/keymap_extras/keymap_estonian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_finnish.h b/quantum/keymap_extras/keymap_finnish.h index c0dc1af81e..4c0b78ff60 100644 --- a/quantum/keymap_extras/keymap_finnish.h +++ b/quantum/keymap_extras/keymap_finnish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h index 03dbb7bc40..db5a7ac2ff 100644 --- a/quantum/keymap_extras/keymap_french.h +++ b/quantum/keymap_extras/keymap_french.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french_afnor.h b/quantum/keymap_extras/keymap_french_afnor.h index 869984c4d2..894ff4305b 100644 --- a/quantum/keymap_extras/keymap_french_afnor.h +++ b/quantum/keymap_extras/keymap_french_afnor.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french_mac_iso.h b/quantum/keymap_extras/keymap_french_mac_iso.h index e5f7514a80..89b16478bc 100644 --- a/quantum/keymap_extras/keymap_french_mac_iso.h +++ b/quantum/keymap_extras/keymap_french_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h index 38b0c685ba..074f0d321b 100644 --- a/quantum/keymap_extras/keymap_german.h +++ b/quantum/keymap_extras/keymap_german.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_german_mac_iso.h b/quantum/keymap_extras/keymap_german_mac_iso.h index efa9099f20..1a50fabf1a 100644 --- a/quantum/keymap_extras/keymap_german_mac_iso.h +++ b/quantum/keymap_extras/keymap_german_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_greek.h b/quantum/keymap_extras/keymap_greek.h index 01779cf2e8..e21022abbc 100644 --- a/quantum/keymap_extras/keymap_greek.h +++ b/quantum/keymap_extras/keymap_greek.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_hebrew.h b/quantum/keymap_extras/keymap_hebrew.h index 284562072d..b122eb09ea 100644 --- a/quantum/keymap_extras/keymap_hebrew.h +++ b/quantum/keymap_extras/keymap_hebrew.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_hungarian.h b/quantum/keymap_extras/keymap_hungarian.h index fbc31ed155..22ae74538c 100644 --- a/quantum/keymap_extras/keymap_hungarian.h +++ b/quantum/keymap_extras/keymap_hungarian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_icelandic.h b/quantum/keymap_extras/keymap_icelandic.h index 3bd71c19f2..c58e48b22d 100644 --- a/quantum/keymap_extras/keymap_icelandic.h +++ b/quantum/keymap_extras/keymap_icelandic.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_irish.h b/quantum/keymap_extras/keymap_irish.h index 6e161628c8..ba23cddc95 100644 --- a/quantum/keymap_extras/keymap_irish.h +++ b/quantum/keymap_extras/keymap_irish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian.h b/quantum/keymap_extras/keymap_italian.h index 8092dc1301..0317cc5e78 100644 --- a/quantum/keymap_extras/keymap_italian.h +++ b/quantum/keymap_extras/keymap_italian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian_mac_ansi.h b/quantum/keymap_extras/keymap_italian_mac_ansi.h index ae1281be26..ebf2e1e709 100644 --- a/quantum/keymap_extras/keymap_italian_mac_ansi.h +++ b/quantum/keymap_extras/keymap_italian_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian_mac_iso.h b/quantum/keymap_extras/keymap_italian_mac_iso.h index f3f01839c3..327777dd8a 100644 --- a/quantum/keymap_extras/keymap_italian_mac_iso.h +++ b/quantum/keymap_extras/keymap_italian_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_japanese.h b/quantum/keymap_extras/keymap_japanese.h index 947317833e..68a91be18b 100644 --- a/quantum/keymap_extras/keymap_japanese.h +++ b/quantum/keymap_extras/keymap_japanese.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_korean.h b/quantum/keymap_extras/keymap_korean.h index 440a6b3b4d..f759e136bd 100644 --- a/quantum/keymap_extras/keymap_korean.h +++ b/quantum/keymap_extras/keymap_korean.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_latvian.h b/quantum/keymap_extras/keymap_latvian.h index 2f26b1d8af..3444e744be 100644 --- a/quantum/keymap_extras/keymap_latvian.h +++ b/quantum/keymap_extras/keymap_latvian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_lithuanian_azerty.h b/quantum/keymap_extras/keymap_lithuanian_azerty.h index f6dd94f0ca..235989e67b 100644 --- a/quantum/keymap_extras/keymap_lithuanian_azerty.h +++ b/quantum/keymap_extras/keymap_lithuanian_azerty.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_lithuanian_qwerty.h b/quantum/keymap_extras/keymap_lithuanian_qwerty.h index 03c6b7a2af..58f4381420 100644 --- a/quantum/keymap_extras/keymap_lithuanian_qwerty.h +++ b/quantum/keymap_extras/keymap_lithuanian_qwerty.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_neo2.h b/quantum/keymap_extras/keymap_neo2.h index bc9445892f..dbeef8d544 100644 --- a/quantum/keymap_extras/keymap_neo2.h +++ b/quantum/keymap_extras/keymap_neo2.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index 6464966c71..bb66fcf12f 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h index 1a3a0bc53a..9938e53efe 100644 --- a/quantum/keymap_extras/keymap_norman.h +++ b/quantum/keymap_extras/keymap_norman.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h index af16fec8d6..e50e1ab3bb 100644 --- a/quantum/keymap_extras/keymap_norwegian.h +++ b/quantum/keymap_extras/keymap_norwegian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h index c0e3311e90..285eaa0741 100644 --- a/quantum/keymap_extras/keymap_plover.h +++ b/quantum/keymap_extras/keymap_plover.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_plover_dvorak.h b/quantum/keymap_extras/keymap_plover_dvorak.h index 7feb52a25c..8347b2b20c 100644 --- a/quantum/keymap_extras/keymap_plover_dvorak.h +++ b/quantum/keymap_extras/keymap_plover_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_polish.h b/quantum/keymap_extras/keymap_polish.h index 40870ec237..422c58c1e3 100644 --- a/quantum/keymap_extras/keymap_polish.h +++ b/quantum/keymap_extras/keymap_polish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_portuguese.h b/quantum/keymap_extras/keymap_portuguese.h index b4570ad922..6a896de529 100644 --- a/quantum/keymap_extras/keymap_portuguese.h +++ b/quantum/keymap_extras/keymap_portuguese.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_portuguese_mac_iso.h b/quantum/keymap_extras/keymap_portuguese_mac_iso.h index 57a27d04e9..1a11cfa5ab 100644 --- a/quantum/keymap_extras/keymap_portuguese_mac_iso.h +++ b/quantum/keymap_extras/keymap_portuguese_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_romanian.h b/quantum/keymap_extras/keymap_romanian.h index cf4c17125f..8f90988855 100644 --- a/quantum/keymap_extras/keymap_romanian.h +++ b/quantum/keymap_extras/keymap_romanian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h index fd3a1604c8..440692345e 100644 --- a/quantum/keymap_extras/keymap_russian.h +++ b/quantum/keymap_extras/keymap_russian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_russian_typewriter.h b/quantum/keymap_extras/keymap_russian_typewriter.h index 59f341e38b..833311076f 100644 --- a/quantum/keymap_extras/keymap_russian_typewriter.h +++ b/quantum/keymap_extras/keymap_russian_typewriter.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_serbian.h b/quantum/keymap_extras/keymap_serbian.h index 732e2e939d..fa0e474df8 100644 --- a/quantum/keymap_extras/keymap_serbian.h +++ b/quantum/keymap_extras/keymap_serbian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_serbian_latin.h b/quantum/keymap_extras/keymap_serbian_latin.h index 5151696a10..a2038b6df8 100644 --- a/quantum/keymap_extras/keymap_serbian_latin.h +++ b/quantum/keymap_extras/keymap_serbian_latin.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_slovak.h b/quantum/keymap_extras/keymap_slovak.h index 81a88fa25c..08666ef060 100644 --- a/quantum/keymap_extras/keymap_slovak.h +++ b/quantum/keymap_extras/keymap_slovak.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index 1e17342c27..31a8c5f9a5 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h index bcdd5af0c2..f87eb6b027 100644 --- a/quantum/keymap_extras/keymap_spanish.h +++ b/quantum/keymap_extras/keymap_spanish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish_dvorak.h b/quantum/keymap_extras/keymap_spanish_dvorak.h index fb033df770..782f23a5be 100644 --- a/quantum/keymap_extras/keymap_spanish_dvorak.h +++ b/quantum/keymap_extras/keymap_spanish_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish_latin_america.h b/quantum/keymap_extras/keymap_spanish_latin_america.h index 92921811b3..0ade828793 100644 --- a/quantum/keymap_extras/keymap_spanish_latin_america.h +++ b/quantum/keymap_extras/keymap_spanish_latin_america.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish.h b/quantum/keymap_extras/keymap_swedish.h index acb49f7773..a9d015b22e 100644 --- a/quantum/keymap_extras/keymap_swedish.h +++ b/quantum/keymap_extras/keymap_swedish.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_mac_ansi.h index ef48a9e493..36a31220a1 100644 --- a/quantum/keymap_extras/keymap_swedish_mac_ansi.h +++ b/quantum/keymap_extras/keymap_swedish_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_mac_iso.h b/quantum/keymap_extras/keymap_swedish_mac_iso.h index 2eaef5e60c..7f085dc16b 100644 --- a/quantum/keymap_extras/keymap_swedish_mac_iso.h +++ b/quantum/keymap_extras/keymap_swedish_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h index d33a259023..20781b2e53 100644 --- a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h +++ b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h index 680bd1db9e..dbbc24ed02 100644 --- a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h +++ b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swiss_de.h b/quantum/keymap_extras/keymap_swiss_de.h index c22191dd4e..2cedf23788 100644 --- a/quantum/keymap_extras/keymap_swiss_de.h +++ b/quantum/keymap_extras/keymap_swiss_de.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swiss_fr.h b/quantum/keymap_extras/keymap_swiss_fr.h index e0e8e52c9c..347815504b 100644 --- a/quantum/keymap_extras/keymap_swiss_fr.h +++ b/quantum/keymap_extras/keymap_swiss_fr.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_turkish_f.h b/quantum/keymap_extras/keymap_turkish_f.h index 4fdcf3f746..d9d08adae5 100644 --- a/quantum/keymap_extras/keymap_turkish_f.h +++ b/quantum/keymap_extras/keymap_turkish_f.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_turkish_q.h b/quantum/keymap_extras/keymap_turkish_q.h index 5a9362acb4..781c406347 100644 --- a/quantum/keymap_extras/keymap_turkish_q.h +++ b/quantum/keymap_extras/keymap_turkish_q.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h index 71e5f38f55..49237768d4 100644 --- a/quantum/keymap_extras/keymap_uk.h +++ b/quantum/keymap_extras/keymap_uk.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_ukrainian.h b/quantum/keymap_extras/keymap_ukrainian.h index 3f3ec4cec2..760cc265ea 100644 --- a/quantum/keymap_extras/keymap_ukrainian.h +++ b/quantum/keymap_extras/keymap_ukrainian.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us.h b/quantum/keymap_extras/keymap_us.h index 6101c8d8ba..9d1c7ad628 100644 --- a/quantum/keymap_extras/keymap_us.h +++ b/quantum/keymap_extras/keymap_us.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_extended.h b/quantum/keymap_extras/keymap_us_extended.h index 90da98c756..c8e56cc5a8 100644 --- a/quantum/keymap_extras/keymap_us_extended.h +++ b/quantum/keymap_extras/keymap_us_extended.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h index bd5f21ec8c..1b211bd4a6 100644 --- a/quantum/keymap_extras/keymap_us_international.h +++ b/quantum/keymap_extras/keymap_us_international.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_international_linux.h b/quantum/keymap_extras/keymap_us_international_linux.h index 4551cbe29f..778ab4c899 100644 --- a/quantum/keymap_extras/keymap_us_international_linux.h +++ b/quantum/keymap_extras/keymap_us_international_linux.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_workman.h b/quantum/keymap_extras/keymap_workman.h index 808caec054..31bd953d7f 100644 --- a/quantum/keymap_extras/keymap_workman.h +++ b/quantum/keymap_extras/keymap_workman.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_workman_zxcvm.h b/quantum/keymap_extras/keymap_workman_zxcvm.h index f8645ac4cf..f05c89adb8 100644 --- a/quantum/keymap_extras/keymap_workman_zxcvm.h +++ b/quantum/keymap_extras/keymap_workman_zxcvm.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/rgblight/rgblight_breathe_table.h b/quantum/rgblight/rgblight_breathe_table.h index 5c7660ab6a..147b1bf09a 100644 --- a/quantum/rgblight/rgblight_breathe_table.h +++ b/quantum/rgblight/rgblight_breathe_table.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/tests/test_common/keycode_table.cpp b/tests/test_common/keycode_table.cpp index 9ed80cdbcf..29f7c710a0 100644 --- a/tests/test_common/keycode_table.cpp +++ b/tests/test_common/keycode_table.cpp @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* -- cgit v1.2.3 From ae2d5e2e5a170fa49e25b324c63e8650e6c872f9 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 1 Jan 2024 17:04:51 +1100 Subject: LED drivers: extract IS31FL3743A from IS31COMMON (#22635) --- builddefs/common_features.mk | 6 +- drivers/led/issi/is31fl3743.h | 327 ------------------------------- drivers/led/issi/is31fl3743a-simple.c | 216 +++++++++++++++++++++ drivers/led/issi/is31fl3743a-simple.h | 329 +++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3743a.c | 220 +++++++++++++++++++++ drivers/led/issi/is31fl3743a.h | 331 ++++++++++++++++++++++++++++++++ drivers/led/issi/is31flcommon.h | 4 +- keyboards/skyloong/gk61/pro/config.h | 2 + keyboards/skyloong/gk61/pro/pro.c | 2 +- keyboards/skyloong/gk61/pro_48/config.h | 2 + keyboards/skyloong/gk61/pro_48/pro_48.c | 2 +- quantum/led_matrix/led_matrix_drivers.c | 8 + quantum/led_matrix/led_matrix_drivers.h | 2 + quantum/rgb_matrix/rgb_matrix_drivers.c | 8 + quantum/rgb_matrix/rgb_matrix_drivers.h | 2 + 15 files changed, 1125 insertions(+), 336 deletions(-) delete mode 100644 drivers/led/issi/is31fl3743.h create mode 100644 drivers/led/issi/is31fl3743a-simple.c create mode 100644 drivers/led/issi/is31fl3743a-simple.h create mode 100644 drivers/led/issi/is31fl3743a.c create mode 100644 drivers/led/issi/is31fl3743a.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index f049b09247..5ed5c65b47 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -402,10 +402,9 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3743a-simple.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745) @@ -508,10 +507,9 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3743a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3743a.c endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745) diff --git a/drivers/led/issi/is31fl3743.h b/drivers/led/issi/is31fl3743.h deleted file mode 100644 index 706b271254..0000000000 --- a/drivers/led/issi/is31fl3743.h +++ /dev/null @@ -1,327 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// This is a 7-bit address, that gets left-shifted and bit 0 -// set to 0 for write, 1 for read (as per I2C protocol) -// The address will vary depending on your wiring: -// 00 <-> GND -// 01 <-> SCL -// 10 <-> SDA -// 11 <-> VCC -// ADDR1 represents A1:A0 of the 7-bit address. -// ADDR2 represents A3:A2 of the 7-bit address. -// The result is: 0b010(ADDR2)(ADDR1) -#ifndef DRIVER_ADDR_1 -# define DRIVER_ADDR_1 0b0100000 -#endif - -// Set defaults for Spread Spectrum Register -#ifndef ISSI_SSR_1 -# ifndef DRIVER_ADDR_2 -# define ISSI_SSR_1 0x00 -# else -# define ISSI_SSR_1 0xC0 -# endif -#endif -#ifndef ISSI_SSR_2 -# define ISSI_SSR_2 0x80 -#endif -#ifndef ISSI_SSR_3 -# define ISSI_SSR_3 0x80 -#endif -#ifndef ISSI_SSR_4 -# define ISSI_SSR_4 0x80 -#endif - -// Command Registers -#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE -#define ISSI_COMMANDREGISTER 0xFD -#define ISSI_IDREGISTER 0xFC -#define ISSI_REGISTER_UNLOCK 0xC5 - -// Response Registers -#define ISSI_PAGE_PWM 0x00 -#define ISSI_PAGE_SCALING 0x01 -#define ISSI_PAGE_FUNCTION 0x02 - -// Registers under Function Register -#define ISSI_REG_CONFIGURATION 0x00 -#define ISSI_REG_GLOBALCURRENT 0x01 -#define ISSI_REG_PULLDOWNUP 0x02 -#define ISSI_REG_TEMP 0x24 -#define ISSI_REG_SSR 0x25 -#define ISSI_REG_RESET 0x2F - -// Set defaults for Function Registers -#ifndef ISSI_CONFIGURATION -# define ISSI_CONFIGURATION 0x01 -#endif -#ifndef ISSI_GLOBALCURRENT -# define ISSI_GLOBALCURRENT 0xFF -#endif -#ifndef ISSI_PULLDOWNUP -# define ISSI_PULLDOWNUP 0x33 -#endif -#ifndef ISSI_TEMP -# define ISSI_TEMP 0x00 -#endif - -// Set defaults for Scaling registers -#ifndef ISSI_SCAL_RED -# define ISSI_SCAL_RED 0xFF -#endif -#ifndef ISSI_SCAL_BLUE -# define ISSI_SCAL_BLUE 0xFF -#endif -#ifndef ISSI_SCAL_GREEN -# define ISSI_SCAL_GREEN 0xFF -#endif -#define ISSI_SCAL_RED_OFF 0x00 -#define ISSI_SCAL_GREEN_OFF 0x00 -#define ISSI_SCAL_BLUE_OFF 0x00 - -#ifndef ISSI_SCAL_LED -# define ISSI_SCAL_LED 0xFF -#endif -#define ISSI_SCAL_LED_OFF 0x00 - -// Set buffer sizes -#define ISSI_MAX_LEDS 198 -#define ISSI_SCALING_SIZE 198 -#define ISSI_PWM_TRF_SIZE 18 -#define ISSI_SCALING_TRF_SIZE 18 - -// Location of 1st bit for PWM and Scaling registers -#define ISSI_PWM_REG_1ST 0x01 -#define ISSI_SCL_REG_1ST 0x01 - -// Map CS SW locations to order in PWM / Scaling buffers -// This matches the ORDER in the Datasheet Register not the POSITION -// It will always count from 0x00 to (ISSI_MAX_LEDS - 1) -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 - -#define CS1_SW2 0x12 -#define CS2_SW2 0x13 -#define CS3_SW2 0x14 -#define CS4_SW2 0x15 -#define CS5_SW2 0x16 -#define CS6_SW2 0x17 -#define CS7_SW2 0x18 -#define CS8_SW2 0x19 -#define CS9_SW2 0x1A -#define CS10_SW2 0x1B -#define CS11_SW2 0x1C -#define CS12_SW2 0x1D -#define CS13_SW2 0x1E -#define CS14_SW2 0x1F -#define CS15_SW2 0x20 -#define CS16_SW2 0x21 -#define CS17_SW2 0x22 -#define CS18_SW2 0x23 - -#define CS1_SW3 0x24 -#define CS2_SW3 0x25 -#define CS3_SW3 0x26 -#define CS4_SW3 0x27 -#define CS5_SW3 0x28 -#define CS6_SW3 0x29 -#define CS7_SW3 0x2A -#define CS8_SW3 0x2B -#define CS9_SW3 0x2C -#define CS10_SW3 0x2D -#define CS11_SW3 0x2E -#define CS12_SW3 0x2F -#define CS13_SW3 0x30 -#define CS14_SW3 0x31 -#define CS15_SW3 0x32 -#define CS16_SW3 0x33 -#define CS17_SW3 0x34 -#define CS18_SW3 0x35 - -#define CS1_SW4 0x36 -#define CS2_SW4 0x37 -#define CS3_SW4 0x38 -#define CS4_SW4 0x39 -#define CS5_SW4 0x3A -#define CS6_SW4 0x3B -#define CS7_SW4 0x3C -#define CS8_SW4 0x3D -#define CS9_SW4 0x3E -#define CS10_SW4 0x3F -#define CS11_SW4 0x40 -#define CS12_SW4 0x41 -#define CS13_SW4 0x42 -#define CS14_SW4 0x43 -#define CS15_SW4 0x44 -#define CS16_SW4 0x45 -#define CS17_SW4 0x46 -#define CS18_SW4 0x47 - -#define CS1_SW5 0x48 -#define CS2_SW5 0x49 -#define CS3_SW5 0x4A -#define CS4_SW5 0x4B -#define CS5_SW5 0x4C -#define CS6_SW5 0x4D -#define CS7_SW5 0x4E -#define CS8_SW5 0x4F -#define CS9_SW5 0x50 -#define CS10_SW5 0x51 -#define CS11_SW5 0x52 -#define CS12_SW5 0x53 -#define CS13_SW5 0x54 -#define CS14_SW5 0x55 -#define CS15_SW5 0x56 -#define CS16_SW5 0x57 -#define CS17_SW5 0x58 -#define CS18_SW5 0x59 - -#define CS1_SW6 0x5A -#define CS2_SW6 0x5B -#define CS3_SW6 0x5C -#define CS4_SW6 0x5D -#define CS5_SW6 0x5E -#define CS6_SW6 0x5F -#define CS7_SW6 0x60 -#define CS8_SW6 0x61 -#define CS9_SW6 0x62 -#define CS10_SW6 0x63 -#define CS11_SW6 0x64 -#define CS12_SW6 0x65 -#define CS13_SW6 0x66 -#define CS14_SW6 0x67 -#define CS15_SW6 0x68 -#define CS16_SW6 0x69 -#define CS17_SW6 0x6A -#define CS18_SW6 0x6B - -#define CS1_SW7 0x6C -#define CS2_SW7 0x6D -#define CS3_SW7 0x6E -#define CS4_SW7 0x6F -#define CS5_SW7 0x70 -#define CS6_SW7 0x71 -#define CS7_SW7 0x72 -#define CS8_SW7 0x73 -#define CS9_SW7 0x74 -#define CS10_SW7 0x75 -#define CS11_SW7 0x76 -#define CS12_SW7 0x77 -#define CS13_SW7 0x78 -#define CS14_SW7 0x79 -#define CS15_SW7 0x7A -#define CS16_SW7 0x7B -#define CS17_SW7 0x7C -#define CS18_SW7 0x7D - -#define CS1_SW8 0x7E -#define CS2_SW8 0x7F -#define CS3_SW8 0x80 -#define CS4_SW8 0x81 -#define CS5_SW8 0x82 -#define CS6_SW8 0x83 -#define CS7_SW8 0x84 -#define CS8_SW8 0x85 -#define CS9_SW8 0x86 -#define CS10_SW8 0x87 -#define CS11_SW8 0x88 -#define CS12_SW8 0x89 -#define CS13_SW8 0x8A -#define CS14_SW8 0x8B -#define CS15_SW8 0x8C -#define CS16_SW8 0x8D -#define CS17_SW8 0x8E -#define CS18_SW8 0x8F - -#define CS1_SW9 0x90 -#define CS2_SW9 0x91 -#define CS3_SW9 0x92 -#define CS4_SW9 0x93 -#define CS5_SW9 0x94 -#define CS6_SW9 0x95 -#define CS7_SW9 0x96 -#define CS8_SW9 0x97 -#define CS9_SW9 0x98 -#define CS10_SW9 0x99 -#define CS11_SW9 0x9A -#define CS12_SW9 0x9B -#define CS13_SW9 0x9C -#define CS14_SW9 0x9D -#define CS15_SW9 0x9E -#define CS16_SW9 0x9F -#define CS17_SW9 0xA0 -#define CS18_SW9 0xA1 - -#define CS1_SW10 0xA2 -#define CS2_SW10 0xA3 -#define CS3_SW10 0xA4 -#define CS4_SW10 0xA5 -#define CS5_SW10 0xA6 -#define CS6_SW10 0xA7 -#define CS7_SW10 0xA8 -#define CS8_SW10 0xA9 -#define CS9_SW10 0xAA -#define CS10_SW10 0xAB -#define CS11_SW10 0xAC -#define CS12_SW10 0xAD -#define CS13_SW10 0xAE -#define CS14_SW10 0xAF -#define CS15_SW10 0xB0 -#define CS16_SW10 0xB1 -#define CS17_SW10 0xB2 -#define CS18_SW10 0xB3 - -#define CS1_SW11 0xB4 -#define CS2_SW11 0xB5 -#define CS3_SW11 0xB6 -#define CS4_SW11 0xB7 -#define CS5_SW11 0xB8 -#define CS6_SW11 0xB9 -#define CS7_SW11 0xBA -#define CS8_SW11 0xBB -#define CS9_SW11 0xBC -#define CS10_SW11 0xBD -#define CS11_SW11 0xBE -#define CS12_SW11 0xBF -#define CS13_SW11 0xC0 -#define CS14_SW11 0xC1 -#define CS15_SW11 0xC2 -#define CS16_SW11 0xC3 -#define CS17_SW11 0xC4 -#define CS18_SW11 0xC5 diff --git a/drivers/led/issi/is31fl3743a-simple.c b/drivers/led/issi/is31fl3743a-simple.c new file mode 100644 index 0000000000..26c42ea69c --- /dev/null +++ b/drivers/led/issi/is31fl3743a-simple.c @@ -0,0 +1,216 @@ +#include "is31fl3743a-simple.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3743A_PWM_REGISTER_COUNT 198 +#define IS31FL3743A_SCALING_REGISTER_COUNT 198 + +#ifndef IS31FL3743A_I2C_TIMEOUT +# define IS31FL3743A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3743A_I2C_PERSISTENCE +# define IS31FL3743A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3743A_CONFIGURATION +# define IS31FL3743A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3743A_SW_PULLDOWN +# define IS31FL3743A_SW_PULLDOWN IS31FL3743A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3743A_CS_PULLUP +# define IS31FL3743A_CS_PULLUP IS31FL3743A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3743A_GLOBAL_CURRENT +# define IS31FL3743A_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3743A_SYNC_1 +# define IS31FL3743A_SYNC_1 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_2 +# define IS31FL3743A_SYNC_2 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_3 +# define IS31FL3743A_SYNC_3 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_4 +# define IS31FL3743A_SYNC_4 IS31FL3743A_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_SCALING_REGISTER_COUNT]; + +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT); +#endif +} + +void is31fl3743a_select_page(uint8_t addr, uint8_t page) { + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND_WRITE_LOCK, IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND, page); +} + +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3743a_init_drivers(void) { + i2c_init(); + + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_1, IS31FL3743A_SYNC_1); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_2, IS31FL3743A_SYNC_2); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_3, IS31FL3743A_SYNC_3); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_4, IS31FL3743A_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_scaling_register(i, 0xFF); + } + + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3743a_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_FUNCTION); + + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_PULLDOWNUP, (IS31FL3743A_SW_PULLDOWN << 4) | IS31FL3743A_CS_PULLUP); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3743A_GLOBAL_CURRENT); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_CONFIGURATION, IS31FL3743A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3743a_set_value(int index, uint8_t value) { + is31fl3743a_led_t led; + if (index >= 0 && index < IS31FL3743A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3743a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_value(i, value); + } +} + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3743a_led_t led; + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3743a_flush(void) { + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3743a-simple.h b/drivers/led/issi/is31fl3743a-simple.h new file mode 100644 index 0000000000..544531ec25 --- /dev/null +++ b/drivers/led/issi/is31fl3743a-simple.h @@ -0,0 +1,329 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3743A_REG_ID 0xFC + +#define IS31FL3743A_REG_COMMAND 0xFD + +#define IS31FL3743A_COMMAND_PWM 0x00 +#define IS31FL3743A_COMMAND_SCALING 0x01 +#define IS31FL3743A_COMMAND_FUNCTION 0x02 + +#define IS31FL3743A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3743A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3743A_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3743A_FUNCTION_REG_RESET 0x2F + +#define IS31FL3743A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3743A_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3743A_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3743A_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3743A_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3743A_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3743A_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3743A_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3743A_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3743A_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3743A_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3743A_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3743A_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3743A_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3743A_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3743A_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3743A_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(LED_MATRIX_IS31FL3743A) +# define IS31FL3743A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3743A_I2C_ADDRESS_4) +# define IS31FL3743A_DRIVER_COUNT 4 +#elif defined(IS31FL3743A_I2C_ADDRESS_3) +# define IS31FL3743A_DRIVER_COUNT 3 +#elif defined(IS31FL3743A_I2C_ADDRESS_2) +# define IS31FL3743A_DRIVER_COUNT 2 +#elif defined(IS31FL3743A_I2C_ADDRESS_1) +# define IS31FL3743A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3743a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3743a_led_t; + +extern const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT]; + +void is31fl3743a_init_drivers(void); +void is31fl3743a_init(uint8_t addr, uint8_t sync); +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3743a_select_page(uint8_t addr, uint8_t page); +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3743a_set_value(int index, uint8_t value); +void is31fl3743a_set_value_all(uint8_t value); + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3743a_flush(void); + +#define IS31FL3743A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3743A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3743A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_SYNC_NONE 0b00 +#define IS31FL3743A_SYNC_SLAVE 0b10 +#define IS31FL3743A_SYNC_MASTER 0b11 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 + +#define CS1_SW5 0x48 +#define CS2_SW5 0x49 +#define CS3_SW5 0x4A +#define CS4_SW5 0x4B +#define CS5_SW5 0x4C +#define CS6_SW5 0x4D +#define CS7_SW5 0x4E +#define CS8_SW5 0x4F +#define CS9_SW5 0x50 +#define CS10_SW5 0x51 +#define CS11_SW5 0x52 +#define CS12_SW5 0x53 +#define CS13_SW5 0x54 +#define CS14_SW5 0x55 +#define CS15_SW5 0x56 +#define CS16_SW5 0x57 +#define CS17_SW5 0x58 +#define CS18_SW5 0x59 + +#define CS1_SW6 0x5A +#define CS2_SW6 0x5B +#define CS3_SW6 0x5C +#define CS4_SW6 0x5D +#define CS5_SW6 0x5E +#define CS6_SW6 0x5F +#define CS7_SW6 0x60 +#define CS8_SW6 0x61 +#define CS9_SW6 0x62 +#define CS10_SW6 0x63 +#define CS11_SW6 0x64 +#define CS12_SW6 0x65 +#define CS13_SW6 0x66 +#define CS14_SW6 0x67 +#define CS15_SW6 0x68 +#define CS16_SW6 0x69 +#define CS17_SW6 0x6A +#define CS18_SW6 0x6B + +#define CS1_SW7 0x6C +#define CS2_SW7 0x6D +#define CS3_SW7 0x6E +#define CS4_SW7 0x6F +#define CS5_SW7 0x70 +#define CS6_SW7 0x71 +#define CS7_SW7 0x72 +#define CS8_SW7 0x73 +#define CS9_SW7 0x74 +#define CS10_SW7 0x75 +#define CS11_SW7 0x76 +#define CS12_SW7 0x77 +#define CS13_SW7 0x78 +#define CS14_SW7 0x79 +#define CS15_SW7 0x7A +#define CS16_SW7 0x7B +#define CS17_SW7 0x7C +#define CS18_SW7 0x7D + +#define CS1_SW8 0x7E +#define CS2_SW8 0x7F +#define CS3_SW8 0x80 +#define CS4_SW8 0x81 +#define CS5_SW8 0x82 +#define CS6_SW8 0x83 +#define CS7_SW8 0x84 +#define CS8_SW8 0x85 +#define CS9_SW8 0x86 +#define CS10_SW8 0x87 +#define CS11_SW8 0x88 +#define CS12_SW8 0x89 +#define CS13_SW8 0x8A +#define CS14_SW8 0x8B +#define CS15_SW8 0x8C +#define CS16_SW8 0x8D +#define CS17_SW8 0x8E +#define CS18_SW8 0x8F + +#define CS1_SW9 0x90 +#define CS2_SW9 0x91 +#define CS3_SW9 0x92 +#define CS4_SW9 0x93 +#define CS5_SW9 0x94 +#define CS6_SW9 0x95 +#define CS7_SW9 0x96 +#define CS8_SW9 0x97 +#define CS9_SW9 0x98 +#define CS10_SW9 0x99 +#define CS11_SW9 0x9A +#define CS12_SW9 0x9B +#define CS13_SW9 0x9C +#define CS14_SW9 0x9D +#define CS15_SW9 0x9E +#define CS16_SW9 0x9F +#define CS17_SW9 0xA0 +#define CS18_SW9 0xA1 + +#define CS1_SW10 0xA2 +#define CS2_SW10 0xA3 +#define CS3_SW10 0xA4 +#define CS4_SW10 0xA5 +#define CS5_SW10 0xA6 +#define CS6_SW10 0xA7 +#define CS7_SW10 0xA8 +#define CS8_SW10 0xA9 +#define CS9_SW10 0xAA +#define CS10_SW10 0xAB +#define CS11_SW10 0xAC +#define CS12_SW10 0xAD +#define CS13_SW10 0xAE +#define CS14_SW10 0xAF +#define CS15_SW10 0xB0 +#define CS16_SW10 0xB1 +#define CS17_SW10 0xB2 +#define CS18_SW10 0xB3 + +#define CS1_SW11 0xB4 +#define CS2_SW11 0xB5 +#define CS3_SW11 0xB6 +#define CS4_SW11 0xB7 +#define CS5_SW11 0xB8 +#define CS6_SW11 0xB9 +#define CS7_SW11 0xBA +#define CS8_SW11 0xBB +#define CS9_SW11 0xBC +#define CS10_SW11 0xBD +#define CS11_SW11 0xBE +#define CS12_SW11 0xBF +#define CS13_SW11 0xC0 +#define CS14_SW11 0xC1 +#define CS15_SW11 0xC2 +#define CS16_SW11 0xC3 +#define CS17_SW11 0xC4 +#define CS18_SW11 0xC5 diff --git a/drivers/led/issi/is31fl3743a.c b/drivers/led/issi/is31fl3743a.c new file mode 100644 index 0000000000..997e1c9147 --- /dev/null +++ b/drivers/led/issi/is31fl3743a.c @@ -0,0 +1,220 @@ +#include "is31fl3743a.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3743A_PWM_REGISTER_COUNT 198 +#define IS31FL3743A_SCALING_REGISTER_COUNT 198 + +#ifndef IS31FL3743A_I2C_TIMEOUT +# define IS31FL3743A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3743A_I2C_PERSISTENCE +# define IS31FL3743A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3743A_CONFIGURATION +# define IS31FL3743A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3743A_SW_PULLDOWN +# define IS31FL3743A_SW_PULLDOWN IS31FL3743A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3743A_CS_PULLUP +# define IS31FL3743A_CS_PULLUP IS31FL3743A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3743A_GLOBAL_CURRENT +# define IS31FL3743A_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3743A_SYNC_1 +# define IS31FL3743A_SYNC_1 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_2 +# define IS31FL3743A_SYNC_2 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_3 +# define IS31FL3743A_SYNC_3 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_4 +# define IS31FL3743A_SYNC_4 IS31FL3743A_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_SCALING_REGISTER_COUNT]; + +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT); +#endif +} + +void is31fl3743a_select_page(uint8_t addr, uint8_t page) { + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND_WRITE_LOCK, IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND, page); +} + +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3743a_init_drivers(void) { + i2c_init(); + + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_1, IS31FL3743A_SYNC_1); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_2, IS31FL3743A_SYNC_2); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_3, IS31FL3743A_SYNC_3); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_4, IS31FL3743A_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_scaling_register(i, 0xFF, 0xFF, 0xFF); + } + + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3743a_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_FUNCTION); + + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_PULLDOWNUP, (IS31FL3743A_SW_PULLDOWN << 4) | IS31FL3743A_CS_PULLUP); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3743A_GLOBAL_CURRENT); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_CONFIGURATION, IS31FL3743A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3743a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3743a_led_t led; + if (index >= 0 && index < IS31FL3743A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + } +} + +void is31fl3743a_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_color(i, red, green, blue); + } +} + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3743a_led_t led; + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.r] = red; + g_scaling_registers[led.driver][led.g] = green; + g_scaling_registers[led.driver][led.b] = blue; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3743a_flush(void) { + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3743a.h b/drivers/led/issi/is31fl3743a.h new file mode 100644 index 0000000000..87bb63e6b4 --- /dev/null +++ b/drivers/led/issi/is31fl3743a.h @@ -0,0 +1,331 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3743A_REG_ID 0xFC + +#define IS31FL3743A_REG_COMMAND 0xFD + +#define IS31FL3743A_COMMAND_PWM 0x00 +#define IS31FL3743A_COMMAND_SCALING 0x01 +#define IS31FL3743A_COMMAND_FUNCTION 0x02 + +#define IS31FL3743A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3743A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3743A_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3743A_FUNCTION_REG_RESET 0x2F + +#define IS31FL3743A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3743A_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3743A_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3743A_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3743A_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3743A_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3743A_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3743A_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3743A_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3743A_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3743A_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3743A_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3743A_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3743A_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3743A_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3743A_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3743A_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(RGB_MATRIX_IS31FL3743A) +# define IS31FL3743A_LED_COUNT RGB_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3743A_I2C_ADDRESS_4) +# define IS31FL3743A_DRIVER_COUNT 4 +#elif defined(IS31FL3743A_I2C_ADDRESS_3) +# define IS31FL3743A_DRIVER_COUNT 3 +#elif defined(IS31FL3743A_I2C_ADDRESS_2) +# define IS31FL3743A_DRIVER_COUNT 2 +#elif defined(IS31FL3743A_I2C_ADDRESS_1) +# define IS31FL3743A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3743a_led_t { + uint8_t driver : 2; + uint8_t r; + uint8_t g; + uint8_t b; +} PACKED is31fl3743a_led_t; + +extern const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT]; + +void is31fl3743a_init_drivers(void); +void is31fl3743a_init(uint8_t addr, uint8_t sync); +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3743a_select_page(uint8_t addr, uint8_t page); +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3743a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void is31fl3743a_set_color_all(uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3743a_flush(void); + +#define IS31FL3743A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3743A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3743A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_SYNC_NONE 0b00 +#define IS31FL3743A_SYNC_SLAVE 0b10 +#define IS31FL3743A_SYNC_MASTER 0b11 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 + +#define CS1_SW5 0x48 +#define CS2_SW5 0x49 +#define CS3_SW5 0x4A +#define CS4_SW5 0x4B +#define CS5_SW5 0x4C +#define CS6_SW5 0x4D +#define CS7_SW5 0x4E +#define CS8_SW5 0x4F +#define CS9_SW5 0x50 +#define CS10_SW5 0x51 +#define CS11_SW5 0x52 +#define CS12_SW5 0x53 +#define CS13_SW5 0x54 +#define CS14_SW5 0x55 +#define CS15_SW5 0x56 +#define CS16_SW5 0x57 +#define CS17_SW5 0x58 +#define CS18_SW5 0x59 + +#define CS1_SW6 0x5A +#define CS2_SW6 0x5B +#define CS3_SW6 0x5C +#define CS4_SW6 0x5D +#define CS5_SW6 0x5E +#define CS6_SW6 0x5F +#define CS7_SW6 0x60 +#define CS8_SW6 0x61 +#define CS9_SW6 0x62 +#define CS10_SW6 0x63 +#define CS11_SW6 0x64 +#define CS12_SW6 0x65 +#define CS13_SW6 0x66 +#define CS14_SW6 0x67 +#define CS15_SW6 0x68 +#define CS16_SW6 0x69 +#define CS17_SW6 0x6A +#define CS18_SW6 0x6B + +#define CS1_SW7 0x6C +#define CS2_SW7 0x6D +#define CS3_SW7 0x6E +#define CS4_SW7 0x6F +#define CS5_SW7 0x70 +#define CS6_SW7 0x71 +#define CS7_SW7 0x72 +#define CS8_SW7 0x73 +#define CS9_SW7 0x74 +#define CS10_SW7 0x75 +#define CS11_SW7 0x76 +#define CS12_SW7 0x77 +#define CS13_SW7 0x78 +#define CS14_SW7 0x79 +#define CS15_SW7 0x7A +#define CS16_SW7 0x7B +#define CS17_SW7 0x7C +#define CS18_SW7 0x7D + +#define CS1_SW8 0x7E +#define CS2_SW8 0x7F +#define CS3_SW8 0x80 +#define CS4_SW8 0x81 +#define CS5_SW8 0x82 +#define CS6_SW8 0x83 +#define CS7_SW8 0x84 +#define CS8_SW8 0x85 +#define CS9_SW8 0x86 +#define CS10_SW8 0x87 +#define CS11_SW8 0x88 +#define CS12_SW8 0x89 +#define CS13_SW8 0x8A +#define CS14_SW8 0x8B +#define CS15_SW8 0x8C +#define CS16_SW8 0x8D +#define CS17_SW8 0x8E +#define CS18_SW8 0x8F + +#define CS1_SW9 0x90 +#define CS2_SW9 0x91 +#define CS3_SW9 0x92 +#define CS4_SW9 0x93 +#define CS5_SW9 0x94 +#define CS6_SW9 0x95 +#define CS7_SW9 0x96 +#define CS8_SW9 0x97 +#define CS9_SW9 0x98 +#define CS10_SW9 0x99 +#define CS11_SW9 0x9A +#define CS12_SW9 0x9B +#define CS13_SW9 0x9C +#define CS14_SW9 0x9D +#define CS15_SW9 0x9E +#define CS16_SW9 0x9F +#define CS17_SW9 0xA0 +#define CS18_SW9 0xA1 + +#define CS1_SW10 0xA2 +#define CS2_SW10 0xA3 +#define CS3_SW10 0xA4 +#define CS4_SW10 0xA5 +#define CS5_SW10 0xA6 +#define CS6_SW10 0xA7 +#define CS7_SW10 0xA8 +#define CS8_SW10 0xA9 +#define CS9_SW10 0xAA +#define CS10_SW10 0xAB +#define CS11_SW10 0xAC +#define CS12_SW10 0xAD +#define CS13_SW10 0xAE +#define CS14_SW10 0xAF +#define CS15_SW10 0xB0 +#define CS16_SW10 0xB1 +#define CS17_SW10 0xB2 +#define CS18_SW10 0xB3 + +#define CS1_SW11 0xB4 +#define CS2_SW11 0xB5 +#define CS3_SW11 0xB6 +#define CS4_SW11 0xB7 +#define CS5_SW11 0xB8 +#define CS6_SW11 0xB9 +#define CS7_SW11 0xBA +#define CS8_SW11 0xBB +#define CS9_SW11 0xBC +#define CS10_SW11 0xBD +#define CS11_SW11 0xBE +#define CS12_SW11 0xBF +#define CS13_SW11 0xC0 +#define CS14_SW11 0xC1 +#define CS15_SW11 0xC2 +#define CS16_SW11 0xC3 +#define CS17_SW11 0xC4 +#define CS18_SW11 0xC5 diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h index 1ba57c6cf7..e4ee372921 100644 --- a/drivers/led/issi/is31flcommon.h +++ b/drivers/led/issi/is31flcommon.h @@ -26,9 +26,7 @@ #include "util.h" // Which variant header file to use -#if defined(LED_MATRIX_IS31FL3743A) || defined(RGB_MATRIX_IS31FL3743A) -# include "is31fl3743.h" -#elif defined(LED_MATRIX_IS31FL3745) || defined(RGB_MATRIX_IS31FL3745) +#if defined(LED_MATRIX_IS31FL3745) || defined(RGB_MATRIX_IS31FL3745) # include "is31fl3745.h" #elif defined(LED_MATRIX_IS31FL3746A) || defined(RGB_MATRIX_IS31FL3746A) # include "is31fl3746.h" diff --git a/keyboards/skyloong/gk61/pro/config.h b/keyboards/skyloong/gk61/pro/config.h index 8e9b5f9258..38e87877d0 100644 --- a/keyboards/skyloong/gk61/pro/config.h +++ b/keyboards/skyloong/gk61/pro/config.h @@ -3,6 +3,8 @@ #pragma once +#define IS31FL3743A_I2C_ADDRESS_1 IS31FL3743A_I2C_ADDRESS_GND_GND + #define RGB_MATRIX_LED_COUNT 64 #define CAPS_LOCK_INDEX 28 #define WIN_MOD_INDEX 16 diff --git a/keyboards/skyloong/gk61/pro/pro.c b/keyboards/skyloong/gk61/pro/pro.c index 1936964b32..6240d9cead 100644 --- a/keyboards/skyloong/gk61/pro/pro.c +++ b/keyboards/skyloong/gk61/pro/pro.c @@ -6,7 +6,7 @@ int FN_MAC = 0; int L_WIN = 0; int L_MAC = 0; -const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/skyloong/gk61/pro_48/config.h b/keyboards/skyloong/gk61/pro_48/config.h index 4e8d9f0224..d446224cf1 100644 --- a/keyboards/skyloong/gk61/pro_48/config.h +++ b/keyboards/skyloong/gk61/pro_48/config.h @@ -3,6 +3,8 @@ #pragma once +#define IS31FL3743A_I2C_ADDRESS_1 IS31FL3743A_I2C_ADDRESS_GND_GND + #define RGB_MATRIX_LED_COUNT 64 #define CAPS_LOCK_INDEX 28 #define WIN_MOD_INDEX 16 diff --git a/keyboards/skyloong/gk61/pro_48/pro_48.c b/keyboards/skyloong/gk61/pro_48/pro_48.c index e4f64c022f..dc1058a08b 100644 --- a/keyboards/skyloong/gk61/pro_48/pro_48.c +++ b/keyboards/skyloong/gk61/pro_48/pro_48.c @@ -7,7 +7,7 @@ _Bool L_WIN = 0; _Bool L_MAC = 0; #if defined(RGB_MATRIX_ENABLE) /*&& defined(CAPS_LOCK_INDEX)*/ -const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index 26179dfa4e..d7b7c2b077 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -81,6 +81,14 @@ const led_matrix_driver_t led_matrix_driver = { .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(IS31FLCOMMON) const led_matrix_driver_t led_matrix_driver = { .init = IS31FL_simple_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index 88ceebc04b..dc52dd460d 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -19,6 +19,8 @@ # include "is31fl3741-simple.h" #elif defined(LED_MATRIX_IS31FL3742A) # include "is31fl3742a-simple.h" +#elif defined(LED_MATRIX_IS31FL3743A) +# include "is31fl3743a-simple.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(LED_MATRIX_SNLED27351) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 79f82a0c87..5631c25964 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -84,6 +84,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3742a_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3743A) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3743a_init_drivers, + .flush = is31fl3743a_flush, + .set_color = is31fl3743a_set_color, + .set_color_all = is31fl3743a_set_color_all, +}; + #elif defined(IS31FLCOMMON) const rgb_matrix_driver_t rgb_matrix_driver = { .init = IS31FL_RGB_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 298167e6ed..90fde67bdc 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -21,6 +21,8 @@ # include "is31fl3741.h" #elif defined(RGB_MATRIX_IS31FL3742A) # include "is31fl3742a.h" +#elif defined(RGB_MATRIX_IS31FL3743A) +# include "is31fl3743a.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(RGB_MATRIX_SNLED27351) -- cgit v1.2.3 From a88dd675bf3e1dedac2ceb7df779e0fb6931948a Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 1 Jan 2024 19:31:44 +1100 Subject: LED drivers: extract IS31FL3745 from IS31COMMON (#22636) --- builddefs/common_features.mk | 6 +- drivers/led/issi/is31fl3745-simple.c | 216 +++++++++++++++++++++++++ drivers/led/issi/is31fl3745-simple.h | 272 ++++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3745.c | 220 ++++++++++++++++++++++++++ drivers/led/issi/is31fl3745.h | 174 ++++++++++---------- drivers/led/issi/is31flcommon.h | 4 +- quantum/led_matrix/led_matrix_drivers.c | 8 + quantum/led_matrix/led_matrix_drivers.h | 2 + quantum/rgb_matrix/rgb_matrix_drivers.c | 8 + quantum/rgb_matrix/rgb_matrix_drivers.h | 2 + 10 files changed, 820 insertions(+), 92 deletions(-) create mode 100644 drivers/led/issi/is31fl3745-simple.c create mode 100644 drivers/led/issi/is31fl3745-simple.h create mode 100644 drivers/led/issi/is31fl3745.c (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 5ed5c65b47..d5446a54c8 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -408,10 +408,9 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3745-simple.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a) @@ -513,10 +512,9 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3745) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3745.c endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a) diff --git a/drivers/led/issi/is31fl3745-simple.c b/drivers/led/issi/is31fl3745-simple.c new file mode 100644 index 0000000000..46b41fe3d4 --- /dev/null +++ b/drivers/led/issi/is31fl3745-simple.c @@ -0,0 +1,216 @@ +#include "is31fl3745-simple.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3745_PWM_REGISTER_COUNT 144 +#define IS31FL3745_SCALING_REGISTER_COUNT 144 + +#ifndef IS31FL3745_I2C_TIMEOUT +# define IS31FL3745_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3745_I2C_PERSISTENCE +# define IS31FL3745_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3745_CONFIGURATION +# define IS31FL3745_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3745_SW_PULLDOWN +# define IS31FL3745_SW_PULLDOWN IS31FL3745_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3745_CS_PULLUP +# define IS31FL3745_CS_PULLUP IS31FL3745_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3745_GLOBAL_CURRENT +# define IS31FL3745_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3745_SYNC_1 +# define IS31FL3745_SYNC_1 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_2 +# define IS31FL3745_SYNC_2 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_3 +# define IS31FL3745_SYNC_3 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_4 +# define IS31FL3745_SYNC_4 IS31FL3745_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3745_DRIVER_COUNT][IS31FL3745_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3745_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3745_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3745_DRIVER_COUNT][IS31FL3745_SCALING_REGISTER_COUNT]; + +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT); +#endif +} + +void is31fl3745_select_page(uint8_t addr, uint8_t page) { + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND_WRITE_LOCK, IS31FL3745_COMMAND_WRITE_LOCK_MAGIC); + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND, page); +} + +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT); +#endif + } +} + +void is31fl3745_init_drivers(void) { + i2c_init(); + + is31fl3745_init(IS31FL3745_I2C_ADDRESS_1, IS31FL3745_SYNC_1); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_2, IS31FL3745_SYNC_2); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_3, IS31FL3745_SYNC_3); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_4, IS31FL3745_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_scaling_register(i, 0xFF); + } + + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3745_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_FUNCTION); + + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_PULLDOWNUP, (IS31FL3745_SW_PULLDOWN << 4) | IS31FL3745_CS_PULLUP); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3745_GLOBAL_CURRENT); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_CONFIGURATION, IS31FL3745_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3745_set_value(int index, uint8_t value) { + is31fl3745_led_t led; + if (index >= 0 && index < IS31FL3745_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3745_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_value(i, value); + } +} + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3745_led_t led; + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3745_flush(void) { + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3745-simple.h b/drivers/led/issi/is31fl3745-simple.h new file mode 100644 index 0000000000..dbff193acd --- /dev/null +++ b/drivers/led/issi/is31fl3745-simple.h @@ -0,0 +1,272 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3745_REG_ID 0xFC + +#define IS31FL3745_REG_COMMAND 0xFD + +#define IS31FL3745_COMMAND_PWM 0x00 +#define IS31FL3745_COMMAND_SCALING 0x01 +#define IS31FL3745_COMMAND_FUNCTION 0x02 + +#define IS31FL3745_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3745_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3745_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3745_FUNCTION_REG_RESET 0x2F + +#define IS31FL3745_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3745_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3745_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3745_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3745_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3745_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3745_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3745_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3745_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3745_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3745_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3745_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3745_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3745_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3745_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3745_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3745_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3745_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(LED_MATRIX_IS31FL3745) +# define IS31FL3745_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3745_I2C_ADDRESS_4) +# define IS31FL3745_DRIVER_COUNT 4 +#elif defined(IS31FL3745_I2C_ADDRESS_3) +# define IS31FL3745_DRIVER_COUNT 3 +#elif defined(IS31FL3745_I2C_ADDRESS_2) +# define IS31FL3745_DRIVER_COUNT 2 +#elif defined(IS31FL3745_I2C_ADDRESS_1) +# define IS31FL3745_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3745_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3745_led_t; + +extern const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT]; + +void is31fl3745_init_drivers(void); +void is31fl3745_init(uint8_t addr, uint8_t sync); +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3745_select_page(uint8_t addr, uint8_t page); +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3745_set_value(int index, uint8_t value); +void is31fl3745_set_value_all(uint8_t value); + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3745_flush(void); + +#define IS31FL3745_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3745_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3745_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3745_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3745_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3745_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3745_SYNC_NONE 0b00 +#define IS31FL3745_SYNC_SLAVE 0b10 +#define IS31FL3745_SYNC_MASTER 0b11 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 + +#define CS1_SW5 0x48 +#define CS2_SW5 0x49 +#define CS3_SW5 0x4A +#define CS4_SW5 0x4B +#define CS5_SW5 0x4C +#define CS6_SW5 0x4D +#define CS7_SW5 0x4E +#define CS8_SW5 0x4F +#define CS9_SW5 0x50 +#define CS10_SW5 0x51 +#define CS11_SW5 0x52 +#define CS12_SW5 0x53 +#define CS13_SW5 0x54 +#define CS14_SW5 0x55 +#define CS15_SW5 0x56 +#define CS16_SW5 0x57 +#define CS17_SW5 0x58 +#define CS18_SW5 0x59 + +#define CS1_SW6 0x5A +#define CS2_SW6 0x5B +#define CS3_SW6 0x5C +#define CS4_SW6 0x5D +#define CS5_SW6 0x5E +#define CS6_SW6 0x5F +#define CS7_SW6 0x60 +#define CS8_SW6 0x61 +#define CS9_SW6 0x62 +#define CS10_SW6 0x63 +#define CS11_SW6 0x64 +#define CS12_SW6 0x65 +#define CS13_SW6 0x66 +#define CS14_SW6 0x67 +#define CS15_SW6 0x68 +#define CS16_SW6 0x69 +#define CS17_SW6 0x6A +#define CS18_SW6 0x6B + +#define CS1_SW7 0x6C +#define CS2_SW7 0x6D +#define CS3_SW7 0x6E +#define CS4_SW7 0x6F +#define CS5_SW7 0x70 +#define CS6_SW7 0x71 +#define CS7_SW7 0x72 +#define CS8_SW7 0x73 +#define CS9_SW7 0x74 +#define CS10_SW7 0x75 +#define CS11_SW7 0x76 +#define CS12_SW7 0x77 +#define CS13_SW7 0x78 +#define CS14_SW7 0x79 +#define CS15_SW7 0x7A +#define CS16_SW7 0x7B +#define CS17_SW7 0x7C +#define CS18_SW7 0x7D + +#define CS1_SW8 0x7E +#define CS2_SW8 0x7F +#define CS3_SW8 0x80 +#define CS4_SW8 0x81 +#define CS5_SW8 0x82 +#define CS6_SW8 0x83 +#define CS7_SW8 0x84 +#define CS8_SW8 0x85 +#define CS9_SW8 0x86 +#define CS10_SW8 0x87 +#define CS11_SW8 0x88 +#define CS12_SW8 0x89 +#define CS13_SW8 0x8A +#define CS14_SW8 0x8B +#define CS15_SW8 0x8C +#define CS16_SW8 0x8D +#define CS17_SW8 0x8E +#define CS18_SW8 0x8F diff --git a/drivers/led/issi/is31fl3745.c b/drivers/led/issi/is31fl3745.c new file mode 100644 index 0000000000..563fe3c115 --- /dev/null +++ b/drivers/led/issi/is31fl3745.c @@ -0,0 +1,220 @@ +#include "is31fl3745.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3745_PWM_REGISTER_COUNT 144 +#define IS31FL3745_SCALING_REGISTER_COUNT 144 + +#ifndef IS31FL3745_I2C_TIMEOUT +# define IS31FL3745_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3745_I2C_PERSISTENCE +# define IS31FL3745_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3745_CONFIGURATION +# define IS31FL3745_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3745_SW_PULLDOWN +# define IS31FL3745_SW_PULLDOWN IS31FL3745_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3745_CS_PULLUP +# define IS31FL3745_CS_PULLUP IS31FL3745_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3745_GLOBAL_CURRENT +# define IS31FL3745_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3745_SYNC_1 +# define IS31FL3745_SYNC_1 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_2 +# define IS31FL3745_SYNC_2 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_3 +# define IS31FL3745_SYNC_3 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_4 +# define IS31FL3745_SYNC_4 IS31FL3745_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3745_DRIVER_COUNT][IS31FL3745_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3745_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3745_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3745_DRIVER_COUNT][IS31FL3745_SCALING_REGISTER_COUNT]; + +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT); +#endif +} + +void is31fl3745_select_page(uint8_t addr, uint8_t page) { + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND_WRITE_LOCK, IS31FL3745_COMMAND_WRITE_LOCK_MAGIC); + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND, page); +} + +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT); +#endif + } +} + +void is31fl3745_init_drivers(void) { + i2c_init(); + + is31fl3745_init(IS31FL3745_I2C_ADDRESS_1, IS31FL3745_SYNC_1); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_2, IS31FL3745_SYNC_2); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_3, IS31FL3745_SYNC_3); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_4, IS31FL3745_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_scaling_register(i, 0xFF, 0xFF, 0xFF); + } + + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3745_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_FUNCTION); + + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_PULLDOWNUP, (IS31FL3745_SW_PULLDOWN << 4) | IS31FL3745_CS_PULLUP); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3745_GLOBAL_CURRENT); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_CONFIGURATION, IS31FL3745_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3745_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3745_led_t led; + if (index >= 0 && index < IS31FL3745_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + } +} + +void is31fl3745_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_color(i, red, green, blue); + } +} + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3745_led_t led; + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.r] = red; + g_scaling_registers[led.driver][led.g] = green; + g_scaling_registers[led.driver][led.b] = blue; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3745_flush(void) { + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3745.h b/drivers/led/issi/is31fl3745.h index 1e88aab4a8..f0bffb6c53 100644 --- a/drivers/led/issi/is31fl3745.h +++ b/drivers/led/issi/is31fl3745.h @@ -20,103 +20,107 @@ #pragma once -// This is a 7-bit address, that gets left-shifted and bit 0 -// set to 0 for write, 1 for read (as per I2C protocol) -// The address will vary depending on your wiring: -// 00 <-> GND -// 01 <-> SCL -// 10 <-> SDA -// 11 <-> VCC -// ADDR1 represents A1:A0 of the 7-bit address. -// ADDR2 represents A3:A2 of the 7-bit address. -// The result is: 0b010(ADDR2)(ADDR1) -#ifndef DRIVER_ADDR_1 -# define DRIVER_ADDR_1 0b0100000 -#endif +#include +#include +#include "progmem.h" +#include "util.h" -// Set defaults for Spread Spectrum Register -#ifndef ISSI_SSR_1 -# ifndef DRIVER_ADDR_2 -# define ISSI_SSR_1 0x00 -# else -# define ISSI_SSR_1 0xC0 -# endif -#endif -#ifndef ISSI_SSR_2 -# define ISSI_SSR_2 0x80 -#endif -#ifndef ISSI_SSR_3 -# define ISSI_SSR_3 0x80 -#endif -#ifndef ISSI_SSR_4 -# define ISSI_SSR_4 0x80 -#endif +#define IS31FL3745_REG_ID 0xFC -// Command Registers -#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE -#define ISSI_COMMANDREGISTER 0xFD -#define ISSI_IDREGISTER 0xFC -#define ISSI_REGISTER_UNLOCK 0xC5 +#define IS31FL3745_REG_COMMAND 0xFD -// Response Registers -#define ISSI_PAGE_PWM 0x00 -#define ISSI_PAGE_SCALING 0x01 -#define ISSI_PAGE_FUNCTION 0x02 +#define IS31FL3745_COMMAND_PWM 0x00 +#define IS31FL3745_COMMAND_SCALING 0x01 +#define IS31FL3745_COMMAND_FUNCTION 0x02 -// Registers under Function Register -#define ISSI_REG_CONFIGURATION 0x00 -#define ISSI_REG_GLOBALCURRENT 0x01 -#define ISSI_REG_PULLDOWNUP 0x02 -#define ISSI_REG_TEMP 0x24 -#define ISSI_REG_SSR 0x25 -#define ISSI_REG_RESET 0x2F +#define IS31FL3745_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3745_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3745_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3745_FUNCTION_REG_RESET 0x2F -// Set defaults for Function Registers -#ifndef ISSI_CONFIGURATION -# define ISSI_CONFIGURATION 0x31 -#endif -#ifndef ISSI_GLOBALCURRENT -# define ISSI_GLOBALCURRENT 0xFF -#endif -#ifndef ISSI_PULLDOWNUP -# define ISSI_PULLDOWNUP 0x33 -#endif -#ifndef ISSI_TEMP -# define ISSI_TEMP 0x00 -#endif +#define IS31FL3745_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3745_COMMAND_WRITE_LOCK_MAGIC 0xC5 -// Set defaults for Scaling registers -#ifndef ISSI_SCAL_RED -# define ISSI_SCAL_RED 0xFF -#endif -#ifndef ISSI_SCAL_BLUE -# define ISSI_SCAL_BLUE 0xFF -#endif -#ifndef ISSI_SCAL_GREEN -# define ISSI_SCAL_GREEN 0xFF +#define IS31FL3745_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3745_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3745_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3745_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3745_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3745_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3745_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3745_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3745_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3745_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3745_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3745_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3745_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3745_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3745_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3745_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(RGB_MATRIX_IS31FL3745) +# define IS31FL3745_LED_COUNT RGB_MATRIX_LED_COUNT #endif -#define ISSI_SCAL_RED_OFF 0x00 -#define ISSI_SCAL_GREEN_OFF 0x00 -#define ISSI_SCAL_BLUE_OFF 0x00 -#ifndef ISSI_SCAL_LED -# define ISSI_SCAL_LED 0xFF +#if defined(IS31FL3745_I2C_ADDRESS_4) +# define IS31FL3745_DRIVER_COUNT 4 +#elif defined(IS31FL3745_I2C_ADDRESS_3) +# define IS31FL3745_DRIVER_COUNT 3 +#elif defined(IS31FL3745_I2C_ADDRESS_2) +# define IS31FL3745_DRIVER_COUNT 2 +#elif defined(IS31FL3745_I2C_ADDRESS_1) +# define IS31FL3745_DRIVER_COUNT 1 #endif -#define ISSI_SCAL_LED_OFF 0x00 -// Set buffer sizes -#define ISSI_MAX_LEDS 144 -#define ISSI_SCALING_SIZE 144 -#define ISSI_PWM_TRF_SIZE 18 -#define ISSI_SCALING_TRF_SIZE 18 +typedef struct is31fl3745_led_t { + uint8_t driver : 2; + uint8_t r; + uint8_t g; + uint8_t b; +} PACKED is31fl3745_led_t; + +extern const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT]; + +void is31fl3745_init_drivers(void); +void is31fl3745_init(uint8_t addr, uint8_t sync); +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3745_select_page(uint8_t addr, uint8_t page); +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3745_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void is31fl3745_set_color_all(uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3745_flush(void); + +#define IS31FL3745_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3745_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3745_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3745_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3745_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3745_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PUR_8K_OHM 0b111 // 8 kOhm resistor -// Location of 1st bit for PWM and Scaling registers -#define ISSI_PWM_REG_1ST 0x01 -#define ISSI_SCL_REG_1ST 0x01 +#define IS31FL3745_SYNC_NONE 0b00 +#define IS31FL3745_SYNC_SLAVE 0b10 +#define IS31FL3745_SYNC_MASTER 0b11 -// Map CS SW locations to order in PWM / Scaling buffers -// This matches the ORDER in the Datasheet Register not the POSITION -// It will always count from 0x00 to (ISSI_MAX_LEDS - 1) #define CS1_SW1 0x00 #define CS2_SW1 0x01 #define CS3_SW1 0x02 diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h index e4ee372921..e5c4c52125 100644 --- a/drivers/led/issi/is31flcommon.h +++ b/drivers/led/issi/is31flcommon.h @@ -26,9 +26,7 @@ #include "util.h" // Which variant header file to use -#if defined(LED_MATRIX_IS31FL3745) || defined(RGB_MATRIX_IS31FL3745) -# include "is31fl3745.h" -#elif defined(LED_MATRIX_IS31FL3746A) || defined(RGB_MATRIX_IS31FL3746A) +#if defined(LED_MATRIX_IS31FL3746A) || defined(RGB_MATRIX_IS31FL3746A) # include "is31fl3746.h" #endif diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index d7b7c2b077..f244ae30e9 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -89,6 +89,14 @@ const led_matrix_driver_t led_matrix_driver = { .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(IS31FLCOMMON) const led_matrix_driver_t led_matrix_driver = { .init = IS31FL_simple_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index dc52dd460d..01821a83c4 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -21,6 +21,8 @@ # include "is31fl3742a-simple.h" #elif defined(LED_MATRIX_IS31FL3743A) # include "is31fl3743a-simple.h" +#elif defined(LED_MATRIX_IS31FL3745) +# include "is31fl3745-simple.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(LED_MATRIX_SNLED27351) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 5631c25964..0a41991efb 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -92,6 +92,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3743a_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3745) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3745_init_drivers, + .flush = is31fl3745_flush, + .set_color = is31fl3745_set_color, + .set_color_all = is31fl3745_set_color_all, +}; + #elif defined(IS31FLCOMMON) const rgb_matrix_driver_t rgb_matrix_driver = { .init = IS31FL_RGB_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 90fde67bdc..786f2fa37a 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -23,6 +23,8 @@ # include "is31fl3742a.h" #elif defined(RGB_MATRIX_IS31FL3743A) # include "is31fl3743a.h" +#elif defined(RGB_MATRIX_IS31FL3745) +# include "is31fl3745.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(RGB_MATRIX_SNLED27351) -- cgit v1.2.3 From 0a6913b68274c03302b09466a79b99efffd35e59 Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 1 Jan 2024 21:44:18 +1100 Subject: LED drivers: extract IS31FL3746A from IS31COMMON (#22637) --- builddefs/common_features.mk | 6 +- drivers/led/issi/is31fl3746.h | 198 ----------------------------- drivers/led/issi/is31fl3746a-simple.c | 208 +++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3746a-simple.h | 192 +++++++++++++++++++++++++++++ drivers/led/issi/is31fl3746a.c | 212 ++++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3746a.h | 194 +++++++++++++++++++++++++++++ drivers/led/issi/is31flcommon.h | 5 - quantum/led_matrix/led_matrix_drivers.c | 8 ++ quantum/led_matrix/led_matrix_drivers.h | 2 + quantum/rgb_matrix/rgb_matrix_drivers.c | 8 ++ quantum/rgb_matrix/rgb_matrix_drivers.h | 2 + 11 files changed, 828 insertions(+), 207 deletions(-) delete mode 100644 drivers/led/issi/is31fl3746.h create mode 100644 drivers/led/issi/is31fl3746a-simple.c create mode 100644 drivers/led/issi/is31fl3746a-simple.h create mode 100644 drivers/led/issi/is31fl3746a.c create mode 100644 drivers/led/issi/is31fl3746a.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index d5446a54c8..cfdc63f1d4 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -414,10 +414,9 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3746a-simple.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), snled27351) @@ -518,10 +517,9 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3746a) - OPT_DEFS += -DIS31FLCOMMON I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31flcommon.c + SRC += is31fl3746a.c endif ifeq ($(strip $(RGB_MATRIX_DRIVER)), snled27351) diff --git a/drivers/led/issi/is31fl3746.h b/drivers/led/issi/is31fl3746.h deleted file mode 100644 index f89f281533..0000000000 --- a/drivers/led/issi/is31fl3746.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -// This is a 7-bit address, that gets left-shifted and bit 0 -// set to 0 for write, 1 for read (as per I2C protocol) -// The address will vary depending on your wiring: -// 00 <-> GND -// 01 <-> SCL -// 10 <-> SDA -// 11 <-> VCC -// ADDR1 represents A1:A0 of the 7-bit address. -// ADDR2 represents A3:A2 of the 7-bit address. -// The result is: 0b110(ADDR2)(ADDR1) -#ifndef DRIVER_ADDR_1 -# define DRIVER_ADDR_1 0b1100000 -#endif - -// Set defaults for Spread Spectrum Register -#ifndef ISSI_SSR_1 -# define ISSI_SSR_1 0x00 -#endif -#ifndef ISSI_SSR_2 -# define ISSI_SSR_2 0x00 -#endif -#ifndef ISSI_SSR_3 -# define ISSI_SSR_3 0x00 -#endif -#ifndef ISSI_SSR_4 -# define ISSI_SSR_4 0x00 -#endif - -// Command Registers -#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE -#define ISSI_COMMANDREGISTER 0xFD -#define ISSI_IDREGISTER 0xFC -#define ISSI_REGISTER_UNLOCK 0xC5 - -// Response Registers -#define ISSI_PAGE_PWM 0x00 -#define ISSI_PAGE_SCALING 0x01 -#define ISSI_PAGE_FUNCTION 0x01 - -// Registers under Function Register -#define ISSI_REG_CONFIGURATION 0x50 -#define ISSI_REG_GLOBALCURRENT 0x51 -#define ISSI_REG_PULLDOWNUP 0x52 -#define ISSI_REG_TEMP 0x5F -#define ISSI_REG_SSR 0x60 -#define ISSI_REG_RESET 0x8F -#define ISSI_REG_PWM_ENABLE 0xE0 -#define ISSI_REG_PWM_SET 0xE2 - -// Set defaults for Function Registers -#ifndef ISSI_CONFIGURATION -# define ISSI_CONFIGURATION 0x01 -#endif -#ifndef ISSI_GLOBALCURRENT -# define ISSI_GLOBALCURRENT 0xFF -#endif -#ifndef ISSI_PULLDOWNUP -# define ISSI_PULLDOWNUP 0x33 -#endif -#ifndef ISSI_TEMP -# define ISSI_TEMP 0x00 -#endif -#ifndef ISSI_PWM_ENABLE -# define ISSI_PWM_ENABLE 0x00 -#endif -#ifndef ISSI_PWM_SET -# define ISSI_PWM_SET 0x00 -#endif - -// Set defaults for Scaling registers -#ifndef ISSI_SCAL_RED -# define ISSI_SCAL_RED 0xFF -#endif -#ifndef ISSI_SCAL_BLUE -# define ISSI_SCAL_BLUE 0xFF -#endif -#ifndef ISSI_SCAL_GREEN -# define ISSI_SCAL_GREEN 0xFF -#endif -#define ISSI_SCAL_RED_OFF 0x00 -#define ISSI_SCAL_GREEN_OFF 0x00 -#define ISSI_SCAL_BLUE_OFF 0x00 - -#ifndef ISSI_SCAL_LED -# define ISSI_SCAL_LED 0xFF -#endif -#define ISSI_SCAL_LED_OFF 0x00 - -// Set buffer sizes -#define ISSI_MAX_LEDS 72 -#define ISSI_SCALING_SIZE 72 -#define ISSI_PWM_TRF_SIZE 18 -#define ISSI_SCALING_TRF_SIZE 18 - -// Location of 1st bit for PWM and Scaling registers -#define ISSI_PWM_REG_1ST 0x01 -#define ISSI_SCL_REG_1ST 0x01 - -// Map CS SW locations to order in PWM / Scaling buffers -// This matches the ORDER in the Datasheet Register not the POSITION -// It will always count from 0x00 to (ISSI_MAX_LEDS - 1) -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 - -#define CS1_SW2 0x12 -#define CS2_SW2 0x13 -#define CS3_SW2 0x14 -#define CS4_SW2 0x15 -#define CS5_SW2 0x16 -#define CS6_SW2 0x17 -#define CS7_SW2 0x18 -#define CS8_SW2 0x19 -#define CS9_SW2 0x1A -#define CS10_SW2 0x1B -#define CS11_SW2 0x1C -#define CS12_SW2 0x1D -#define CS13_SW2 0x1E -#define CS14_SW2 0x1F -#define CS15_SW2 0x20 -#define CS16_SW2 0x21 -#define CS17_SW2 0x22 -#define CS18_SW2 0x23 - -#define CS1_SW3 0x24 -#define CS2_SW3 0x25 -#define CS3_SW3 0x26 -#define CS4_SW3 0x27 -#define CS5_SW3 0x28 -#define CS6_SW3 0x29 -#define CS7_SW3 0x2A -#define CS8_SW3 0x2B -#define CS9_SW3 0x2C -#define CS10_SW3 0x2D -#define CS11_SW3 0x2E -#define CS12_SW3 0x2F -#define CS13_SW3 0x30 -#define CS14_SW3 0x31 -#define CS15_SW3 0x32 -#define CS16_SW3 0x33 -#define CS17_SW3 0x34 -#define CS18_SW3 0x35 - -#define CS1_SW4 0x36 -#define CS2_SW4 0x37 -#define CS3_SW4 0x38 -#define CS4_SW4 0x39 -#define CS5_SW4 0x3A -#define CS6_SW4 0x3B -#define CS7_SW4 0x3C -#define CS8_SW4 0x3D -#define CS9_SW4 0x3E -#define CS10_SW4 0x3F -#define CS11_SW4 0x40 -#define CS12_SW4 0x41 -#define CS13_SW4 0x42 -#define CS14_SW4 0x43 -#define CS15_SW4 0x44 -#define CS16_SW4 0x45 -#define CS17_SW4 0x46 -#define CS18_SW4 0x47 diff --git a/drivers/led/issi/is31fl3746a-simple.c b/drivers/led/issi/is31fl3746a-simple.c new file mode 100644 index 0000000000..3a29c511cb --- /dev/null +++ b/drivers/led/issi/is31fl3746a-simple.c @@ -0,0 +1,208 @@ +#include "is31fl3746a-simple.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3746A_PWM_REGISTER_COUNT 72 +#define IS31FL3746A_SCALING_REGISTER_COUNT 72 + +#ifndef IS31FL3746A_I2C_TIMEOUT +# define IS31FL3746A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3746A_I2C_PERSISTENCE +# define IS31FL3746A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3746A_CONFIGURATION +# define IS31FL3746A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3746A_PWM_FREQUENCY +# define IS31FL3746A_PWM_FREQUENCY IS31FL3746A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3746A_SW_PULLDOWN +# define IS31FL3746A_SW_PULLDOWN IS31FL3746A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3746A_CS_PULLUP +# define IS31FL3746A_CS_PULLUP IS31FL3746A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3746A_GLOBAL_CURRENT +# define IS31FL3746A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_SCALING_REGISTER_COUNT]; + +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT); +#endif +} + +void is31fl3746a_select_page(uint8_t addr, uint8_t page) { + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND_WRITE_LOCK, IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND, page); +} + +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3746a_init_drivers(void) { + i2c_init(); + + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_1); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_2); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_3); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_scaling_register(i, 0xFF); + } + + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3746a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_FUNCTION); + + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PULLDOWNUP, (IS31FL3746A_SW_PULLDOWN << 4) | IS31FL3746A_CS_PULLUP); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3746A_GLOBAL_CURRENT); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_ENABLE, 0x01); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY, IS31FL3746A_PWM_FREQUENCY); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_CONFIGURATION, IS31FL3746A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3746a_set_color(int index, uint8_t value) { + is31fl3746a_led_t led; + if (index >= 0 && index < IS31FL3746A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3746a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_value(i, value); + } +} + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3746a_led_t led; + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3746a_flush(void) { + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3746a-simple.h b/drivers/led/issi/is31fl3746a-simple.h new file mode 100644 index 0000000000..eda644ad19 --- /dev/null +++ b/drivers/led/issi/is31fl3746a-simple.h @@ -0,0 +1,192 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3746A_REG_ID 0xFC + +#define IS31FL3746A_REG_COMMAND 0xFD + +#define IS31FL3746A_COMMAND_PWM 0x00 +#define IS31FL3746A_COMMAND_SCALING 0x01 +#define IS31FL3746A_COMMAND_FUNCTION 0x01 + +#define IS31FL3746A_FUNCTION_REG_CONFIGURATION 0x50 +#define IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT 0x51 +#define IS31FL3746A_FUNCTION_REG_PULLDOWNUP 0x52 +#define IS31FL3746A_FUNCTION_REG_TEMPERATURE 0x5F +#define IS31FL3746A_FUNCTION_REG_SPREAD_SPECTRUM 0x60 +#define IS31FL3746A_FUNCTION_REG_RESET 0x8F +#define IS31FL3746A_FUNCTION_REG_PWM_ENABLE 0xE0 +#define IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY 0xE2 + +#define IS31FL3746A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3746A_I2C_ADDRESS_GND_GND 0x60 +#define IS31FL3746A_I2C_ADDRESS_GND_SCL 0x61 +#define IS31FL3746A_I2C_ADDRESS_GND_SDA 0x62 +#define IS31FL3746A_I2C_ADDRESS_GND_VCC 0x63 +#define IS31FL3746A_I2C_ADDRESS_SCL_GND 0x64 +#define IS31FL3746A_I2C_ADDRESS_SCL_SCL 0x65 +#define IS31FL3746A_I2C_ADDRESS_SCL_SDA 0x66 +#define IS31FL3746A_I2C_ADDRESS_SCL_VCC 0x67 +#define IS31FL3746A_I2C_ADDRESS_SDA_GND 0x68 +#define IS31FL3746A_I2C_ADDRESS_SDA_SCL 0x69 +#define IS31FL3746A_I2C_ADDRESS_SDA_SDA 0x6A +#define IS31FL3746A_I2C_ADDRESS_SDA_VCC 0x6B +#define IS31FL3746A_I2C_ADDRESS_VCC_GND 0x6C +#define IS31FL3746A_I2C_ADDRESS_VCC_SCL 0x6D +#define IS31FL3746A_I2C_ADDRESS_VCC_SDA 0x6E +#define IS31FL3746A_I2C_ADDRESS_VCC_VCC 0x6F + +#if defined(LED_MATRIX_IS31FL3746A) +# define IS31FL3746A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +typedef struct is31fl3746a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3746a_led_t; + +extern const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT]; + +void is31fl3746a_init_drivers(void); +void is31fl3746a_init(uint8_t addr, uint8_t sync); +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3746a_select_page(uint8_t addr, uint8_t page); +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3746a_set_value(int index, uint8_t value); +void is31fl3746a_set_value_all(uint8_t value); + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3746a_flush(void); + +#define IS31FL3746A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3746A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3746A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PWM_FREQUENCY_29K_HZ 0b000 +#define IS31FL3746A_PWM_FREQUENCY_14K5_HZ 0b001 +#define IS31FL3746A_PWM_FREQUENCY_7K25_HZ 0b010 +#define IS31FL3746A_PWM_FREQUENCY_3K63_HZ 0b011 +#define IS31FL3746A_PWM_FREQUENCY_1K81_HZ 0b100 +#define IS31FL3746A_PWM_FREQUENCY_906_HZ 0b101 +#define IS31FL3746A_PWM_FREQUENCY_453_HZ 0b110 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 diff --git a/drivers/led/issi/is31fl3746a.c b/drivers/led/issi/is31fl3746a.c new file mode 100644 index 0000000000..5a3001f02f --- /dev/null +++ b/drivers/led/issi/is31fl3746a.c @@ -0,0 +1,212 @@ +#include "is31fl3746a.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3746A_PWM_REGISTER_COUNT 72 +#define IS31FL3746A_SCALING_REGISTER_COUNT 72 + +#ifndef IS31FL3746A_I2C_TIMEOUT +# define IS31FL3746A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3746A_I2C_PERSISTENCE +# define IS31FL3746A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3746A_CONFIGURATION +# define IS31FL3746A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3746A_PWM_FREQUENCY +# define IS31FL3746A_PWM_FREQUENCY IS31FL3746A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3746A_SW_PULLDOWN +# define IS31FL3746A_SW_PULLDOWN IS31FL3746A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3746A_CS_PULLUP +# define IS31FL3746A_CS_PULLUP IS31FL3746A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3746A_GLOBAL_CURRENT +# define IS31FL3746A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_SCALING_REGISTER_COUNT]; + +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT); +#endif +} + +void is31fl3746a_select_page(uint8_t addr, uint8_t page) { + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND_WRITE_LOCK, IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND, page); +} + +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3746a_init_drivers(void) { + i2c_init(); + + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_1); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_2); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_3); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_scaling_register(i, 0xFF, 0xFF, 0xFF); + } + + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3746a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_FUNCTION); + + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PULLDOWNUP, (IS31FL3746A_SW_PULLDOWN << 4) | IS31FL3746A_CS_PULLUP); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3746A_GLOBAL_CURRENT); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_ENABLE, 0x01); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY, IS31FL3746A_PWM_FREQUENCY); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_CONFIGURATION, IS31FL3746A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3746a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3746a_led_t led; + if (index >= 0 && index < IS31FL3746A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.r] == red && g_pwm_buffer[led.driver][led.g] == green && g_pwm_buffer[led.driver][led.b] == blue) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.r] = red; + g_pwm_buffer[led.driver][led.g] = green; + g_pwm_buffer[led.driver][led.b] = blue; + } +} + +void is31fl3746a_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_color(i, red, green, blue); + } +} + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3746a_led_t led; + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.r] = red; + g_scaling_registers[led.driver][led.g] = green; + g_scaling_registers[led.driver][led.b] = blue; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3746a_flush(void) { + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3746a.h b/drivers/led/issi/is31fl3746a.h new file mode 100644 index 0000000000..f335e98e82 --- /dev/null +++ b/drivers/led/issi/is31fl3746a.h @@ -0,0 +1,194 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3746A_REG_ID 0xFC + +#define IS31FL3746A_REG_COMMAND 0xFD + +#define IS31FL3746A_COMMAND_PWM 0x00 +#define IS31FL3746A_COMMAND_SCALING 0x01 +#define IS31FL3746A_COMMAND_FUNCTION 0x01 + +#define IS31FL3746A_FUNCTION_REG_CONFIGURATION 0x50 +#define IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT 0x51 +#define IS31FL3746A_FUNCTION_REG_PULLDOWNUP 0x52 +#define IS31FL3746A_FUNCTION_REG_TEMPERATURE 0x5F +#define IS31FL3746A_FUNCTION_REG_SPREAD_SPECTRUM 0x60 +#define IS31FL3746A_FUNCTION_REG_RESET 0x8F +#define IS31FL3746A_FUNCTION_REG_PWM_ENABLE 0xE0 +#define IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY 0xE2 + +#define IS31FL3746A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3746A_I2C_ADDRESS_GND_GND 0x60 +#define IS31FL3746A_I2C_ADDRESS_GND_SCL 0x61 +#define IS31FL3746A_I2C_ADDRESS_GND_SDA 0x62 +#define IS31FL3746A_I2C_ADDRESS_GND_VCC 0x63 +#define IS31FL3746A_I2C_ADDRESS_SCL_GND 0x64 +#define IS31FL3746A_I2C_ADDRESS_SCL_SCL 0x65 +#define IS31FL3746A_I2C_ADDRESS_SCL_SDA 0x66 +#define IS31FL3746A_I2C_ADDRESS_SCL_VCC 0x67 +#define IS31FL3746A_I2C_ADDRESS_SDA_GND 0x68 +#define IS31FL3746A_I2C_ADDRESS_SDA_SCL 0x69 +#define IS31FL3746A_I2C_ADDRESS_SDA_SDA 0x6A +#define IS31FL3746A_I2C_ADDRESS_SDA_VCC 0x6B +#define IS31FL3746A_I2C_ADDRESS_VCC_GND 0x6C +#define IS31FL3746A_I2C_ADDRESS_VCC_SCL 0x6D +#define IS31FL3746A_I2C_ADDRESS_VCC_SDA 0x6E +#define IS31FL3746A_I2C_ADDRESS_VCC_VCC 0x6F + +#if defined(RGB_MATRIX_IS31FL3746A) +# define IS31FL3746A_LED_COUNT RGB_MATRIX_LED_COUNT +#endif + +typedef struct is31fl3746a_led_t { + uint8_t driver : 2; + uint8_t r; + uint8_t g; + uint8_t b; +} PACKED is31fl3746a_led_t; + +extern const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT]; + +void is31fl3746a_init_drivers(void); +void is31fl3746a_init(uint8_t addr, uint8_t sync); +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3746a_select_page(uint8_t addr, uint8_t page); +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3746a_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void is31fl3746a_set_color_all(uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3746a_flush(void); + +#define IS31FL3746A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3746A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3746A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PWM_FREQUENCY_29K_HZ 0b000 +#define IS31FL3746A_PWM_FREQUENCY_14K5_HZ 0b001 +#define IS31FL3746A_PWM_FREQUENCY_7K25_HZ 0b010 +#define IS31FL3746A_PWM_FREQUENCY_3K63_HZ 0b011 +#define IS31FL3746A_PWM_FREQUENCY_1K81_HZ 0b100 +#define IS31FL3746A_PWM_FREQUENCY_906_HZ 0b101 +#define IS31FL3746A_PWM_FREQUENCY_453_HZ 0b110 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h index e5c4c52125..db7cd24b48 100644 --- a/drivers/led/issi/is31flcommon.h +++ b/drivers/led/issi/is31flcommon.h @@ -25,11 +25,6 @@ #include "progmem.h" #include "util.h" -// Which variant header file to use -#if defined(LED_MATRIX_IS31FL3746A) || defined(RGB_MATRIX_IS31FL3746A) -# include "is31fl3746.h" -#endif - #if defined DRIVER_ADDR_4 # define DRIVER_COUNT 4 #elif defined DRIVER_ADDR_3 diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index f244ae30e9..73e2513a11 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -97,6 +97,14 @@ const led_matrix_driver_t led_matrix_driver = { .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(IS31FLCOMMON) const led_matrix_driver_t led_matrix_driver = { .init = IS31FL_simple_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index 01821a83c4..4eab0ac748 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -23,6 +23,8 @@ # include "is31fl3743a-simple.h" #elif defined(LED_MATRIX_IS31FL3745) # include "is31fl3745-simple.h" +#elif defined(LED_MATRIX_IS31FL3746A) +# include "is31fl3746a-simple.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(LED_MATRIX_SNLED27351) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 0a41991efb..e3dd9beff7 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -100,6 +100,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3745_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3746A) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3746a_init_drivers, + .flush = is31fl3746a_flush, + .set_color = is31fl3746a_set_color, + .set_color_all = is31fl3746a_set_color_all, +}; + #elif defined(IS31FLCOMMON) const rgb_matrix_driver_t rgb_matrix_driver = { .init = IS31FL_RGB_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 786f2fa37a..07d376dfd7 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -25,6 +25,8 @@ # include "is31fl3743a.h" #elif defined(RGB_MATRIX_IS31FL3745) # include "is31fl3745.h" +#elif defined(RGB_MATRIX_IS31FL3746A) +# include "is31fl3746a.h" #elif defined(IS31FLCOMMON) # include "is31flcommon.h" #elif defined(RGB_MATRIX_SNLED27351) -- cgit v1.2.3 From f583d2fef01372f55057dcf44569252e3582d0f5 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 2 Jan 2024 16:26:01 +1100 Subject: Remove IS31FLCOMMON code (#22800) --- drivers/led/issi/is31flcommon.c | 329 ---------------------- drivers/led/issi/is31flcommon.h | 84 ------ keyboards/akko/5087/config.h | 6 +- keyboards/akko/5087/info.json | 2 +- keyboards/darkproject/kd83a_bfg_edition/config.h | 8 +- keyboards/darkproject/kd83a_bfg_edition/info.json | 2 +- keyboards/darkproject/kd87a_bfg_edition/config.h | 8 +- keyboards/darkproject/kd87a_bfg_edition/info.json | 2 +- keyboards/jukaie/jk01/config.h | 8 +- keyboards/jukaie/jk01/info.json | 2 +- keyboards/kprepublic/cstc40/config.h | 2 +- keyboards/orthograph/orthograph.c | 2 +- keyboards/phentech/rpk_001/config.h | 4 +- keyboards/phentech/rpk_001/info.json | 2 +- keyboards/projectd/75/ansi/config.h | 8 +- keyboards/projectd/75/ansi/info.json | 2 +- keyboards/qwertykeys/qk100/ansi/config.h | 2 +- quantum/led_matrix/led_matrix_drivers.c | 8 - quantum/led_matrix/led_matrix_drivers.h | 2 - quantum/rgb_matrix/rgb_matrix_drivers.c | 8 - quantum/rgb_matrix/rgb_matrix_drivers.h | 2 - 21 files changed, 30 insertions(+), 463 deletions(-) delete mode 100644 drivers/led/issi/is31flcommon.c delete mode 100644 drivers/led/issi/is31flcommon.h (limited to 'quantum') diff --git a/drivers/led/issi/is31flcommon.c b/drivers/led/issi/is31flcommon.c deleted file mode 100644 index 048db286b6..0000000000 --- a/drivers/led/issi/is31flcommon.c +++ /dev/null @@ -1,329 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31flcommon.h" -#include "i2c_master.h" -#include "wait.h" -#include - -// Set defaults for Timeout and Persistence -#ifndef ISSI_TIMEOUT -# define ISSI_TIMEOUT 100 -#endif -#ifndef ISSI_PERSISTENCE -# define ISSI_PERSISTENCE 0 -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the PWM & scaling registers. -// Storing them like this is optimal for I2C transfers to the registers. -uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS]; -bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false}; - -uint8_t g_scaling_buffer[DRIVER_COUNT][ISSI_SCALING_SIZE]; -bool g_scaling_buffer_update_required[DRIVER_COUNT] = {false}; - -// For writing of single register entry -void IS31FL_write_single_register(uint8_t addr, uint8_t reg, uint8_t data) { - // Set register address and register data ready to write - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if ISSI_PERSISTENCE > 0 - for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, ISSI_TIMEOUT); -#endif -} - -// For writing of mulitple register entries to make use of address auto increment -// Once the controller has been called and we have written the first bit of data -// the controller will move to the next register meaning we can write sequential blocks. -bool IS31FL_write_multi_registers(uint8_t addr, uint8_t *source_buffer, uint8_t buffer_size, uint8_t transfer_size, uint8_t start_reg_addr) { - // Split the buffer into chunks to transfer - for (int i = 0; i < buffer_size; i += transfer_size) { - // Set the first entry of transfer buffer to the first register we want to write - i2c_transfer_buffer[0] = i + start_reg_addr; - // Copy the section of our source buffer into the transfer buffer after first register address - memcpy(i2c_transfer_buffer + 1, source_buffer + i, transfer_size); - -#if ISSI_PERSISTENCE > 0 - for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, transfer_size + 1, ISSI_TIMEOUT) != 0) { - return false; - } -#endif - } - return true; -} - -void IS31FL_unlock_register(uint8_t addr, uint8_t page) { - // unlock the command register and select Page to write - IS31FL_write_single_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, ISSI_REGISTER_UNLOCK); - IS31FL_write_single_register(addr, ISSI_COMMANDREGISTER, page); -} - -void IS31FL_common_init(uint8_t addr, uint8_t ssr) { - // Setup phase, need to take out of software shutdown and configure - // ISSI_SSR_x is passed to allow Master / Slave setting where applicable - - // Unlock the command register & select Function Register - IS31FL_unlock_register(addr, ISSI_PAGE_FUNCTION); - // Set Configuration Register to remove Software shutdown - IS31FL_write_single_register(addr, ISSI_REG_CONFIGURATION, ISSI_CONFIGURATION); - // Set Golbal Current Control Register - IS31FL_write_single_register(addr, ISSI_REG_GLOBALCURRENT, ISSI_GLOBALCURRENT); - // Set Pull up & Down for SWx CSy - IS31FL_write_single_register(addr, ISSI_REG_PULLDOWNUP, ISSI_PULLDOWNUP); -// Set Tempature Status -#ifdef ISSI_REG_TEMP - IS31FL_write_single_register(addr, ISSI_REG_TEMP, ISSI_TEMP); -#endif - // Set Spread Spectrum Register, passed through as sets SYNC function - IS31FL_write_single_register(addr, ISSI_REG_SSR, ssr); -// Set PWM Frequency Enable Register if applicable -#ifdef ISSI_REG_PWM_ENABLE - IS31FL_write_single_register(addr, ISSI_REG_PWM_ENABLE, ISSI_PWM_ENABLE); -#endif -// Set PWM Frequency Register if applicable -#ifdef ISSI_REG_PWM_SET - IS31FL_write_single_register(addr, ISSI_REG_PWM_SET, ISSI_PWM_SET); -#endif - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void IS31FL_common_update_pwm_register(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - // Queue up the correct page - IS31FL_unlock_register(addr, ISSI_PAGE_PWM); - // Hand off the update to IS31FL_write_multi_registers - IS31FL_write_multi_registers(addr, g_pwm_buffer[index], ISSI_MAX_LEDS, ISSI_PWM_TRF_SIZE, ISSI_PWM_REG_1ST); - // Update flags that pwm_buffer has been updated - g_pwm_buffer_update_required[index] = false; - } -} - -#ifdef ISSI_MANUAL_SCALING -void IS31FL_set_manual_scaling_buffer(void) { - is31_led led; - is31_led scale; - for (int i = 0; i < ISSI_MANUAL_SCALING; i++) { - memcpy_P(&scale, (&g_is31_scaling[i]), sizeof(scale)); - -# ifdef RGB_MATRIX_ENABLE - if (scale.driver >= 0 && scale.driver < RGB_MATRIX_LED_COUNT) { - memcpy_P(&led, (&g_is31_leds[scale.driver]), sizeof(led)); - - if (g_scaling_buffer[led.driver][led.r] = scale.r && g_scaling_buffer[led.driver][led.g] = scale.g && g_scaling_buffer[led.driver][led.b] = scale.b) { - return; - } - g_scaling_buffer[led.driver][led.r] = scale.r; - g_scaling_buffer[led.driver][led.g] = scale.g; - g_scaling_buffer[led.driver][led.b] = scale.b; -# elif defined(LED_MATRIX_ENABLE) - if (scale.driver >= 0 && scale.driver < LED_MATRIX_LED_COUNT) { - memcpy_P(&led, (&g_is31_leds[scale.driver]), sizeof(led)); - - if (g_scaling_buffer[led.driver][led.v] == scale.v) { - return; - } - g_scaling_buffer[led.driver][led.v] = scale.v; -# endif - g_scaling_buffer_update_required[led.driver] = true; - } - } -} -#endif - -void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index) { - if (g_scaling_buffer_update_required[index]) { - // Queue up the correct page - IS31FL_unlock_register(addr, ISSI_PAGE_SCALING); - // Hand off the update to IS31FL_write_multi_registers - IS31FL_write_multi_registers(addr, g_scaling_buffer[index], ISSI_SCALING_SIZE, ISSI_SCALING_TRF_SIZE, ISSI_SCL_REG_1ST); - // Update flags that scaling_buffer has been updated - g_scaling_buffer_update_required[index] = false; - } -} - -void IS31FL_common_flush(void) { - IS31FL_common_update_pwm_register(DRIVER_ADDR_1, 0); -#if defined(DRIVER_ADDR_2) - IS31FL_common_update_pwm_register(DRIVER_ADDR_2, 1); -# if defined(DRIVER_ADDR_3) - IS31FL_common_update_pwm_register(DRIVER_ADDR_3, 2); -# if defined(DRIVER_ADDR_4) - IS31FL_common_update_pwm_register(DRIVER_ADDR_4, 3); -# endif -# endif -#endif -} - -#ifdef RGB_MATRIX_ENABLE -void IS31FL_RGB_init_drivers(void) { - i2c_init(); - - IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1); -# if defined(DRIVER_ADDR_2) - IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2); -# if defined(DRIVER_ADDR_3) - IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3); -# if defined(DRIVER_ADDR_4) - IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4); -# endif -# endif -# endif - - for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) { - IS31FL_RGB_set_scaling_buffer(i, true, true, true); - } - - // This actually updates the LED drivers -# ifdef ISSI_MANUAL_SCALING - IS31FL_set_manual_scaling_buffer(); -# endif - - IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0); -# if defined(DRIVER_ADDR_2) - IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1); -# if defined(DRIVER_ADDR_3) - IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2); -# if defined(DRIVER_ADDR_4) - IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3); -# endif -# endif -# endif -} - -// Colour is set by adjusting PWM register -void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { - if (index >= 0 && index < RGB_MATRIX_LED_COUNT) { - is31_led led; - memcpy_P(&led, (&g_is31_leds[index]), sizeof(led)); - - g_pwm_buffer[led.driver][led.r] = red; - g_pwm_buffer[led.driver][led.g] = green; - g_pwm_buffer[led.driver][led.b] = blue; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void IS31FL_RGB_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { - for (int i = 0; i < RGB_MATRIX_LED_COUNT; i++) { - IS31FL_RGB_set_color(i, red, green, blue); - } -} - -// Setup Scaling register that decides the peak current of each LED -void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blue) { - is31_led led; - memcpy_P(&led, (&g_is31_leds[index]), sizeof(led)); - if (red) { - g_scaling_buffer[led.driver][led.r] = ISSI_SCAL_RED; - } else { - g_scaling_buffer[led.driver][led.r] = ISSI_SCAL_RED_OFF; - } - if (green) { - g_scaling_buffer[led.driver][led.g] = ISSI_SCAL_GREEN; - } else { - g_scaling_buffer[led.driver][led.g] = ISSI_SCAL_GREEN_OFF; - } - if (blue) { - g_scaling_buffer[led.driver][led.b] = ISSI_SCAL_BLUE; - } else { - g_scaling_buffer[led.driver][led.b] = ISSI_SCAL_BLUE_OFF; - } - g_scaling_buffer_update_required[led.driver] = true; -} - -#elif defined(LED_MATRIX_ENABLE) -// LED Matrix Specific scripts -void IS31FL_simple_init_drivers(void) { - i2c_init(); - - IS31FL_common_init(DRIVER_ADDR_1, ISSI_SSR_1); -# if defined(DRIVER_ADDR_2) - IS31FL_common_init(DRIVER_ADDR_2, ISSI_SSR_2); -# if defined(DRIVER_ADDR_3) - IS31FL_common_init(DRIVER_ADDR_3, ISSI_SSR_3); -# if defined(DRIVER_ADDR_4) - IS31FL_common_init(DRIVER_ADDR_4, ISSI_SSR_4); -# endif -# endif -# endif - - for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) { - IS31FL_simple_set_scaling_buffer(i, true); - } - -// This actually updates the LED drivers -# ifdef ISSI_MANUAL_SCALING - IS31FL_set_manual_scaling_buffer(); -# endif - - IS31FL_common_update_scaling_register(DRIVER_ADDR_1, 0); -# if defined(DRIVER_ADDR_2) - IS31FL_common_update_scaling_register(DRIVER_ADDR_2, 1); -# if defined(DRIVER_ADDR_3) - IS31FL_common_update_scaling_register(DRIVER_ADDR_3, 2); -# if defined(DRIVER_ADDR_4) - IS31FL_common_update_scaling_register(DRIVER_ADDR_4, 3); -# endif -# endif -# endif -} - -void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value) { - is31_led led; - memcpy_P(&led, (&g_is31_leds[index]), sizeof(led)); - if (value) { - g_scaling_buffer[led.driver][led.v] = ISSI_SCAL_LED; - } else { - g_scaling_buffer[led.driver][led.v] = ISSI_SCAL_LED_OFF; - } - g_scaling_buffer_update_required[led.driver] = true; -} - -void IS31FL_simple_set_brightness(int index, uint8_t value) { - if (index >= 0 && index < LED_MATRIX_LED_COUNT) { - is31_led led; - memcpy_P(&led, (&g_is31_leds[index]), sizeof(led)); - - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void IS31FL_simple_set_brigntness_all(uint8_t value) { - for (int i = 0; i < LED_MATRIX_LED_COUNT; i++) { - IS31FL_simple_set_brightness(i, value); - } -} -#endif diff --git a/drivers/led/issi/is31flcommon.h b/drivers/led/issi/is31flcommon.h deleted file mode 100644 index db7cd24b48..0000000000 --- a/drivers/led/issi/is31flcommon.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#if defined DRIVER_ADDR_4 -# define DRIVER_COUNT 4 -#elif defined DRIVER_ADDR_3 -# define DRIVER_COUNT 3 -#elif defined DRIVER_ADDR_2 -# define DRIVER_COUNT 2 -#elif defined DRIVER_ADDR_1 -# define DRIVER_COUNT 1 -#endif - -#ifdef RGB_MATRIX_ENABLE -typedef struct is31_led { - uint8_t driver : 2; - uint8_t r; - uint8_t g; - uint8_t b; -} PACKED is31_led; - -extern const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT]; - -#elif defined(LED_MATRIX_ENABLE) -typedef struct is31_led { - uint8_t driver : 2; - uint8_t v; -} PACKED is31_led; - -extern const is31_led PROGMEM g_is31_leds[LED_MATRIX_LED_COUNT]; -#endif - -#ifdef ISSI_MANUAL_SCALING -extern const is31_led PROGMEM g_is31_scaling[]; -void IS31FL_set_manual_scaling_buffer(void); -#endif - -void IS31FL_write_single_register(uint8_t addr, uint8_t reg, uint8_t data); -bool IS31FL_write_multi_registers(uint8_t addr, uint8_t *source_buffer, uint8_t buffer_size, uint8_t transfer_size, uint8_t start_reg_addr); -void IS31FL_unlock_register(uint8_t addr, uint8_t page); -void IS31FL_common_init(uint8_t addr, uint8_t ssr); - -void IS31FL_common_update_pwm_register(uint8_t addr, uint8_t index); -void IS31FL_common_update_scaling_register(uint8_t addr, uint8_t index); - -void IS31FL_common_flush(void); - -#ifdef RGB_MATRIX_ENABLE -// RGB Matrix Specific scripts -void IS31FL_RGB_init_drivers(void); -void IS31FL_RGB_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); -void IS31FL_RGB_set_color_all(uint8_t red, uint8_t green, uint8_t blue); -void IS31FL_RGB_set_scaling_buffer(uint8_t index, bool red, bool green, bool blue); -#elif defined(LED_MATRIX_ENABLE) -// LED Matrix Specific scripts -void IS31FL_simple_init_drivers(void); -void IS31FL_simple_set_scaling_buffer(uint8_t index, bool value); -void IS31FL_simple_set_brightness(int index, uint8_t value); -void IS31FL_simple_set_brigntness_all(uint8_t value); -#endif diff --git a/keyboards/akko/5087/config.h b/keyboards/akko/5087/config.h index a3245e36bf..ceb9872738 100644 --- a/keyboards/akko/5087/config.h +++ b/keyboards/akko/5087/config.h @@ -35,8 +35,8 @@ #define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12 /* I2C Config for LED Driver */ -#define DRIVER_COUNT 2 -#define DRIVER_ADDR_1 0b1110100 -#define DRIVER_ADDR_2 0b1110111 +#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND +#define SNLED27351_I2C_ADDRESS_2 SNLED27351_I2C_ADDRESS_VDDIO + #define I2C1_OPMODE OPMODE_I2C #define I2C1_CLOCK_SPEED 400000 /* 400000 */ diff --git a/keyboards/akko/5087/info.json b/keyboards/akko/5087/info.json index f5249029b3..67ea54c169 100644 --- a/keyboards/akko/5087/info.json +++ b/keyboards/akko/5087/info.json @@ -40,7 +40,7 @@ "caps_lock": "A15" }, "rgb_matrix": { - "driver": "ckled2001", + "driver": "snled27351", "max_brightness": 180, "animations": { "breathing": true, diff --git a/keyboards/darkproject/kd83a_bfg_edition/config.h b/keyboards/darkproject/kd83a_bfg_edition/config.h index 0bc6f88ce1..0bfa9fde80 100644 --- a/keyboards/darkproject/kd83a_bfg_edition/config.h +++ b/keyboards/darkproject/kd83a_bfg_edition/config.h @@ -33,10 +33,10 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_CS_PIN_1 A15 +#define AW20216S_CS_PIN_2 B15 +#define AW20216S_EN_PIN_1 C13 +#define AW20216S_EN_PIN_2 C13 #define DRIVER_COUNT 2 #define DRIVER_1_LED_TOTAL 66 diff --git a/keyboards/darkproject/kd83a_bfg_edition/info.json b/keyboards/darkproject/kd83a_bfg_edition/info.json index 5795c11cca..3c0ce62c6c 100644 --- a/keyboards/darkproject/kd83a_bfg_edition/info.json +++ b/keyboards/darkproject/kd83a_bfg_edition/info.json @@ -80,7 +80,7 @@ "solid_multisplash": true }, "center_point": [76, 25], - "driver": "aw20216", + "driver": "aw20216s", "layout": [ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 }, { "flags": 4, "matrix": [2, 6], "x": 20, "y": 0 }, diff --git a/keyboards/darkproject/kd87a_bfg_edition/config.h b/keyboards/darkproject/kd87a_bfg_edition/config.h index a8173b53dd..19344dd8d8 100644 --- a/keyboards/darkproject/kd87a_bfg_edition/config.h +++ b/keyboards/darkproject/kd87a_bfg_edition/config.h @@ -32,10 +32,10 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_CS_PIN_1 A15 +#define AW20216S_CS_PIN_2 B15 +#define AW20216S_EN_PIN_1 C13 +#define AW20216S_EN_PIN_2 C13 #define DRIVER_1_LED_TOTAL 68 #define DRIVER_2_LED_TOTAL 54 diff --git a/keyboards/darkproject/kd87a_bfg_edition/info.json b/keyboards/darkproject/kd87a_bfg_edition/info.json index 94717c6baa..1d57b5c810 100644 --- a/keyboards/darkproject/kd87a_bfg_edition/info.json +++ b/keyboards/darkproject/kd87a_bfg_edition/info.json @@ -79,7 +79,7 @@ "solid_multisplash": true }, "center_point": [87, 35], - "driver": "aw20216", + "driver": "aw20216s", "layout": [ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 }, { "flags": 4, "matrix": [2, 6], "x": 20, "y": 0 }, diff --git a/keyboards/jukaie/jk01/config.h b/keyboards/jukaie/jk01/config.h index 0aaa2ef64c..6db4bc473e 100644 --- a/keyboards/jukaie/jk01/config.h +++ b/keyboards/jukaie/jk01/config.h @@ -32,10 +32,10 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_CS_PIN_1 A15 +#define AW20216S_CS_PIN_2 B15 +#define AW20216S_EN_PIN_1 C13 +#define AW20216S_EN_PIN_2 C13 #define DRIVER_1_LED_TOTAL 66 #define DRIVER_2_LED_TOTAL 19 diff --git a/keyboards/jukaie/jk01/info.json b/keyboards/jukaie/jk01/info.json index c53a59a5a3..671e7b08a7 100644 --- a/keyboards/jukaie/jk01/info.json +++ b/keyboards/jukaie/jk01/info.json @@ -87,7 +87,7 @@ "solid_multisplash": true }, "center_point": [76, 25], - "driver": "aw20216", + "driver": "aw20216s", "layout": [ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 }, { "flags": 4, "matrix": [2, 6], "x": 20, "y": 0 }, diff --git a/keyboards/kprepublic/cstc40/config.h b/keyboards/kprepublic/cstc40/config.h index 5e05574672..c26f20c74d 100644 --- a/keyboards/kprepublic/cstc40/config.h +++ b/keyboards/kprepublic/cstc40/config.h @@ -5,7 +5,7 @@ #define I2C1_SDA_PIN B9 #define I2C1_SCL_PIN B8 -#define DRIVER_ADDR_1 0b1010000 +#define IS31FL3733_I2C_ADDRESS_1 IS31FL3733_I2C_ADDRESS_GND_GND #define RGB_MATRIX_LED_COUNT 47 #define RGB_MATRIX_FRAMEBUFFER_EFFECTS diff --git a/keyboards/orthograph/orthograph.c b/keyboards/orthograph/orthograph.c index 43db344bbc..04d2582937 100644 --- a/keyboards/orthograph/orthograph.c +++ b/keyboards/orthograph/orthograph.c @@ -17,7 +17,7 @@ #include "quantum.h" #ifdef RGB_MATRIX_ENABLE -const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = { +const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = { /* Refer to IS31 manual for these locations * driver * | R location diff --git a/keyboards/phentech/rpk_001/config.h b/keyboards/phentech/rpk_001/config.h index ad95ed6f10..097edc2bf7 100644 --- a/keyboards/phentech/rpk_001/config.h +++ b/keyboards/phentech/rpk_001/config.h @@ -4,8 +4,8 @@ #pragma once /* RGB Config */ -#define DRIVER_1_CS B6 -#define DRIVER_1_EN B7 +#define AW20216S_CS_PIN_1 B6 +#define AW20216S_EN_PIN_1 B7 #define RGB_MATRIX_LED_COUNT 67 /* SPI Config */ diff --git a/keyboards/phentech/rpk_001/info.json b/keyboards/phentech/rpk_001/info.json index d047c36456..fee1f53806 100644 --- a/keyboards/phentech/rpk_001/info.json +++ b/keyboards/phentech/rpk_001/info.json @@ -42,7 +42,7 @@ "on_state": 0 }, "rgb_matrix": { - "driver": "aw20216", + "driver": "aw20216s", "animations": { "solid_color": true, "alphas_mods": true, diff --git a/keyboards/projectd/75/ansi/config.h b/keyboards/projectd/75/ansi/config.h index 250abf1724..6446fec445 100644 --- a/keyboards/projectd/75/ansi/config.h +++ b/keyboards/projectd/75/ansi/config.h @@ -32,10 +32,10 @@ #define SPI_MOSI_PIN A7 #define SPI_MISO_PIN A6 -#define DRIVER_1_CS A15 -#define DRIVER_2_CS B15 -#define DRIVER_1_EN C13 -#define DRIVER_2_EN C13 +#define AW20216S_CS_PIN_1 A15 +#define AW20216S_CS_PIN_2 B15 +#define AW20216S_EN_PIN_1 C13 +#define AW20216S_EN_PIN_2 C13 #define DRIVER_1_LED_TOTAL 70 #define DRIVER_2_LED_TOTAL 17 diff --git a/keyboards/projectd/75/ansi/info.json b/keyboards/projectd/75/ansi/info.json index 0e137de614..b34f092b09 100644 --- a/keyboards/projectd/75/ansi/info.json +++ b/keyboards/projectd/75/ansi/info.json @@ -81,7 +81,7 @@ "solid_multisplash": true }, "center_point": [78, 20], - "driver": "aw20216", + "driver": "aw20216s", "layout": [ { "flags": 4, "matrix": [1, 3], "x": 0, "y": 0 }, { "flags": 4, "matrix": [2, 6], "x": 12.5, "y": 0 }, diff --git a/keyboards/qwertykeys/qk100/ansi/config.h b/keyboards/qwertykeys/qk100/ansi/config.h index c210fdf1eb..a80816345c 100644 --- a/keyboards/qwertykeys/qk100/ansi/config.h +++ b/keyboards/qwertykeys/qk100/ansi/config.h @@ -38,5 +38,5 @@ along with this program. If not, see . # define RGB_MATRIX_LED_PROCESS_LIMIT 4 # define RGB_MATRIX_LED_FLUSH_LIMIT 26 # define RGB_MATRIX_STARTUP_VAL 128 -# define DRIVER_ADDR_1 0b0110000 +# define IS31FL3741_I2C_ADDRESS_1 IS31FL3741_I2C_ADDRESS_GND # define RGB_MATRIX_LED_COUNT 101 \ No newline at end of file diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index 73e2513a11..b866383481 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -105,14 +105,6 @@ const led_matrix_driver_t led_matrix_driver = { .set_value_all = is31fl3746a_set_value_all, }; -#elif defined(IS31FLCOMMON) -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, -}; - #elif defined(LED_MATRIX_SNLED27351) const led_matrix_driver_t led_matrix_driver = { .init = snled27351_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index 4eab0ac748..79d3cebead 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -25,8 +25,6 @@ # include "is31fl3745-simple.h" #elif defined(LED_MATRIX_IS31FL3746A) # include "is31fl3746a-simple.h" -#elif defined(IS31FLCOMMON) -# include "is31flcommon.h" #elif defined(LED_MATRIX_SNLED27351) # include "snled27351-simple.h" #endif diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index e3dd9beff7..b5e539657d 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -108,14 +108,6 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3746a_set_color_all, }; -#elif defined(IS31FLCOMMON) -const rgb_matrix_driver_t rgb_matrix_driver = { - .init = IS31FL_RGB_init_drivers, - .flush = IS31FL_common_flush, - .set_color = IS31FL_RGB_set_color, - .set_color_all = IS31FL_RGB_set_color_all, -}; - #elif defined(RGB_MATRIX_SNLED27351) const rgb_matrix_driver_t rgb_matrix_driver = { .init = snled27351_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 07d376dfd7..8f919b1b3c 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -27,8 +27,6 @@ # include "is31fl3745.h" #elif defined(RGB_MATRIX_IS31FL3746A) # include "is31fl3746a.h" -#elif defined(IS31FLCOMMON) -# include "is31flcommon.h" #elif defined(RGB_MATRIX_SNLED27351) # include "snled27351.h" #elif defined(RGB_MATRIX_WS2812) -- cgit v1.2.3 From 597de0e29841aa6c738eb40454620bc30d44099a Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 4 Jan 2024 17:05:37 +1100 Subject: LED drivers: rename "simple" to "mono" (#22814) --- builddefs/common_features.mk | 22 +- docs/feature_led_matrix.md | 2 +- drivers/led/issi/is31fl3218-mono.c | 146 +++++++++ drivers/led/issi/is31fl3218-mono.h | 75 +++++ drivers/led/issi/is31fl3218-simple.c | 146 --------- drivers/led/issi/is31fl3218-simple.h | 75 ----- drivers/led/issi/is31fl3731-mono.c | 239 ++++++++++++++ drivers/led/issi/is31fl3731-mono.h | 283 +++++++++++++++++ drivers/led/issi/is31fl3731-simple.c | 239 -------------- drivers/led/issi/is31fl3731-simple.h | 283 ----------------- drivers/led/issi/is31fl3733-mono.c | 270 ++++++++++++++++ drivers/led/issi/is31fl3733-mono.h | 367 ++++++++++++++++++++++ drivers/led/issi/is31fl3733-simple.c | 270 ---------------- drivers/led/issi/is31fl3733-simple.h | 367 ---------------------- drivers/led/issi/is31fl3736-mono.c | 244 +++++++++++++++ drivers/led/issi/is31fl3736-mono.h | 262 ++++++++++++++++ drivers/led/issi/is31fl3736-simple.c | 244 --------------- drivers/led/issi/is31fl3736-simple.h | 262 ---------------- drivers/led/issi/is31fl3737-mono.c | 241 ++++++++++++++ drivers/led/issi/is31fl3737-mono.h | 300 ++++++++++++++++++ drivers/led/issi/is31fl3737-simple.c | 241 -------------- drivers/led/issi/is31fl3737-simple.h | 300 ------------------ drivers/led/issi/is31fl3741-mono.c | 271 ++++++++++++++++ drivers/led/issi/is31fl3741-mono.h | 517 +++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3741-simple.c | 271 ---------------- drivers/led/issi/is31fl3741-simple.h | 517 ------------------------------- drivers/led/issi/is31fl3742a-mono.c | 206 ++++++++++++ drivers/led/issi/is31fl3742a-mono.h | 297 ++++++++++++++++++ drivers/led/issi/is31fl3742a-simple.c | 206 ------------ drivers/led/issi/is31fl3742a-simple.h | 297 ------------------ drivers/led/issi/is31fl3743a-mono.c | 216 +++++++++++++ drivers/led/issi/is31fl3743a-mono.h | 329 ++++++++++++++++++++ drivers/led/issi/is31fl3743a-simple.c | 216 ------------- drivers/led/issi/is31fl3743a-simple.h | 329 -------------------- drivers/led/issi/is31fl3745-mono.c | 216 +++++++++++++ drivers/led/issi/is31fl3745-mono.h | 272 ++++++++++++++++ drivers/led/issi/is31fl3745-simple.c | 216 ------------- drivers/led/issi/is31fl3745-simple.h | 272 ---------------- drivers/led/issi/is31fl3746a-mono.c | 208 +++++++++++++ drivers/led/issi/is31fl3746a-mono.h | 192 ++++++++++++ drivers/led/issi/is31fl3746a-simple.c | 208 ------------- drivers/led/issi/is31fl3746a-simple.h | 192 ------------ drivers/led/snled27351-mono.c | 272 ++++++++++++++++ drivers/led/snled27351-mono.h | 381 +++++++++++++++++++++++ drivers/led/snled27351-simple.c | 272 ---------------- drivers/led/snled27351-simple.h | 381 ----------------------- keyboards/fallacy/indicators.c | 2 +- keyboards/fallacy/rules.mk | 2 +- keyboards/wilba_tech/wt60_a/rules.mk | 2 +- keyboards/wilba_tech/wt65_a/rules.mk | 2 +- keyboards/wilba_tech/wt65_b/rules.mk | 2 +- keyboards/wilba_tech/wt75_a/rules.mk | 2 +- keyboards/wilba_tech/wt75_b/rules.mk | 2 +- keyboards/wilba_tech/wt75_c/rules.mk | 2 +- keyboards/wilba_tech/wt80_a/rules.mk | 2 +- keyboards/wilba_tech/wt_mono_backlight.c | 2 +- quantum/led_matrix/led_matrix_drivers.h | 22 +- 57 files changed, 5837 insertions(+), 5837 deletions(-) create mode 100644 drivers/led/issi/is31fl3218-mono.c create mode 100644 drivers/led/issi/is31fl3218-mono.h delete mode 100644 drivers/led/issi/is31fl3218-simple.c delete mode 100644 drivers/led/issi/is31fl3218-simple.h create mode 100644 drivers/led/issi/is31fl3731-mono.c create mode 100644 drivers/led/issi/is31fl3731-mono.h delete mode 100644 drivers/led/issi/is31fl3731-simple.c delete mode 100644 drivers/led/issi/is31fl3731-simple.h create mode 100644 drivers/led/issi/is31fl3733-mono.c create mode 100644 drivers/led/issi/is31fl3733-mono.h delete mode 100644 drivers/led/issi/is31fl3733-simple.c delete mode 100644 drivers/led/issi/is31fl3733-simple.h create mode 100644 drivers/led/issi/is31fl3736-mono.c create mode 100644 drivers/led/issi/is31fl3736-mono.h delete mode 100644 drivers/led/issi/is31fl3736-simple.c delete mode 100644 drivers/led/issi/is31fl3736-simple.h create mode 100644 drivers/led/issi/is31fl3737-mono.c create mode 100644 drivers/led/issi/is31fl3737-mono.h delete mode 100644 drivers/led/issi/is31fl3737-simple.c delete mode 100644 drivers/led/issi/is31fl3737-simple.h create mode 100644 drivers/led/issi/is31fl3741-mono.c create mode 100644 drivers/led/issi/is31fl3741-mono.h delete mode 100644 drivers/led/issi/is31fl3741-simple.c delete mode 100644 drivers/led/issi/is31fl3741-simple.h create mode 100644 drivers/led/issi/is31fl3742a-mono.c create mode 100644 drivers/led/issi/is31fl3742a-mono.h delete mode 100644 drivers/led/issi/is31fl3742a-simple.c delete mode 100644 drivers/led/issi/is31fl3742a-simple.h create mode 100644 drivers/led/issi/is31fl3743a-mono.c create mode 100644 drivers/led/issi/is31fl3743a-mono.h delete mode 100644 drivers/led/issi/is31fl3743a-simple.c delete mode 100644 drivers/led/issi/is31fl3743a-simple.h create mode 100644 drivers/led/issi/is31fl3745-mono.c create mode 100644 drivers/led/issi/is31fl3745-mono.h delete mode 100644 drivers/led/issi/is31fl3745-simple.c delete mode 100644 drivers/led/issi/is31fl3745-simple.h create mode 100644 drivers/led/issi/is31fl3746a-mono.c create mode 100644 drivers/led/issi/is31fl3746a-mono.h delete mode 100644 drivers/led/issi/is31fl3746a-simple.c delete mode 100644 drivers/led/issi/is31fl3746a-simple.h create mode 100644 drivers/led/snled27351-mono.c create mode 100644 drivers/led/snled27351-mono.h delete mode 100644 drivers/led/snled27351-simple.c delete mode 100644 drivers/led/snled27351-simple.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index cfdc63f1d4..a6193991f8 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -362,67 +362,67 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3218) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3218-simple.c + SRC += is31fl3218-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3731) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3731-simple.c + SRC += is31fl3731-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3733) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3733-simple.c + SRC += is31fl3733-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3736) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3736-simple.c + SRC += is31fl3736-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3737) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3737-simple.c + SRC += is31fl3737-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3741) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3741-simple.c + SRC += is31fl3741-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3742a) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3742a-simple.c + SRC += is31fl3742a-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3743a) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3743a-simple.c + SRC += is31fl3743a-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3745) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3745-simple.c + SRC += is31fl3745-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3746a) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi - SRC += is31fl3746a-simple.c + SRC += is31fl3746a-mono.c endif ifeq ($(strip $(LED_MATRIX_DRIVER)), snled27351) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led - SRC += snled27351-simple.c + SRC += snled27351-mono.c endif endif diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index 9b23ce8884..080a693d18 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -65,7 +65,7 @@ const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = { } ``` -Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/led/issi/is31fl3731-simple.h`. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` ). +Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](https://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/led/issi/is31fl3731-mono.h`. The `driver` is the index of the driver you defined in your `config.h` (`0`, `1`, `2`, or `3` ). --- ### IS31FLCOMMON :id=is31flcommon diff --git a/drivers/led/issi/is31fl3218-mono.c b/drivers/led/issi/is31fl3218-mono.c new file mode 100644 index 0000000000..ad818f98b1 --- /dev/null +++ b/drivers/led/issi/is31fl3218-mono.c @@ -0,0 +1,146 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "is31fl3218-mono.h" +#include +#include "i2c_master.h" + +#define IS31FL3218_PWM_REGISTER_COUNT 18 +#define IS31FL3218_LED_CONTROL_REGISTER_COUNT 3 + +#ifndef IS31FL3218_I2C_TIMEOUT +# define IS31FL3218_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3218_I2C_PERSISTENCE +# define IS31FL3218_I2C_PERSISTENCE 0 +#endif + +uint8_t i2c_transfer_buffer[20]; + +// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining. +uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required = false; + +uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required = false; + +void is31fl3218_write_register(uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; +#if IS31FL3218_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) { + if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT); +#endif +} + +void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) { + i2c_transfer_buffer[0] = IS31FL3218_REG_PWM; + memcpy(i2c_transfer_buffer + 1, pwm_buffer, 18); + +#if IS31FL3218_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) { + i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT); + } +#else + i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT); +#endif +} + +void is31fl3218_init(void) { + i2c_init(); + + // In case we ever want to reinitialize (?) + is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00); + + // Turn off software shutdown + is31fl3218_write_register(IS31FL3218_REG_SHUTDOWN, 0x01); + + // Set all PWM values to zero + for (uint8_t i = 0; i < IS31FL3218_PWM_REGISTER_COUNT; i++) { + is31fl3218_write_register(IS31FL3218_REG_PWM + i, 0x00); + } + + // turn off all LEDs in the LED control register + for (uint8_t i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, 0x00); + } + + // Load PWM registers and LED Control register data + is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01); + + for (int i = 0; i < IS31FL3218_LED_COUNT; i++) { + is31fl3218_set_led_control_register(i, true); + } + + is31fl3218_update_led_control_registers(); +} + +void is31fl3218_set_value(int index, uint8_t value) { + is31fl3218_led_t led; + if (index >= 0 && index < IS31FL3218_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); + } + if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) { + return; + } + g_pwm_buffer[led.v - IS31FL3218_REG_PWM] = value; + g_pwm_buffer_update_required = true; +} + +void is31fl3218_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3218_LED_COUNT; i++) { + is31fl3218_set_value(i, value); + } +} + +void is31fl3218_set_led_control_register(uint8_t index, bool value) { + is31fl3218_led_t led; + memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); + + uint8_t control_register = (led.v - IS31FL3218_REG_PWM) / 6; + uint8_t bit_value = (led.v - IS31FL3218_REG_PWM) % 6; + + if (value) { + g_led_control_registers[control_register] |= (1 << bit_value); + } else { + g_led_control_registers[control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required = true; +} + +void is31fl3218_update_pwm_buffers(void) { + if (g_pwm_buffer_update_required) { + is31fl3218_write_pwm_buffer(g_pwm_buffer); + // Load PWM registers and LED Control register data + is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01); + + g_pwm_buffer_update_required = false; + } +} + +void is31fl3218_update_led_control_registers(void) { + if (g_led_control_registers_update_required) { + for (int i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, g_led_control_registers[i]); + } + + g_led_control_registers_update_required = false; + } +} diff --git a/drivers/led/issi/is31fl3218-mono.h b/drivers/led/issi/is31fl3218-mono.h new file mode 100644 index 0000000000..e0a71f1387 --- /dev/null +++ b/drivers/led/issi/is31fl3218-mono.h @@ -0,0 +1,75 @@ +/* Copyright 2018 Jason Williams (Wilba) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3218_REG_SHUTDOWN 0x00 +#define IS31FL3218_REG_PWM 0x01 +#define IS31FL3218_REG_LED_CONTROL_1 0x13 +#define IS31FL3218_REG_LED_CONTROL_2 0x14 +#define IS31FL3218_REG_LED_CONTROL_3 0x15 +#define IS31FL3218_REG_UPDATE 0x16 +#define IS31FL3218_REG_RESET 0x17 + +#define IS31FL3218_I2C_ADDRESS 0x54 + +#if defined(LED_MATRIX_IS31FL3218) +# define IS31FL3218_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +typedef struct is31fl3218_led_t { + uint8_t v; +} PACKED is31fl3218_led_t; + +extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT]; + +void is31fl3218_init(void); + +void is31fl3218_write_register(uint8_t reg, uint8_t data); + +void is31fl3218_set_value(int index, uint8_t value); + +void is31fl3218_set_value_all(uint8_t value); + +void is31fl3218_set_led_control_register(uint8_t index, bool value); + +void is31fl3218_update_pwm_buffers(void); + +void is31fl3218_update_led_control_registers(void); + +#define OUT1 0x01 +#define OUT2 0x02 +#define OUT3 0x03 +#define OUT4 0x04 +#define OUT5 0x05 +#define OUT6 0x06 +#define OUT7 0x07 +#define OUT8 0x08 +#define OUT9 0x09 +#define OUT10 0x0A +#define OUT11 0x0B +#define OUT12 0x0C +#define OUT13 0x0D +#define OUT14 0x0E +#define OUT15 0x0F +#define OUT16 0x10 +#define OUT17 0x11 +#define OUT18 0x12 diff --git a/drivers/led/issi/is31fl3218-simple.c b/drivers/led/issi/is31fl3218-simple.c deleted file mode 100644 index d9faa8677d..0000000000 --- a/drivers/led/issi/is31fl3218-simple.c +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "is31fl3218-simple.h" -#include -#include "i2c_master.h" - -#define IS31FL3218_PWM_REGISTER_COUNT 18 -#define IS31FL3218_LED_CONTROL_REGISTER_COUNT 3 - -#ifndef IS31FL3218_I2C_TIMEOUT -# define IS31FL3218_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3218_I2C_PERSISTENCE -# define IS31FL3218_I2C_PERSISTENCE 0 -#endif - -uint8_t i2c_transfer_buffer[20]; - -// IS31FL3218 has 18 PWM outputs and a fixed I2C address, so no chaining. -uint8_t g_pwm_buffer[IS31FL3218_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required = false; - -uint8_t g_led_control_registers[IS31FL3218_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required = false; - -void is31fl3218_write_register(uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; -#if IS31FL3218_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) { - if (i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 2, IS31FL3218_I2C_TIMEOUT); -#endif -} - -void is31fl3218_write_pwm_buffer(uint8_t *pwm_buffer) { - i2c_transfer_buffer[0] = IS31FL3218_REG_PWM; - memcpy(i2c_transfer_buffer + 1, pwm_buffer, 18); - -#if IS31FL3218_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3218_I2C_PERSISTENCE; i++) { - i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT); - } -#else - i2c_transmit(IS31FL3218_I2C_ADDRESS << 1, i2c_transfer_buffer, 19, IS31FL3218_I2C_TIMEOUT); -#endif -} - -void is31fl3218_init(void) { - i2c_init(); - - // In case we ever want to reinitialize (?) - is31fl3218_write_register(IS31FL3218_REG_RESET, 0x00); - - // Turn off software shutdown - is31fl3218_write_register(IS31FL3218_REG_SHUTDOWN, 0x01); - - // Set all PWM values to zero - for (uint8_t i = 0; i < IS31FL3218_PWM_REGISTER_COUNT; i++) { - is31fl3218_write_register(IS31FL3218_REG_PWM + i, 0x00); - } - - // turn off all LEDs in the LED control register - for (uint8_t i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, 0x00); - } - - // Load PWM registers and LED Control register data - is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01); - - for (int i = 0; i < IS31FL3218_LED_COUNT; i++) { - is31fl3218_set_led_control_register(i, true); - } - - is31fl3218_update_led_control_registers(); -} - -void is31fl3218_set_value(int index, uint8_t value) { - is31fl3218_led_t led; - if (index >= 0 && index < IS31FL3218_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); - } - if (g_pwm_buffer[led.v - IS31FL3218_REG_PWM] == value) { - return; - } - g_pwm_buffer[led.v - IS31FL3218_REG_PWM] = value; - g_pwm_buffer_update_required = true; -} - -void is31fl3218_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3218_LED_COUNT; i++) { - is31fl3218_set_value(i, value); - } -} - -void is31fl3218_set_led_control_register(uint8_t index, bool value) { - is31fl3218_led_t led; - memcpy_P(&led, (&g_is31fl3218_leds[index]), sizeof(led)); - - uint8_t control_register = (led.v - IS31FL3218_REG_PWM) / 6; - uint8_t bit_value = (led.v - IS31FL3218_REG_PWM) % 6; - - if (value) { - g_led_control_registers[control_register] |= (1 << bit_value); - } else { - g_led_control_registers[control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required = true; -} - -void is31fl3218_update_pwm_buffers(void) { - if (g_pwm_buffer_update_required) { - is31fl3218_write_pwm_buffer(g_pwm_buffer); - // Load PWM registers and LED Control register data - is31fl3218_write_register(IS31FL3218_REG_UPDATE, 0x01); - - g_pwm_buffer_update_required = false; - } -} - -void is31fl3218_update_led_control_registers(void) { - if (g_led_control_registers_update_required) { - for (int i = 0; i < IS31FL3218_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3218_write_register(IS31FL3218_REG_LED_CONTROL_1 + i, g_led_control_registers[i]); - } - - g_led_control_registers_update_required = false; - } -} diff --git a/drivers/led/issi/is31fl3218-simple.h b/drivers/led/issi/is31fl3218-simple.h deleted file mode 100644 index e0a71f1387..0000000000 --- a/drivers/led/issi/is31fl3218-simple.h +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#define IS31FL3218_REG_SHUTDOWN 0x00 -#define IS31FL3218_REG_PWM 0x01 -#define IS31FL3218_REG_LED_CONTROL_1 0x13 -#define IS31FL3218_REG_LED_CONTROL_2 0x14 -#define IS31FL3218_REG_LED_CONTROL_3 0x15 -#define IS31FL3218_REG_UPDATE 0x16 -#define IS31FL3218_REG_RESET 0x17 - -#define IS31FL3218_I2C_ADDRESS 0x54 - -#if defined(LED_MATRIX_IS31FL3218) -# define IS31FL3218_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -typedef struct is31fl3218_led_t { - uint8_t v; -} PACKED is31fl3218_led_t; - -extern const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT]; - -void is31fl3218_init(void); - -void is31fl3218_write_register(uint8_t reg, uint8_t data); - -void is31fl3218_set_value(int index, uint8_t value); - -void is31fl3218_set_value_all(uint8_t value); - -void is31fl3218_set_led_control_register(uint8_t index, bool value); - -void is31fl3218_update_pwm_buffers(void); - -void is31fl3218_update_led_control_registers(void); - -#define OUT1 0x01 -#define OUT2 0x02 -#define OUT3 0x03 -#define OUT4 0x04 -#define OUT5 0x05 -#define OUT6 0x06 -#define OUT7 0x07 -#define OUT8 0x08 -#define OUT9 0x09 -#define OUT10 0x0A -#define OUT11 0x0B -#define OUT12 0x0C -#define OUT13 0x0D -#define OUT14 0x0E -#define OUT15 0x0F -#define OUT16 0x10 -#define OUT17 0x11 -#define OUT18 0x12 diff --git a/drivers/led/issi/is31fl3731-mono.c b/drivers/led/issi/is31fl3731-mono.c new file mode 100644 index 0000000000..74e427ef0d --- /dev/null +++ b/drivers/led/issi/is31fl3731-mono.c @@ -0,0 +1,239 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2019 Clueboard + * Copyright 2021 Doni Crosby + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3731-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3731_PWM_REGISTER_COUNT 144 +#define IS31FL3731_LED_CONTROL_REGISTER_COUNT 18 + +#ifndef IS31FL3731_I2C_TIMEOUT +# define IS31FL3731_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3731_I2C_PERSISTENCE +# define IS31FL3731_I2C_PERSISTENCE 0 +#endif + +uint8_t i2c_transfer_buffer[20]; + +// These buffers match the IS31FL3731 PWM registers 0x24-0xB3. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][IS31FL3731_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false}; + +uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false}; + +void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3731_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) { + break; + } + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT); +#endif +} + +void is31fl3731_select_page(uint8_t addr, uint8_t page) { + is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, page); +} + +void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // assumes page 0 is already selected + + // transmit PWM registers in 9 transfers of 16 bytes + // i2c_transfer_buffer[] is 20 bytes + + // iterate over the pwm_buffer contents at 16 byte intervals + for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) { + // set the first register, e.g. 0x24, 0x34, 0x44, etc. + i2c_transfer_buffer[0] = 0x24 + i; + // copy the data from i to i+15 + // device will auto-increment register for data after the first byte + // thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3731_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT); +#endif + } +} + +void is31fl3731_init_drivers(void) { + i2c_init(); + + is31fl3731_init(IS31FL3731_I2C_ADDRESS_1); +#if defined(IS31FL3731_I2C_ADDRESS_2) + is31fl3731_init(IS31FL3731_I2C_ADDRESS_2); +# if defined(IS31FL3731_I2C_ADDRESS_3) + is31fl3731_init(IS31FL3731_I2C_ADDRESS_3); +# if defined(IS31FL3731_I2C_ADDRESS_4) + is31fl3731_init(IS31FL3731_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3731_LED_COUNT; i++) { + is31fl3731_set_led_control_register(i, true); + } + + is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0); +#if defined(IS31FL3731_I2C_ADDRESS_2) + is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1); +# if defined(IS31FL3731_I2C_ADDRESS_3) + is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2); +# if defined(IS31FL3731_I2C_ADDRESS_4) + is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3731_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, first enable software shutdown, + // then set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION); + + // enable software shutdown + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00); +#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION, IS31FL3731_GHOST_IMAGE_PREVENTION_GEN); +#endif + + // this delay was copied from other drivers, might not be needed + wait_ms(10); + + // picture mode + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_CONFIG, IS31FL3731_CONFIG_MODE_PICTURE); + // display frame 0 + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY, 0x00); + // audio sync off + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00); + + is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1); + + // turn off all LEDs in the LED control register + for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3731_write_register(addr, i, 0x00); + } + + // turn off all LEDs in the blink control register (not really needed) + for (int i = 0x12; i <= 0x23; i++) { + is31fl3731_write_register(addr, i, 0x00); + } + + // set PWM on all LEDs to 0 + for (int i = 0x24; i <= 0xB3; i++) { + is31fl3731_write_register(addr, i, 0x00); + } + + is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION); + + // disable software shutdown + is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01); + + // select page 0 and leave it selected. + // most usage after initialization is just writing PWM buffers in page 0 + // as there's not much point in double-buffering + is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1); +} + +void is31fl3731_set_value(int index, uint8_t value) { + is31fl3731_led_t led; + if (index >= 0 && index < IS31FL3731_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); + + // Subtract 0x24 to get the second index of g_pwm_buffer + + if (g_pwm_buffer[led.driver][led.v - 0x24] == value) { + return; + } + g_pwm_buffer[led.driver][led.v - 0x24] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3731_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3731_LED_COUNT; i++) { + is31fl3731_set_value(i, value); + } +} + +void is31fl3731_set_led_control_register(uint8_t index, bool value) { + is31fl3731_led_t led; + memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); + + uint8_t control_register = (led.v - 0x24) / 8; + uint8_t bit_value = (led.v - 0x24) % 8; + + if (value) { + g_led_control_registers[led.driver][control_register] |= (1 << bit_value); + } else { + g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required[led.driver] = true; +} + +void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_led_control_registers_update_required[index]) { + for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3731_write_register(addr, i, g_led_control_registers[index][i]); + } + g_led_control_registers_update_required[index] = false; + } +} + +void is31fl3731_flush(void) { + is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_1, 0); +#if defined(IS31FL3731_I2C_ADDRESS_2) + is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_2, 1); +# if defined(IS31FL3731_I2C_ADDRESS_3) + is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_3, 2); +# if defined(IS31FL3731_I2C_ADDRESS_4) + is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3731-mono.h b/drivers/led/issi/is31fl3731-mono.h new file mode 100644 index 0000000000..ff970a3e5e --- /dev/null +++ b/drivers/led/issi/is31fl3731-mono.h @@ -0,0 +1,283 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2019 Clueboard + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef LED_DRIVER_ADDR_1 +# define IS31FL3731_I2C_ADDRESS_1 LED_DRIVER_ADDR_1 +#endif +#ifdef LED_DRIVER_ADDR_2 +# define IS31FL3731_I2C_ADDRESS_2 LED_DRIVER_ADDR_2 +#endif +#ifdef LED_DRIVER_ADDR_3 +# define IS31FL3731_I2C_ADDRESS_3 LED_DRIVER_ADDR_3 +#endif +#ifdef LED_DRIVER_ADDR_4 +# define IS31FL3731_I2C_ADDRESS_4 LED_DRIVER_ADDR_4 +#endif +#ifdef ISSI_TIMEOUT +# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT +#endif +#ifdef ISSI_PERSISTENCE +# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE +#endif +#ifdef ISSI_3731_DEGHOST +# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST +#endif + +#define is31_led is31fl3731_led_t +#define g_is31_leds g_is31fl3731_leds +// ======== + +#define IS31FL3731_REG_COMMAND 0xFD +#define IS31FL3731_COMMAND_FRAME_1 0x00 +#define IS31FL3731_COMMAND_FRAME_2 0x01 +#define IS31FL3731_COMMAND_FRAME_3 0x02 +#define IS31FL3731_COMMAND_FRAME_4 0x03 +#define IS31FL3731_COMMAND_FRAME_5 0x04 +#define IS31FL3731_COMMAND_FRAME_6 0x05 +#define IS31FL3731_COMMAND_FRAME_7 0x06 +#define IS31FL3731_COMMAND_FRAME_8 0x07 +#define IS31FL3731_COMMAND_FUNCTION 0x0B + +#define IS31FL3731_FUNCTION_REG_CONFIG 0x00 +#define IS31FL3731_CONFIG_MODE_PICTURE 0x00 +#define IS31FL3731_CONFIG_MODE_AUTO_PLAY 0x08 +#define IS31FL3731_CONFIG_MODE_AUDIO_PLAY 0x18 + +#define IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY 0x01 +#define IS31FL3731_FUNCTION_REG_AUDIO_SYNC 0x06 +#define IS31FL3731_FUNCTION_REG_SHUTDOWN 0x0A + +// Not defined in the datasheet -- See AN for IC +#define IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION 0xC2 +#define IS31FL3731_GHOST_IMAGE_PREVENTION_GEN 0x10 + +#define IS31FL3731_I2C_ADDRESS_GND 0x74 +#define IS31FL3731_I2C_ADDRESS_SCL 0x75 +#define IS31FL3731_I2C_ADDRESS_SDA 0x76 +#define IS31FL3731_I2C_ADDRESS_VCC 0x77 + +#if defined(LED_MATRIX_IS31FL3731) +# define IS31FL3731_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined IS31FL3731_I2C_ADDRESS_4 +# define IS31FL3731_DRIVER_COUNT 4 +#elif defined IS31FL3731_I2C_ADDRESS_3 +# define IS31FL3731_DRIVER_COUNT 3 +#elif defined IS31FL3731_I2C_ADDRESS_2 +# define IS31FL3731_DRIVER_COUNT 2 +#elif defined IS31FL3731_I2C_ADDRESS_1 +# define IS31FL3731_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3731_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3731_led_t; + +extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT]; + +void is31fl3731_init_drivers(void); +void is31fl3731_init(uint8_t addr); +void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3731_select_page(uint8_t addr, uint8_t page); +void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3731_set_value(int index, uint8_t value); +void is31fl3731_set_value_all(uint8_t value); + +void is31fl3731_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index); + +void is31fl3731_flush(void); + +#define C1_1 0x24 +#define C1_2 0x25 +#define C1_3 0x26 +#define C1_4 0x27 +#define C1_5 0x28 +#define C1_6 0x29 +#define C1_7 0x2A +#define C1_8 0x2B + +#define C1_9 0x2C +#define C1_10 0x2D +#define C1_11 0x2E +#define C1_12 0x2F +#define C1_13 0x30 +#define C1_14 0x31 +#define C1_15 0x32 +#define C1_16 0x33 + +#define C2_1 0x34 +#define C2_2 0x35 +#define C2_3 0x36 +#define C2_4 0x37 +#define C2_5 0x38 +#define C2_6 0x39 +#define C2_7 0x3A +#define C2_8 0x3B + +#define C2_9 0x3C +#define C2_10 0x3D +#define C2_11 0x3E +#define C2_12 0x3F +#define C2_13 0x40 +#define C2_14 0x41 +#define C2_15 0x42 +#define C2_16 0x43 + +#define C3_1 0x44 +#define C3_2 0x45 +#define C3_3 0x46 +#define C3_4 0x47 +#define C3_5 0x48 +#define C3_6 0x49 +#define C3_7 0x4A +#define C3_8 0x4B + +#define C3_9 0x4C +#define C3_10 0x4D +#define C3_11 0x4E +#define C3_12 0x4F +#define C3_13 0x50 +#define C3_14 0x51 +#define C3_15 0x52 +#define C3_16 0x53 + +#define C4_1 0x54 +#define C4_2 0x55 +#define C4_3 0x56 +#define C4_4 0x57 +#define C4_5 0x58 +#define C4_6 0x59 +#define C4_7 0x5A +#define C4_8 0x5B + +#define C4_9 0x5C +#define C4_10 0x5D +#define C4_11 0x5E +#define C4_12 0x5F +#define C4_13 0x60 +#define C4_14 0x61 +#define C4_15 0x62 +#define C4_16 0x63 + +#define C5_1 0x64 +#define C5_2 0x65 +#define C5_3 0x66 +#define C5_4 0x67 +#define C5_5 0x68 +#define C5_6 0x69 +#define C5_7 0x6A +#define C5_8 0x6B + +#define C5_9 0x6C +#define C5_10 0x6D +#define C5_11 0x6E +#define C5_12 0x6F +#define C5_13 0x70 +#define C5_14 0x71 +#define C5_15 0x72 +#define C5_16 0x73 + +#define C6_1 0x74 +#define C6_2 0x75 +#define C6_3 0x76 +#define C6_4 0x77 +#define C6_5 0x78 +#define C6_6 0x79 +#define C6_7 0x7A +#define C6_8 0x7B + +#define C6_9 0x7C +#define C6_10 0x7D +#define C6_11 0x7E +#define C6_12 0x7F +#define C6_13 0x80 +#define C6_14 0x81 +#define C6_15 0x82 +#define C6_16 0x83 + +#define C7_1 0x84 +#define C7_2 0x85 +#define C7_3 0x86 +#define C7_4 0x87 +#define C7_5 0x88 +#define C7_6 0x89 +#define C7_7 0x8A +#define C7_8 0x8B + +#define C7_9 0x8C +#define C7_10 0x8D +#define C7_11 0x8E +#define C7_12 0x8F +#define C7_13 0x90 +#define C7_14 0x91 +#define C7_15 0x92 +#define C7_16 0x93 + +#define C8_1 0x94 +#define C8_2 0x95 +#define C8_3 0x96 +#define C8_4 0x97 +#define C8_5 0x98 +#define C8_6 0x99 +#define C8_7 0x9A +#define C8_8 0x9B + +#define C8_9 0x9C +#define C8_10 0x9D +#define C8_11 0x9E +#define C8_12 0x9F +#define C8_13 0xA0 +#define C8_14 0xA1 +#define C8_15 0xA2 +#define C8_16 0xA3 + +#define C9_1 0xA4 +#define C9_2 0xA5 +#define C9_3 0xA6 +#define C9_4 0xA7 +#define C9_5 0xA8 +#define C9_6 0xA9 +#define C9_7 0xAA +#define C9_8 0xAB + +#define C9_9 0xAC +#define C9_10 0xAD +#define C9_11 0xAE +#define C9_12 0xAF +#define C9_13 0xB0 +#define C9_14 0xB1 +#define C9_15 0xB2 +#define C9_16 0xB3 diff --git a/drivers/led/issi/is31fl3731-simple.c b/drivers/led/issi/is31fl3731-simple.c deleted file mode 100644 index 14743717d4..0000000000 --- a/drivers/led/issi/is31fl3731-simple.c +++ /dev/null @@ -1,239 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2019 Clueboard - * Copyright 2021 Doni Crosby - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31fl3731-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3731_PWM_REGISTER_COUNT 144 -#define IS31FL3731_LED_CONTROL_REGISTER_COUNT 18 - -#ifndef IS31FL3731_I2C_TIMEOUT -# define IS31FL3731_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3731_I2C_PERSISTENCE -# define IS31FL3731_I2C_PERSISTENCE 0 -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the IS31FL3731 PWM registers 0x24-0xB3. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in is31fl3731_write_pwm_buffer() but it's -// probably not worth the extra complexity. -uint8_t g_pwm_buffer[IS31FL3731_DRIVER_COUNT][IS31FL3731_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3731_DRIVER_COUNT] = {false}; - -uint8_t g_led_control_registers[IS31FL3731_DRIVER_COUNT][IS31FL3731_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required[IS31FL3731_DRIVER_COUNT] = {false}; - -void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3731_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT) == 0) { - break; - } - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3731_I2C_TIMEOUT); -#endif -} - -void is31fl3731_select_page(uint8_t addr, uint8_t page) { - is31fl3731_write_register(addr, IS31FL3731_REG_COMMAND, page); -} - -void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // assumes page 0 is already selected - - // transmit PWM registers in 9 transfers of 16 bytes - // i2c_transfer_buffer[] is 20 bytes - - // iterate over the pwm_buffer contents at 16 byte intervals - for (int i = 0; i < IS31FL3731_PWM_REGISTER_COUNT; i += 16) { - // set the first register, e.g. 0x24, 0x34, 0x44, etc. - i2c_transfer_buffer[0] = 0x24 + i; - // copy the data from i to i+15 - // device will auto-increment register for data after the first byte - // thus this sets registers 0x24-0x33, 0x34-0x43, etc. in one transfer - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3731_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3731_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3731_I2C_TIMEOUT); -#endif - } -} - -void is31fl3731_init_drivers(void) { - i2c_init(); - - is31fl3731_init(IS31FL3731_I2C_ADDRESS_1); -#if defined(IS31FL3731_I2C_ADDRESS_2) - is31fl3731_init(IS31FL3731_I2C_ADDRESS_2); -# if defined(IS31FL3731_I2C_ADDRESS_3) - is31fl3731_init(IS31FL3731_I2C_ADDRESS_3); -# if defined(IS31FL3731_I2C_ADDRESS_4) - is31fl3731_init(IS31FL3731_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3731_LED_COUNT; i++) { - is31fl3731_set_led_control_register(i, true); - } - - is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_1, 0); -#if defined(IS31FL3731_I2C_ADDRESS_2) - is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_2, 1); -# if defined(IS31FL3731_I2C_ADDRESS_3) - is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_3, 2); -# if defined(IS31FL3731_I2C_ADDRESS_4) - is31fl3731_update_led_control_registers(IS31FL3731_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3731_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, first enable software shutdown, - // then set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION); - - // enable software shutdown - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x00); -#ifdef IS31FL3731_DEGHOST // set to enable de-ghosting of the array - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION, IS31FL3731_GHOST_IMAGE_PREVENTION_GEN); -#endif - - // this delay was copied from other drivers, might not be needed - wait_ms(10); - - // picture mode - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_CONFIG, IS31FL3731_CONFIG_MODE_PICTURE); - // display frame 0 - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY, 0x00); - // audio sync off - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_AUDIO_SYNC, 0x00); - - is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1); - - // turn off all LEDs in the LED control register - for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3731_write_register(addr, i, 0x00); - } - - // turn off all LEDs in the blink control register (not really needed) - for (int i = 0x12; i <= 0x23; i++) { - is31fl3731_write_register(addr, i, 0x00); - } - - // set PWM on all LEDs to 0 - for (int i = 0x24; i <= 0xB3; i++) { - is31fl3731_write_register(addr, i, 0x00); - } - - is31fl3731_select_page(addr, IS31FL3731_COMMAND_FUNCTION); - - // disable software shutdown - is31fl3731_write_register(addr, IS31FL3731_FUNCTION_REG_SHUTDOWN, 0x01); - - // select page 0 and leave it selected. - // most usage after initialization is just writing PWM buffers in page 0 - // as there's not much point in double-buffering - is31fl3731_select_page(addr, IS31FL3731_COMMAND_FRAME_1); -} - -void is31fl3731_set_value(int index, uint8_t value) { - is31fl3731_led_t led; - if (index >= 0 && index < IS31FL3731_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); - - // Subtract 0x24 to get the second index of g_pwm_buffer - - if (g_pwm_buffer[led.driver][led.v - 0x24] == value) { - return; - } - g_pwm_buffer[led.driver][led.v - 0x24] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void is31fl3731_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3731_LED_COUNT; i++) { - is31fl3731_set_value(i, value); - } -} - -void is31fl3731_set_led_control_register(uint8_t index, bool value) { - is31fl3731_led_t led; - memcpy_P(&led, (&g_is31fl3731_leds[index]), sizeof(led)); - - uint8_t control_register = (led.v - 0x24) / 8; - uint8_t bit_value = (led.v - 0x24) % 8; - - if (value) { - g_led_control_registers[led.driver][control_register] |= (1 << bit_value); - } else { - g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required[led.driver] = true; -} - -void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3731_write_pwm_buffer(addr, g_pwm_buffer[index]); - g_pwm_buffer_update_required[index] = false; - } -} - -void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_led_control_registers_update_required[index]) { - for (int i = 0; i < IS31FL3731_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3731_write_register(addr, i, g_led_control_registers[index][i]); - } - g_led_control_registers_update_required[index] = false; - } -} - -void is31fl3731_flush(void) { - is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_1, 0); -#if defined(IS31FL3731_I2C_ADDRESS_2) - is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_2, 1); -# if defined(IS31FL3731_I2C_ADDRESS_3) - is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_3, 2); -# if defined(IS31FL3731_I2C_ADDRESS_4) - is31fl3731_update_pwm_buffers(IS31FL3731_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3731-simple.h b/drivers/led/issi/is31fl3731-simple.h deleted file mode 100644 index ff970a3e5e..0000000000 --- a/drivers/led/issi/is31fl3731-simple.h +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2019 Clueboard - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef LED_DRIVER_ADDR_1 -# define IS31FL3731_I2C_ADDRESS_1 LED_DRIVER_ADDR_1 -#endif -#ifdef LED_DRIVER_ADDR_2 -# define IS31FL3731_I2C_ADDRESS_2 LED_DRIVER_ADDR_2 -#endif -#ifdef LED_DRIVER_ADDR_3 -# define IS31FL3731_I2C_ADDRESS_3 LED_DRIVER_ADDR_3 -#endif -#ifdef LED_DRIVER_ADDR_4 -# define IS31FL3731_I2C_ADDRESS_4 LED_DRIVER_ADDR_4 -#endif -#ifdef ISSI_TIMEOUT -# define IS31FL3731_I2C_TIMEOUT ISSI_TIMEOUT -#endif -#ifdef ISSI_PERSISTENCE -# define IS31FL3731_I2C_PERSISTENCE ISSI_PERSISTENCE -#endif -#ifdef ISSI_3731_DEGHOST -# define IS31FL3731_DEGHOST ISSI_3731_DEGHOST -#endif - -#define is31_led is31fl3731_led_t -#define g_is31_leds g_is31fl3731_leds -// ======== - -#define IS31FL3731_REG_COMMAND 0xFD -#define IS31FL3731_COMMAND_FRAME_1 0x00 -#define IS31FL3731_COMMAND_FRAME_2 0x01 -#define IS31FL3731_COMMAND_FRAME_3 0x02 -#define IS31FL3731_COMMAND_FRAME_4 0x03 -#define IS31FL3731_COMMAND_FRAME_5 0x04 -#define IS31FL3731_COMMAND_FRAME_6 0x05 -#define IS31FL3731_COMMAND_FRAME_7 0x06 -#define IS31FL3731_COMMAND_FRAME_8 0x07 -#define IS31FL3731_COMMAND_FUNCTION 0x0B - -#define IS31FL3731_FUNCTION_REG_CONFIG 0x00 -#define IS31FL3731_CONFIG_MODE_PICTURE 0x00 -#define IS31FL3731_CONFIG_MODE_AUTO_PLAY 0x08 -#define IS31FL3731_CONFIG_MODE_AUDIO_PLAY 0x18 - -#define IS31FL3731_FUNCTION_REG_PICTURE_DISPLAY 0x01 -#define IS31FL3731_FUNCTION_REG_AUDIO_SYNC 0x06 -#define IS31FL3731_FUNCTION_REG_SHUTDOWN 0x0A - -// Not defined in the datasheet -- See AN for IC -#define IS31FL3731_FUNCTION_REG_GHOST_IMAGE_PREVENTION 0xC2 -#define IS31FL3731_GHOST_IMAGE_PREVENTION_GEN 0x10 - -#define IS31FL3731_I2C_ADDRESS_GND 0x74 -#define IS31FL3731_I2C_ADDRESS_SCL 0x75 -#define IS31FL3731_I2C_ADDRESS_SDA 0x76 -#define IS31FL3731_I2C_ADDRESS_VCC 0x77 - -#if defined(LED_MATRIX_IS31FL3731) -# define IS31FL3731_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined IS31FL3731_I2C_ADDRESS_4 -# define IS31FL3731_DRIVER_COUNT 4 -#elif defined IS31FL3731_I2C_ADDRESS_3 -# define IS31FL3731_DRIVER_COUNT 3 -#elif defined IS31FL3731_I2C_ADDRESS_2 -# define IS31FL3731_DRIVER_COUNT 2 -#elif defined IS31FL3731_I2C_ADDRESS_1 -# define IS31FL3731_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3731_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3731_led_t; - -extern const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT]; - -void is31fl3731_init_drivers(void); -void is31fl3731_init(uint8_t addr); -void is31fl3731_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3731_select_page(uint8_t addr, uint8_t page); -void is31fl3731_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3731_set_value(int index, uint8_t value); -void is31fl3731_set_value_all(uint8_t value); - -void is31fl3731_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void is31fl3731_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3731_update_led_control_registers(uint8_t addr, uint8_t index); - -void is31fl3731_flush(void); - -#define C1_1 0x24 -#define C1_2 0x25 -#define C1_3 0x26 -#define C1_4 0x27 -#define C1_5 0x28 -#define C1_6 0x29 -#define C1_7 0x2A -#define C1_8 0x2B - -#define C1_9 0x2C -#define C1_10 0x2D -#define C1_11 0x2E -#define C1_12 0x2F -#define C1_13 0x30 -#define C1_14 0x31 -#define C1_15 0x32 -#define C1_16 0x33 - -#define C2_1 0x34 -#define C2_2 0x35 -#define C2_3 0x36 -#define C2_4 0x37 -#define C2_5 0x38 -#define C2_6 0x39 -#define C2_7 0x3A -#define C2_8 0x3B - -#define C2_9 0x3C -#define C2_10 0x3D -#define C2_11 0x3E -#define C2_12 0x3F -#define C2_13 0x40 -#define C2_14 0x41 -#define C2_15 0x42 -#define C2_16 0x43 - -#define C3_1 0x44 -#define C3_2 0x45 -#define C3_3 0x46 -#define C3_4 0x47 -#define C3_5 0x48 -#define C3_6 0x49 -#define C3_7 0x4A -#define C3_8 0x4B - -#define C3_9 0x4C -#define C3_10 0x4D -#define C3_11 0x4E -#define C3_12 0x4F -#define C3_13 0x50 -#define C3_14 0x51 -#define C3_15 0x52 -#define C3_16 0x53 - -#define C4_1 0x54 -#define C4_2 0x55 -#define C4_3 0x56 -#define C4_4 0x57 -#define C4_5 0x58 -#define C4_6 0x59 -#define C4_7 0x5A -#define C4_8 0x5B - -#define C4_9 0x5C -#define C4_10 0x5D -#define C4_11 0x5E -#define C4_12 0x5F -#define C4_13 0x60 -#define C4_14 0x61 -#define C4_15 0x62 -#define C4_16 0x63 - -#define C5_1 0x64 -#define C5_2 0x65 -#define C5_3 0x66 -#define C5_4 0x67 -#define C5_5 0x68 -#define C5_6 0x69 -#define C5_7 0x6A -#define C5_8 0x6B - -#define C5_9 0x6C -#define C5_10 0x6D -#define C5_11 0x6E -#define C5_12 0x6F -#define C5_13 0x70 -#define C5_14 0x71 -#define C5_15 0x72 -#define C5_16 0x73 - -#define C6_1 0x74 -#define C6_2 0x75 -#define C6_3 0x76 -#define C6_4 0x77 -#define C6_5 0x78 -#define C6_6 0x79 -#define C6_7 0x7A -#define C6_8 0x7B - -#define C6_9 0x7C -#define C6_10 0x7D -#define C6_11 0x7E -#define C6_12 0x7F -#define C6_13 0x80 -#define C6_14 0x81 -#define C6_15 0x82 -#define C6_16 0x83 - -#define C7_1 0x84 -#define C7_2 0x85 -#define C7_3 0x86 -#define C7_4 0x87 -#define C7_5 0x88 -#define C7_6 0x89 -#define C7_7 0x8A -#define C7_8 0x8B - -#define C7_9 0x8C -#define C7_10 0x8D -#define C7_11 0x8E -#define C7_12 0x8F -#define C7_13 0x90 -#define C7_14 0x91 -#define C7_15 0x92 -#define C7_16 0x93 - -#define C8_1 0x94 -#define C8_2 0x95 -#define C8_3 0x96 -#define C8_4 0x97 -#define C8_5 0x98 -#define C8_6 0x99 -#define C8_7 0x9A -#define C8_8 0x9B - -#define C8_9 0x9C -#define C8_10 0x9D -#define C8_11 0x9E -#define C8_12 0x9F -#define C8_13 0xA0 -#define C8_14 0xA1 -#define C8_15 0xA2 -#define C8_16 0xA3 - -#define C9_1 0xA4 -#define C9_2 0xA5 -#define C9_3 0xA6 -#define C9_4 0xA7 -#define C9_5 0xA8 -#define C9_6 0xA9 -#define C9_7 0xAA -#define C9_8 0xAB - -#define C9_9 0xAC -#define C9_10 0xAD -#define C9_11 0xAE -#define C9_12 0xAF -#define C9_13 0xB0 -#define C9_14 0xB1 -#define C9_15 0xB2 -#define C9_16 0xB3 diff --git a/drivers/led/issi/is31fl3733-mono.c b/drivers/led/issi/is31fl3733-mono.c new file mode 100644 index 0000000000..95d16bc4a3 --- /dev/null +++ b/drivers/led/issi/is31fl3733-mono.c @@ -0,0 +1,270 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2021 Doni Crosby + * Copyright 2021 Leo Deng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3733-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3733_PWM_REGISTER_COUNT 192 +#define IS31FL3733_LED_CONTROL_REGISTER_COUNT 24 + +#ifndef IS31FL3733_I2C_TIMEOUT +# define IS31FL3733_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3733_I2C_PERSISTENCE +# define IS31FL3733_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3733_PWM_FREQUENCY +# define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3733B only +#endif + +#ifndef IS31FL3733_SW_PULLUP +# define IS31FL3733_SW_PULLUP IS31FL3733_PUR_0_OHM +#endif + +#ifndef IS31FL3733_CS_PULLDOWN +# define IS31FL3733_CS_PULLDOWN IS31FL3733_PDR_0_OHM +#endif + +#ifndef IS31FL3733_GLOBAL_CURRENT +# define IS31FL3733_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3733_SYNC_1 +# define IS31FL3733_SYNC_1 IS31FL3733_SYNC_NONE +#endif +#ifndef IS31FL3733_SYNC_2 +# define IS31FL3733_SYNC_2 IS31FL3733_SYNC_NONE +#endif +#ifndef IS31FL3733_SYNC_3 +# define IS31FL3733_SYNC_3 IS31FL3733_SYNC_NONE +#endif +#ifndef IS31FL3733_SYNC_4 +# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20]; + +// These buffers match the IS31FL3733 PWM registers. +// The control buffers match the page 0 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[IS31FL3733_DRIVER_COUNT][IS31FL3733_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false}; + +uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][IS31FL3733_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false}; + +bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + // If the transaction fails function returns false. + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3733_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) { + return false; + } +#endif + return true; +} + +void is31fl3733_select_page(uint8_t addr, uint8_t page) { + is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC); + is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, page); +} + +bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 1 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3733_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) { + return false; + } +#endif + } + return true; +} + +void is31fl3733_init_drivers(void) { + i2c_init(); + + is31fl3733_init(IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1); +#if defined(IS31FL3733_I2C_ADDRESS_2) + is31fl3733_init(IS31FL3733_I2C_ADDRESS_2, IS31FL3733_SYNC_2); +# if defined(IS31FL3733_I2C_ADDRESS_3) + is31fl3733_init(IS31FL3733_I2C_ADDRESS_3, IS31FL3733_SYNC_3); +# if defined(IS31FL3733_I2C_ADDRESS_4) + is31fl3733_init(IS31FL3733_I2C_ADDRESS_4, IS31FL3733_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3733_LED_COUNT; i++) { + is31fl3733_set_led_control_register(i, true); + } + + is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_1, 0); +#if defined(IS31FL3733_I2C_ADDRESS_2) + is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_2, 1); +# if defined(IS31FL3733_I2C_ADDRESS_3) + is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_3, 2); +# if defined(IS31FL3733_I2C_ADDRESS_4) + is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3733_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + // Sync is passed so set it according to the datasheet. + + is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3733_write_register(addr, i, 0x00); + } + + is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM); + + // Set PWM on all LEDs to 0 + // No need to setup Breath registers to PWM as that is the default. + for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) { + is31fl3733_write_register(addr, i, 0x00); + } + + is31fl3733_select_page(addr, IS31FL3733_COMMAND_FUNCTION); + + // Set de-ghost pull-up resistors (SWx) + is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP); + // Set de-ghost pull-down resistors (CSx) + is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CS_PULLDOWN, IS31FL3733_CS_PULLDOWN); + // Set global current to maximum. + is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3733_GLOBAL_CURRENT); + // Disable software shutdown. + is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((IS31FL3733_PWM_FREQUENCY & 0b111) << 3) | 0x01); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3733_set_value(int index, uint8_t value) { + is31fl3733_led_t led; + if (index >= 0 && index < IS31FL3733_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3733_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3733_LED_COUNT; i++) { + is31fl3733_set_value(i, value); + } +} + +void is31fl3733_set_led_control_register(uint8_t index, bool value) { + is31fl3733_led_t led; + memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); + + uint8_t control_register = led.v / 8; + uint8_t bit_value = led.v % 8; + + if (value) { + g_led_control_registers[led.driver][control_register] |= (1 << bit_value); + } else { + g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required[led.driver] = true; +} + +void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM); + + // If any of the transactions fail we risk writing dirty page 0, + // refresh page 0 just in case. + if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) { + g_led_control_registers_update_required[index] = true; + } + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_led_control_registers_update_required[index]) { + is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL); + + for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3733_write_register(addr, i, g_led_control_registers[index][i]); + } + g_led_control_registers_update_required[index] = false; + } +} + +void is31fl3733_flush(void) { + is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_1, 0); +#if defined(IS31FL3733_I2C_ADDRESS_2) + is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_2, 1); +# if defined(IS31FL3733_I2C_ADDRESS_3) + is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_3, 2); +# if defined(IS31FL3733_I2C_ADDRESS_4) + is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3733-mono.h b/drivers/led/issi/is31fl3733-mono.h new file mode 100644 index 0000000000..dcb33e448f --- /dev/null +++ b/drivers/led/issi/is31fl3733-mono.h @@ -0,0 +1,367 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2021 Doni Crosby + * Copyright 2021 Leo Deng + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef ISSI_TIMEOUT +# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT +#endif +#ifdef ISSI_PERSISTENCE +# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE +#endif +#ifdef ISSI_PWM_FREQUENCY +# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY +#endif +#ifdef ISSI_SWPULLUP +# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP +#endif +#ifdef ISSI_CSPULLUP +# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP +#endif +#ifdef ISSI_GLOBALCURRENT +# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT +#endif + +#define is31_led is31fl3733_led_t +#define g_is31_leds g_is31fl3733_leds + +#define PUR_0R IS31FL3733_PUR_0_OHM +#define PUR_05KR IS31FL3733_PUR_1K_OHM +#define PUR_3KR IS31FL3733_PUR_2K_OHM +#define PUR_4KR IS31FL3733_PUR_4K_OHM +#define PUR_8KR IS31FL3733_PUR_8K_OHM +#define PUR_16KR IS31FL3733_PUR_16K_OHM +#define PUR_32KR IS31FL3733_PUR_32K_OHM +// ======== + +#define IS31FL3733_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1 + +#define IS31FL3733_REG_COMMAND 0xFD + +#define IS31FL3733_COMMAND_LED_CONTROL 0x00 +#define IS31FL3733_COMMAND_PWM 0x01 +#define IS31FL3733_COMMAND_AUTO_BREATH 0x02 +#define IS31FL3733_COMMAND_FUNCTION 0x03 + +#define IS31FL3733_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3733_FUNCTION_REG_SW_PULLUP 0x0F +#define IS31FL3733_FUNCTION_REG_CS_PULLDOWN 0x10 +#define IS31FL3733_FUNCTION_REG_RESET 0x11 + +#define IS31FL3733_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3733_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3733_I2C_ADDRESS_GND_GND 0x50 +#define IS31FL3733_I2C_ADDRESS_GND_SCL 0x51 +#define IS31FL3733_I2C_ADDRESS_GND_SDA 0x52 +#define IS31FL3733_I2C_ADDRESS_GND_VCC 0x53 +#define IS31FL3733_I2C_ADDRESS_SCL_GND 0x54 +#define IS31FL3733_I2C_ADDRESS_SCL_SCL 0x55 +#define IS31FL3733_I2C_ADDRESS_SCL_SDA 0x56 +#define IS31FL3733_I2C_ADDRESS_SCL_VCC 0x57 +#define IS31FL3733_I2C_ADDRESS_SDA_GND 0x58 +#define IS31FL3733_I2C_ADDRESS_SDA_SCL 0x59 +#define IS31FL3733_I2C_ADDRESS_SDA_SDA 0x5A +#define IS31FL3733_I2C_ADDRESS_SDA_VCC 0x5B +#define IS31FL3733_I2C_ADDRESS_VCC_GND 0x5C +#define IS31FL3733_I2C_ADDRESS_VCC_SCL 0x5D +#define IS31FL3733_I2C_ADDRESS_VCC_SDA 0x5E +#define IS31FL3733_I2C_ADDRESS_VCC_VCC 0x5F + +#if defined(LED_MATRIX_IS31FL3733) +# define IS31FL3733_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3733_I2C_ADDRESS_4) +# define IS31FL3733_DRIVER_COUNT 4 +#elif defined(IS31FL3733_I2C_ADDRESS_3) +# define IS31FL3733_DRIVER_COUNT 3 +#elif defined(IS31FL3733_I2C_ADDRESS_2) +# define IS31FL3733_DRIVER_COUNT 2 +#elif defined(IS31FL3733_I2C_ADDRESS_1) +# define IS31FL3733_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3733_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3733_led_t; + +extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT]; + +void is31fl3733_init_drivers(void); +void is31fl3733_init(uint8_t addr, uint8_t sync); +bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3733_select_page(uint8_t addr, uint8_t page); +bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3733_set_value(int index, uint8_t value); +void is31fl3733_set_value_all(uint8_t value); + +void is31fl3733_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index); + +void is31fl3733_flush(void); + +#define IS31FL3733_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3733_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3733_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3733_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3733_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3733_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3733_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3733_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3733_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3733_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3733_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3733_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3733_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3733_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3733_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3733_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3733_PWM_FREQUENCY_8K4_HZ 0b000 +#define IS31FL3733_PWM_FREQUENCY_4K2_HZ 0b001 +#define IS31FL3733_PWM_FREQUENCY_26K7_HZ 0b010 +#define IS31FL3733_PWM_FREQUENCY_2K1_HZ 0b011 +#define IS31FL3733_PWM_FREQUENCY_1K05_HZ 0b100 + +#define IS31FL3733_SYNC_NONE 0b00 +#define IS31FL3733_SYNC_MASTER 0b01 +#define IS31FL3733_SYNC_SLAVE 0b10 + +#define A_1 0x00 +#define A_2 0x01 +#define A_3 0x02 +#define A_4 0x03 +#define A_5 0x04 +#define A_6 0x05 +#define A_7 0x06 +#define A_8 0x07 +#define A_9 0x08 +#define A_10 0x09 +#define A_11 0x0A +#define A_12 0x0B +#define A_13 0x0C +#define A_14 0x0D +#define A_15 0x0E +#define A_16 0x0F + +#define B_1 0x10 +#define B_2 0x11 +#define B_3 0x12 +#define B_4 0x13 +#define B_5 0x14 +#define B_6 0x15 +#define B_7 0x16 +#define B_8 0x17 +#define B_9 0x18 +#define B_10 0x19 +#define B_11 0x1A +#define B_12 0x1B +#define B_13 0x1C +#define B_14 0x1D +#define B_15 0x1E +#define B_16 0x1F + +#define C_1 0x20 +#define C_2 0x21 +#define C_3 0x22 +#define C_4 0x23 +#define C_5 0x24 +#define C_6 0x25 +#define C_7 0x26 +#define C_8 0x27 +#define C_9 0x28 +#define C_10 0x29 +#define C_11 0x2A +#define C_12 0x2B +#define C_13 0x2C +#define C_14 0x2D +#define C_15 0x2E +#define C_16 0x2F + +#define D_1 0x30 +#define D_2 0x31 +#define D_3 0x32 +#define D_4 0x33 +#define D_5 0x34 +#define D_6 0x35 +#define D_7 0x36 +#define D_8 0x37 +#define D_9 0x38 +#define D_10 0x39 +#define D_11 0x3A +#define D_12 0x3B +#define D_13 0x3C +#define D_14 0x3D +#define D_15 0x3E +#define D_16 0x3F + +#define E_1 0x40 +#define E_2 0x41 +#define E_3 0x42 +#define E_4 0x43 +#define E_5 0x44 +#define E_6 0x45 +#define E_7 0x46 +#define E_8 0x47 +#define E_9 0x48 +#define E_10 0x49 +#define E_11 0x4A +#define E_12 0x4B +#define E_13 0x4C +#define E_14 0x4D +#define E_15 0x4E +#define E_16 0x4F + +#define F_1 0x50 +#define F_2 0x51 +#define F_3 0x52 +#define F_4 0x53 +#define F_5 0x54 +#define F_6 0x55 +#define F_7 0x56 +#define F_8 0x57 +#define F_9 0x58 +#define F_10 0x59 +#define F_11 0x5A +#define F_12 0x5B +#define F_13 0x5C +#define F_14 0x5D +#define F_15 0x5E +#define F_16 0x5F + +#define G_1 0x60 +#define G_2 0x61 +#define G_3 0x62 +#define G_4 0x63 +#define G_5 0x64 +#define G_6 0x65 +#define G_7 0x66 +#define G_8 0x67 +#define G_9 0x68 +#define G_10 0x69 +#define G_11 0x6A +#define G_12 0x6B +#define G_13 0x6C +#define G_14 0x6D +#define G_15 0x6E +#define G_16 0x6F + +#define H_1 0x70 +#define H_2 0x71 +#define H_3 0x72 +#define H_4 0x73 +#define H_5 0x74 +#define H_6 0x75 +#define H_7 0x76 +#define H_8 0x77 +#define H_9 0x78 +#define H_10 0x79 +#define H_11 0x7A +#define H_12 0x7B +#define H_13 0x7C +#define H_14 0x7D +#define H_15 0x7E +#define H_16 0x7F + +#define I_1 0x80 +#define I_2 0x81 +#define I_3 0x82 +#define I_4 0x83 +#define I_5 0x84 +#define I_6 0x85 +#define I_7 0x86 +#define I_8 0x87 +#define I_9 0x88 +#define I_10 0x89 +#define I_11 0x8A +#define I_12 0x8B +#define I_13 0x8C +#define I_14 0x8D +#define I_15 0x8E +#define I_16 0x8F + +#define J_1 0x90 +#define J_2 0x91 +#define J_3 0x92 +#define J_4 0x93 +#define J_5 0x94 +#define J_6 0x95 +#define J_7 0x96 +#define J_8 0x97 +#define J_9 0x98 +#define J_10 0x99 +#define J_11 0x9A +#define J_12 0x9B +#define J_13 0x9C +#define J_14 0x9D +#define J_15 0x9E +#define J_16 0x9F + +#define K_1 0xA0 +#define K_2 0xA1 +#define K_3 0xA2 +#define K_4 0xA3 +#define K_5 0xA4 +#define K_6 0xA5 +#define K_7 0xA6 +#define K_8 0xA7 +#define K_9 0xA8 +#define K_10 0xA9 +#define K_11 0xAA +#define K_12 0xAB +#define K_13 0xAC +#define K_14 0xAD +#define K_15 0xAE +#define K_16 0xAF + +#define L_1 0xB0 +#define L_2 0xB1 +#define L_3 0xB2 +#define L_4 0xB3 +#define L_5 0xB4 +#define L_6 0xB5 +#define L_7 0xB6 +#define L_8 0xB7 +#define L_9 0xB8 +#define L_10 0xB9 +#define L_11 0xBA +#define L_12 0xBB +#define L_13 0xBC +#define L_14 0xBD +#define L_15 0xBE +#define L_16 0xBF diff --git a/drivers/led/issi/is31fl3733-simple.c b/drivers/led/issi/is31fl3733-simple.c deleted file mode 100644 index 889d9ef389..0000000000 --- a/drivers/led/issi/is31fl3733-simple.c +++ /dev/null @@ -1,270 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2021 Doni Crosby - * Copyright 2021 Leo Deng - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31fl3733-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3733_PWM_REGISTER_COUNT 192 -#define IS31FL3733_LED_CONTROL_REGISTER_COUNT 24 - -#ifndef IS31FL3733_I2C_TIMEOUT -# define IS31FL3733_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3733_I2C_PERSISTENCE -# define IS31FL3733_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3733_PWM_FREQUENCY -# define IS31FL3733_PWM_FREQUENCY IS31FL3733_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3733B only -#endif - -#ifndef IS31FL3733_SW_PULLUP -# define IS31FL3733_SW_PULLUP IS31FL3733_PUR_0_OHM -#endif - -#ifndef IS31FL3733_CS_PULLDOWN -# define IS31FL3733_CS_PULLDOWN IS31FL3733_PDR_0_OHM -#endif - -#ifndef IS31FL3733_GLOBAL_CURRENT -# define IS31FL3733_GLOBAL_CURRENT 0xFF -#endif - -#ifndef IS31FL3733_SYNC_1 -# define IS31FL3733_SYNC_1 IS31FL3733_SYNC_NONE -#endif -#ifndef IS31FL3733_SYNC_2 -# define IS31FL3733_SYNC_2 IS31FL3733_SYNC_NONE -#endif -#ifndef IS31FL3733_SYNC_3 -# define IS31FL3733_SYNC_3 IS31FL3733_SYNC_NONE -#endif -#ifndef IS31FL3733_SYNC_4 -# define IS31FL3733_SYNC_4 IS31FL3733_SYNC_NONE -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the IS31FL3733 PWM registers. -// The control buffers match the page 0 LED On/Off registers. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in is31fl3733_write_pwm_buffer() but it's -// probably not worth the extra complexity. -uint8_t g_pwm_buffer[IS31FL3733_DRIVER_COUNT][IS31FL3733_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3733_DRIVER_COUNT] = {false}; - -uint8_t g_led_control_registers[IS31FL3733_DRIVER_COUNT][IS31FL3733_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required[IS31FL3733_DRIVER_COUNT] = {false}; - -bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - // If the transaction fails function returns false. - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3733_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3733_I2C_TIMEOUT) != 0) { - return false; - } -#endif - return true; -} - -void is31fl3733_select_page(uint8_t addr, uint8_t page) { - is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND_WRITE_LOCK, IS31FL3733_COMMAND_WRITE_LOCK_MAGIC); - is31fl3733_write_register(addr, IS31FL3733_REG_COMMAND, page); -} - -bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes page 1 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3733_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3733_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3733_I2C_TIMEOUT) != 0) { - return false; - } -#endif - } - return true; -} - -void is31fl3733_init_drivers(void) { - i2c_init(); - - is31fl3733_init(IS31FL3733_I2C_ADDRESS_1, IS31FL3733_SYNC_1); -#if defined(IS31FL3733_I2C_ADDRESS_2) - is31fl3733_init(IS31FL3733_I2C_ADDRESS_2, IS31FL3733_SYNC_2); -# if defined(IS31FL3733_I2C_ADDRESS_3) - is31fl3733_init(IS31FL3733_I2C_ADDRESS_3, IS31FL3733_SYNC_3); -# if defined(IS31FL3733_I2C_ADDRESS_4) - is31fl3733_init(IS31FL3733_I2C_ADDRESS_4, IS31FL3733_SYNC_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3733_LED_COUNT; i++) { - is31fl3733_set_led_control_register(i, true); - } - - is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_1, 0); -#if defined(IS31FL3733_I2C_ADDRESS_2) - is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_2, 1); -# if defined(IS31FL3733_I2C_ADDRESS_3) - is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_3, 2); -# if defined(IS31FL3733_I2C_ADDRESS_4) - is31fl3733_update_led_control_registers(IS31FL3733_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3733_init(uint8_t addr, uint8_t sync) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - // Sync is passed so set it according to the datasheet. - - is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3733_write_register(addr, i, 0x00); - } - - is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM); - - // Set PWM on all LEDs to 0 - // No need to setup Breath registers to PWM as that is the default. - for (int i = 0; i < IS31FL3733_PWM_REGISTER_COUNT; i++) { - is31fl3733_write_register(addr, i, 0x00); - } - - is31fl3733_select_page(addr, IS31FL3733_COMMAND_FUNCTION); - - // Set de-ghost pull-up resistors (SWx) - is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_SW_PULLUP, IS31FL3733_SW_PULLUP); - // Set de-ghost pull-down resistors (CSx) - is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CS_PULLDOWN, IS31FL3733_CS_PULLDOWN); - // Set global current to maximum. - is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3733_GLOBAL_CURRENT); - // Disable software shutdown. - is31fl3733_write_register(addr, IS31FL3733_FUNCTION_REG_CONFIGURATION, ((sync & 0b11) << 6) | ((IS31FL3733_PWM_FREQUENCY & 0b111) << 3) | 0x01); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3733_set_value(int index, uint8_t value) { - is31fl3733_led_t led; - if (index >= 0 && index < IS31FL3733_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void is31fl3733_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3733_LED_COUNT; i++) { - is31fl3733_set_value(i, value); - } -} - -void is31fl3733_set_led_control_register(uint8_t index, bool value) { - is31fl3733_led_t led; - memcpy_P(&led, (&g_is31fl3733_leds[index]), sizeof(led)); - - uint8_t control_register = led.v / 8; - uint8_t bit_value = led.v % 8; - - if (value) { - g_led_control_registers[led.driver][control_register] |= (1 << bit_value); - } else { - g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required[led.driver] = true; -} - -void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3733_select_page(addr, IS31FL3733_COMMAND_PWM); - - // If any of the transactions fail we risk writing dirty page 0, - // refresh page 0 just in case. - if (!is31fl3733_write_pwm_buffer(addr, g_pwm_buffer[index])) { - g_led_control_registers_update_required[index] = true; - } - g_pwm_buffer_update_required[index] = false; - } -} - -void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_led_control_registers_update_required[index]) { - is31fl3733_select_page(addr, IS31FL3733_COMMAND_LED_CONTROL); - - for (int i = 0; i < IS31FL3733_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3733_write_register(addr, i, g_led_control_registers[index][i]); - } - g_led_control_registers_update_required[index] = false; - } -} - -void is31fl3733_flush(void) { - is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_1, 0); -#if defined(IS31FL3733_I2C_ADDRESS_2) - is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_2, 1); -# if defined(IS31FL3733_I2C_ADDRESS_3) - is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_3, 2); -# if defined(IS31FL3733_I2C_ADDRESS_4) - is31fl3733_update_pwm_buffers(IS31FL3733_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3733-simple.h b/drivers/led/issi/is31fl3733-simple.h deleted file mode 100644 index dcb33e448f..0000000000 --- a/drivers/led/issi/is31fl3733-simple.h +++ /dev/null @@ -1,367 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2021 Doni Crosby - * Copyright 2021 Leo Deng - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef ISSI_TIMEOUT -# define IS31FL3733_I2C_TIMEOUT ISSI_TIMEOUT -#endif -#ifdef ISSI_PERSISTENCE -# define IS31FL3733_I2C_PERSISTENCE ISSI_PERSISTENCE -#endif -#ifdef ISSI_PWM_FREQUENCY -# define IS31FL3733_PWM_FREQUENCY ISSI_PWM_FREQUENCY -#endif -#ifdef ISSI_SWPULLUP -# define IS31FL3733_SW_PULLUP ISSI_SWPULLUP -#endif -#ifdef ISSI_CSPULLUP -# define IS31FL3733_CS_PULLDOWN ISSI_CSPULLUP -#endif -#ifdef ISSI_GLOBALCURRENT -# define IS31FL3733_GLOBAL_CURRENT ISSI_GLOBALCURRENT -#endif - -#define is31_led is31fl3733_led_t -#define g_is31_leds g_is31fl3733_leds - -#define PUR_0R IS31FL3733_PUR_0_OHM -#define PUR_05KR IS31FL3733_PUR_1K_OHM -#define PUR_3KR IS31FL3733_PUR_2K_OHM -#define PUR_4KR IS31FL3733_PUR_4K_OHM -#define PUR_8KR IS31FL3733_PUR_8K_OHM -#define PUR_16KR IS31FL3733_PUR_16K_OHM -#define PUR_32KR IS31FL3733_PUR_32K_OHM -// ======== - -#define IS31FL3733_REG_INTERRUPT_MASK 0xF0 -#define IS31FL3733_REG_INTERRUPT_STATUS 0xF1 - -#define IS31FL3733_REG_COMMAND 0xFD - -#define IS31FL3733_COMMAND_LED_CONTROL 0x00 -#define IS31FL3733_COMMAND_PWM 0x01 -#define IS31FL3733_COMMAND_AUTO_BREATH 0x02 -#define IS31FL3733_COMMAND_FUNCTION 0x03 - -#define IS31FL3733_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3733_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3733_FUNCTION_REG_SW_PULLUP 0x0F -#define IS31FL3733_FUNCTION_REG_CS_PULLDOWN 0x10 -#define IS31FL3733_FUNCTION_REG_RESET 0x11 - -#define IS31FL3733_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3733_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3733_I2C_ADDRESS_GND_GND 0x50 -#define IS31FL3733_I2C_ADDRESS_GND_SCL 0x51 -#define IS31FL3733_I2C_ADDRESS_GND_SDA 0x52 -#define IS31FL3733_I2C_ADDRESS_GND_VCC 0x53 -#define IS31FL3733_I2C_ADDRESS_SCL_GND 0x54 -#define IS31FL3733_I2C_ADDRESS_SCL_SCL 0x55 -#define IS31FL3733_I2C_ADDRESS_SCL_SDA 0x56 -#define IS31FL3733_I2C_ADDRESS_SCL_VCC 0x57 -#define IS31FL3733_I2C_ADDRESS_SDA_GND 0x58 -#define IS31FL3733_I2C_ADDRESS_SDA_SCL 0x59 -#define IS31FL3733_I2C_ADDRESS_SDA_SDA 0x5A -#define IS31FL3733_I2C_ADDRESS_SDA_VCC 0x5B -#define IS31FL3733_I2C_ADDRESS_VCC_GND 0x5C -#define IS31FL3733_I2C_ADDRESS_VCC_SCL 0x5D -#define IS31FL3733_I2C_ADDRESS_VCC_SDA 0x5E -#define IS31FL3733_I2C_ADDRESS_VCC_VCC 0x5F - -#if defined(LED_MATRIX_IS31FL3733) -# define IS31FL3733_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3733_I2C_ADDRESS_4) -# define IS31FL3733_DRIVER_COUNT 4 -#elif defined(IS31FL3733_I2C_ADDRESS_3) -# define IS31FL3733_DRIVER_COUNT 3 -#elif defined(IS31FL3733_I2C_ADDRESS_2) -# define IS31FL3733_DRIVER_COUNT 2 -#elif defined(IS31FL3733_I2C_ADDRESS_1) -# define IS31FL3733_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3733_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3733_led_t; - -extern const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT]; - -void is31fl3733_init_drivers(void); -void is31fl3733_init(uint8_t addr, uint8_t sync); -bool is31fl3733_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3733_select_page(uint8_t addr, uint8_t page); -bool is31fl3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3733_set_value(int index, uint8_t value); -void is31fl3733_set_value_all(uint8_t value); - -void is31fl3733_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void is31fl3733_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3733_update_led_control_registers(uint8_t addr, uint8_t index); - -void is31fl3733_flush(void); - -#define IS31FL3733_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3733_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3733_PDR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3733_PDR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3733_PDR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3733_PDR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3733_PDR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3733_PDR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3733_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3733_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3733_PUR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3733_PUR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3733_PUR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3733_PUR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3733_PUR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3733_PUR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3733_PWM_FREQUENCY_8K4_HZ 0b000 -#define IS31FL3733_PWM_FREQUENCY_4K2_HZ 0b001 -#define IS31FL3733_PWM_FREQUENCY_26K7_HZ 0b010 -#define IS31FL3733_PWM_FREQUENCY_2K1_HZ 0b011 -#define IS31FL3733_PWM_FREQUENCY_1K05_HZ 0b100 - -#define IS31FL3733_SYNC_NONE 0b00 -#define IS31FL3733_SYNC_MASTER 0b01 -#define IS31FL3733_SYNC_SLAVE 0b10 - -#define A_1 0x00 -#define A_2 0x01 -#define A_3 0x02 -#define A_4 0x03 -#define A_5 0x04 -#define A_6 0x05 -#define A_7 0x06 -#define A_8 0x07 -#define A_9 0x08 -#define A_10 0x09 -#define A_11 0x0A -#define A_12 0x0B -#define A_13 0x0C -#define A_14 0x0D -#define A_15 0x0E -#define A_16 0x0F - -#define B_1 0x10 -#define B_2 0x11 -#define B_3 0x12 -#define B_4 0x13 -#define B_5 0x14 -#define B_6 0x15 -#define B_7 0x16 -#define B_8 0x17 -#define B_9 0x18 -#define B_10 0x19 -#define B_11 0x1A -#define B_12 0x1B -#define B_13 0x1C -#define B_14 0x1D -#define B_15 0x1E -#define B_16 0x1F - -#define C_1 0x20 -#define C_2 0x21 -#define C_3 0x22 -#define C_4 0x23 -#define C_5 0x24 -#define C_6 0x25 -#define C_7 0x26 -#define C_8 0x27 -#define C_9 0x28 -#define C_10 0x29 -#define C_11 0x2A -#define C_12 0x2B -#define C_13 0x2C -#define C_14 0x2D -#define C_15 0x2E -#define C_16 0x2F - -#define D_1 0x30 -#define D_2 0x31 -#define D_3 0x32 -#define D_4 0x33 -#define D_5 0x34 -#define D_6 0x35 -#define D_7 0x36 -#define D_8 0x37 -#define D_9 0x38 -#define D_10 0x39 -#define D_11 0x3A -#define D_12 0x3B -#define D_13 0x3C -#define D_14 0x3D -#define D_15 0x3E -#define D_16 0x3F - -#define E_1 0x40 -#define E_2 0x41 -#define E_3 0x42 -#define E_4 0x43 -#define E_5 0x44 -#define E_6 0x45 -#define E_7 0x46 -#define E_8 0x47 -#define E_9 0x48 -#define E_10 0x49 -#define E_11 0x4A -#define E_12 0x4B -#define E_13 0x4C -#define E_14 0x4D -#define E_15 0x4E -#define E_16 0x4F - -#define F_1 0x50 -#define F_2 0x51 -#define F_3 0x52 -#define F_4 0x53 -#define F_5 0x54 -#define F_6 0x55 -#define F_7 0x56 -#define F_8 0x57 -#define F_9 0x58 -#define F_10 0x59 -#define F_11 0x5A -#define F_12 0x5B -#define F_13 0x5C -#define F_14 0x5D -#define F_15 0x5E -#define F_16 0x5F - -#define G_1 0x60 -#define G_2 0x61 -#define G_3 0x62 -#define G_4 0x63 -#define G_5 0x64 -#define G_6 0x65 -#define G_7 0x66 -#define G_8 0x67 -#define G_9 0x68 -#define G_10 0x69 -#define G_11 0x6A -#define G_12 0x6B -#define G_13 0x6C -#define G_14 0x6D -#define G_15 0x6E -#define G_16 0x6F - -#define H_1 0x70 -#define H_2 0x71 -#define H_3 0x72 -#define H_4 0x73 -#define H_5 0x74 -#define H_6 0x75 -#define H_7 0x76 -#define H_8 0x77 -#define H_9 0x78 -#define H_10 0x79 -#define H_11 0x7A -#define H_12 0x7B -#define H_13 0x7C -#define H_14 0x7D -#define H_15 0x7E -#define H_16 0x7F - -#define I_1 0x80 -#define I_2 0x81 -#define I_3 0x82 -#define I_4 0x83 -#define I_5 0x84 -#define I_6 0x85 -#define I_7 0x86 -#define I_8 0x87 -#define I_9 0x88 -#define I_10 0x89 -#define I_11 0x8A -#define I_12 0x8B -#define I_13 0x8C -#define I_14 0x8D -#define I_15 0x8E -#define I_16 0x8F - -#define J_1 0x90 -#define J_2 0x91 -#define J_3 0x92 -#define J_4 0x93 -#define J_5 0x94 -#define J_6 0x95 -#define J_7 0x96 -#define J_8 0x97 -#define J_9 0x98 -#define J_10 0x99 -#define J_11 0x9A -#define J_12 0x9B -#define J_13 0x9C -#define J_14 0x9D -#define J_15 0x9E -#define J_16 0x9F - -#define K_1 0xA0 -#define K_2 0xA1 -#define K_3 0xA2 -#define K_4 0xA3 -#define K_5 0xA4 -#define K_6 0xA5 -#define K_7 0xA6 -#define K_8 0xA7 -#define K_9 0xA8 -#define K_10 0xA9 -#define K_11 0xAA -#define K_12 0xAB -#define K_13 0xAC -#define K_14 0xAD -#define K_15 0xAE -#define K_16 0xAF - -#define L_1 0xB0 -#define L_2 0xB1 -#define L_3 0xB2 -#define L_4 0xB3 -#define L_5 0xB4 -#define L_6 0xB5 -#define L_7 0xB6 -#define L_8 0xB7 -#define L_9 0xB8 -#define L_10 0xB9 -#define L_11 0xBA -#define L_12 0xBB -#define L_13 0xBC -#define L_14 0xBD -#define L_15 0xBE -#define L_16 0xBF diff --git a/drivers/led/issi/is31fl3736-mono.c b/drivers/led/issi/is31fl3736-mono.c new file mode 100644 index 0000000000..5ced65aa06 --- /dev/null +++ b/drivers/led/issi/is31fl3736-mono.c @@ -0,0 +1,244 @@ +/* Copyright 2018 Jason Williams (Wilba) + * Copyright 2021 Doni Crosby + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3736-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3736_PWM_REGISTER_COUNT 192 // actually 96 +#define IS31FL3736_LED_CONTROL_REGISTER_COUNT 24 + +#ifndef IS31FL3736_I2C_TIMEOUT +# define IS31FL3736_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3736_I2C_PERSISTENCE +# define IS31FL3736_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3736_PWM_FREQUENCY +# define IS31FL3736_PWM_FREQUENCY IS31FL3736_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3736B only +#endif + +#ifndef IS31FL3736_SW_PULLUP +# define IS31FL3736_SW_PULLUP IS31FL3736_PUR_0_OHM +#endif + +#ifndef IS31FL3736_CS_PULLDOWN +# define IS31FL3736_CS_PULLDOWN IS31FL3736_PDR_0_OHM +#endif + +#ifndef IS31FL3736_GLOBAL_CURRENT +# define IS31FL3736_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20]; + +// These buffers match the IS31FL3736 PWM registers. +// The control buffers match the page 0 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[IS31FL3736_DRIVER_COUNT][IS31FL3736_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3736_DRIVER_COUNT] = {false}; + +uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false}; + +void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3736_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT); +#endif +} + +void is31fl3736_select_page(uint8_t addr, uint8_t page) { + is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC); + is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, page); +} + +void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // assumes page 1 is already selected + + // transmit PWM registers in 12 transfers of 16 bytes + // i2c_transfer_buffer[] is 20 bytes + + // iterate over the pwm_buffer contents at 16 byte intervals + for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // copy the data from i to i+15 + // device will auto-increment register for data after the first byte + // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3736_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT); +#endif + } +} + +void is31fl3736_init_drivers(void) { + i2c_init(); + + is31fl3736_init(IS31FL3736_I2C_ADDRESS_1); +#if defined(IS31FL3736_I2C_ADDRESS_2) + is31fl3736_init(IS31FL3736_I2C_ADDRESS_2); +# if defined(IS31FL3736_I2C_ADDRESS_3) + is31fl3736_init(IS31FL3736_I2C_ADDRESS_3); +# if defined(IS31FL3736_I2C_ADDRESS_4) + is31fl3736_init(IS31FL3736_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3736_LED_COUNT; i++) { + is31fl3736_set_led_control_register(i, true); + } + + is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_1, 0); +#if defined(IS31FL3736_I2C_ADDRESS_2) + is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_2, 1); +# if defined(IS31FL3736_I2C_ADDRESS_3) + is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_3, 2); +# if defined(IS31FL3736_I2C_ADDRESS_4) + is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3736_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3736_write_register(addr, i, 0x00); + } + + is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); + + // Set PWM on all LEDs to 0 + // No need to setup Breath registers to PWM as that is the default. + for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) { + is31fl3736_write_register(addr, i, 0x00); + } + + is31fl3736_select_page(addr, IS31FL3736_COMMAND_FUNCTION); + + // Set de-ghost pull-up resistors (SWx) + is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP); + // Set de-ghost pull-down resistors (CSx) + is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CS_PULLDOWN, IS31FL3736_CS_PULLDOWN); + // Set global current to maximum. + is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3736_GLOBAL_CURRENT); + // Disable software shutdown. + is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CONFIGURATION, ((IS31FL3736_PWM_FREQUENCY & 0b111) << 3) | 0x01); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3736_set_value(int index, uint8_t value) { + is31fl3736_led_t led; + if (index >= 0 && index < IS31FL3736_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3736_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3736_LED_COUNT; i++) { + is31fl3736_set_value(i, value); + } +} + +void is31fl3736_set_led_control_register(uint8_t index, bool value) { + is31fl3736_led_t led; + memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); + + // The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so: + // A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E + // B1=0x10 B2=0x12 B3=0x14 + // But also, the LED control registers (0x00 to 0x17) are also interleaved, so: + // A1-A4=0x00 A5-A8=0x01 + + uint8_t control_register = led.v / 8; + uint8_t bit_value = led.v % 8; + + if (value) { + g_led_control_registers[led.driver][control_register] |= (1 << bit_value); + } else { + g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required[led.driver] = true; +} + +void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); + + is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_led_control_registers_update_required[index]) { + is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL); + + for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3736_write_register(addr, i, g_led_control_registers[index][i]); + } + g_led_control_registers_update_required[index] = false; + } +} + +void is31fl3736_flush(void) { + is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_1, 0); +#if defined(IS31FL3736_I2C_ADDRESS_2) + is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_2, 1); +# if defined(IS31FL3736_I2C_ADDRESS_3) + is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_3, 2); +# if defined(IS31FL3736_I2C_ADDRESS_4) + is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3736-mono.h b/drivers/led/issi/is31fl3736-mono.h new file mode 100644 index 0000000000..5e80eb646a --- /dev/null +++ b/drivers/led/issi/is31fl3736-mono.h @@ -0,0 +1,262 @@ +/* Copyright 2018 Jason Williams (Wilba) + * Copyright 2021 Doni Crosby + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef ISSI_TIMEOUT +# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT +#endif +#ifdef ISSI_PERSISTENCE +# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE +#endif +#ifdef ISSI_SWPULLUP +# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP +#endif +#ifdef ISSI_CSPULLUP +# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP +#endif +#ifdef ISSI_GLOBALCURRENT +# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT +#endif + +#define is31_led is31fl3736_led_t +#define g_is31_leds g_is31fl3736_leds + +#define PUR_0R IS31FL3736_PUR_0_OHM +#define PUR_05KR IS31FL3736_PUR_05K_OHM +#define PUR_1KR IS31FL3736_PUR_1K_OHM +#define PUR_2KR IS31FL3736_PUR_2K_OHM +#define PUR_4KR IS31FL3736_PUR_4K_OHM +#define PUR_8KR IS31FL3736_PUR_8K_OHM +#define PUR_16KR IS31FL3736_PUR_16K_OHM +#define PUR_32KR IS31FL3736_PUR_32K_OHM +// ======== + +#define IS31FL3736_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1 + +#define IS31FL3736_REG_COMMAND 0xFD + +#define IS31FL3736_COMMAND_LED_CONTROL 0x00 +#define IS31FL3736_COMMAND_PWM 0x01 +#define IS31FL3736_COMMAND_AUTO_BREATH 0x02 +#define IS31FL3736_COMMAND_FUNCTION 0x03 + +#define IS31FL3736_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3736_FUNCTION_REG_SW_PULLUP 0x0F +#define IS31FL3736_FUNCTION_REG_CS_PULLDOWN 0x10 +#define IS31FL3736_FUNCTION_REG_RESET 0x11 + +#define IS31FL3736_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3736_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3736_I2C_ADDRESS_GND_GND 0x50 +#define IS31FL3736_I2C_ADDRESS_GND_SCL 0x51 +#define IS31FL3736_I2C_ADDRESS_GND_SDA 0x52 +#define IS31FL3736_I2C_ADDRESS_GND_VCC 0x53 +#define IS31FL3736_I2C_ADDRESS_SCL_GND 0x54 +#define IS31FL3736_I2C_ADDRESS_SCL_SCL 0x55 +#define IS31FL3736_I2C_ADDRESS_SCL_SDA 0x56 +#define IS31FL3736_I2C_ADDRESS_SCL_VCC 0x57 +#define IS31FL3736_I2C_ADDRESS_SDA_GND 0x58 +#define IS31FL3736_I2C_ADDRESS_SDA_SCL 0x59 +#define IS31FL3736_I2C_ADDRESS_SDA_SDA 0x5A +#define IS31FL3736_I2C_ADDRESS_SDA_VCC 0x5B +#define IS31FL3736_I2C_ADDRESS_VCC_GND 0x5C +#define IS31FL3736_I2C_ADDRESS_VCC_SCL 0x5D +#define IS31FL3736_I2C_ADDRESS_VCC_SDA 0x5E +#define IS31FL3736_I2C_ADDRESS_VCC_VCC 0x5F + +#if defined(LED_MATRIX_IS31FL3736) +# define IS31FL3736_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3736_I2C_ADDRESS_4) +# define IS31FL3736_DRIVER_COUNT 4 +#elif defined(IS31FL3736_I2C_ADDRESS_3) +# define IS31FL3736_DRIVER_COUNT 3 +#elif defined(IS31FL3736_I2C_ADDRESS_2) +# define IS31FL3736_DRIVER_COUNT 2 +#elif defined(IS31FL3736_I2C_ADDRESS_1) +# define IS31FL3736_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3736_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3736_led_t; + +extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT]; + +void is31fl3736_init_drivers(void); +void is31fl3736_init(uint8_t addr); +void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3736_select_page(uint8_t addr, uint8_t page); +void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3736_set_value(int index, uint8_t value); +void is31fl3736_set_value_all(uint8_t value); + +void is31fl3736_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index); + +void is31fl3736_flush(void); + +#define IS31FL3736_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3736_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3736_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3736_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3736_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3736_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3736_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3736_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3736_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3736_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3736_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3736_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3736_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3736_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3736_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3736_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3736_PWM_FREQUENCY_8K4_HZ 0b000 +#define IS31FL3736_PWM_FREQUENCY_4K2_HZ 0b001 +#define IS31FL3736_PWM_FREQUENCY_26K7_HZ 0b010 +#define IS31FL3736_PWM_FREQUENCY_2K1_HZ 0b011 +#define IS31FL3736_PWM_FREQUENCY_1K05_HZ 0b100 + +#define A_1 0x00 +#define A_2 0x02 +#define A_3 0x04 +#define A_4 0x06 +#define A_5 0x08 +#define A_6 0x0A +#define A_7 0x0C +#define A_8 0x0E + +#define B_1 0x10 +#define B_2 0x12 +#define B_3 0x14 +#define B_4 0x16 +#define B_5 0x18 +#define B_6 0x1A +#define B_7 0x1C +#define B_8 0x1E + +#define C_1 0x20 +#define C_2 0x22 +#define C_3 0x24 +#define C_4 0x26 +#define C_5 0x28 +#define C_6 0x2A +#define C_7 0x2C +#define C_8 0x2E + +#define D_1 0x30 +#define D_2 0x32 +#define D_3 0x34 +#define D_4 0x36 +#define D_5 0x38 +#define D_6 0x3A +#define D_7 0x3C +#define D_8 0x3E + +#define E_1 0x40 +#define E_2 0x42 +#define E_3 0x44 +#define E_4 0x46 +#define E_5 0x48 +#define E_6 0x4A +#define E_7 0x4C +#define E_8 0x4E + +#define F_1 0x50 +#define F_2 0x52 +#define F_3 0x54 +#define F_4 0x56 +#define F_5 0x58 +#define F_6 0x5A +#define F_7 0x5C +#define F_8 0x5E + +#define G_1 0x60 +#define G_2 0x62 +#define G_3 0x64 +#define G_4 0x66 +#define G_5 0x68 +#define G_6 0x6A +#define G_7 0x6C +#define G_8 0x6E + +#define H_1 0x70 +#define H_2 0x72 +#define H_3 0x74 +#define H_4 0x76 +#define H_5 0x78 +#define H_6 0x7A +#define H_7 0x7C +#define H_8 0x7E + +#define I_1 0x80 +#define I_2 0x82 +#define I_3 0x84 +#define I_4 0x86 +#define I_5 0x88 +#define I_6 0x8A +#define I_7 0x8C +#define I_8 0x8E + +#define J_1 0x90 +#define J_2 0x92 +#define J_3 0x94 +#define J_4 0x96 +#define J_5 0x98 +#define J_6 0x9A +#define J_7 0x9C +#define J_8 0x9E + +#define K_1 0xA0 +#define K_2 0xA2 +#define K_3 0xA4 +#define K_4 0xA6 +#define K_5 0xA8 +#define K_6 0xAA +#define K_7 0xAC +#define K_8 0xAE + +#define L_1 0xB0 +#define L_2 0xB2 +#define L_3 0xB4 +#define L_4 0xB6 +#define L_5 0xB8 +#define L_6 0xBA +#define L_7 0xBC +#define L_8 0xBE diff --git a/drivers/led/issi/is31fl3736-simple.c b/drivers/led/issi/is31fl3736-simple.c deleted file mode 100644 index ac5e0fb453..0000000000 --- a/drivers/led/issi/is31fl3736-simple.c +++ /dev/null @@ -1,244 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * Copyright 2021 Doni Crosby - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31fl3736-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3736_PWM_REGISTER_COUNT 192 // actually 96 -#define IS31FL3736_LED_CONTROL_REGISTER_COUNT 24 - -#ifndef IS31FL3736_I2C_TIMEOUT -# define IS31FL3736_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3736_I2C_PERSISTENCE -# define IS31FL3736_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3736_PWM_FREQUENCY -# define IS31FL3736_PWM_FREQUENCY IS31FL3736_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3736B only -#endif - -#ifndef IS31FL3736_SW_PULLUP -# define IS31FL3736_SW_PULLUP IS31FL3736_PUR_0_OHM -#endif - -#ifndef IS31FL3736_CS_PULLDOWN -# define IS31FL3736_CS_PULLDOWN IS31FL3736_PDR_0_OHM -#endif - -#ifndef IS31FL3736_GLOBAL_CURRENT -# define IS31FL3736_GLOBAL_CURRENT 0xFF -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the IS31FL3736 PWM registers. -// The control buffers match the page 0 LED On/Off registers. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in is31fl3736_write_pwm_buffer() but it's -// probably not worth the extra complexity. -uint8_t g_pwm_buffer[IS31FL3736_DRIVER_COUNT][IS31FL3736_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3736_DRIVER_COUNT] = {false}; - -uint8_t g_led_control_registers[IS31FL3736_DRIVER_COUNT][IS31FL3736_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required[IS31FL3736_DRIVER_COUNT] = {false}; - -void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3736_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3736_I2C_TIMEOUT); -#endif -} - -void is31fl3736_select_page(uint8_t addr, uint8_t page) { - is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND_WRITE_LOCK, IS31FL3736_COMMAND_WRITE_LOCK_MAGIC); - is31fl3736_write_register(addr, IS31FL3736_REG_COMMAND, page); -} - -void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // assumes page 1 is already selected - - // transmit PWM registers in 12 transfers of 16 bytes - // i2c_transfer_buffer[] is 20 bytes - - // iterate over the pwm_buffer contents at 16 byte intervals - for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i; - // copy the data from i to i+15 - // device will auto-increment register for data after the first byte - // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3736_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3736_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3736_I2C_TIMEOUT); -#endif - } -} - -void is31fl3736_init_drivers(void) { - i2c_init(); - - is31fl3736_init(IS31FL3736_I2C_ADDRESS_1); -#if defined(IS31FL3736_I2C_ADDRESS_2) - is31fl3736_init(IS31FL3736_I2C_ADDRESS_2); -# if defined(IS31FL3736_I2C_ADDRESS_3) - is31fl3736_init(IS31FL3736_I2C_ADDRESS_3); -# if defined(IS31FL3736_I2C_ADDRESS_4) - is31fl3736_init(IS31FL3736_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3736_LED_COUNT; i++) { - is31fl3736_set_led_control_register(i, true); - } - - is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_1, 0); -#if defined(IS31FL3736_I2C_ADDRESS_2) - is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_2, 1); -# if defined(IS31FL3736_I2C_ADDRESS_3) - is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_3, 2); -# if defined(IS31FL3736_I2C_ADDRESS_4) - is31fl3736_update_led_control_registers(IS31FL3736_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3736_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3736_write_register(addr, i, 0x00); - } - - is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); - - // Set PWM on all LEDs to 0 - // No need to setup Breath registers to PWM as that is the default. - for (int i = 0; i < IS31FL3736_PWM_REGISTER_COUNT; i++) { - is31fl3736_write_register(addr, i, 0x00); - } - - is31fl3736_select_page(addr, IS31FL3736_COMMAND_FUNCTION); - - // Set de-ghost pull-up resistors (SWx) - is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_SW_PULLUP, IS31FL3736_SW_PULLUP); - // Set de-ghost pull-down resistors (CSx) - is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CS_PULLDOWN, IS31FL3736_CS_PULLDOWN); - // Set global current to maximum. - is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3736_GLOBAL_CURRENT); - // Disable software shutdown. - is31fl3736_write_register(addr, IS31FL3736_FUNCTION_REG_CONFIGURATION, ((IS31FL3736_PWM_FREQUENCY & 0b111) << 3) | 0x01); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3736_set_value(int index, uint8_t value) { - is31fl3736_led_t led; - if (index >= 0 && index < IS31FL3736_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void is31fl3736_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3736_LED_COUNT; i++) { - is31fl3736_set_value(i, value); - } -} - -void is31fl3736_set_led_control_register(uint8_t index, bool value) { - is31fl3736_led_t led; - memcpy_P(&led, (&g_is31fl3736_leds[index]), sizeof(led)); - - // The PWM register for a matrix position (0x00 to 0xBF) is interleaved, so: - // A1=0x00 A2=0x02 A3=0x04 A4=0x06 A5=0x08 A6=0x0A A7=0x0C A8=0x0E - // B1=0x10 B2=0x12 B3=0x14 - // But also, the LED control registers (0x00 to 0x17) are also interleaved, so: - // A1-A4=0x00 A5-A8=0x01 - - uint8_t control_register = led.v / 8; - uint8_t bit_value = led.v % 8; - - if (value) { - g_led_control_registers[led.driver][control_register] |= (1 << bit_value); - } else { - g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required[led.driver] = true; -} - -void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3736_select_page(addr, IS31FL3736_COMMAND_PWM); - - is31fl3736_write_pwm_buffer(addr, g_pwm_buffer[index]); - g_pwm_buffer_update_required[index] = false; - } -} - -void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_led_control_registers_update_required[index]) { - is31fl3736_select_page(addr, IS31FL3736_COMMAND_LED_CONTROL); - - for (int i = 0; i < IS31FL3736_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3736_write_register(addr, i, g_led_control_registers[index][i]); - } - g_led_control_registers_update_required[index] = false; - } -} - -void is31fl3736_flush(void) { - is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_1, 0); -#if defined(IS31FL3736_I2C_ADDRESS_2) - is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_2, 1); -# if defined(IS31FL3736_I2C_ADDRESS_3) - is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_3, 2); -# if defined(IS31FL3736_I2C_ADDRESS_4) - is31fl3736_update_pwm_buffers(IS31FL3736_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3736-simple.h b/drivers/led/issi/is31fl3736-simple.h deleted file mode 100644 index 5e80eb646a..0000000000 --- a/drivers/led/issi/is31fl3736-simple.h +++ /dev/null @@ -1,262 +0,0 @@ -/* Copyright 2018 Jason Williams (Wilba) - * Copyright 2021 Doni Crosby - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef ISSI_TIMEOUT -# define IS31FL3736_I2C_TIMEOUT ISSI_TIMEOUT -#endif -#ifdef ISSI_PERSISTENCE -# define IS31FL3736_I2C_PERSISTENCE ISSI_PERSISTENCE -#endif -#ifdef ISSI_SWPULLUP -# define IS31FL3736_SW_PULLUP ISSI_SWPULLUP -#endif -#ifdef ISSI_CSPULLUP -# define IS31FL3736_CS_PULLDOWN ISSI_CSPULLUP -#endif -#ifdef ISSI_GLOBALCURRENT -# define IS31FL3736_GLOBAL_CURRENT ISSI_GLOBALCURRENT -#endif - -#define is31_led is31fl3736_led_t -#define g_is31_leds g_is31fl3736_leds - -#define PUR_0R IS31FL3736_PUR_0_OHM -#define PUR_05KR IS31FL3736_PUR_05K_OHM -#define PUR_1KR IS31FL3736_PUR_1K_OHM -#define PUR_2KR IS31FL3736_PUR_2K_OHM -#define PUR_4KR IS31FL3736_PUR_4K_OHM -#define PUR_8KR IS31FL3736_PUR_8K_OHM -#define PUR_16KR IS31FL3736_PUR_16K_OHM -#define PUR_32KR IS31FL3736_PUR_32K_OHM -// ======== - -#define IS31FL3736_REG_INTERRUPT_MASK 0xF0 -#define IS31FL3736_REG_INTERRUPT_STATUS 0xF1 - -#define IS31FL3736_REG_COMMAND 0xFD - -#define IS31FL3736_COMMAND_LED_CONTROL 0x00 -#define IS31FL3736_COMMAND_PWM 0x01 -#define IS31FL3736_COMMAND_AUTO_BREATH 0x02 -#define IS31FL3736_COMMAND_FUNCTION 0x03 - -#define IS31FL3736_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3736_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3736_FUNCTION_REG_SW_PULLUP 0x0F -#define IS31FL3736_FUNCTION_REG_CS_PULLDOWN 0x10 -#define IS31FL3736_FUNCTION_REG_RESET 0x11 - -#define IS31FL3736_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3736_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3736_I2C_ADDRESS_GND_GND 0x50 -#define IS31FL3736_I2C_ADDRESS_GND_SCL 0x51 -#define IS31FL3736_I2C_ADDRESS_GND_SDA 0x52 -#define IS31FL3736_I2C_ADDRESS_GND_VCC 0x53 -#define IS31FL3736_I2C_ADDRESS_SCL_GND 0x54 -#define IS31FL3736_I2C_ADDRESS_SCL_SCL 0x55 -#define IS31FL3736_I2C_ADDRESS_SCL_SDA 0x56 -#define IS31FL3736_I2C_ADDRESS_SCL_VCC 0x57 -#define IS31FL3736_I2C_ADDRESS_SDA_GND 0x58 -#define IS31FL3736_I2C_ADDRESS_SDA_SCL 0x59 -#define IS31FL3736_I2C_ADDRESS_SDA_SDA 0x5A -#define IS31FL3736_I2C_ADDRESS_SDA_VCC 0x5B -#define IS31FL3736_I2C_ADDRESS_VCC_GND 0x5C -#define IS31FL3736_I2C_ADDRESS_VCC_SCL 0x5D -#define IS31FL3736_I2C_ADDRESS_VCC_SDA 0x5E -#define IS31FL3736_I2C_ADDRESS_VCC_VCC 0x5F - -#if defined(LED_MATRIX_IS31FL3736) -# define IS31FL3736_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3736_I2C_ADDRESS_4) -# define IS31FL3736_DRIVER_COUNT 4 -#elif defined(IS31FL3736_I2C_ADDRESS_3) -# define IS31FL3736_DRIVER_COUNT 3 -#elif defined(IS31FL3736_I2C_ADDRESS_2) -# define IS31FL3736_DRIVER_COUNT 2 -#elif defined(IS31FL3736_I2C_ADDRESS_1) -# define IS31FL3736_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3736_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3736_led_t; - -extern const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT]; - -void is31fl3736_init_drivers(void); -void is31fl3736_init(uint8_t addr); -void is31fl3736_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3736_select_page(uint8_t addr, uint8_t page); -void is31fl3736_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3736_set_value(int index, uint8_t value); -void is31fl3736_set_value_all(uint8_t value); - -void is31fl3736_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void is31fl3736_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3736_update_led_control_registers(uint8_t addr, uint8_t index); - -void is31fl3736_flush(void); - -#define IS31FL3736_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3736_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3736_PDR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3736_PDR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3736_PDR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3736_PDR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3736_PDR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3736_PDR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3736_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3736_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3736_PUR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3736_PUR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3736_PUR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3736_PUR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3736_PUR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3736_PUR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3736_PWM_FREQUENCY_8K4_HZ 0b000 -#define IS31FL3736_PWM_FREQUENCY_4K2_HZ 0b001 -#define IS31FL3736_PWM_FREQUENCY_26K7_HZ 0b010 -#define IS31FL3736_PWM_FREQUENCY_2K1_HZ 0b011 -#define IS31FL3736_PWM_FREQUENCY_1K05_HZ 0b100 - -#define A_1 0x00 -#define A_2 0x02 -#define A_3 0x04 -#define A_4 0x06 -#define A_5 0x08 -#define A_6 0x0A -#define A_7 0x0C -#define A_8 0x0E - -#define B_1 0x10 -#define B_2 0x12 -#define B_3 0x14 -#define B_4 0x16 -#define B_5 0x18 -#define B_6 0x1A -#define B_7 0x1C -#define B_8 0x1E - -#define C_1 0x20 -#define C_2 0x22 -#define C_3 0x24 -#define C_4 0x26 -#define C_5 0x28 -#define C_6 0x2A -#define C_7 0x2C -#define C_8 0x2E - -#define D_1 0x30 -#define D_2 0x32 -#define D_3 0x34 -#define D_4 0x36 -#define D_5 0x38 -#define D_6 0x3A -#define D_7 0x3C -#define D_8 0x3E - -#define E_1 0x40 -#define E_2 0x42 -#define E_3 0x44 -#define E_4 0x46 -#define E_5 0x48 -#define E_6 0x4A -#define E_7 0x4C -#define E_8 0x4E - -#define F_1 0x50 -#define F_2 0x52 -#define F_3 0x54 -#define F_4 0x56 -#define F_5 0x58 -#define F_6 0x5A -#define F_7 0x5C -#define F_8 0x5E - -#define G_1 0x60 -#define G_2 0x62 -#define G_3 0x64 -#define G_4 0x66 -#define G_5 0x68 -#define G_6 0x6A -#define G_7 0x6C -#define G_8 0x6E - -#define H_1 0x70 -#define H_2 0x72 -#define H_3 0x74 -#define H_4 0x76 -#define H_5 0x78 -#define H_6 0x7A -#define H_7 0x7C -#define H_8 0x7E - -#define I_1 0x80 -#define I_2 0x82 -#define I_3 0x84 -#define I_4 0x86 -#define I_5 0x88 -#define I_6 0x8A -#define I_7 0x8C -#define I_8 0x8E - -#define J_1 0x90 -#define J_2 0x92 -#define J_3 0x94 -#define J_4 0x96 -#define J_5 0x98 -#define J_6 0x9A -#define J_7 0x9C -#define J_8 0x9E - -#define K_1 0xA0 -#define K_2 0xA2 -#define K_3 0xA4 -#define K_4 0xA6 -#define K_5 0xA8 -#define K_6 0xAA -#define K_7 0xAC -#define K_8 0xAE - -#define L_1 0xB0 -#define L_2 0xB2 -#define L_3 0xB4 -#define L_4 0xB6 -#define L_5 0xB8 -#define L_6 0xBA -#define L_7 0xBC -#define L_8 0xBE diff --git a/drivers/led/issi/is31fl3737-mono.c b/drivers/led/issi/is31fl3737-mono.c new file mode 100644 index 0000000000..56f169550b --- /dev/null +++ b/drivers/led/issi/is31fl3737-mono.c @@ -0,0 +1,241 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2021 Doni Crosby + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3737-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3737_PWM_REGISTER_COUNT 192 // actually 144 +#define IS31FL3737_LED_CONTROL_REGISTER_COUNT 24 + +#ifndef IS31FL3737_I2C_TIMEOUT +# define IS31FL3737_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3737_I2C_PERSISTENCE +# define IS31FL3737_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3737_PWM_FREQUENCY +# define IS31FL3737_PWM_FREQUENCY IS31FL3737_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3737B only +#endif + +#ifndef IS31FL3737_SW_PULLUP +# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM +#endif + +#ifndef IS31FL3737_CS_PULLDOWN +# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM +#endif + +#ifndef IS31FL3737_GLOBAL_CURRENT +# define IS31FL3737_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20]; + +// These buffers match the IS31FL3737 PWM registers. +// The control buffers match the page 0 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's +// probably not worth the extra complexity. + +uint8_t g_pwm_buffer[IS31FL3737_DRIVER_COUNT][IS31FL3737_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3737_DRIVER_COUNT] = {false}; + +uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false}; + +void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3737_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT); +#endif +} + +void is31fl3737_select_page(uint8_t addr, uint8_t page) { + is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC); + is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, page); +} + +void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // assumes page 1 is already selected + + // transmit PWM registers in 12 transfers of 16 bytes + // i2c_transfer_buffer[] is 20 bytes + + // iterate over the pwm_buffer contents at 16 byte intervals + for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // copy the data from i to i+15 + // device will auto-increment register for data after the first byte + // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3737_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT); +#endif + } +} + +void is31fl3737_init_drivers(void) { + i2c_init(); + + is31fl3737_init(IS31FL3737_I2C_ADDRESS_1); +#if defined(IS31FL3737_I2C_ADDRESS_2) + is31fl3737_init(IS31FL3737_I2C_ADDRESS_2); +# if defined(IS31FL3737_I2C_ADDRESS_3) + is31fl3737_init(IS31FL3737_I2C_ADDRESS_3); +# if defined(IS31FL3737_I2C_ADDRESS_4) + is31fl3737_init(IS31FL3737_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3737_LED_COUNT; i++) { + is31fl3737_set_led_control_register(i, true); + } + + is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_1, 0); +#if defined(IS31FL3737_I2C_ADDRESS_2) + is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_2, 1); +# if defined(IS31FL3737_I2C_ADDRESS_3) + is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_3, 2); +# if defined(IS31FL3737_I2C_ADDRESS_4) + is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3737_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3737_write_register(addr, i, 0x00); + } + + is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); + + // Set PWM on all LEDs to 0 + // No need to setup Breath registers to PWM as that is the default. + for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) { + is31fl3737_write_register(addr, i, 0x00); + } + + is31fl3737_select_page(addr, IS31FL3737_COMMAND_FUNCTION); + + // Set de-ghost pull-up resistors (SWx) + is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP); + // Set de-ghost pull-down resistors (CSx) + is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CS_PULLDOWN, IS31FL3737_CS_PULLDOWN); + // Set global current to maximum. + is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3737_GLOBAL_CURRENT); + // Disable software shutdown. + is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CONFIGURATION, ((IS31FL3737_PWM_FREQUENCY & 0b111) << 3) | 0x01); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3737_set_value(int index, uint8_t value) { + is31fl3737_led_t led; + if (index >= 0 && index < IS31FL3737_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3737_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3737_LED_COUNT; i++) { + is31fl3737_set_value(i, value); + } +} + +void is31fl3737_set_led_control_register(uint8_t index, bool value) { + is31fl3737_led_t led; + memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); + + uint8_t control_register = led.v / 8; + uint8_t bit_value = led.v % 8; + + if (value) { + g_led_control_registers[led.driver][control_register] |= (1 << bit_value); + } else { + g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required[led.driver] = true; +} + +void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); + + is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_led_control_registers_update_required[index]) { + is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL); + + for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { + is31fl3737_write_register(addr, i, g_led_control_registers[index][i]); + } + g_led_control_registers_update_required[index] = false; + } +} + +void is31fl3737_flush(void) { + is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_1, 0); +#if defined(IS31FL3737_I2C_ADDRESS_2) + is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_2, 1); +# if defined(IS31FL3737_I2C_ADDRESS_3) + is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_3, 2); +# if defined(IS31FL3737_I2C_ADDRESS_4) + is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3737-mono.h b/drivers/led/issi/is31fl3737-mono.h new file mode 100644 index 0000000000..a11d2ef423 --- /dev/null +++ b/drivers/led/issi/is31fl3737-mono.h @@ -0,0 +1,300 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2021 Doni Crosby + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef ISSI_TIMEOUT +# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT +#endif +#ifdef ISSI_PERSISTENCE +# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE +#endif +#ifdef ISSI_PWM_FREQUENCY +# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY +#endif +#ifdef ISSI_SWPULLUP +# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP +#endif +#ifdef ISSI_CSPULLUP +# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP +#endif +#ifdef ISSI_GLOBALCURRENT +# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT +#endif + +#define PUR_0R IS31FL3737_PUR_0_OHM +#define PUR_05KR IS31FL3737_PUR_0K5_OHM +#define PUR_1KR IS31FL3737_PUR_1K_OHM +#define PUR_2KR IS31FL3737_PUR_2K_OHM +#define PUR_4KR IS31FL3737_PUR_4K_OHM +#define PUR_8KR IS31FL3737_PUR_8K_OHM +#define PUR_16KR IS31FL3737_PUR_16K_OHM +#define PUR_32KR IS31FL3737_PUR_32K_OHM +// ======== + +#define IS31FL3737_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1 + +#define IS31FL3737_REG_COMMAND 0xFD + +#define IS31FL3737_COMMAND_LED_CONTROL 0x00 +#define IS31FL3737_COMMAND_PWM 0x01 +#define IS31FL3737_COMMAND_AUTO_BREATH 0x02 +#define IS31FL3737_COMMAND_FUNCTION 0x03 + +#define IS31FL3737_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3737_FUNCTION_REG_SW_PULLUP 0x0F +#define IS31FL3737_FUNCTION_REG_CS_PULLDOWN 0x10 +#define IS31FL3737_FUNCTION_REG_RESET 0x11 + +#define IS31FL3737_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3737_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3737_I2C_ADDRESS_GND 0x50 +#define IS31FL3737_I2C_ADDRESS_SCL 0x55 +#define IS31FL3737_I2C_ADDRESS_SDA 0x5A +#define IS31FL3737_I2C_ADDRESS_VCC 0x5F + +#if defined(LED_MATRIX_IS31FL3737) +# define IS31FL3737_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3737_I2C_ADDRESS_4) +# define IS31FL3737_DRIVER_COUNT 4 +#elif defined(IS31FL3737_I2C_ADDRESS_3) +# define IS31FL3737_DRIVER_COUNT 3 +#elif defined(IS31FL3737_I2C_ADDRESS_2) +# define IS31FL3737_DRIVER_COUNT 2 +#elif defined(IS31FL3737_I2C_ADDRESS_1) +# define IS31FL3737_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3737_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3737_led_t; + +extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT]; + +void is31fl3737_init_drivers(void); +void is31fl3737_init(uint8_t addr); +void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3737_select_page(uint8_t addr, uint8_t page); +void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3737_set_value(int index, uint8_t value); +void is31fl3737_set_value_all(uint8_t value); + +void is31fl3737_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index); + +void is31fl3737_flush(void); + +#define IS31FL3737_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3737_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3737_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3737_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3737_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3737_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3737_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3737_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3737_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3737_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3737_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3737_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3737_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3737_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3737_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3737_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3737_PWM_FREQUENCY_8K4_HZ 0b000 +#define IS31FL3737_PWM_FREQUENCY_4K2_HZ 0b001 +#define IS31FL3737_PWM_FREQUENCY_26K7_HZ 0b010 +#define IS31FL3737_PWM_FREQUENCY_2K1_HZ 0b011 +#define IS31FL3737_PWM_FREQUENCY_1K05_HZ 0b100 + +#define A_1 0x00 +#define A_2 0x01 +#define A_3 0x02 +#define A_4 0x03 +#define A_5 0x04 +#define A_6 0x05 +#define A_7 0x08 +#define A_8 0x09 +#define A_9 0x0A +#define A_10 0x0B +#define A_11 0x0C +#define A_12 0x0D + +#define B_1 0x10 +#define B_2 0x11 +#define B_3 0x12 +#define B_4 0x13 +#define B_5 0x14 +#define B_6 0x15 +#define B_7 0x18 +#define B_8 0x19 +#define B_9 0x1A +#define B_10 0x1B +#define B_11 0x1C +#define B_12 0x1D + +#define C_1 0x20 +#define C_2 0x21 +#define C_3 0x22 +#define C_4 0x23 +#define C_5 0x24 +#define C_6 0x25 +#define C_7 0x28 +#define C_8 0x29 +#define C_9 0x2A +#define C_10 0x2B +#define C_11 0x2C +#define C_12 0x2D + +#define D_1 0x30 +#define D_2 0x31 +#define D_3 0x32 +#define D_4 0x33 +#define D_5 0x34 +#define D_6 0x35 +#define D_7 0x38 +#define D_8 0x39 +#define D_9 0x3A +#define D_10 0x3B +#define D_11 0x3C +#define D_12 0x3D + +#define E_1 0x40 +#define E_2 0x41 +#define E_3 0x42 +#define E_4 0x43 +#define E_5 0x44 +#define E_6 0x45 +#define E_7 0x48 +#define E_8 0x49 +#define E_9 0x4A +#define E_10 0x4B +#define E_11 0x4C +#define E_12 0x4D + +#define F_1 0x50 +#define F_2 0x51 +#define F_3 0x52 +#define F_4 0x53 +#define F_5 0x54 +#define F_6 0x55 +#define F_7 0x58 +#define F_8 0x59 +#define F_9 0x5A +#define F_10 0x5B +#define F_11 0x5C +#define F_12 0x5D + +#define G_1 0x60 +#define G_2 0x61 +#define G_3 0x62 +#define G_4 0x63 +#define G_5 0x64 +#define G_6 0x65 +#define G_7 0x68 +#define G_8 0x69 +#define G_9 0x6A +#define G_10 0x6B +#define G_11 0x6C +#define G_12 0x6D + +#define H_1 0x70 +#define H_2 0x71 +#define H_3 0x72 +#define H_4 0x73 +#define H_5 0x74 +#define H_6 0x75 +#define H_7 0x78 +#define H_8 0x79 +#define H_9 0x7A +#define H_10 0x7B +#define H_11 0x7C +#define H_12 0x7D + +#define I_1 0x80 +#define I_2 0x81 +#define I_3 0x82 +#define I_4 0x83 +#define I_5 0x84 +#define I_6 0x85 +#define I_7 0x88 +#define I_8 0x89 +#define I_9 0x8A +#define I_10 0x8B +#define I_11 0x8C +#define I_12 0x8D + +#define J_1 0x90 +#define J_2 0x91 +#define J_3 0x92 +#define J_4 0x93 +#define J_5 0x94 +#define J_6 0x95 +#define J_7 0x98 +#define J_8 0x99 +#define J_9 0x9A +#define J_10 0x9B +#define J_11 0x9C +#define J_12 0x9D + +#define K_1 0xA0 +#define K_2 0xA1 +#define K_3 0xA2 +#define K_4 0xA3 +#define K_5 0xA4 +#define K_6 0xA5 +#define K_7 0xA8 +#define K_8 0xA9 +#define K_9 0xAA +#define K_10 0xAB +#define K_11 0xAC +#define K_12 0xAD + +#define L_1 0xB0 +#define L_2 0xB1 +#define L_3 0xB2 +#define L_4 0xB3 +#define L_5 0xB4 +#define L_6 0xB5 +#define L_7 0xB8 +#define L_8 0xB9 +#define L_9 0xBA +#define L_10 0xBB +#define L_11 0xBC +#define L_12 0xBD diff --git a/drivers/led/issi/is31fl3737-simple.c b/drivers/led/issi/is31fl3737-simple.c deleted file mode 100644 index 967a102b48..0000000000 --- a/drivers/led/issi/is31fl3737-simple.c +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2021 Doni Crosby - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31fl3737-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3737_PWM_REGISTER_COUNT 192 // actually 144 -#define IS31FL3737_LED_CONTROL_REGISTER_COUNT 24 - -#ifndef IS31FL3737_I2C_TIMEOUT -# define IS31FL3737_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3737_I2C_PERSISTENCE -# define IS31FL3737_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3737_PWM_FREQUENCY -# define IS31FL3737_PWM_FREQUENCY IS31FL3737_PWM_FREQUENCY_8K4_HZ // PFS - IS31FL3737B only -#endif - -#ifndef IS31FL3737_SW_PULLUP -# define IS31FL3737_SW_PULLUP IS31FL3737_PUR_0_OHM -#endif - -#ifndef IS31FL3737_CS_PULLDOWN -# define IS31FL3737_CS_PULLDOWN IS31FL3737_PDR_0_OHM -#endif - -#ifndef IS31FL3737_GLOBAL_CURRENT -# define IS31FL3737_GLOBAL_CURRENT 0xFF -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the IS31FL3737 PWM registers. -// The control buffers match the page 0 LED On/Off registers. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in is31fl3737_write_pwm_buffer() but it's -// probably not worth the extra complexity. - -uint8_t g_pwm_buffer[IS31FL3737_DRIVER_COUNT][IS31FL3737_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3737_DRIVER_COUNT] = {false}; - -uint8_t g_led_control_registers[IS31FL3737_DRIVER_COUNT][IS31FL3737_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required[IS31FL3737_DRIVER_COUNT] = {false}; - -void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3737_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3737_I2C_TIMEOUT); -#endif -} - -void is31fl3737_select_page(uint8_t addr, uint8_t page) { - is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND_WRITE_LOCK, IS31FL3737_COMMAND_WRITE_LOCK_MAGIC); - is31fl3737_write_register(addr, IS31FL3737_REG_COMMAND, page); -} - -void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // assumes page 1 is already selected - - // transmit PWM registers in 12 transfers of 16 bytes - // i2c_transfer_buffer[] is 20 bytes - - // iterate over the pwm_buffer contents at 16 byte intervals - for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i; - // copy the data from i to i+15 - // device will auto-increment register for data after the first byte - // thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3737_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3737_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3737_I2C_TIMEOUT); -#endif - } -} - -void is31fl3737_init_drivers(void) { - i2c_init(); - - is31fl3737_init(IS31FL3737_I2C_ADDRESS_1); -#if defined(IS31FL3737_I2C_ADDRESS_2) - is31fl3737_init(IS31FL3737_I2C_ADDRESS_2); -# if defined(IS31FL3737_I2C_ADDRESS_3) - is31fl3737_init(IS31FL3737_I2C_ADDRESS_3); -# if defined(IS31FL3737_I2C_ADDRESS_4) - is31fl3737_init(IS31FL3737_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3737_LED_COUNT; i++) { - is31fl3737_set_led_control_register(i, true); - } - - is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_1, 0); -#if defined(IS31FL3737_I2C_ADDRESS_2) - is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_2, 1); -# if defined(IS31FL3737_I2C_ADDRESS_3) - is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_3, 2); -# if defined(IS31FL3737_I2C_ADDRESS_4) - is31fl3737_update_led_control_registers(IS31FL3737_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3737_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3737_write_register(addr, i, 0x00); - } - - is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); - - // Set PWM on all LEDs to 0 - // No need to setup Breath registers to PWM as that is the default. - for (int i = 0; i < IS31FL3737_PWM_REGISTER_COUNT; i++) { - is31fl3737_write_register(addr, i, 0x00); - } - - is31fl3737_select_page(addr, IS31FL3737_COMMAND_FUNCTION); - - // Set de-ghost pull-up resistors (SWx) - is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_SW_PULLUP, IS31FL3737_SW_PULLUP); - // Set de-ghost pull-down resistors (CSx) - is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CS_PULLDOWN, IS31FL3737_CS_PULLDOWN); - // Set global current to maximum. - is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3737_GLOBAL_CURRENT); - // Disable software shutdown. - is31fl3737_write_register(addr, IS31FL3737_FUNCTION_REG_CONFIGURATION, ((IS31FL3737_PWM_FREQUENCY & 0b111) << 3) | 0x01); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3737_set_value(int index, uint8_t value) { - is31fl3737_led_t led; - if (index >= 0 && index < IS31FL3737_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void is31fl3737_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3737_LED_COUNT; i++) { - is31fl3737_set_value(i, value); - } -} - -void is31fl3737_set_led_control_register(uint8_t index, bool value) { - is31fl3737_led_t led; - memcpy_P(&led, (&g_is31fl3737_leds[index]), sizeof(led)); - - uint8_t control_register = led.v / 8; - uint8_t bit_value = led.v % 8; - - if (value) { - g_led_control_registers[led.driver][control_register] |= (1 << bit_value); - } else { - g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required[led.driver] = true; -} - -void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3737_select_page(addr, IS31FL3737_COMMAND_PWM); - - is31fl3737_write_pwm_buffer(addr, g_pwm_buffer[index]); - g_pwm_buffer_update_required[index] = false; - } -} - -void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_led_control_registers_update_required[index]) { - is31fl3737_select_page(addr, IS31FL3737_COMMAND_LED_CONTROL); - - for (int i = 0; i < IS31FL3737_LED_CONTROL_REGISTER_COUNT; i++) { - is31fl3737_write_register(addr, i, g_led_control_registers[index][i]); - } - g_led_control_registers_update_required[index] = false; - } -} - -void is31fl3737_flush(void) { - is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_1, 0); -#if defined(IS31FL3737_I2C_ADDRESS_2) - is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_2, 1); -# if defined(IS31FL3737_I2C_ADDRESS_3) - is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_3, 2); -# if defined(IS31FL3737_I2C_ADDRESS_4) - is31fl3737_update_pwm_buffers(IS31FL3737_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3737-simple.h b/drivers/led/issi/is31fl3737-simple.h deleted file mode 100644 index a11d2ef423..0000000000 --- a/drivers/led/issi/is31fl3737-simple.h +++ /dev/null @@ -1,300 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2021 Doni Crosby - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef ISSI_TIMEOUT -# define IS31FL3737_I2C_TIMEOUT ISSI_TIMEOUT -#endif -#ifdef ISSI_PERSISTENCE -# define IS31FL3737_I2C_PERSISTENCE ISSI_PERSISTENCE -#endif -#ifdef ISSI_PWM_FREQUENCY -# define IS31FL3737_PWM_FREQUENCY ISSI_PWM_FREQUENCY -#endif -#ifdef ISSI_SWPULLUP -# define IS31FL3737_SW_PULLUP ISSI_SWPULLUP -#endif -#ifdef ISSI_CSPULLUP -# define IS31FL3737_CS_PULLDOWN ISSI_CSPULLUP -#endif -#ifdef ISSI_GLOBALCURRENT -# define IS31FL3737_GLOBAL_CURRENT ISSI_GLOBALCURRENT -#endif - -#define PUR_0R IS31FL3737_PUR_0_OHM -#define PUR_05KR IS31FL3737_PUR_0K5_OHM -#define PUR_1KR IS31FL3737_PUR_1K_OHM -#define PUR_2KR IS31FL3737_PUR_2K_OHM -#define PUR_4KR IS31FL3737_PUR_4K_OHM -#define PUR_8KR IS31FL3737_PUR_8K_OHM -#define PUR_16KR IS31FL3737_PUR_16K_OHM -#define PUR_32KR IS31FL3737_PUR_32K_OHM -// ======== - -#define IS31FL3737_REG_INTERRUPT_MASK 0xF0 -#define IS31FL3737_REG_INTERRUPT_STATUS 0xF1 - -#define IS31FL3737_REG_COMMAND 0xFD - -#define IS31FL3737_COMMAND_LED_CONTROL 0x00 -#define IS31FL3737_COMMAND_PWM 0x01 -#define IS31FL3737_COMMAND_AUTO_BREATH 0x02 -#define IS31FL3737_COMMAND_FUNCTION 0x03 - -#define IS31FL3737_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3737_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3737_FUNCTION_REG_SW_PULLUP 0x0F -#define IS31FL3737_FUNCTION_REG_CS_PULLDOWN 0x10 -#define IS31FL3737_FUNCTION_REG_RESET 0x11 - -#define IS31FL3737_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3737_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3737_I2C_ADDRESS_GND 0x50 -#define IS31FL3737_I2C_ADDRESS_SCL 0x55 -#define IS31FL3737_I2C_ADDRESS_SDA 0x5A -#define IS31FL3737_I2C_ADDRESS_VCC 0x5F - -#if defined(LED_MATRIX_IS31FL3737) -# define IS31FL3737_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3737_I2C_ADDRESS_4) -# define IS31FL3737_DRIVER_COUNT 4 -#elif defined(IS31FL3737_I2C_ADDRESS_3) -# define IS31FL3737_DRIVER_COUNT 3 -#elif defined(IS31FL3737_I2C_ADDRESS_2) -# define IS31FL3737_DRIVER_COUNT 2 -#elif defined(IS31FL3737_I2C_ADDRESS_1) -# define IS31FL3737_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3737_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3737_led_t; - -extern const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT]; - -void is31fl3737_init_drivers(void); -void is31fl3737_init(uint8_t addr); -void is31fl3737_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3737_select_page(uint8_t addr, uint8_t page); -void is31fl3737_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3737_set_value(int index, uint8_t value); -void is31fl3737_set_value_all(uint8_t value); - -void is31fl3737_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void is31fl3737_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3737_update_led_control_registers(uint8_t addr, uint8_t index); - -void is31fl3737_flush(void); - -#define IS31FL3737_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3737_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3737_PDR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3737_PDR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3737_PDR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3737_PDR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3737_PDR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3737_PDR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3737_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3737_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3737_PUR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3737_PUR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3737_PUR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3737_PUR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3737_PUR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3737_PUR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3737_PWM_FREQUENCY_8K4_HZ 0b000 -#define IS31FL3737_PWM_FREQUENCY_4K2_HZ 0b001 -#define IS31FL3737_PWM_FREQUENCY_26K7_HZ 0b010 -#define IS31FL3737_PWM_FREQUENCY_2K1_HZ 0b011 -#define IS31FL3737_PWM_FREQUENCY_1K05_HZ 0b100 - -#define A_1 0x00 -#define A_2 0x01 -#define A_3 0x02 -#define A_4 0x03 -#define A_5 0x04 -#define A_6 0x05 -#define A_7 0x08 -#define A_8 0x09 -#define A_9 0x0A -#define A_10 0x0B -#define A_11 0x0C -#define A_12 0x0D - -#define B_1 0x10 -#define B_2 0x11 -#define B_3 0x12 -#define B_4 0x13 -#define B_5 0x14 -#define B_6 0x15 -#define B_7 0x18 -#define B_8 0x19 -#define B_9 0x1A -#define B_10 0x1B -#define B_11 0x1C -#define B_12 0x1D - -#define C_1 0x20 -#define C_2 0x21 -#define C_3 0x22 -#define C_4 0x23 -#define C_5 0x24 -#define C_6 0x25 -#define C_7 0x28 -#define C_8 0x29 -#define C_9 0x2A -#define C_10 0x2B -#define C_11 0x2C -#define C_12 0x2D - -#define D_1 0x30 -#define D_2 0x31 -#define D_3 0x32 -#define D_4 0x33 -#define D_5 0x34 -#define D_6 0x35 -#define D_7 0x38 -#define D_8 0x39 -#define D_9 0x3A -#define D_10 0x3B -#define D_11 0x3C -#define D_12 0x3D - -#define E_1 0x40 -#define E_2 0x41 -#define E_3 0x42 -#define E_4 0x43 -#define E_5 0x44 -#define E_6 0x45 -#define E_7 0x48 -#define E_8 0x49 -#define E_9 0x4A -#define E_10 0x4B -#define E_11 0x4C -#define E_12 0x4D - -#define F_1 0x50 -#define F_2 0x51 -#define F_3 0x52 -#define F_4 0x53 -#define F_5 0x54 -#define F_6 0x55 -#define F_7 0x58 -#define F_8 0x59 -#define F_9 0x5A -#define F_10 0x5B -#define F_11 0x5C -#define F_12 0x5D - -#define G_1 0x60 -#define G_2 0x61 -#define G_3 0x62 -#define G_4 0x63 -#define G_5 0x64 -#define G_6 0x65 -#define G_7 0x68 -#define G_8 0x69 -#define G_9 0x6A -#define G_10 0x6B -#define G_11 0x6C -#define G_12 0x6D - -#define H_1 0x70 -#define H_2 0x71 -#define H_3 0x72 -#define H_4 0x73 -#define H_5 0x74 -#define H_6 0x75 -#define H_7 0x78 -#define H_8 0x79 -#define H_9 0x7A -#define H_10 0x7B -#define H_11 0x7C -#define H_12 0x7D - -#define I_1 0x80 -#define I_2 0x81 -#define I_3 0x82 -#define I_4 0x83 -#define I_5 0x84 -#define I_6 0x85 -#define I_7 0x88 -#define I_8 0x89 -#define I_9 0x8A -#define I_10 0x8B -#define I_11 0x8C -#define I_12 0x8D - -#define J_1 0x90 -#define J_2 0x91 -#define J_3 0x92 -#define J_4 0x93 -#define J_5 0x94 -#define J_6 0x95 -#define J_7 0x98 -#define J_8 0x99 -#define J_9 0x9A -#define J_10 0x9B -#define J_11 0x9C -#define J_12 0x9D - -#define K_1 0xA0 -#define K_2 0xA1 -#define K_3 0xA2 -#define K_4 0xA3 -#define K_5 0xA4 -#define K_6 0xA5 -#define K_7 0xA8 -#define K_8 0xA9 -#define K_9 0xAA -#define K_10 0xAB -#define K_11 0xAC -#define K_12 0xAD - -#define L_1 0xB0 -#define L_2 0xB1 -#define L_3 0xB2 -#define L_4 0xB3 -#define L_5 0xB4 -#define L_6 0xB5 -#define L_7 0xB8 -#define L_8 0xB9 -#define L_9 0xBA -#define L_10 0xBB -#define L_11 0xBC -#define L_12 0xBD diff --git a/drivers/led/issi/is31fl3741-mono.c b/drivers/led/issi/is31fl3741-mono.c new file mode 100644 index 0000000000..72260654ef --- /dev/null +++ b/drivers/led/issi/is31fl3741-mono.c @@ -0,0 +1,271 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3741-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3741_PWM_REGISTER_COUNT 351 +#define IS31FL3741_SCALING_REGISTER_COUNT 351 + +#ifndef IS31FL3741_I2C_TIMEOUT +# define IS31FL3741_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3741_I2C_PERSISTENCE +# define IS31FL3741_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3741_CONFIGURATION +# define IS31FL3741_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3741_PWM_FREQUENCY +# define IS31FL3741_PWM_FREQUENCY IS31FL3741_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3741_SW_PULLUP +# define IS31FL3741_SW_PULLUP IS31FL3741_PUR_32K_OHM +#endif + +#ifndef IS31FL3741_CS_PULLDOWN +# define IS31FL3741_CS_PULLDOWN IS31FL3741_PDR_32K_OHM +#endif + +#ifndef IS31FL3741_GLOBAL_CURRENT +# define IS31FL3741_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +// These buffers match the IS31FL3741 and IS31FL3741A PWM registers. +// The scaling buffers match the page 2 and 3 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_SCALING_REGISTER_COUNT]; + +void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3741_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT); +#endif +} + +void is31fl3741_select_page(uint8_t addr, uint8_t page) { + is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC); + is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, page); +} + +bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assume page 0 is already selected + + for (int i = 0; i < 342; i += 18) { + if (i == 180) { + is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_1); + } + + i2c_transfer_buffer[0] = i % 180; + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 18); + +#if IS31FL3741_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) { + return false; + } +#endif + } + + // transfer the left cause the total number is 351 + i2c_transfer_buffer[0] = 162; + memcpy(i2c_transfer_buffer + 1, pwm_buffer + 342, 9); + +#if IS31FL3741_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) { + return false; + } +#endif + + return true; +} + +void is31fl3741_init_drivers(void) { + i2c_init(); + + is31fl3741_init(IS31FL3741_I2C_ADDRESS_1); +#if defined(IS31FL3741_I2C_ADDRESS_2) + is31fl3741_init(IS31FL3741_I2C_ADDRESS_2); +# if defined(IS31FL3741_I2C_ADDRESS_3) + is31fl3741_init(IS31FL3741_I2C_ADDRESS_3); +# if defined(IS31FL3741_I2C_ADDRESS_4) + is31fl3741_init(IS31FL3741_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3741_LED_COUNT; i++) { + is31fl3741_set_led_control_register(i, true); + } + + is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_1, 0); +#if defined(IS31FL3741_I2C_ADDRESS_2) + is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_2, 1); +# if defined(IS31FL3741_I2C_ADDRESS_3) + is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_3, 2); +# if defined(IS31FL3741_I2C_ADDRESS_4) + is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3741_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + // Unlock the command register. + + is31fl3741_select_page(addr, IS31FL3741_COMMAND_FUNCTION); + + // Set to Normal operation + is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION); + + // Set Golbal Current Control Register + is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3741_GLOBAL_CURRENT); + // Set Pull up & Down for SWx CSy + is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PULLDOWNUP, ((IS31FL3741_CS_PULLDOWN << 4) | IS31FL3741_SW_PULLUP)); + // Set PWM frequency + is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3741_PWM_FREQUENCY & 0b1111)); + + // is31fl3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3741_set_value(int index, uint8_t value) { + is31fl3741_led_t led; + if (index >= 0 && index < IS31FL3741_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3741_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3741_LED_COUNT; i++) { + is31fl3741_set_value(i, value); + } +} + +void is31fl3741_set_led_control_register(uint8_t index, bool value) { + is31fl3741_led_t led; + memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); + + if (value) { + g_scaling_registers[led.driver][led.v] = 0xFF; + } else { + g_scaling_registers[led.driver][led.v] = 0x00; + } + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0); + + is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) { + g_pwm_buffer[pled->driver][pled->v] = value; + + g_pwm_buffer_update_required[pled->driver] = true; +} + +void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_0); + + // CS1_SW1 to CS30_SW6 are on page 2 + for (int i = CS1_SW1; i <= CS30_SW6; ++i) { + is31fl3741_write_register(addr, i, g_scaling_registers[index][i]); + } + + is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_1); + + // CS1_SW7 to CS39_SW9 are on page 3 + for (int i = CS1_SW7; i <= CS39_SW9; ++i) { + is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]); + } + + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value) { + g_scaling_registers[pled->driver][pled->v] = value; + + g_scaling_registers_update_required[pled->driver] = true; +} + +void is31fl3741_flush(void) { + is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_1, 0); +#if defined(IS31FL3741_I2C_ADDRESS_2) + is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_2, 1); +# if defined(IS31FL3741_I2C_ADDRESS_3) + is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_3, 2); +# if defined(IS31FL3741_I2C_ADDRESS_4) + is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3741-mono.h b/drivers/led/issi/is31fl3741-mono.h new file mode 100644 index 0000000000..462543a5bb --- /dev/null +++ b/drivers/led/issi/is31fl3741-mono.h @@ -0,0 +1,517 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef ISSI_TIMEOUT +# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT +#endif +#ifdef ISSI_PERSISTENCE +# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE +#endif +#ifdef ISSI_CONFIGURATION +# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION +#endif +#ifdef ISSI_SWPULLUP +# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP +#endif +#ifdef ISSI_CSPULLUP +# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP +#endif +#ifdef ISSI_GLOBALCURRENT +# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT +#endif + +#define PUR_0R IS31FL3741_PUR_0_OHM +#define PUR_05KR IS31FL3741_PUR_0K5_OHM +#define PUR_1KR IS31FL3741_PUR_1K_OHM +#define PUR_2KR IS31FL3741_PUR_2K_OHM +#define PUR_4KR IS31FL3741_PUR_4K_OHM +#define PUR_8KR IS31FL3741_PUR_8K_OHM +#define PUR_16KR IS31FL3741_PUR_16K_OHM +#define PUR_32KR IS31FL3741_PUR_32K_OHM +// ======== + +#define IS31FL3741_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1 +#define IS31FL3741_REG_ID 0xFC + +#define IS31FL3741_REG_COMMAND 0xFD + +#define IS31FL3741_COMMAND_PWM_0 0x00 +#define IS31FL3741_COMMAND_PWM_1 0x01 +#define IS31FL3741_COMMAND_SCALING_0 0x02 +#define IS31FL3741_COMMAND_SCALING_1 0x03 +#define IS31FL3741_COMMAND_FUNCTION 0x04 + +#define IS31FL3741_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3741_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3741_FUNCTION_REG_PWM_FREQUENCY 0x36 +#define IS31FL3741_FUNCTION_REG_RESET 0x3F + +#define IS31FL3741_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3741_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3741_I2C_ADDRESS_GND 0x30 +#define IS31FL3741_I2C_ADDRESS_SCL 0x31 +#define IS31FL3741_I2C_ADDRESS_SDA 0x32 +#define IS31FL3741_I2C_ADDRESS_VCC 0x33 + +#if defined(LED_MATRIX_IS31FL3741) +# define IS31FL3741_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3741_I2C_ADDRESS_4) +# define IS31FL3741_DRIVER_COUNT 4 +#elif defined(IS31FL3741_I2C_ADDRESS_3) +# define IS31FL3741_DRIVER_COUNT 3 +#elif defined(IS31FL3741_I2C_ADDRESS_2) +# define IS31FL3741_DRIVER_COUNT 2 +#elif defined(IS31FL3741_I2C_ADDRESS_1) +# define IS31FL3741_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3741_led_t { + uint8_t driver : 2; + uint16_t v : 9; +} PACKED is31fl3741_led_t; + +extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT]; + +void is31fl3741_init_drivers(void); +void is31fl3741_init(uint8_t addr); +void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3741_select_page(uint8_t addr, uint8_t page); +bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3741_set_value(int index, uint8_t value); +void is31fl3741_set_value_all(uint8_t value); + +void is31fl3741_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index); +void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value); + +void is31fl3741_set_pwm_buffer(const is31fl3741_led *pled, uint8_t value); + +void is31fl3741_flush(void); + +#define IS31FL3741_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3741_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3741_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3741_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3741_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3741_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3741_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3741_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3741_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3741_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3741_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3741_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3741_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3741_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3741_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3741_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3741_PWM_FREQUENCY_29K_HZ 0b0000 +#define IS31FL3741_PWM_FREQUENCY_3K6_HZ 0b0011 +#define IS31FL3741_PWM_FREQUENCY_1K8_HZ 0b0111 +#define IS31FL3741_PWM_FREQUENCY_900_HZ 0b1011 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 +#define CS19_SW1 0x12 +#define CS20_SW1 0x13 +#define CS21_SW1 0x14 +#define CS22_SW1 0x15 +#define CS23_SW1 0x16 +#define CS24_SW1 0x17 +#define CS25_SW1 0x18 +#define CS26_SW1 0x19 +#define CS27_SW1 0x1A +#define CS28_SW1 0x1B +#define CS29_SW1 0x1C +#define CS30_SW1 0x1D + +#define CS1_SW2 0x1E +#define CS2_SW2 0x1F +#define CS3_SW2 0x20 +#define CS4_SW2 0x21 +#define CS5_SW2 0x22 +#define CS6_SW2 0x23 +#define CS7_SW2 0x24 +#define CS8_SW2 0x25 +#define CS9_SW2 0x26 +#define CS10_SW2 0x27 +#define CS11_SW2 0x28 +#define CS12_SW2 0x29 +#define CS13_SW2 0x2A +#define CS14_SW2 0x2B +#define CS15_SW2 0x2C +#define CS16_SW2 0x2D +#define CS17_SW2 0x2E +#define CS18_SW2 0x2F +#define CS19_SW2 0x30 +#define CS20_SW2 0x31 +#define CS21_SW2 0x32 +#define CS22_SW2 0x33 +#define CS23_SW2 0x34 +#define CS24_SW2 0x35 +#define CS25_SW2 0x36 +#define CS26_SW2 0x37 +#define CS27_SW2 0x38 +#define CS28_SW2 0x39 +#define CS29_SW2 0x3A +#define CS30_SW2 0x3B + +#define CS1_SW3 0x3C +#define CS2_SW3 0x3D +#define CS3_SW3 0x3E +#define CS4_SW3 0x3F +#define CS5_SW3 0x40 +#define CS6_SW3 0x41 +#define CS7_SW3 0x42 +#define CS8_SW3 0x43 +#define CS9_SW3 0x44 +#define CS10_SW3 0x45 +#define CS11_SW3 0x46 +#define CS12_SW3 0x47 +#define CS13_SW3 0x48 +#define CS14_SW3 0x49 +#define CS15_SW3 0x4A +#define CS16_SW3 0x4B +#define CS17_SW3 0x4C +#define CS18_SW3 0x4D +#define CS19_SW3 0x4E +#define CS20_SW3 0x4F +#define CS21_SW3 0x50 +#define CS22_SW3 0x51 +#define CS23_SW3 0x52 +#define CS24_SW3 0x53 +#define CS25_SW3 0x54 +#define CS26_SW3 0x55 +#define CS27_SW3 0x56 +#define CS28_SW3 0x57 +#define CS29_SW3 0x58 +#define CS30_SW3 0x59 + +#define CS1_SW4 0x5A +#define CS2_SW4 0x5B +#define CS3_SW4 0x5C +#define CS4_SW4 0x5D +#define CS5_SW4 0x5E +#define CS6_SW4 0x5F +#define CS7_SW4 0x60 +#define CS8_SW4 0x61 +#define CS9_SW4 0x62 +#define CS10_SW4 0x63 +#define CS11_SW4 0x64 +#define CS12_SW4 0x65 +#define CS13_SW4 0x66 +#define CS14_SW4 0x67 +#define CS15_SW4 0x68 +#define CS16_SW4 0x69 +#define CS17_SW4 0x6A +#define CS18_SW4 0x6B +#define CS19_SW4 0x6C +#define CS20_SW4 0x6D +#define CS21_SW4 0x6E +#define CS22_SW4 0x6F +#define CS23_SW4 0x70 +#define CS24_SW4 0x71 +#define CS25_SW4 0x72 +#define CS26_SW4 0x73 +#define CS27_SW4 0x74 +#define CS28_SW4 0x75 +#define CS29_SW4 0x76 +#define CS30_SW4 0x77 + +#define CS1_SW5 0x78 +#define CS2_SW5 0x79 +#define CS3_SW5 0x7A +#define CS4_SW5 0x7B +#define CS5_SW5 0x7C +#define CS6_SW5 0x7D +#define CS7_SW5 0x7E +#define CS8_SW5 0x7F +#define CS9_SW5 0x80 +#define CS10_SW5 0x81 +#define CS11_SW5 0x82 +#define CS12_SW5 0x83 +#define CS13_SW5 0x84 +#define CS14_SW5 0x85 +#define CS15_SW5 0x86 +#define CS16_SW5 0x87 +#define CS17_SW5 0x88 +#define CS18_SW5 0x89 +#define CS19_SW5 0x8A +#define CS20_SW5 0x8B +#define CS21_SW5 0x8C +#define CS22_SW5 0x8D +#define CS23_SW5 0x8E +#define CS24_SW5 0x8F +#define CS25_SW5 0x90 +#define CS26_SW5 0x91 +#define CS27_SW5 0x92 +#define CS28_SW5 0x93 +#define CS29_SW5 0x94 +#define CS30_SW5 0x95 + +#define CS1_SW6 0x96 +#define CS2_SW6 0x97 +#define CS3_SW6 0x98 +#define CS4_SW6 0x99 +#define CS5_SW6 0x9A +#define CS6_SW6 0x9B +#define CS7_SW6 0x9C +#define CS8_SW6 0x9D +#define CS9_SW6 0x9E +#define CS10_SW6 0x9F +#define CS11_SW6 0xA0 +#define CS12_SW6 0xA1 +#define CS13_SW6 0xA2 +#define CS14_SW6 0xA3 +#define CS15_SW6 0xA4 +#define CS16_SW6 0xA5 +#define CS17_SW6 0xA6 +#define CS18_SW6 0xA7 +#define CS19_SW6 0xA8 +#define CS20_SW6 0xA9 +#define CS21_SW6 0xAA +#define CS22_SW6 0xAB +#define CS23_SW6 0xAC +#define CS24_SW6 0xAD +#define CS25_SW6 0xAE +#define CS26_SW6 0xAF +#define CS27_SW6 0xB0 +#define CS28_SW6 0xB1 +#define CS29_SW6 0xB2 +#define CS30_SW6 0xB3 + +#define CS1_SW7 0xB4 +#define CS2_SW7 0xB5 +#define CS3_SW7 0xB6 +#define CS4_SW7 0xB7 +#define CS5_SW7 0xB8 +#define CS6_SW7 0xB9 +#define CS7_SW7 0xBA +#define CS8_SW7 0xBB +#define CS9_SW7 0xBC +#define CS10_SW7 0xBD +#define CS11_SW7 0xBE +#define CS12_SW7 0xBF +#define CS13_SW7 0xC0 +#define CS14_SW7 0xC1 +#define CS15_SW7 0xC2 +#define CS16_SW7 0xC3 +#define CS17_SW7 0xC4 +#define CS18_SW7 0xC5 +#define CS19_SW7 0xC6 +#define CS20_SW7 0xC7 +#define CS21_SW7 0xC8 +#define CS22_SW7 0xC9 +#define CS23_SW7 0xCA +#define CS24_SW7 0xCB +#define CS25_SW7 0xCC +#define CS26_SW7 0xCD +#define CS27_SW7 0xCE +#define CS28_SW7 0xCF +#define CS29_SW7 0xD0 +#define CS30_SW7 0xD1 + +#define CS1_SW8 0xD2 +#define CS2_SW8 0xD3 +#define CS3_SW8 0xD4 +#define CS4_SW8 0xD5 +#define CS5_SW8 0xD6 +#define CS6_SW8 0xD7 +#define CS7_SW8 0xD8 +#define CS8_SW8 0xD9 +#define CS9_SW8 0xDA +#define CS10_SW8 0xDB +#define CS11_SW8 0xDC +#define CS12_SW8 0xDD +#define CS13_SW8 0xDE +#define CS14_SW8 0xDF +#define CS15_SW8 0xE0 +#define CS16_SW8 0xE1 +#define CS17_SW8 0xE2 +#define CS18_SW8 0xE3 +#define CS19_SW8 0xE4 +#define CS20_SW8 0xE5 +#define CS21_SW8 0xE6 +#define CS22_SW8 0xE7 +#define CS23_SW8 0xE8 +#define CS24_SW8 0xE9 +#define CS25_SW8 0xEA +#define CS26_SW8 0xEB +#define CS27_SW8 0xEC +#define CS28_SW8 0xED +#define CS29_SW8 0xEE +#define CS30_SW8 0xEF + +#define CS1_SW9 0xF0 +#define CS2_SW9 0xF1 +#define CS3_SW9 0xF2 +#define CS4_SW9 0xF3 +#define CS5_SW9 0xF4 +#define CS6_SW9 0xF5 +#define CS7_SW9 0xF6 +#define CS8_SW9 0xF7 +#define CS9_SW9 0xF8 +#define CS10_SW9 0xF9 +#define CS11_SW9 0xFA +#define CS12_SW9 0xFB +#define CS13_SW9 0xFC +#define CS14_SW9 0xFD +#define CS15_SW9 0xFE +#define CS16_SW9 0xFF +#define CS17_SW9 0x100 +#define CS18_SW9 0x101 +#define CS19_SW9 0x102 +#define CS20_SW9 0x103 +#define CS21_SW9 0x104 +#define CS22_SW9 0x105 +#define CS23_SW9 0x106 +#define CS24_SW9 0x107 +#define CS25_SW9 0x108 +#define CS26_SW9 0x109 +#define CS27_SW9 0x10A +#define CS28_SW9 0x10B +#define CS29_SW9 0x10C +#define CS30_SW9 0x10D + +#define CS31_SW1 0x10E +#define CS32_SW1 0x10F +#define CS33_SW1 0x110 +#define CS34_SW1 0x111 +#define CS35_SW1 0x112 +#define CS36_SW1 0x113 +#define CS37_SW1 0x114 +#define CS38_SW1 0x115 +#define CS39_SW1 0x116 + +#define CS31_SW2 0x117 +#define CS32_SW2 0x118 +#define CS33_SW2 0x119 +#define CS34_SW2 0x11A +#define CS35_SW2 0x11B +#define CS36_SW2 0x11C +#define CS37_SW2 0x11D +#define CS38_SW2 0x11E +#define CS39_SW2 0x11F + +#define CS31_SW3 0x120 +#define CS32_SW3 0x121 +#define CS33_SW3 0x122 +#define CS34_SW3 0x123 +#define CS35_SW3 0x124 +#define CS36_SW3 0x125 +#define CS37_SW3 0x126 +#define CS38_SW3 0x127 +#define CS39_SW3 0x128 + +#define CS31_SW4 0x129 +#define CS32_SW4 0x12A +#define CS33_SW4 0x12B +#define CS34_SW4 0x12C +#define CS35_SW4 0x12D +#define CS36_SW4 0x12E +#define CS37_SW4 0x12F +#define CS38_SW4 0x130 +#define CS39_SW4 0x131 + +#define CS31_SW5 0x132 +#define CS32_SW5 0x133 +#define CS33_SW5 0x134 +#define CS34_SW5 0x135 +#define CS35_SW5 0x136 +#define CS36_SW5 0x137 +#define CS37_SW5 0x138 +#define CS38_SW5 0x139 +#define CS39_SW5 0x13A + +#define CS31_SW6 0x13B +#define CS32_SW6 0x13C +#define CS33_SW6 0x13D +#define CS34_SW6 0x13E +#define CS35_SW6 0x13F +#define CS36_SW6 0x140 +#define CS37_SW6 0x141 +#define CS38_SW6 0x142 +#define CS39_SW6 0x143 + +#define CS31_SW7 0x144 +#define CS32_SW7 0x145 +#define CS33_SW7 0x146 +#define CS34_SW7 0x147 +#define CS35_SW7 0x148 +#define CS36_SW7 0x149 +#define CS37_SW7 0x14A +#define CS38_SW7 0x14B +#define CS39_SW7 0x14C + +#define CS31_SW8 0x14D +#define CS32_SW8 0x14E +#define CS33_SW8 0x14F +#define CS34_SW8 0x150 +#define CS35_SW8 0x151 +#define CS36_SW8 0x152 +#define CS37_SW8 0x153 +#define CS38_SW8 0x154 +#define CS39_SW8 0x155 + +#define CS31_SW9 0x156 +#define CS32_SW9 0x157 +#define CS33_SW9 0x158 +#define CS34_SW9 0x159 +#define CS35_SW9 0x15A +#define CS36_SW9 0x15B +#define CS37_SW9 0x15C +#define CS38_SW9 0x15D +#define CS39_SW9 0x15E diff --git a/drivers/led/issi/is31fl3741-simple.c b/drivers/led/issi/is31fl3741-simple.c deleted file mode 100644 index 3e9b3d8b25..0000000000 --- a/drivers/led/issi/is31fl3741-simple.c +++ /dev/null @@ -1,271 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "is31fl3741-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3741_PWM_REGISTER_COUNT 351 -#define IS31FL3741_SCALING_REGISTER_COUNT 351 - -#ifndef IS31FL3741_I2C_TIMEOUT -# define IS31FL3741_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3741_I2C_PERSISTENCE -# define IS31FL3741_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3741_CONFIGURATION -# define IS31FL3741_CONFIGURATION 0x01 -#endif - -#ifndef IS31FL3741_PWM_FREQUENCY -# define IS31FL3741_PWM_FREQUENCY IS31FL3741_PWM_FREQUENCY_29K_HZ -#endif - -#ifndef IS31FL3741_SW_PULLUP -# define IS31FL3741_SW_PULLUP IS31FL3741_PUR_32K_OHM -#endif - -#ifndef IS31FL3741_CS_PULLDOWN -# define IS31FL3741_CS_PULLDOWN IS31FL3741_PDR_32K_OHM -#endif - -#ifndef IS31FL3741_GLOBAL_CURRENT -# define IS31FL3741_GLOBAL_CURRENT 0xFF -#endif - -uint8_t i2c_transfer_buffer[20] = {0xFF}; - -// These buffers match the IS31FL3741 and IS31FL3741A PWM registers. -// The scaling buffers match the page 2 and 3 LED On/Off registers. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in is31fl3741_write_pwm_buffer() but it's -// probably not worth the extra complexity. -uint8_t g_pwm_buffer[IS31FL3741_DRIVER_COUNT][IS31FL3741_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3741_DRIVER_COUNT] = {false}; -bool g_scaling_registers_update_required[IS31FL3741_DRIVER_COUNT] = {false}; - -uint8_t g_scaling_registers[IS31FL3741_DRIVER_COUNT][IS31FL3741_SCALING_REGISTER_COUNT]; - -void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3741_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3741_I2C_TIMEOUT); -#endif -} - -void is31fl3741_select_page(uint8_t addr, uint8_t page) { - is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND_WRITE_LOCK, IS31FL3741_COMMAND_WRITE_LOCK_MAGIC); - is31fl3741_write_register(addr, IS31FL3741_REG_COMMAND, page); -} - -bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assume page 0 is already selected - - for (int i = 0; i < 342; i += 18) { - if (i == 180) { - is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_1); - } - - i2c_transfer_buffer[0] = i % 180; - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 18); - -#if IS31FL3741_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 19, IS31FL3741_I2C_TIMEOUT) != 0) { - return false; - } -#endif - } - - // transfer the left cause the total number is 351 - i2c_transfer_buffer[0] = 162; - memcpy(i2c_transfer_buffer + 1, pwm_buffer + 342, 9); - -#if IS31FL3741_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3741_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 10, IS31FL3741_I2C_TIMEOUT) != 0) { - return false; - } -#endif - - return true; -} - -void is31fl3741_init_drivers(void) { - i2c_init(); - - is31fl3741_init(IS31FL3741_I2C_ADDRESS_1); -#if defined(IS31FL3741_I2C_ADDRESS_2) - is31fl3741_init(IS31FL3741_I2C_ADDRESS_2); -# if defined(IS31FL3741_I2C_ADDRESS_3) - is31fl3741_init(IS31FL3741_I2C_ADDRESS_3); -# if defined(IS31FL3741_I2C_ADDRESS_4) - is31fl3741_init(IS31FL3741_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3741_LED_COUNT; i++) { - is31fl3741_set_led_control_register(i, true); - } - - is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_1, 0); -#if defined(IS31FL3741_I2C_ADDRESS_2) - is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_2, 1); -# if defined(IS31FL3741_I2C_ADDRESS_3) - is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_3, 2); -# if defined(IS31FL3741_I2C_ADDRESS_4) - is31fl3741_update_led_control_registers(IS31FL3741_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3741_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - // Unlock the command register. - - is31fl3741_select_page(addr, IS31FL3741_COMMAND_FUNCTION); - - // Set to Normal operation - is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_CONFIGURATION, IS31FL3741_CONFIGURATION); - - // Set Golbal Current Control Register - is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3741_GLOBAL_CURRENT); - // Set Pull up & Down for SWx CSy - is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PULLDOWNUP, ((IS31FL3741_CS_PULLDOWN << 4) | IS31FL3741_SW_PULLUP)); - // Set PWM frequency - is31fl3741_write_register(addr, IS31FL3741_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3741_PWM_FREQUENCY & 0b1111)); - - // is31fl3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3741_set_value(int index, uint8_t value) { - is31fl3741_led_t led; - if (index >= 0 && index < IS31FL3741_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer_update_required[led.driver] = true; - g_pwm_buffer[led.driver][led.v] = value; - } -} - -void is31fl3741_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3741_LED_COUNT; i++) { - is31fl3741_set_value(i, value); - } -} - -void is31fl3741_set_led_control_register(uint8_t index, bool value) { - is31fl3741_led_t led; - memcpy_P(&led, (&g_is31fl3741_leds[index]), sizeof(led)); - - if (value) { - g_scaling_registers[led.driver][led.v] = 0xFF; - } else { - g_scaling_registers[led.driver][led.v] = 0x00; - } - - g_scaling_registers_update_required[led.driver] = true; -} - -void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3741_select_page(addr, IS31FL3741_COMMAND_PWM_0); - - is31fl3741_write_pwm_buffer(addr, g_pwm_buffer[index]); - } - - g_pwm_buffer_update_required[index] = false; -} - -void is31fl3741_set_pwm_buffer(const is31fl3741_led_t *pled, uint8_t value) { - g_pwm_buffer[pled->driver][pled->v] = value; - - g_pwm_buffer_update_required[pled->driver] = true; -} - -void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_scaling_registers_update_required[index]) { - is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_0); - - // CS1_SW1 to CS30_SW6 are on page 2 - for (int i = CS1_SW1; i <= CS30_SW6; ++i) { - is31fl3741_write_register(addr, i, g_scaling_registers[index][i]); - } - - is31fl3741_select_page(addr, IS31FL3741_COMMAND_SCALING_1); - - // CS1_SW7 to CS39_SW9 are on page 3 - for (int i = CS1_SW7; i <= CS39_SW9; ++i) { - is31fl3741_write_register(addr, i - CS1_SW7, g_scaling_registers[index][i]); - } - - g_scaling_registers_update_required[index] = false; - } -} - -void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value) { - g_scaling_registers[pled->driver][pled->v] = value; - - g_scaling_registers_update_required[pled->driver] = true; -} - -void is31fl3741_flush(void) { - is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_1, 0); -#if defined(IS31FL3741_I2C_ADDRESS_2) - is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_2, 1); -# if defined(IS31FL3741_I2C_ADDRESS_3) - is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_3, 2); -# if defined(IS31FL3741_I2C_ADDRESS_4) - is31fl3741_update_pwm_buffers(IS31FL3741_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3741-simple.h b/drivers/led/issi/is31fl3741-simple.h deleted file mode 100644 index 462543a5bb..0000000000 --- a/drivers/led/issi/is31fl3741-simple.h +++ /dev/null @@ -1,517 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef ISSI_TIMEOUT -# define IS31FL3741_I2C_TIMEOUT ISSI_TIMEOUT -#endif -#ifdef ISSI_PERSISTENCE -# define IS31FL3741_I2C_PERSISTENCE ISSI_PERSISTENCE -#endif -#ifdef ISSI_CONFIGURATION -# define IS31FL3741_CONFIGURATION ISSI_CONFIGURATION -#endif -#ifdef ISSI_SWPULLUP -# define IS31FL3741_SW_PULLUP ISSI_SWPULLUP -#endif -#ifdef ISSI_CSPULLUP -# define IS31FL3741_CS_PULLDOWN ISSI_CSPULLUP -#endif -#ifdef ISSI_GLOBALCURRENT -# define IS31FL3741_GLOBAL_CURRENT ISSI_GLOBALCURRENT -#endif - -#define PUR_0R IS31FL3741_PUR_0_OHM -#define PUR_05KR IS31FL3741_PUR_0K5_OHM -#define PUR_1KR IS31FL3741_PUR_1K_OHM -#define PUR_2KR IS31FL3741_PUR_2K_OHM -#define PUR_4KR IS31FL3741_PUR_4K_OHM -#define PUR_8KR IS31FL3741_PUR_8K_OHM -#define PUR_16KR IS31FL3741_PUR_16K_OHM -#define PUR_32KR IS31FL3741_PUR_32K_OHM -// ======== - -#define IS31FL3741_REG_INTERRUPT_MASK 0xF0 -#define IS31FL3741_REG_INTERRUPT_STATUS 0xF1 -#define IS31FL3741_REG_ID 0xFC - -#define IS31FL3741_REG_COMMAND 0xFD - -#define IS31FL3741_COMMAND_PWM_0 0x00 -#define IS31FL3741_COMMAND_PWM_1 0x01 -#define IS31FL3741_COMMAND_SCALING_0 0x02 -#define IS31FL3741_COMMAND_SCALING_1 0x03 -#define IS31FL3741_COMMAND_FUNCTION 0x04 - -#define IS31FL3741_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3741_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3741_FUNCTION_REG_PULLDOWNUP 0x02 -#define IS31FL3741_FUNCTION_REG_PWM_FREQUENCY 0x36 -#define IS31FL3741_FUNCTION_REG_RESET 0x3F - -#define IS31FL3741_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3741_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3741_I2C_ADDRESS_GND 0x30 -#define IS31FL3741_I2C_ADDRESS_SCL 0x31 -#define IS31FL3741_I2C_ADDRESS_SDA 0x32 -#define IS31FL3741_I2C_ADDRESS_VCC 0x33 - -#if defined(LED_MATRIX_IS31FL3741) -# define IS31FL3741_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3741_I2C_ADDRESS_4) -# define IS31FL3741_DRIVER_COUNT 4 -#elif defined(IS31FL3741_I2C_ADDRESS_3) -# define IS31FL3741_DRIVER_COUNT 3 -#elif defined(IS31FL3741_I2C_ADDRESS_2) -# define IS31FL3741_DRIVER_COUNT 2 -#elif defined(IS31FL3741_I2C_ADDRESS_1) -# define IS31FL3741_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3741_led_t { - uint8_t driver : 2; - uint16_t v : 9; -} PACKED is31fl3741_led_t; - -extern const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT]; - -void is31fl3741_init_drivers(void); -void is31fl3741_init(uint8_t addr); -void is31fl3741_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3741_select_page(uint8_t addr, uint8_t page); -bool is31fl3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3741_set_value(int index, uint8_t value); -void is31fl3741_set_value_all(uint8_t value); - -void is31fl3741_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void is31fl3741_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3741_update_led_control_registers(uint8_t addr, uint8_t index); -void is31fl3741_set_scaling_registers(const is31fl3741_led_t *pled, uint8_t value); - -void is31fl3741_set_pwm_buffer(const is31fl3741_led *pled, uint8_t value); - -void is31fl3741_flush(void); - -#define IS31FL3741_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3741_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3741_PDR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3741_PDR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3741_PDR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3741_PDR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3741_PDR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3741_PDR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3741_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3741_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3741_PUR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3741_PUR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3741_PUR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3741_PUR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3741_PUR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3741_PUR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3741_PWM_FREQUENCY_29K_HZ 0b0000 -#define IS31FL3741_PWM_FREQUENCY_3K6_HZ 0b0011 -#define IS31FL3741_PWM_FREQUENCY_1K8_HZ 0b0111 -#define IS31FL3741_PWM_FREQUENCY_900_HZ 0b1011 - -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 -#define CS19_SW1 0x12 -#define CS20_SW1 0x13 -#define CS21_SW1 0x14 -#define CS22_SW1 0x15 -#define CS23_SW1 0x16 -#define CS24_SW1 0x17 -#define CS25_SW1 0x18 -#define CS26_SW1 0x19 -#define CS27_SW1 0x1A -#define CS28_SW1 0x1B -#define CS29_SW1 0x1C -#define CS30_SW1 0x1D - -#define CS1_SW2 0x1E -#define CS2_SW2 0x1F -#define CS3_SW2 0x20 -#define CS4_SW2 0x21 -#define CS5_SW2 0x22 -#define CS6_SW2 0x23 -#define CS7_SW2 0x24 -#define CS8_SW2 0x25 -#define CS9_SW2 0x26 -#define CS10_SW2 0x27 -#define CS11_SW2 0x28 -#define CS12_SW2 0x29 -#define CS13_SW2 0x2A -#define CS14_SW2 0x2B -#define CS15_SW2 0x2C -#define CS16_SW2 0x2D -#define CS17_SW2 0x2E -#define CS18_SW2 0x2F -#define CS19_SW2 0x30 -#define CS20_SW2 0x31 -#define CS21_SW2 0x32 -#define CS22_SW2 0x33 -#define CS23_SW2 0x34 -#define CS24_SW2 0x35 -#define CS25_SW2 0x36 -#define CS26_SW2 0x37 -#define CS27_SW2 0x38 -#define CS28_SW2 0x39 -#define CS29_SW2 0x3A -#define CS30_SW2 0x3B - -#define CS1_SW3 0x3C -#define CS2_SW3 0x3D -#define CS3_SW3 0x3E -#define CS4_SW3 0x3F -#define CS5_SW3 0x40 -#define CS6_SW3 0x41 -#define CS7_SW3 0x42 -#define CS8_SW3 0x43 -#define CS9_SW3 0x44 -#define CS10_SW3 0x45 -#define CS11_SW3 0x46 -#define CS12_SW3 0x47 -#define CS13_SW3 0x48 -#define CS14_SW3 0x49 -#define CS15_SW3 0x4A -#define CS16_SW3 0x4B -#define CS17_SW3 0x4C -#define CS18_SW3 0x4D -#define CS19_SW3 0x4E -#define CS20_SW3 0x4F -#define CS21_SW3 0x50 -#define CS22_SW3 0x51 -#define CS23_SW3 0x52 -#define CS24_SW3 0x53 -#define CS25_SW3 0x54 -#define CS26_SW3 0x55 -#define CS27_SW3 0x56 -#define CS28_SW3 0x57 -#define CS29_SW3 0x58 -#define CS30_SW3 0x59 - -#define CS1_SW4 0x5A -#define CS2_SW4 0x5B -#define CS3_SW4 0x5C -#define CS4_SW4 0x5D -#define CS5_SW4 0x5E -#define CS6_SW4 0x5F -#define CS7_SW4 0x60 -#define CS8_SW4 0x61 -#define CS9_SW4 0x62 -#define CS10_SW4 0x63 -#define CS11_SW4 0x64 -#define CS12_SW4 0x65 -#define CS13_SW4 0x66 -#define CS14_SW4 0x67 -#define CS15_SW4 0x68 -#define CS16_SW4 0x69 -#define CS17_SW4 0x6A -#define CS18_SW4 0x6B -#define CS19_SW4 0x6C -#define CS20_SW4 0x6D -#define CS21_SW4 0x6E -#define CS22_SW4 0x6F -#define CS23_SW4 0x70 -#define CS24_SW4 0x71 -#define CS25_SW4 0x72 -#define CS26_SW4 0x73 -#define CS27_SW4 0x74 -#define CS28_SW4 0x75 -#define CS29_SW4 0x76 -#define CS30_SW4 0x77 - -#define CS1_SW5 0x78 -#define CS2_SW5 0x79 -#define CS3_SW5 0x7A -#define CS4_SW5 0x7B -#define CS5_SW5 0x7C -#define CS6_SW5 0x7D -#define CS7_SW5 0x7E -#define CS8_SW5 0x7F -#define CS9_SW5 0x80 -#define CS10_SW5 0x81 -#define CS11_SW5 0x82 -#define CS12_SW5 0x83 -#define CS13_SW5 0x84 -#define CS14_SW5 0x85 -#define CS15_SW5 0x86 -#define CS16_SW5 0x87 -#define CS17_SW5 0x88 -#define CS18_SW5 0x89 -#define CS19_SW5 0x8A -#define CS20_SW5 0x8B -#define CS21_SW5 0x8C -#define CS22_SW5 0x8D -#define CS23_SW5 0x8E -#define CS24_SW5 0x8F -#define CS25_SW5 0x90 -#define CS26_SW5 0x91 -#define CS27_SW5 0x92 -#define CS28_SW5 0x93 -#define CS29_SW5 0x94 -#define CS30_SW5 0x95 - -#define CS1_SW6 0x96 -#define CS2_SW6 0x97 -#define CS3_SW6 0x98 -#define CS4_SW6 0x99 -#define CS5_SW6 0x9A -#define CS6_SW6 0x9B -#define CS7_SW6 0x9C -#define CS8_SW6 0x9D -#define CS9_SW6 0x9E -#define CS10_SW6 0x9F -#define CS11_SW6 0xA0 -#define CS12_SW6 0xA1 -#define CS13_SW6 0xA2 -#define CS14_SW6 0xA3 -#define CS15_SW6 0xA4 -#define CS16_SW6 0xA5 -#define CS17_SW6 0xA6 -#define CS18_SW6 0xA7 -#define CS19_SW6 0xA8 -#define CS20_SW6 0xA9 -#define CS21_SW6 0xAA -#define CS22_SW6 0xAB -#define CS23_SW6 0xAC -#define CS24_SW6 0xAD -#define CS25_SW6 0xAE -#define CS26_SW6 0xAF -#define CS27_SW6 0xB0 -#define CS28_SW6 0xB1 -#define CS29_SW6 0xB2 -#define CS30_SW6 0xB3 - -#define CS1_SW7 0xB4 -#define CS2_SW7 0xB5 -#define CS3_SW7 0xB6 -#define CS4_SW7 0xB7 -#define CS5_SW7 0xB8 -#define CS6_SW7 0xB9 -#define CS7_SW7 0xBA -#define CS8_SW7 0xBB -#define CS9_SW7 0xBC -#define CS10_SW7 0xBD -#define CS11_SW7 0xBE -#define CS12_SW7 0xBF -#define CS13_SW7 0xC0 -#define CS14_SW7 0xC1 -#define CS15_SW7 0xC2 -#define CS16_SW7 0xC3 -#define CS17_SW7 0xC4 -#define CS18_SW7 0xC5 -#define CS19_SW7 0xC6 -#define CS20_SW7 0xC7 -#define CS21_SW7 0xC8 -#define CS22_SW7 0xC9 -#define CS23_SW7 0xCA -#define CS24_SW7 0xCB -#define CS25_SW7 0xCC -#define CS26_SW7 0xCD -#define CS27_SW7 0xCE -#define CS28_SW7 0xCF -#define CS29_SW7 0xD0 -#define CS30_SW7 0xD1 - -#define CS1_SW8 0xD2 -#define CS2_SW8 0xD3 -#define CS3_SW8 0xD4 -#define CS4_SW8 0xD5 -#define CS5_SW8 0xD6 -#define CS6_SW8 0xD7 -#define CS7_SW8 0xD8 -#define CS8_SW8 0xD9 -#define CS9_SW8 0xDA -#define CS10_SW8 0xDB -#define CS11_SW8 0xDC -#define CS12_SW8 0xDD -#define CS13_SW8 0xDE -#define CS14_SW8 0xDF -#define CS15_SW8 0xE0 -#define CS16_SW8 0xE1 -#define CS17_SW8 0xE2 -#define CS18_SW8 0xE3 -#define CS19_SW8 0xE4 -#define CS20_SW8 0xE5 -#define CS21_SW8 0xE6 -#define CS22_SW8 0xE7 -#define CS23_SW8 0xE8 -#define CS24_SW8 0xE9 -#define CS25_SW8 0xEA -#define CS26_SW8 0xEB -#define CS27_SW8 0xEC -#define CS28_SW8 0xED -#define CS29_SW8 0xEE -#define CS30_SW8 0xEF - -#define CS1_SW9 0xF0 -#define CS2_SW9 0xF1 -#define CS3_SW9 0xF2 -#define CS4_SW9 0xF3 -#define CS5_SW9 0xF4 -#define CS6_SW9 0xF5 -#define CS7_SW9 0xF6 -#define CS8_SW9 0xF7 -#define CS9_SW9 0xF8 -#define CS10_SW9 0xF9 -#define CS11_SW9 0xFA -#define CS12_SW9 0xFB -#define CS13_SW9 0xFC -#define CS14_SW9 0xFD -#define CS15_SW9 0xFE -#define CS16_SW9 0xFF -#define CS17_SW9 0x100 -#define CS18_SW9 0x101 -#define CS19_SW9 0x102 -#define CS20_SW9 0x103 -#define CS21_SW9 0x104 -#define CS22_SW9 0x105 -#define CS23_SW9 0x106 -#define CS24_SW9 0x107 -#define CS25_SW9 0x108 -#define CS26_SW9 0x109 -#define CS27_SW9 0x10A -#define CS28_SW9 0x10B -#define CS29_SW9 0x10C -#define CS30_SW9 0x10D - -#define CS31_SW1 0x10E -#define CS32_SW1 0x10F -#define CS33_SW1 0x110 -#define CS34_SW1 0x111 -#define CS35_SW1 0x112 -#define CS36_SW1 0x113 -#define CS37_SW1 0x114 -#define CS38_SW1 0x115 -#define CS39_SW1 0x116 - -#define CS31_SW2 0x117 -#define CS32_SW2 0x118 -#define CS33_SW2 0x119 -#define CS34_SW2 0x11A -#define CS35_SW2 0x11B -#define CS36_SW2 0x11C -#define CS37_SW2 0x11D -#define CS38_SW2 0x11E -#define CS39_SW2 0x11F - -#define CS31_SW3 0x120 -#define CS32_SW3 0x121 -#define CS33_SW3 0x122 -#define CS34_SW3 0x123 -#define CS35_SW3 0x124 -#define CS36_SW3 0x125 -#define CS37_SW3 0x126 -#define CS38_SW3 0x127 -#define CS39_SW3 0x128 - -#define CS31_SW4 0x129 -#define CS32_SW4 0x12A -#define CS33_SW4 0x12B -#define CS34_SW4 0x12C -#define CS35_SW4 0x12D -#define CS36_SW4 0x12E -#define CS37_SW4 0x12F -#define CS38_SW4 0x130 -#define CS39_SW4 0x131 - -#define CS31_SW5 0x132 -#define CS32_SW5 0x133 -#define CS33_SW5 0x134 -#define CS34_SW5 0x135 -#define CS35_SW5 0x136 -#define CS36_SW5 0x137 -#define CS37_SW5 0x138 -#define CS38_SW5 0x139 -#define CS39_SW5 0x13A - -#define CS31_SW6 0x13B -#define CS32_SW6 0x13C -#define CS33_SW6 0x13D -#define CS34_SW6 0x13E -#define CS35_SW6 0x13F -#define CS36_SW6 0x140 -#define CS37_SW6 0x141 -#define CS38_SW6 0x142 -#define CS39_SW6 0x143 - -#define CS31_SW7 0x144 -#define CS32_SW7 0x145 -#define CS33_SW7 0x146 -#define CS34_SW7 0x147 -#define CS35_SW7 0x148 -#define CS36_SW7 0x149 -#define CS37_SW7 0x14A -#define CS38_SW7 0x14B -#define CS39_SW7 0x14C - -#define CS31_SW8 0x14D -#define CS32_SW8 0x14E -#define CS33_SW8 0x14F -#define CS34_SW8 0x150 -#define CS35_SW8 0x151 -#define CS36_SW8 0x152 -#define CS37_SW8 0x153 -#define CS38_SW8 0x154 -#define CS39_SW8 0x155 - -#define CS31_SW9 0x156 -#define CS32_SW9 0x157 -#define CS33_SW9 0x158 -#define CS34_SW9 0x159 -#define CS35_SW9 0x15A -#define CS36_SW9 0x15B -#define CS37_SW9 0x15C -#define CS38_SW9 0x15D -#define CS39_SW9 0x15E diff --git a/drivers/led/issi/is31fl3742a-mono.c b/drivers/led/issi/is31fl3742a-mono.c new file mode 100644 index 0000000000..7d9095429d --- /dev/null +++ b/drivers/led/issi/is31fl3742a-mono.c @@ -0,0 +1,206 @@ +#include "is31fl3742a-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3742A_PWM_REGISTER_COUNT 180 +#define IS31FL3742A_SCALING_REGISTER_COUNT 180 + +#ifndef IS31FL3742A_I2C_TIMEOUT +# define IS31FL3742A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3742A_I2C_PERSISTENCE +# define IS31FL3742A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3742A_CONFIGURATION +# define IS31FL3742A_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3742A_PWM_FREQUENCY +# define IS31FL3742A_PWM_FREQUENCY IS31FL3742A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3742A_SW_PULLDOWN +# define IS31FL3742A_SW_PULLDOWN IS31FL3742A_PDR_8K_OHM +#endif + +#ifndef IS31FL3742A_CS_PULLUP +# define IS31FL3742A_CS_PULLUP IS31FL3742A_PUR_8K_OHM +#endif + +#ifndef IS31FL3742A_GLOBAL_CURRENT +# define IS31FL3742A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_SCALING_REGISTER_COUNT]; + +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT); +#endif +} + +void is31fl3742a_select_page(uint8_t addr, uint8_t page) { + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND_WRITE_LOCK, IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND, page); +} + +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3742A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3742a_init_drivers(void) { + i2c_init(); + + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_1); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_2); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_3); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_scaling_register(i, 0xFF); + } + + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3742a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, 0x00); + } + + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_FUNCTION); + + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PULLDOWNUP, (IS31FL3742A_SW_PULLDOWN << 4) | IS31FL3742A_CS_PULLUP); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3742A_GLOBAL_CURRENT); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3742A_PWM_FREQUENCY & 0b0111)); + is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_CONFIGURATION, IS31FL3742A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3742a_set_value(int index, uint8_t value) { + is31fl3742a_led_t led; + if (index >= 0 && index < IS31FL3742A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void is31fl3742a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { + is31fl3742a_set_value(i, value); + } +} + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3742a_led_t led; + memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); + + is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); + g_pwm_buffer_update_required[index] = false; + } +} + +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { + is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3742a_flush(void) { + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3742A_I2C_ADDRESS_2) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3742A_I2C_ADDRESS_3) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3742A_I2C_ADDRESS_4) + is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3742a-mono.h b/drivers/led/issi/is31fl3742a-mono.h new file mode 100644 index 0000000000..04614e4f6e --- /dev/null +++ b/drivers/led/issi/is31fl3742a-mono.h @@ -0,0 +1,297 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3742A_REG_INTERRUPT_MASK 0xF0 +#define IS31FL3742A_REG_INTERRUPT_STATUS 0xF1 +#define IS31FL3742A_REG_ID 0xFC + +#define IS31FL3742A_REG_COMMAND 0xFD + +#define IS31FL3742A_COMMAND_PWM 0x00 +#define IS31FL3742A_COMMAND_SCALING 0x02 +#define IS31FL3742A_COMMAND_FUNCTION 0x04 + +#define IS31FL3742A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3742A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY 0x36 +#define IS31FL3742A_FUNCTION_REG_RESET 0x3F +#define IS31FL3742A_FUNCTION_REG_SPREAD_SPECTRUM 0x41 + +#define IS31FL3742A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3742A_I2C_ADDRESS_GND 0x30 +#define IS31FL3742A_I2C_ADDRESS_SCL 0x31 +#define IS31FL3742A_I2C_ADDRESS_SDA 0x32 +#define IS31FL3742A_I2C_ADDRESS_VCC 0x33 + +#if defined(LED_MATRIX_IS31FL3742A) +# define IS31FL3742A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3742A_I2C_ADDRESS_4) +# define IS31FL3742A_DRIVER_COUNT 4 +#elif defined(IS31FL3742A_I2C_ADDRESS_3) +# define IS31FL3742A_DRIVER_COUNT 3 +#elif defined(IS31FL3742A_I2C_ADDRESS_2) +# define IS31FL3742A_DRIVER_COUNT 2 +#elif defined(IS31FL3742A_I2C_ADDRESS_1) +# define IS31FL3742A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3742a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3742a_led_t; + +extern const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT]; + +void is31fl3742a_init_drivers(void); +void is31fl3742a_init(uint8_t addr); +void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3742a_select_page(uint8_t addr, uint8_t page); +void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3742a_set_value(int index, uint8_t value); +void is31fl3742a_set_value_all(uint8_t value); + +void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3742a_flush(void); + +#define IS31FL3742A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3742A_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PDR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PDR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PDR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PDR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PDR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PDR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3742A_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor +#define IS31FL3742A_PUR_1K_OHM 0b010 // 1 kOhm resistor +#define IS31FL3742A_PUR_2K_OHM 0b011 // 2 kOhm resistor +#define IS31FL3742A_PUR_4K_OHM 0b100 // 4 kOhm resistor +#define IS31FL3742A_PUR_8K_OHM 0b101 // 8 kOhm resistor +#define IS31FL3742A_PUR_16K_OHM 0b110 // 16 kOhm resistor +#define IS31FL3742A_PUR_32K_OHM 0b111 // 32 kOhm resistor + +#define IS31FL3742A_PWM_FREQUENCY_29K_HZ 0b0000 +#define IS31FL3742A_PWM_FREQUENCY_3K6_HZ 0b0011 +#define IS31FL3742A_PWM_FREQUENCY_1K8_HZ 0b0111 +#define IS31FL3742A_PWM_FREQUENCY_900_HZ 0b1011 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 +#define CS19_SW1 0x12 +#define CS20_SW1 0x13 +#define CS21_SW1 0x14 +#define CS22_SW1 0x15 +#define CS23_SW1 0x16 +#define CS24_SW1 0x17 +#define CS25_SW1 0x18 +#define CS26_SW1 0x19 +#define CS27_SW1 0x1A +#define CS28_SW1 0x1B +#define CS29_SW1 0x1C +#define CS30_SW1 0x1D + +#define CS1_SW2 0x1E +#define CS2_SW2 0x1F +#define CS3_SW2 0x20 +#define CS4_SW2 0x21 +#define CS5_SW2 0x22 +#define CS6_SW2 0x23 +#define CS7_SW2 0x24 +#define CS8_SW2 0x25 +#define CS9_SW2 0x26 +#define CS10_SW2 0x27 +#define CS11_SW2 0x28 +#define CS12_SW2 0x29 +#define CS13_SW2 0x2A +#define CS14_SW2 0x2B +#define CS15_SW2 0x2C +#define CS16_SW2 0x2D +#define CS17_SW2 0x2E +#define CS18_SW2 0x2F +#define CS19_SW2 0x30 +#define CS20_SW2 0x31 +#define CS21_SW2 0x32 +#define CS22_SW2 0x33 +#define CS23_SW2 0x34 +#define CS24_SW2 0x35 +#define CS25_SW2 0x36 +#define CS26_SW2 0x37 +#define CS27_SW2 0x38 +#define CS28_SW2 0x39 +#define CS29_SW2 0x3A +#define CS30_SW2 0x3B + +#define CS1_SW3 0x3C +#define CS2_SW3 0x3D +#define CS3_SW3 0x3E +#define CS4_SW3 0x3F +#define CS5_SW3 0x40 +#define CS6_SW3 0x41 +#define CS7_SW3 0x42 +#define CS8_SW3 0x43 +#define CS9_SW3 0x44 +#define CS10_SW3 0x45 +#define CS11_SW3 0x46 +#define CS12_SW3 0x47 +#define CS13_SW3 0x48 +#define CS14_SW3 0x49 +#define CS15_SW3 0x4A +#define CS16_SW3 0x4B +#define CS17_SW3 0x4C +#define CS18_SW3 0x4D +#define CS19_SW3 0x4E +#define CS20_SW3 0x4F +#define CS21_SW3 0x50 +#define CS22_SW3 0x51 +#define CS23_SW3 0x52 +#define CS24_SW3 0x53 +#define CS25_SW3 0x54 +#define CS26_SW3 0x55 +#define CS27_SW3 0x56 +#define CS28_SW3 0x57 +#define CS29_SW3 0x58 +#define CS30_SW3 0x59 + +#define CS1_SW4 0x5A +#define CS2_SW4 0x5B +#define CS3_SW4 0x5C +#define CS4_SW4 0x5D +#define CS5_SW4 0x5E +#define CS6_SW4 0x5F +#define CS7_SW4 0x60 +#define CS8_SW4 0x61 +#define CS9_SW4 0x62 +#define CS10_SW4 0x63 +#define CS11_SW4 0x64 +#define CS12_SW4 0x65 +#define CS13_SW4 0x66 +#define CS14_SW4 0x67 +#define CS15_SW4 0x68 +#define CS16_SW4 0x69 +#define CS17_SW4 0x6A +#define CS18_SW4 0x6B +#define CS19_SW4 0x6C +#define CS20_SW4 0x6D +#define CS21_SW4 0x6E +#define CS22_SW4 0x6F +#define CS23_SW4 0x70 +#define CS24_SW4 0x71 +#define CS25_SW4 0x72 +#define CS26_SW4 0x73 +#define CS27_SW4 0x74 +#define CS28_SW4 0x75 +#define CS29_SW4 0x76 +#define CS30_SW4 0x77 + +#define CS1_SW5 0x78 +#define CS2_SW5 0x79 +#define CS3_SW5 0x7A +#define CS4_SW5 0x7B +#define CS5_SW5 0x7C +#define CS6_SW5 0x7D +#define CS7_SW5 0x7E +#define CS8_SW5 0x7F +#define CS9_SW5 0x80 +#define CS10_SW5 0x81 +#define CS11_SW5 0x82 +#define CS12_SW5 0x83 +#define CS13_SW5 0x84 +#define CS14_SW5 0x85 +#define CS15_SW5 0x86 +#define CS16_SW5 0x87 +#define CS17_SW5 0x88 +#define CS18_SW5 0x89 +#define CS19_SW5 0x8A +#define CS20_SW5 0x8B +#define CS21_SW5 0x8C +#define CS22_SW5 0x8D +#define CS23_SW5 0x8E +#define CS24_SW5 0x8F +#define CS25_SW5 0x90 +#define CS26_SW5 0x91 +#define CS27_SW5 0x92 +#define CS28_SW5 0x93 +#define CS29_SW5 0x94 +#define CS30_SW5 0x95 + +#define CS1_SW6 0x96 +#define CS2_SW6 0x97 +#define CS3_SW6 0x98 +#define CS4_SW6 0x99 +#define CS5_SW6 0x9A +#define CS6_SW6 0x9B +#define CS7_SW6 0x9C +#define CS8_SW6 0x9D +#define CS9_SW6 0x9E +#define CS10_SW6 0x9F +#define CS11_SW6 0xA0 +#define CS12_SW6 0xA1 +#define CS13_SW6 0xA2 +#define CS14_SW6 0xA3 +#define CS15_SW6 0xA4 +#define CS16_SW6 0xA5 +#define CS17_SW6 0xA6 +#define CS18_SW6 0xA7 +#define CS19_SW6 0xA8 +#define CS20_SW6 0xA9 +#define CS21_SW6 0xAA +#define CS22_SW6 0xAB +#define CS23_SW6 0xAC +#define CS24_SW6 0xAD +#define CS25_SW6 0xAE +#define CS26_SW6 0xAF +#define CS27_SW6 0xB0 +#define CS28_SW6 0xB1 +#define CS29_SW6 0xB2 +#define CS30_SW6 0xB3 diff --git a/drivers/led/issi/is31fl3742a-simple.c b/drivers/led/issi/is31fl3742a-simple.c deleted file mode 100644 index ee6e8741b9..0000000000 --- a/drivers/led/issi/is31fl3742a-simple.c +++ /dev/null @@ -1,206 +0,0 @@ -#include "is31fl3742a-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3742A_PWM_REGISTER_COUNT 180 -#define IS31FL3742A_SCALING_REGISTER_COUNT 180 - -#ifndef IS31FL3742A_I2C_TIMEOUT -# define IS31FL3742A_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3742A_I2C_PERSISTENCE -# define IS31FL3742A_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3742A_CONFIGURATION -# define IS31FL3742A_CONFIGURATION 0x31 -#endif - -#ifndef IS31FL3742A_PWM_FREQUENCY -# define IS31FL3742A_PWM_FREQUENCY IS31FL3742A_PWM_FREQUENCY_29K_HZ -#endif - -#ifndef IS31FL3742A_SW_PULLDOWN -# define IS31FL3742A_SW_PULLDOWN IS31FL3742A_PDR_8K_OHM -#endif - -#ifndef IS31FL3742A_CS_PULLUP -# define IS31FL3742A_CS_PULLUP IS31FL3742A_PUR_8K_OHM -#endif - -#ifndef IS31FL3742A_GLOBAL_CURRENT -# define IS31FL3742A_GLOBAL_CURRENT 0xFF -#endif - -uint8_t i2c_transfer_buffer[20] = {0xFF}; - -uint8_t g_pwm_buffer[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; -bool g_scaling_registers_update_required[IS31FL3742A_DRIVER_COUNT] = {false}; - -uint8_t g_scaling_registers[IS31FL3742A_DRIVER_COUNT][IS31FL3742A_SCALING_REGISTER_COUNT]; - -void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3742A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3742A_I2C_TIMEOUT); -#endif -} - -void is31fl3742a_select_page(uint8_t addr, uint8_t page) { - is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND_WRITE_LOCK, IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC); - is31fl3742a_write_register(addr, IS31FL3742A_REG_COMMAND, page); -} - -void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes page 0 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3742A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3742A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT) != 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3742A_I2C_TIMEOUT); -#endif - } -} - -void is31fl3742a_init_drivers(void) { - i2c_init(); - - is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_1); -#if defined(IS31FL3742A_I2C_ADDRESS_2) - is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_2); -# if defined(IS31FL3742A_I2C_ADDRESS_3) - is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_3); -# if defined(IS31FL3742A_I2C_ADDRESS_4) - is31fl3742a_init(IS31FL3742A_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { - is31fl3742a_set_scaling_register(i, 0xFF); - } - - is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3742A_I2C_ADDRESS_2) - is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3742A_I2C_ADDRESS_3) - is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3742A_I2C_ADDRESS_4) - is31fl3742a_update_scaling_registers(IS31FL3742A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3742a_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { - is31fl3742a_write_register(addr, i, 0x00); - } - - is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); - - for (int i = 0; i < IS31FL3742A_PWM_REGISTER_COUNT; i++) { - is31fl3742a_write_register(addr, i, 0x00); - } - - is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_FUNCTION); - - is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PULLDOWNUP, (IS31FL3742A_SW_PULLDOWN << 4) | IS31FL3742A_CS_PULLUP); - is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3742A_GLOBAL_CURRENT); - is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY, (IS31FL3742A_PWM_FREQUENCY & 0b0111)); - is31fl3742a_write_register(addr, IS31FL3742A_FUNCTION_REG_CONFIGURATION, IS31FL3742A_CONFIGURATION); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3742a_set_value(int index, uint8_t value) { - is31fl3742a_led_t led; - if (index >= 0 && index < IS31FL3742A_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void is31fl3742a_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3742A_LED_COUNT; i++) { - is31fl3742a_set_value(i, value); - } -} - -void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value) { - is31fl3742a_led_t led; - memcpy_P(&led, (&g_is31fl3742a_leds[index]), sizeof(led)); - - g_scaling_registers[led.driver][led.v] = value; - - g_scaling_registers_update_required[led.driver] = true; -} - -void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_PWM); - - is31fl3742a_write_pwm_buffer(addr, g_pwm_buffer[index]); - g_pwm_buffer_update_required[index] = false; - } -} - -void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index) { - if (g_scaling_registers_update_required[index]) { - is31fl3742a_select_page(addr, IS31FL3742A_COMMAND_SCALING); - - for (int i = 0; i < IS31FL3742A_SCALING_REGISTER_COUNT; i++) { - is31fl3742a_write_register(addr, i, g_scaling_registers[index][i]); - } - g_scaling_registers_update_required[index] = false; - } -} - -void is31fl3742a_flush(void) { - is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3742A_I2C_ADDRESS_2) - is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3742A_I2C_ADDRESS_3) - is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3742A_I2C_ADDRESS_4) - is31fl3742a_update_pwm_buffers(IS31FL3742A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3742a-simple.h b/drivers/led/issi/is31fl3742a-simple.h deleted file mode 100644 index 04614e4f6e..0000000000 --- a/drivers/led/issi/is31fl3742a-simple.h +++ /dev/null @@ -1,297 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#define IS31FL3742A_REG_INTERRUPT_MASK 0xF0 -#define IS31FL3742A_REG_INTERRUPT_STATUS 0xF1 -#define IS31FL3742A_REG_ID 0xFC - -#define IS31FL3742A_REG_COMMAND 0xFD - -#define IS31FL3742A_COMMAND_PWM 0x00 -#define IS31FL3742A_COMMAND_SCALING 0x02 -#define IS31FL3742A_COMMAND_FUNCTION 0x04 - -#define IS31FL3742A_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3742A_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3742A_FUNCTION_REG_PULLDOWNUP 0x02 -#define IS31FL3742A_FUNCTION_REG_PWM_FREQUENCY 0x36 -#define IS31FL3742A_FUNCTION_REG_RESET 0x3F -#define IS31FL3742A_FUNCTION_REG_SPREAD_SPECTRUM 0x41 - -#define IS31FL3742A_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3742A_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3742A_I2C_ADDRESS_GND 0x30 -#define IS31FL3742A_I2C_ADDRESS_SCL 0x31 -#define IS31FL3742A_I2C_ADDRESS_SDA 0x32 -#define IS31FL3742A_I2C_ADDRESS_VCC 0x33 - -#if defined(LED_MATRIX_IS31FL3742A) -# define IS31FL3742A_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3742A_I2C_ADDRESS_4) -# define IS31FL3742A_DRIVER_COUNT 4 -#elif defined(IS31FL3742A_I2C_ADDRESS_3) -# define IS31FL3742A_DRIVER_COUNT 3 -#elif defined(IS31FL3742A_I2C_ADDRESS_2) -# define IS31FL3742A_DRIVER_COUNT 2 -#elif defined(IS31FL3742A_I2C_ADDRESS_1) -# define IS31FL3742A_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3742a_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3742a_led_t; - -extern const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT]; - -void is31fl3742a_init_drivers(void); -void is31fl3742a_init(uint8_t addr); -void is31fl3742a_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3742a_select_page(uint8_t addr, uint8_t page); -void is31fl3742a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3742a_set_value(int index, uint8_t value); -void is31fl3742a_set_value_all(uint8_t value); - -void is31fl3742a_set_scaling_register(uint8_t index, uint8_t value); - -void is31fl3742a_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3742a_update_scaling_registers(uint8_t addr, uint8_t index); - -void is31fl3742a_flush(void); - -#define IS31FL3742A_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3742A_PDR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3742A_PDR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3742A_PDR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3742A_PDR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3742A_PDR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3742A_PDR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3742A_PDR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3742A_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3742A_PUR_0K5_OHM 0b001 // 0.5 kOhm resistor -#define IS31FL3742A_PUR_1K_OHM 0b010 // 1 kOhm resistor -#define IS31FL3742A_PUR_2K_OHM 0b011 // 2 kOhm resistor -#define IS31FL3742A_PUR_4K_OHM 0b100 // 4 kOhm resistor -#define IS31FL3742A_PUR_8K_OHM 0b101 // 8 kOhm resistor -#define IS31FL3742A_PUR_16K_OHM 0b110 // 16 kOhm resistor -#define IS31FL3742A_PUR_32K_OHM 0b111 // 32 kOhm resistor - -#define IS31FL3742A_PWM_FREQUENCY_29K_HZ 0b0000 -#define IS31FL3742A_PWM_FREQUENCY_3K6_HZ 0b0011 -#define IS31FL3742A_PWM_FREQUENCY_1K8_HZ 0b0111 -#define IS31FL3742A_PWM_FREQUENCY_900_HZ 0b1011 - -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 -#define CS19_SW1 0x12 -#define CS20_SW1 0x13 -#define CS21_SW1 0x14 -#define CS22_SW1 0x15 -#define CS23_SW1 0x16 -#define CS24_SW1 0x17 -#define CS25_SW1 0x18 -#define CS26_SW1 0x19 -#define CS27_SW1 0x1A -#define CS28_SW1 0x1B -#define CS29_SW1 0x1C -#define CS30_SW1 0x1D - -#define CS1_SW2 0x1E -#define CS2_SW2 0x1F -#define CS3_SW2 0x20 -#define CS4_SW2 0x21 -#define CS5_SW2 0x22 -#define CS6_SW2 0x23 -#define CS7_SW2 0x24 -#define CS8_SW2 0x25 -#define CS9_SW2 0x26 -#define CS10_SW2 0x27 -#define CS11_SW2 0x28 -#define CS12_SW2 0x29 -#define CS13_SW2 0x2A -#define CS14_SW2 0x2B -#define CS15_SW2 0x2C -#define CS16_SW2 0x2D -#define CS17_SW2 0x2E -#define CS18_SW2 0x2F -#define CS19_SW2 0x30 -#define CS20_SW2 0x31 -#define CS21_SW2 0x32 -#define CS22_SW2 0x33 -#define CS23_SW2 0x34 -#define CS24_SW2 0x35 -#define CS25_SW2 0x36 -#define CS26_SW2 0x37 -#define CS27_SW2 0x38 -#define CS28_SW2 0x39 -#define CS29_SW2 0x3A -#define CS30_SW2 0x3B - -#define CS1_SW3 0x3C -#define CS2_SW3 0x3D -#define CS3_SW3 0x3E -#define CS4_SW3 0x3F -#define CS5_SW3 0x40 -#define CS6_SW3 0x41 -#define CS7_SW3 0x42 -#define CS8_SW3 0x43 -#define CS9_SW3 0x44 -#define CS10_SW3 0x45 -#define CS11_SW3 0x46 -#define CS12_SW3 0x47 -#define CS13_SW3 0x48 -#define CS14_SW3 0x49 -#define CS15_SW3 0x4A -#define CS16_SW3 0x4B -#define CS17_SW3 0x4C -#define CS18_SW3 0x4D -#define CS19_SW3 0x4E -#define CS20_SW3 0x4F -#define CS21_SW3 0x50 -#define CS22_SW3 0x51 -#define CS23_SW3 0x52 -#define CS24_SW3 0x53 -#define CS25_SW3 0x54 -#define CS26_SW3 0x55 -#define CS27_SW3 0x56 -#define CS28_SW3 0x57 -#define CS29_SW3 0x58 -#define CS30_SW3 0x59 - -#define CS1_SW4 0x5A -#define CS2_SW4 0x5B -#define CS3_SW4 0x5C -#define CS4_SW4 0x5D -#define CS5_SW4 0x5E -#define CS6_SW4 0x5F -#define CS7_SW4 0x60 -#define CS8_SW4 0x61 -#define CS9_SW4 0x62 -#define CS10_SW4 0x63 -#define CS11_SW4 0x64 -#define CS12_SW4 0x65 -#define CS13_SW4 0x66 -#define CS14_SW4 0x67 -#define CS15_SW4 0x68 -#define CS16_SW4 0x69 -#define CS17_SW4 0x6A -#define CS18_SW4 0x6B -#define CS19_SW4 0x6C -#define CS20_SW4 0x6D -#define CS21_SW4 0x6E -#define CS22_SW4 0x6F -#define CS23_SW4 0x70 -#define CS24_SW4 0x71 -#define CS25_SW4 0x72 -#define CS26_SW4 0x73 -#define CS27_SW4 0x74 -#define CS28_SW4 0x75 -#define CS29_SW4 0x76 -#define CS30_SW4 0x77 - -#define CS1_SW5 0x78 -#define CS2_SW5 0x79 -#define CS3_SW5 0x7A -#define CS4_SW5 0x7B -#define CS5_SW5 0x7C -#define CS6_SW5 0x7D -#define CS7_SW5 0x7E -#define CS8_SW5 0x7F -#define CS9_SW5 0x80 -#define CS10_SW5 0x81 -#define CS11_SW5 0x82 -#define CS12_SW5 0x83 -#define CS13_SW5 0x84 -#define CS14_SW5 0x85 -#define CS15_SW5 0x86 -#define CS16_SW5 0x87 -#define CS17_SW5 0x88 -#define CS18_SW5 0x89 -#define CS19_SW5 0x8A -#define CS20_SW5 0x8B -#define CS21_SW5 0x8C -#define CS22_SW5 0x8D -#define CS23_SW5 0x8E -#define CS24_SW5 0x8F -#define CS25_SW5 0x90 -#define CS26_SW5 0x91 -#define CS27_SW5 0x92 -#define CS28_SW5 0x93 -#define CS29_SW5 0x94 -#define CS30_SW5 0x95 - -#define CS1_SW6 0x96 -#define CS2_SW6 0x97 -#define CS3_SW6 0x98 -#define CS4_SW6 0x99 -#define CS5_SW6 0x9A -#define CS6_SW6 0x9B -#define CS7_SW6 0x9C -#define CS8_SW6 0x9D -#define CS9_SW6 0x9E -#define CS10_SW6 0x9F -#define CS11_SW6 0xA0 -#define CS12_SW6 0xA1 -#define CS13_SW6 0xA2 -#define CS14_SW6 0xA3 -#define CS15_SW6 0xA4 -#define CS16_SW6 0xA5 -#define CS17_SW6 0xA6 -#define CS18_SW6 0xA7 -#define CS19_SW6 0xA8 -#define CS20_SW6 0xA9 -#define CS21_SW6 0xAA -#define CS22_SW6 0xAB -#define CS23_SW6 0xAC -#define CS24_SW6 0xAD -#define CS25_SW6 0xAE -#define CS26_SW6 0xAF -#define CS27_SW6 0xB0 -#define CS28_SW6 0xB1 -#define CS29_SW6 0xB2 -#define CS30_SW6 0xB3 diff --git a/drivers/led/issi/is31fl3743a-mono.c b/drivers/led/issi/is31fl3743a-mono.c new file mode 100644 index 0000000000..f8340222e4 --- /dev/null +++ b/drivers/led/issi/is31fl3743a-mono.c @@ -0,0 +1,216 @@ +#include "is31fl3743a-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3743A_PWM_REGISTER_COUNT 198 +#define IS31FL3743A_SCALING_REGISTER_COUNT 198 + +#ifndef IS31FL3743A_I2C_TIMEOUT +# define IS31FL3743A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3743A_I2C_PERSISTENCE +# define IS31FL3743A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3743A_CONFIGURATION +# define IS31FL3743A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3743A_SW_PULLDOWN +# define IS31FL3743A_SW_PULLDOWN IS31FL3743A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3743A_CS_PULLUP +# define IS31FL3743A_CS_PULLUP IS31FL3743A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3743A_GLOBAL_CURRENT +# define IS31FL3743A_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3743A_SYNC_1 +# define IS31FL3743A_SYNC_1 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_2 +# define IS31FL3743A_SYNC_2 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_3 +# define IS31FL3743A_SYNC_3 IS31FL3743A_SYNC_NONE +#endif +#ifndef IS31FL3743A_SYNC_4 +# define IS31FL3743A_SYNC_4 IS31FL3743A_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_SCALING_REGISTER_COUNT]; + +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT); +#endif +} + +void is31fl3743a_select_page(uint8_t addr, uint8_t page) { + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND_WRITE_LOCK, IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND, page); +} + +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3743A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3743a_init_drivers(void) { + i2c_init(); + + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_1, IS31FL3743A_SYNC_1); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_2, IS31FL3743A_SYNC_2); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_3, IS31FL3743A_SYNC_3); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_4, IS31FL3743A_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_scaling_register(i, 0xFF); + } + + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3743a_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, 0x00); + } + + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_FUNCTION); + + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_PULLDOWNUP, (IS31FL3743A_SW_PULLDOWN << 4) | IS31FL3743A_CS_PULLUP); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3743A_GLOBAL_CURRENT); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_CONFIGURATION, IS31FL3743A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3743a_set_value(int index, uint8_t value) { + is31fl3743a_led_t led; + if (index >= 0 && index < IS31FL3743A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3743a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { + is31fl3743a_set_value(i, value); + } +} + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3743a_led_t led; + memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); + + is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { + is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3743a_flush(void) { + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3743A_I2C_ADDRESS_2) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3743A_I2C_ADDRESS_3) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3743A_I2C_ADDRESS_4) + is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3743a-mono.h b/drivers/led/issi/is31fl3743a-mono.h new file mode 100644 index 0000000000..544531ec25 --- /dev/null +++ b/drivers/led/issi/is31fl3743a-mono.h @@ -0,0 +1,329 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3743A_REG_ID 0xFC + +#define IS31FL3743A_REG_COMMAND 0xFD + +#define IS31FL3743A_COMMAND_PWM 0x00 +#define IS31FL3743A_COMMAND_SCALING 0x01 +#define IS31FL3743A_COMMAND_FUNCTION 0x02 + +#define IS31FL3743A_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3743A_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3743A_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3743A_FUNCTION_REG_RESET 0x2F + +#define IS31FL3743A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3743A_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3743A_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3743A_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3743A_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3743A_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3743A_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3743A_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3743A_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3743A_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3743A_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3743A_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3743A_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3743A_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3743A_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3743A_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3743A_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(LED_MATRIX_IS31FL3743A) +# define IS31FL3743A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3743A_I2C_ADDRESS_4) +# define IS31FL3743A_DRIVER_COUNT 4 +#elif defined(IS31FL3743A_I2C_ADDRESS_3) +# define IS31FL3743A_DRIVER_COUNT 3 +#elif defined(IS31FL3743A_I2C_ADDRESS_2) +# define IS31FL3743A_DRIVER_COUNT 2 +#elif defined(IS31FL3743A_I2C_ADDRESS_1) +# define IS31FL3743A_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3743a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3743a_led_t; + +extern const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT]; + +void is31fl3743a_init_drivers(void); +void is31fl3743a_init(uint8_t addr, uint8_t sync); +void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3743a_select_page(uint8_t addr, uint8_t page); +void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3743a_set_value(int index, uint8_t value); +void is31fl3743a_set_value_all(uint8_t value); + +void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3743a_flush(void); + +#define IS31FL3743A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3743A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3743A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3743A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3743A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3743A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3743A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3743A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3743A_SYNC_NONE 0b00 +#define IS31FL3743A_SYNC_SLAVE 0b10 +#define IS31FL3743A_SYNC_MASTER 0b11 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 + +#define CS1_SW5 0x48 +#define CS2_SW5 0x49 +#define CS3_SW5 0x4A +#define CS4_SW5 0x4B +#define CS5_SW5 0x4C +#define CS6_SW5 0x4D +#define CS7_SW5 0x4E +#define CS8_SW5 0x4F +#define CS9_SW5 0x50 +#define CS10_SW5 0x51 +#define CS11_SW5 0x52 +#define CS12_SW5 0x53 +#define CS13_SW5 0x54 +#define CS14_SW5 0x55 +#define CS15_SW5 0x56 +#define CS16_SW5 0x57 +#define CS17_SW5 0x58 +#define CS18_SW5 0x59 + +#define CS1_SW6 0x5A +#define CS2_SW6 0x5B +#define CS3_SW6 0x5C +#define CS4_SW6 0x5D +#define CS5_SW6 0x5E +#define CS6_SW6 0x5F +#define CS7_SW6 0x60 +#define CS8_SW6 0x61 +#define CS9_SW6 0x62 +#define CS10_SW6 0x63 +#define CS11_SW6 0x64 +#define CS12_SW6 0x65 +#define CS13_SW6 0x66 +#define CS14_SW6 0x67 +#define CS15_SW6 0x68 +#define CS16_SW6 0x69 +#define CS17_SW6 0x6A +#define CS18_SW6 0x6B + +#define CS1_SW7 0x6C +#define CS2_SW7 0x6D +#define CS3_SW7 0x6E +#define CS4_SW7 0x6F +#define CS5_SW7 0x70 +#define CS6_SW7 0x71 +#define CS7_SW7 0x72 +#define CS8_SW7 0x73 +#define CS9_SW7 0x74 +#define CS10_SW7 0x75 +#define CS11_SW7 0x76 +#define CS12_SW7 0x77 +#define CS13_SW7 0x78 +#define CS14_SW7 0x79 +#define CS15_SW7 0x7A +#define CS16_SW7 0x7B +#define CS17_SW7 0x7C +#define CS18_SW7 0x7D + +#define CS1_SW8 0x7E +#define CS2_SW8 0x7F +#define CS3_SW8 0x80 +#define CS4_SW8 0x81 +#define CS5_SW8 0x82 +#define CS6_SW8 0x83 +#define CS7_SW8 0x84 +#define CS8_SW8 0x85 +#define CS9_SW8 0x86 +#define CS10_SW8 0x87 +#define CS11_SW8 0x88 +#define CS12_SW8 0x89 +#define CS13_SW8 0x8A +#define CS14_SW8 0x8B +#define CS15_SW8 0x8C +#define CS16_SW8 0x8D +#define CS17_SW8 0x8E +#define CS18_SW8 0x8F + +#define CS1_SW9 0x90 +#define CS2_SW9 0x91 +#define CS3_SW9 0x92 +#define CS4_SW9 0x93 +#define CS5_SW9 0x94 +#define CS6_SW9 0x95 +#define CS7_SW9 0x96 +#define CS8_SW9 0x97 +#define CS9_SW9 0x98 +#define CS10_SW9 0x99 +#define CS11_SW9 0x9A +#define CS12_SW9 0x9B +#define CS13_SW9 0x9C +#define CS14_SW9 0x9D +#define CS15_SW9 0x9E +#define CS16_SW9 0x9F +#define CS17_SW9 0xA0 +#define CS18_SW9 0xA1 + +#define CS1_SW10 0xA2 +#define CS2_SW10 0xA3 +#define CS3_SW10 0xA4 +#define CS4_SW10 0xA5 +#define CS5_SW10 0xA6 +#define CS6_SW10 0xA7 +#define CS7_SW10 0xA8 +#define CS8_SW10 0xA9 +#define CS9_SW10 0xAA +#define CS10_SW10 0xAB +#define CS11_SW10 0xAC +#define CS12_SW10 0xAD +#define CS13_SW10 0xAE +#define CS14_SW10 0xAF +#define CS15_SW10 0xB0 +#define CS16_SW10 0xB1 +#define CS17_SW10 0xB2 +#define CS18_SW10 0xB3 + +#define CS1_SW11 0xB4 +#define CS2_SW11 0xB5 +#define CS3_SW11 0xB6 +#define CS4_SW11 0xB7 +#define CS5_SW11 0xB8 +#define CS6_SW11 0xB9 +#define CS7_SW11 0xBA +#define CS8_SW11 0xBB +#define CS9_SW11 0xBC +#define CS10_SW11 0xBD +#define CS11_SW11 0xBE +#define CS12_SW11 0xBF +#define CS13_SW11 0xC0 +#define CS14_SW11 0xC1 +#define CS15_SW11 0xC2 +#define CS16_SW11 0xC3 +#define CS17_SW11 0xC4 +#define CS18_SW11 0xC5 diff --git a/drivers/led/issi/is31fl3743a-simple.c b/drivers/led/issi/is31fl3743a-simple.c deleted file mode 100644 index 26c42ea69c..0000000000 --- a/drivers/led/issi/is31fl3743a-simple.c +++ /dev/null @@ -1,216 +0,0 @@ -#include "is31fl3743a-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3743A_PWM_REGISTER_COUNT 198 -#define IS31FL3743A_SCALING_REGISTER_COUNT 198 - -#ifndef IS31FL3743A_I2C_TIMEOUT -# define IS31FL3743A_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3743A_I2C_PERSISTENCE -# define IS31FL3743A_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3743A_CONFIGURATION -# define IS31FL3743A_CONFIGURATION 0x01 -#endif - -#ifndef IS31FL3743A_SW_PULLDOWN -# define IS31FL3743A_SW_PULLDOWN IS31FL3743A_PDR_2K_OHM_SW_OFF -#endif - -#ifndef IS31FL3743A_CS_PULLUP -# define IS31FL3743A_CS_PULLUP IS31FL3743A_PUR_2K_OHM_CS_OFF -#endif - -#ifndef IS31FL3743A_GLOBAL_CURRENT -# define IS31FL3743A_GLOBAL_CURRENT 0xFF -#endif - -#ifndef IS31FL3743A_SYNC_1 -# define IS31FL3743A_SYNC_1 IS31FL3743A_SYNC_NONE -#endif -#ifndef IS31FL3743A_SYNC_2 -# define IS31FL3743A_SYNC_2 IS31FL3743A_SYNC_NONE -#endif -#ifndef IS31FL3743A_SYNC_3 -# define IS31FL3743A_SYNC_3 IS31FL3743A_SYNC_NONE -#endif -#ifndef IS31FL3743A_SYNC_4 -# define IS31FL3743A_SYNC_4 IS31FL3743A_SYNC_NONE -#endif - -uint8_t i2c_transfer_buffer[20] = {0xFF}; - -uint8_t g_pwm_buffer[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; -bool g_scaling_registers_update_required[IS31FL3743A_DRIVER_COUNT] = {false}; - -uint8_t g_scaling_registers[IS31FL3743A_DRIVER_COUNT][IS31FL3743A_SCALING_REGISTER_COUNT]; - -void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3743A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3743A_I2C_TIMEOUT); -#endif -} - -void is31fl3743a_select_page(uint8_t addr, uint8_t page) { - is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND_WRITE_LOCK, IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC); - is31fl3743a_write_register(addr, IS31FL3743A_REG_COMMAND, page); -} - -void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes page 0 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i + 1; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3743A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3743A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT) != 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3743A_I2C_TIMEOUT); -#endif - } -} - -void is31fl3743a_init_drivers(void) { - i2c_init(); - - is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_1, IS31FL3743A_SYNC_1); -#if defined(IS31FL3743A_I2C_ADDRESS_2) - is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_2, IS31FL3743A_SYNC_2); -# if defined(IS31FL3743A_I2C_ADDRESS_3) - is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_3, IS31FL3743A_SYNC_3); -# if defined(IS31FL3743A_I2C_ADDRESS_4) - is31fl3743a_init(IS31FL3743A_I2C_ADDRESS_4, IS31FL3743A_SYNC_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { - is31fl3743a_set_scaling_register(i, 0xFF); - } - - is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3743A_I2C_ADDRESS_2) - is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3743A_I2C_ADDRESS_3) - is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3743A_I2C_ADDRESS_4) - is31fl3743a_update_scaling_registers(IS31FL3743A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3743a_init(uint8_t addr, uint8_t sync) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { - is31fl3743a_write_register(addr, i + 1, 0x00); - } - - is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); - - for (int i = 0; i < IS31FL3743A_PWM_REGISTER_COUNT; i++) { - is31fl3743a_write_register(addr, i + 1, 0x00); - } - - is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_FUNCTION); - - is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_PULLDOWNUP, (IS31FL3743A_SW_PULLDOWN << 4) | IS31FL3743A_CS_PULLUP); - is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3743A_GLOBAL_CURRENT); - is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); - is31fl3743a_write_register(addr, IS31FL3743A_FUNCTION_REG_CONFIGURATION, IS31FL3743A_CONFIGURATION); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3743a_set_value(int index, uint8_t value) { - is31fl3743a_led_t led; - if (index >= 0 && index < IS31FL3743A_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer_update_required[led.driver] = true; - g_pwm_buffer[led.driver][led.v] = value; - } -} - -void is31fl3743a_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3743A_LED_COUNT; i++) { - is31fl3743a_set_value(i, value); - } -} - -void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value) { - is31fl3743a_led_t led; - memcpy_P(&led, (&g_is31fl3743a_leds[index]), sizeof(led)); - - g_scaling_registers[led.driver][led.v] = value; - - g_scaling_registers_update_required[led.driver] = true; -} - -void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_PWM); - - is31fl3743a_write_pwm_buffer(addr, g_pwm_buffer[index]); - } - - g_pwm_buffer_update_required[index] = false; -} - -void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index) { - if (g_scaling_registers_update_required[index]) { - is31fl3743a_select_page(addr, IS31FL3743A_COMMAND_SCALING); - - for (int i = 0; i < IS31FL3743A_SCALING_REGISTER_COUNT; i++) { - is31fl3743a_write_register(addr, i + 1, g_scaling_registers[index][i]); - } - g_scaling_registers_update_required[index] = false; - } -} - -void is31fl3743a_flush(void) { - is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3743A_I2C_ADDRESS_2) - is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3743A_I2C_ADDRESS_3) - is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3743A_I2C_ADDRESS_4) - is31fl3743a_update_pwm_buffers(IS31FL3743A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3743a-simple.h b/drivers/led/issi/is31fl3743a-simple.h deleted file mode 100644 index 544531ec25..0000000000 --- a/drivers/led/issi/is31fl3743a-simple.h +++ /dev/null @@ -1,329 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#define IS31FL3743A_REG_ID 0xFC - -#define IS31FL3743A_REG_COMMAND 0xFD - -#define IS31FL3743A_COMMAND_PWM 0x00 -#define IS31FL3743A_COMMAND_SCALING 0x01 -#define IS31FL3743A_COMMAND_FUNCTION 0x02 - -#define IS31FL3743A_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3743A_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3743A_FUNCTION_REG_PULLDOWNUP 0x02 -#define IS31FL3743A_FUNCTION_REG_TEMPERATURE 0x24 -#define IS31FL3743A_FUNCTION_REG_SPREAD_SPECTRUM 0x25 -#define IS31FL3743A_FUNCTION_REG_RESET 0x2F - -#define IS31FL3743A_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3743A_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3743A_I2C_ADDRESS_GND_GND 0x20 -#define IS31FL3743A_I2C_ADDRESS_GND_SCL 0x21 -#define IS31FL3743A_I2C_ADDRESS_GND_SDA 0x22 -#define IS31FL3743A_I2C_ADDRESS_GND_VCC 0x23 -#define IS31FL3743A_I2C_ADDRESS_SCL_GND 0x24 -#define IS31FL3743A_I2C_ADDRESS_SCL_SCL 0x25 -#define IS31FL3743A_I2C_ADDRESS_SCL_SDA 0x26 -#define IS31FL3743A_I2C_ADDRESS_SCL_VCC 0x27 -#define IS31FL3743A_I2C_ADDRESS_SDA_GND 0x28 -#define IS31FL3743A_I2C_ADDRESS_SDA_SCL 0x29 -#define IS31FL3743A_I2C_ADDRESS_SDA_SDA 0x2A -#define IS31FL3743A_I2C_ADDRESS_SDA_VCC 0x2B -#define IS31FL3743A_I2C_ADDRESS_VCC_GND 0x2C -#define IS31FL3743A_I2C_ADDRESS_VCC_SCL 0x2D -#define IS31FL3743A_I2C_ADDRESS_VCC_SDA 0x2E -#define IS31FL3743A_I2C_ADDRESS_VCC_VCC 0x2F - -#if defined(LED_MATRIX_IS31FL3743A) -# define IS31FL3743A_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3743A_I2C_ADDRESS_4) -# define IS31FL3743A_DRIVER_COUNT 4 -#elif defined(IS31FL3743A_I2C_ADDRESS_3) -# define IS31FL3743A_DRIVER_COUNT 3 -#elif defined(IS31FL3743A_I2C_ADDRESS_2) -# define IS31FL3743A_DRIVER_COUNT 2 -#elif defined(IS31FL3743A_I2C_ADDRESS_1) -# define IS31FL3743A_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3743a_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3743a_led_t; - -extern const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT]; - -void is31fl3743a_init_drivers(void); -void is31fl3743a_init(uint8_t addr, uint8_t sync); -void is31fl3743a_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3743a_select_page(uint8_t addr, uint8_t page); -void is31fl3743a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3743a_set_value(int index, uint8_t value); -void is31fl3743a_set_value_all(uint8_t value); - -void is31fl3743a_set_scaling_register(uint8_t index, uint8_t value); - -void is31fl3743a_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3743a_update_scaling_registers(uint8_t addr, uint8_t index); - -void is31fl3743a_flush(void); - -#define IS31FL3743A_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3743A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time -#define IS31FL3743A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time -#define IS31FL3743A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time -#define IS31FL3743A_PDR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3743A_PDR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3743A_PDR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3743A_PDR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3743A_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3743A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time -#define IS31FL3743A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time -#define IS31FL3743A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time -#define IS31FL3743A_PUR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3743A_PUR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3743A_PUR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3743A_PUR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3743A_SYNC_NONE 0b00 -#define IS31FL3743A_SYNC_SLAVE 0b10 -#define IS31FL3743A_SYNC_MASTER 0b11 - -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 - -#define CS1_SW2 0x12 -#define CS2_SW2 0x13 -#define CS3_SW2 0x14 -#define CS4_SW2 0x15 -#define CS5_SW2 0x16 -#define CS6_SW2 0x17 -#define CS7_SW2 0x18 -#define CS8_SW2 0x19 -#define CS9_SW2 0x1A -#define CS10_SW2 0x1B -#define CS11_SW2 0x1C -#define CS12_SW2 0x1D -#define CS13_SW2 0x1E -#define CS14_SW2 0x1F -#define CS15_SW2 0x20 -#define CS16_SW2 0x21 -#define CS17_SW2 0x22 -#define CS18_SW2 0x23 - -#define CS1_SW3 0x24 -#define CS2_SW3 0x25 -#define CS3_SW3 0x26 -#define CS4_SW3 0x27 -#define CS5_SW3 0x28 -#define CS6_SW3 0x29 -#define CS7_SW3 0x2A -#define CS8_SW3 0x2B -#define CS9_SW3 0x2C -#define CS10_SW3 0x2D -#define CS11_SW3 0x2E -#define CS12_SW3 0x2F -#define CS13_SW3 0x30 -#define CS14_SW3 0x31 -#define CS15_SW3 0x32 -#define CS16_SW3 0x33 -#define CS17_SW3 0x34 -#define CS18_SW3 0x35 - -#define CS1_SW4 0x36 -#define CS2_SW4 0x37 -#define CS3_SW4 0x38 -#define CS4_SW4 0x39 -#define CS5_SW4 0x3A -#define CS6_SW4 0x3B -#define CS7_SW4 0x3C -#define CS8_SW4 0x3D -#define CS9_SW4 0x3E -#define CS10_SW4 0x3F -#define CS11_SW4 0x40 -#define CS12_SW4 0x41 -#define CS13_SW4 0x42 -#define CS14_SW4 0x43 -#define CS15_SW4 0x44 -#define CS16_SW4 0x45 -#define CS17_SW4 0x46 -#define CS18_SW4 0x47 - -#define CS1_SW5 0x48 -#define CS2_SW5 0x49 -#define CS3_SW5 0x4A -#define CS4_SW5 0x4B -#define CS5_SW5 0x4C -#define CS6_SW5 0x4D -#define CS7_SW5 0x4E -#define CS8_SW5 0x4F -#define CS9_SW5 0x50 -#define CS10_SW5 0x51 -#define CS11_SW5 0x52 -#define CS12_SW5 0x53 -#define CS13_SW5 0x54 -#define CS14_SW5 0x55 -#define CS15_SW5 0x56 -#define CS16_SW5 0x57 -#define CS17_SW5 0x58 -#define CS18_SW5 0x59 - -#define CS1_SW6 0x5A -#define CS2_SW6 0x5B -#define CS3_SW6 0x5C -#define CS4_SW6 0x5D -#define CS5_SW6 0x5E -#define CS6_SW6 0x5F -#define CS7_SW6 0x60 -#define CS8_SW6 0x61 -#define CS9_SW6 0x62 -#define CS10_SW6 0x63 -#define CS11_SW6 0x64 -#define CS12_SW6 0x65 -#define CS13_SW6 0x66 -#define CS14_SW6 0x67 -#define CS15_SW6 0x68 -#define CS16_SW6 0x69 -#define CS17_SW6 0x6A -#define CS18_SW6 0x6B - -#define CS1_SW7 0x6C -#define CS2_SW7 0x6D -#define CS3_SW7 0x6E -#define CS4_SW7 0x6F -#define CS5_SW7 0x70 -#define CS6_SW7 0x71 -#define CS7_SW7 0x72 -#define CS8_SW7 0x73 -#define CS9_SW7 0x74 -#define CS10_SW7 0x75 -#define CS11_SW7 0x76 -#define CS12_SW7 0x77 -#define CS13_SW7 0x78 -#define CS14_SW7 0x79 -#define CS15_SW7 0x7A -#define CS16_SW7 0x7B -#define CS17_SW7 0x7C -#define CS18_SW7 0x7D - -#define CS1_SW8 0x7E -#define CS2_SW8 0x7F -#define CS3_SW8 0x80 -#define CS4_SW8 0x81 -#define CS5_SW8 0x82 -#define CS6_SW8 0x83 -#define CS7_SW8 0x84 -#define CS8_SW8 0x85 -#define CS9_SW8 0x86 -#define CS10_SW8 0x87 -#define CS11_SW8 0x88 -#define CS12_SW8 0x89 -#define CS13_SW8 0x8A -#define CS14_SW8 0x8B -#define CS15_SW8 0x8C -#define CS16_SW8 0x8D -#define CS17_SW8 0x8E -#define CS18_SW8 0x8F - -#define CS1_SW9 0x90 -#define CS2_SW9 0x91 -#define CS3_SW9 0x92 -#define CS4_SW9 0x93 -#define CS5_SW9 0x94 -#define CS6_SW9 0x95 -#define CS7_SW9 0x96 -#define CS8_SW9 0x97 -#define CS9_SW9 0x98 -#define CS10_SW9 0x99 -#define CS11_SW9 0x9A -#define CS12_SW9 0x9B -#define CS13_SW9 0x9C -#define CS14_SW9 0x9D -#define CS15_SW9 0x9E -#define CS16_SW9 0x9F -#define CS17_SW9 0xA0 -#define CS18_SW9 0xA1 - -#define CS1_SW10 0xA2 -#define CS2_SW10 0xA3 -#define CS3_SW10 0xA4 -#define CS4_SW10 0xA5 -#define CS5_SW10 0xA6 -#define CS6_SW10 0xA7 -#define CS7_SW10 0xA8 -#define CS8_SW10 0xA9 -#define CS9_SW10 0xAA -#define CS10_SW10 0xAB -#define CS11_SW10 0xAC -#define CS12_SW10 0xAD -#define CS13_SW10 0xAE -#define CS14_SW10 0xAF -#define CS15_SW10 0xB0 -#define CS16_SW10 0xB1 -#define CS17_SW10 0xB2 -#define CS18_SW10 0xB3 - -#define CS1_SW11 0xB4 -#define CS2_SW11 0xB5 -#define CS3_SW11 0xB6 -#define CS4_SW11 0xB7 -#define CS5_SW11 0xB8 -#define CS6_SW11 0xB9 -#define CS7_SW11 0xBA -#define CS8_SW11 0xBB -#define CS9_SW11 0xBC -#define CS10_SW11 0xBD -#define CS11_SW11 0xBE -#define CS12_SW11 0xBF -#define CS13_SW11 0xC0 -#define CS14_SW11 0xC1 -#define CS15_SW11 0xC2 -#define CS16_SW11 0xC3 -#define CS17_SW11 0xC4 -#define CS18_SW11 0xC5 diff --git a/drivers/led/issi/is31fl3745-mono.c b/drivers/led/issi/is31fl3745-mono.c new file mode 100644 index 0000000000..c99f397f53 --- /dev/null +++ b/drivers/led/issi/is31fl3745-mono.c @@ -0,0 +1,216 @@ +#include "is31fl3745-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3745_PWM_REGISTER_COUNT 144 +#define IS31FL3745_SCALING_REGISTER_COUNT 144 + +#ifndef IS31FL3745_I2C_TIMEOUT +# define IS31FL3745_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3745_I2C_PERSISTENCE +# define IS31FL3745_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3745_CONFIGURATION +# define IS31FL3745_CONFIGURATION 0x31 +#endif + +#ifndef IS31FL3745_SW_PULLDOWN +# define IS31FL3745_SW_PULLDOWN IS31FL3745_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3745_CS_PULLUP +# define IS31FL3745_CS_PULLUP IS31FL3745_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3745_GLOBAL_CURRENT +# define IS31FL3745_GLOBAL_CURRENT 0xFF +#endif + +#ifndef IS31FL3745_SYNC_1 +# define IS31FL3745_SYNC_1 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_2 +# define IS31FL3745_SYNC_2 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_3 +# define IS31FL3745_SYNC_3 IS31FL3745_SYNC_NONE +#endif +#ifndef IS31FL3745_SYNC_4 +# define IS31FL3745_SYNC_4 IS31FL3745_SYNC_NONE +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3745_DRIVER_COUNT][IS31FL3745_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3745_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3745_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3745_DRIVER_COUNT][IS31FL3745_SCALING_REGISTER_COUNT]; + +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT); +#endif +} + +void is31fl3745_select_page(uint8_t addr, uint8_t page) { + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND_WRITE_LOCK, IS31FL3745_COMMAND_WRITE_LOCK_MAGIC); + is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND, page); +} + +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3745_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT); +#endif + } +} + +void is31fl3745_init_drivers(void) { + i2c_init(); + + is31fl3745_init(IS31FL3745_I2C_ADDRESS_1, IS31FL3745_SYNC_1); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_2, IS31FL3745_SYNC_2); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_3, IS31FL3745_SYNC_3); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_init(IS31FL3745_I2C_ADDRESS_4, IS31FL3745_SYNC_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_scaling_register(i, 0xFF); + } + + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3745_init(uint8_t addr, uint8_t sync) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, 0x00); + } + + is31fl3745_select_page(addr, IS31FL3745_COMMAND_FUNCTION); + + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_PULLDOWNUP, (IS31FL3745_SW_PULLDOWN << 4) | IS31FL3745_CS_PULLUP); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3745_GLOBAL_CURRENT); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); + is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_CONFIGURATION, IS31FL3745_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3745_set_value(int index, uint8_t value) { + is31fl3745_led_t led; + if (index >= 0 && index < IS31FL3745_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3745_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { + is31fl3745_set_value(i, value); + } +} + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3745_led_t led; + memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); + + is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { + is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3745_flush(void) { + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_1, 0); +#if defined(IS31FL3745_I2C_ADDRESS_2) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_2, 1); +# if defined(IS31FL3745_I2C_ADDRESS_3) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_3, 2); +# if defined(IS31FL3745_I2C_ADDRESS_4) + is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3745-mono.h b/drivers/led/issi/is31fl3745-mono.h new file mode 100644 index 0000000000..dbff193acd --- /dev/null +++ b/drivers/led/issi/is31fl3745-mono.h @@ -0,0 +1,272 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3745_REG_ID 0xFC + +#define IS31FL3745_REG_COMMAND 0xFD + +#define IS31FL3745_COMMAND_PWM 0x00 +#define IS31FL3745_COMMAND_SCALING 0x01 +#define IS31FL3745_COMMAND_FUNCTION 0x02 + +#define IS31FL3745_FUNCTION_REG_CONFIGURATION 0x00 +#define IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT 0x01 +#define IS31FL3745_FUNCTION_REG_PULLDOWNUP 0x02 +#define IS31FL3745_FUNCTION_REG_TEMPERATURE 0x24 +#define IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM 0x25 +#define IS31FL3745_FUNCTION_REG_RESET 0x2F + +#define IS31FL3745_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3745_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3745_I2C_ADDRESS_GND_GND 0x20 +#define IS31FL3745_I2C_ADDRESS_GND_SCL 0x21 +#define IS31FL3745_I2C_ADDRESS_GND_SDA 0x22 +#define IS31FL3745_I2C_ADDRESS_GND_VCC 0x23 +#define IS31FL3745_I2C_ADDRESS_SCL_GND 0x24 +#define IS31FL3745_I2C_ADDRESS_SCL_SCL 0x25 +#define IS31FL3745_I2C_ADDRESS_SCL_SDA 0x26 +#define IS31FL3745_I2C_ADDRESS_SCL_VCC 0x27 +#define IS31FL3745_I2C_ADDRESS_SDA_GND 0x28 +#define IS31FL3745_I2C_ADDRESS_SDA_SCL 0x29 +#define IS31FL3745_I2C_ADDRESS_SDA_SDA 0x2A +#define IS31FL3745_I2C_ADDRESS_SDA_VCC 0x2B +#define IS31FL3745_I2C_ADDRESS_VCC_GND 0x2C +#define IS31FL3745_I2C_ADDRESS_VCC_SCL 0x2D +#define IS31FL3745_I2C_ADDRESS_VCC_SDA 0x2E +#define IS31FL3745_I2C_ADDRESS_VCC_VCC 0x2F + +#if defined(LED_MATRIX_IS31FL3745) +# define IS31FL3745_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3745_I2C_ADDRESS_4) +# define IS31FL3745_DRIVER_COUNT 4 +#elif defined(IS31FL3745_I2C_ADDRESS_3) +# define IS31FL3745_DRIVER_COUNT 3 +#elif defined(IS31FL3745_I2C_ADDRESS_2) +# define IS31FL3745_DRIVER_COUNT 2 +#elif defined(IS31FL3745_I2C_ADDRESS_1) +# define IS31FL3745_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3745_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3745_led_t; + +extern const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT]; + +void is31fl3745_init_drivers(void); +void is31fl3745_init(uint8_t addr, uint8_t sync); +void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3745_select_page(uint8_t addr, uint8_t page); +void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3745_set_value(int index, uint8_t value); +void is31fl3745_set_value_all(uint8_t value); + +void is31fl3745_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3745_flush(void); + +#define IS31FL3745_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3745_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3745_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3745_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3745_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3745_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3745_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3745_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3745_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3745_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3745_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3745_SYNC_NONE 0b00 +#define IS31FL3745_SYNC_SLAVE 0b10 +#define IS31FL3745_SYNC_MASTER 0b11 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 + +#define CS1_SW5 0x48 +#define CS2_SW5 0x49 +#define CS3_SW5 0x4A +#define CS4_SW5 0x4B +#define CS5_SW5 0x4C +#define CS6_SW5 0x4D +#define CS7_SW5 0x4E +#define CS8_SW5 0x4F +#define CS9_SW5 0x50 +#define CS10_SW5 0x51 +#define CS11_SW5 0x52 +#define CS12_SW5 0x53 +#define CS13_SW5 0x54 +#define CS14_SW5 0x55 +#define CS15_SW5 0x56 +#define CS16_SW5 0x57 +#define CS17_SW5 0x58 +#define CS18_SW5 0x59 + +#define CS1_SW6 0x5A +#define CS2_SW6 0x5B +#define CS3_SW6 0x5C +#define CS4_SW6 0x5D +#define CS5_SW6 0x5E +#define CS6_SW6 0x5F +#define CS7_SW6 0x60 +#define CS8_SW6 0x61 +#define CS9_SW6 0x62 +#define CS10_SW6 0x63 +#define CS11_SW6 0x64 +#define CS12_SW6 0x65 +#define CS13_SW6 0x66 +#define CS14_SW6 0x67 +#define CS15_SW6 0x68 +#define CS16_SW6 0x69 +#define CS17_SW6 0x6A +#define CS18_SW6 0x6B + +#define CS1_SW7 0x6C +#define CS2_SW7 0x6D +#define CS3_SW7 0x6E +#define CS4_SW7 0x6F +#define CS5_SW7 0x70 +#define CS6_SW7 0x71 +#define CS7_SW7 0x72 +#define CS8_SW7 0x73 +#define CS9_SW7 0x74 +#define CS10_SW7 0x75 +#define CS11_SW7 0x76 +#define CS12_SW7 0x77 +#define CS13_SW7 0x78 +#define CS14_SW7 0x79 +#define CS15_SW7 0x7A +#define CS16_SW7 0x7B +#define CS17_SW7 0x7C +#define CS18_SW7 0x7D + +#define CS1_SW8 0x7E +#define CS2_SW8 0x7F +#define CS3_SW8 0x80 +#define CS4_SW8 0x81 +#define CS5_SW8 0x82 +#define CS6_SW8 0x83 +#define CS7_SW8 0x84 +#define CS8_SW8 0x85 +#define CS9_SW8 0x86 +#define CS10_SW8 0x87 +#define CS11_SW8 0x88 +#define CS12_SW8 0x89 +#define CS13_SW8 0x8A +#define CS14_SW8 0x8B +#define CS15_SW8 0x8C +#define CS16_SW8 0x8D +#define CS17_SW8 0x8E +#define CS18_SW8 0x8F diff --git a/drivers/led/issi/is31fl3745-simple.c b/drivers/led/issi/is31fl3745-simple.c deleted file mode 100644 index 46b41fe3d4..0000000000 --- a/drivers/led/issi/is31fl3745-simple.c +++ /dev/null @@ -1,216 +0,0 @@ -#include "is31fl3745-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3745_PWM_REGISTER_COUNT 144 -#define IS31FL3745_SCALING_REGISTER_COUNT 144 - -#ifndef IS31FL3745_I2C_TIMEOUT -# define IS31FL3745_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3745_I2C_PERSISTENCE -# define IS31FL3745_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3745_CONFIGURATION -# define IS31FL3745_CONFIGURATION 0x31 -#endif - -#ifndef IS31FL3745_SW_PULLDOWN -# define IS31FL3745_SW_PULLDOWN IS31FL3745_PDR_2K_OHM_SW_OFF -#endif - -#ifndef IS31FL3745_CS_PULLUP -# define IS31FL3745_CS_PULLUP IS31FL3745_PUR_2K_OHM_CS_OFF -#endif - -#ifndef IS31FL3745_GLOBAL_CURRENT -# define IS31FL3745_GLOBAL_CURRENT 0xFF -#endif - -#ifndef IS31FL3745_SYNC_1 -# define IS31FL3745_SYNC_1 IS31FL3745_SYNC_NONE -#endif -#ifndef IS31FL3745_SYNC_2 -# define IS31FL3745_SYNC_2 IS31FL3745_SYNC_NONE -#endif -#ifndef IS31FL3745_SYNC_3 -# define IS31FL3745_SYNC_3 IS31FL3745_SYNC_NONE -#endif -#ifndef IS31FL3745_SYNC_4 -# define IS31FL3745_SYNC_4 IS31FL3745_SYNC_NONE -#endif - -uint8_t i2c_transfer_buffer[20] = {0xFF}; - -uint8_t g_pwm_buffer[IS31FL3745_DRIVER_COUNT][IS31FL3745_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3745_DRIVER_COUNT] = {false}; -bool g_scaling_registers_update_required[IS31FL3745_DRIVER_COUNT] = {false}; - -uint8_t g_scaling_registers[IS31FL3745_DRIVER_COUNT][IS31FL3745_SCALING_REGISTER_COUNT]; - -void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3745_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3745_I2C_TIMEOUT); -#endif -} - -void is31fl3745_select_page(uint8_t addr, uint8_t page) { - is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND_WRITE_LOCK, IS31FL3745_COMMAND_WRITE_LOCK_MAGIC); - is31fl3745_write_register(addr, IS31FL3745_REG_COMMAND, page); -} - -void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes page 0 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i + 1; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3745_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3745_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT) != 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3745_I2C_TIMEOUT); -#endif - } -} - -void is31fl3745_init_drivers(void) { - i2c_init(); - - is31fl3745_init(IS31FL3745_I2C_ADDRESS_1, IS31FL3745_SYNC_1); -#if defined(IS31FL3745_I2C_ADDRESS_2) - is31fl3745_init(IS31FL3745_I2C_ADDRESS_2, IS31FL3745_SYNC_2); -# if defined(IS31FL3745_I2C_ADDRESS_3) - is31fl3745_init(IS31FL3745_I2C_ADDRESS_3, IS31FL3745_SYNC_3); -# if defined(IS31FL3745_I2C_ADDRESS_4) - is31fl3745_init(IS31FL3745_I2C_ADDRESS_4, IS31FL3745_SYNC_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { - is31fl3745_set_scaling_register(i, 0xFF); - } - - is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_1, 0); -#if defined(IS31FL3745_I2C_ADDRESS_2) - is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_2, 1); -# if defined(IS31FL3745_I2C_ADDRESS_3) - is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_3, 2); -# if defined(IS31FL3745_I2C_ADDRESS_4) - is31fl3745_update_scaling_registers(IS31FL3745_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3745_init(uint8_t addr, uint8_t sync) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { - is31fl3745_write_register(addr, i + 1, 0x00); - } - - is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); - - for (int i = 0; i < IS31FL3745_PWM_REGISTER_COUNT; i++) { - is31fl3745_write_register(addr, i + 1, 0x00); - } - - is31fl3745_select_page(addr, IS31FL3745_COMMAND_FUNCTION); - - is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_PULLDOWNUP, (IS31FL3745_SW_PULLDOWN << 4) | IS31FL3745_CS_PULLUP); - is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3745_GLOBAL_CURRENT); - is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM, (sync & 0b11) << 6); - is31fl3745_write_register(addr, IS31FL3745_FUNCTION_REG_CONFIGURATION, IS31FL3745_CONFIGURATION); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3745_set_value(int index, uint8_t value) { - is31fl3745_led_t led; - if (index >= 0 && index < IS31FL3745_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer_update_required[led.driver] = true; - g_pwm_buffer[led.driver][led.v] = value; - } -} - -void is31fl3745_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3745_LED_COUNT; i++) { - is31fl3745_set_value(i, value); - } -} - -void is31fl3745_set_scaling_register(uint8_t index, uint8_t value) { - is31fl3745_led_t led; - memcpy_P(&led, (&g_is31fl3745_leds[index]), sizeof(led)); - - g_scaling_registers[led.driver][led.v] = value; - - g_scaling_registers_update_required[led.driver] = true; -} - -void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3745_select_page(addr, IS31FL3745_COMMAND_PWM); - - is31fl3745_write_pwm_buffer(addr, g_pwm_buffer[index]); - } - - g_pwm_buffer_update_required[index] = false; -} - -void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index) { - if (g_scaling_registers_update_required[index]) { - is31fl3745_select_page(addr, IS31FL3745_COMMAND_SCALING); - - for (int i = 0; i < IS31FL3745_SCALING_REGISTER_COUNT; i++) { - is31fl3745_write_register(addr, i + 1, g_scaling_registers[index][i]); - } - g_scaling_registers_update_required[index] = false; - } -} - -void is31fl3745_flush(void) { - is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_1, 0); -#if defined(IS31FL3745_I2C_ADDRESS_2) - is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_2, 1); -# if defined(IS31FL3745_I2C_ADDRESS_3) - is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_3, 2); -# if defined(IS31FL3745_I2C_ADDRESS_4) - is31fl3745_update_pwm_buffers(IS31FL3745_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3745-simple.h b/drivers/led/issi/is31fl3745-simple.h deleted file mode 100644 index dbff193acd..0000000000 --- a/drivers/led/issi/is31fl3745-simple.h +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#define IS31FL3745_REG_ID 0xFC - -#define IS31FL3745_REG_COMMAND 0xFD - -#define IS31FL3745_COMMAND_PWM 0x00 -#define IS31FL3745_COMMAND_SCALING 0x01 -#define IS31FL3745_COMMAND_FUNCTION 0x02 - -#define IS31FL3745_FUNCTION_REG_CONFIGURATION 0x00 -#define IS31FL3745_FUNCTION_REG_GLOBAL_CURRENT 0x01 -#define IS31FL3745_FUNCTION_REG_PULLDOWNUP 0x02 -#define IS31FL3745_FUNCTION_REG_TEMPERATURE 0x24 -#define IS31FL3745_FUNCTION_REG_SPREAD_SPECTRUM 0x25 -#define IS31FL3745_FUNCTION_REG_RESET 0x2F - -#define IS31FL3745_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3745_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3745_I2C_ADDRESS_GND_GND 0x20 -#define IS31FL3745_I2C_ADDRESS_GND_SCL 0x21 -#define IS31FL3745_I2C_ADDRESS_GND_SDA 0x22 -#define IS31FL3745_I2C_ADDRESS_GND_VCC 0x23 -#define IS31FL3745_I2C_ADDRESS_SCL_GND 0x24 -#define IS31FL3745_I2C_ADDRESS_SCL_SCL 0x25 -#define IS31FL3745_I2C_ADDRESS_SCL_SDA 0x26 -#define IS31FL3745_I2C_ADDRESS_SCL_VCC 0x27 -#define IS31FL3745_I2C_ADDRESS_SDA_GND 0x28 -#define IS31FL3745_I2C_ADDRESS_SDA_SCL 0x29 -#define IS31FL3745_I2C_ADDRESS_SDA_SDA 0x2A -#define IS31FL3745_I2C_ADDRESS_SDA_VCC 0x2B -#define IS31FL3745_I2C_ADDRESS_VCC_GND 0x2C -#define IS31FL3745_I2C_ADDRESS_VCC_SCL 0x2D -#define IS31FL3745_I2C_ADDRESS_VCC_SDA 0x2E -#define IS31FL3745_I2C_ADDRESS_VCC_VCC 0x2F - -#if defined(LED_MATRIX_IS31FL3745) -# define IS31FL3745_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(IS31FL3745_I2C_ADDRESS_4) -# define IS31FL3745_DRIVER_COUNT 4 -#elif defined(IS31FL3745_I2C_ADDRESS_3) -# define IS31FL3745_DRIVER_COUNT 3 -#elif defined(IS31FL3745_I2C_ADDRESS_2) -# define IS31FL3745_DRIVER_COUNT 2 -#elif defined(IS31FL3745_I2C_ADDRESS_1) -# define IS31FL3745_DRIVER_COUNT 1 -#endif - -typedef struct is31fl3745_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3745_led_t; - -extern const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT]; - -void is31fl3745_init_drivers(void); -void is31fl3745_init(uint8_t addr, uint8_t sync); -void is31fl3745_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3745_select_page(uint8_t addr, uint8_t page); -void is31fl3745_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3745_set_value(int index, uint8_t value); -void is31fl3745_set_value_all(uint8_t value); - -void is31fl3745_set_scaling_register(uint8_t index, uint8_t value); - -void is31fl3745_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3745_update_scaling_registers(uint8_t addr, uint8_t index); - -void is31fl3745_flush(void); - -#define IS31FL3745_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3745_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time -#define IS31FL3745_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time -#define IS31FL3745_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time -#define IS31FL3745_PDR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3745_PDR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3745_PDR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3745_PDR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3745_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3745_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time -#define IS31FL3745_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time -#define IS31FL3745_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time -#define IS31FL3745_PUR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3745_PUR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3745_PUR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3745_PUR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3745_SYNC_NONE 0b00 -#define IS31FL3745_SYNC_SLAVE 0b10 -#define IS31FL3745_SYNC_MASTER 0b11 - -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 - -#define CS1_SW2 0x12 -#define CS2_SW2 0x13 -#define CS3_SW2 0x14 -#define CS4_SW2 0x15 -#define CS5_SW2 0x16 -#define CS6_SW2 0x17 -#define CS7_SW2 0x18 -#define CS8_SW2 0x19 -#define CS9_SW2 0x1A -#define CS10_SW2 0x1B -#define CS11_SW2 0x1C -#define CS12_SW2 0x1D -#define CS13_SW2 0x1E -#define CS14_SW2 0x1F -#define CS15_SW2 0x20 -#define CS16_SW2 0x21 -#define CS17_SW2 0x22 -#define CS18_SW2 0x23 - -#define CS1_SW3 0x24 -#define CS2_SW3 0x25 -#define CS3_SW3 0x26 -#define CS4_SW3 0x27 -#define CS5_SW3 0x28 -#define CS6_SW3 0x29 -#define CS7_SW3 0x2A -#define CS8_SW3 0x2B -#define CS9_SW3 0x2C -#define CS10_SW3 0x2D -#define CS11_SW3 0x2E -#define CS12_SW3 0x2F -#define CS13_SW3 0x30 -#define CS14_SW3 0x31 -#define CS15_SW3 0x32 -#define CS16_SW3 0x33 -#define CS17_SW3 0x34 -#define CS18_SW3 0x35 - -#define CS1_SW4 0x36 -#define CS2_SW4 0x37 -#define CS3_SW4 0x38 -#define CS4_SW4 0x39 -#define CS5_SW4 0x3A -#define CS6_SW4 0x3B -#define CS7_SW4 0x3C -#define CS8_SW4 0x3D -#define CS9_SW4 0x3E -#define CS10_SW4 0x3F -#define CS11_SW4 0x40 -#define CS12_SW4 0x41 -#define CS13_SW4 0x42 -#define CS14_SW4 0x43 -#define CS15_SW4 0x44 -#define CS16_SW4 0x45 -#define CS17_SW4 0x46 -#define CS18_SW4 0x47 - -#define CS1_SW5 0x48 -#define CS2_SW5 0x49 -#define CS3_SW5 0x4A -#define CS4_SW5 0x4B -#define CS5_SW5 0x4C -#define CS6_SW5 0x4D -#define CS7_SW5 0x4E -#define CS8_SW5 0x4F -#define CS9_SW5 0x50 -#define CS10_SW5 0x51 -#define CS11_SW5 0x52 -#define CS12_SW5 0x53 -#define CS13_SW5 0x54 -#define CS14_SW5 0x55 -#define CS15_SW5 0x56 -#define CS16_SW5 0x57 -#define CS17_SW5 0x58 -#define CS18_SW5 0x59 - -#define CS1_SW6 0x5A -#define CS2_SW6 0x5B -#define CS3_SW6 0x5C -#define CS4_SW6 0x5D -#define CS5_SW6 0x5E -#define CS6_SW6 0x5F -#define CS7_SW6 0x60 -#define CS8_SW6 0x61 -#define CS9_SW6 0x62 -#define CS10_SW6 0x63 -#define CS11_SW6 0x64 -#define CS12_SW6 0x65 -#define CS13_SW6 0x66 -#define CS14_SW6 0x67 -#define CS15_SW6 0x68 -#define CS16_SW6 0x69 -#define CS17_SW6 0x6A -#define CS18_SW6 0x6B - -#define CS1_SW7 0x6C -#define CS2_SW7 0x6D -#define CS3_SW7 0x6E -#define CS4_SW7 0x6F -#define CS5_SW7 0x70 -#define CS6_SW7 0x71 -#define CS7_SW7 0x72 -#define CS8_SW7 0x73 -#define CS9_SW7 0x74 -#define CS10_SW7 0x75 -#define CS11_SW7 0x76 -#define CS12_SW7 0x77 -#define CS13_SW7 0x78 -#define CS14_SW7 0x79 -#define CS15_SW7 0x7A -#define CS16_SW7 0x7B -#define CS17_SW7 0x7C -#define CS18_SW7 0x7D - -#define CS1_SW8 0x7E -#define CS2_SW8 0x7F -#define CS3_SW8 0x80 -#define CS4_SW8 0x81 -#define CS5_SW8 0x82 -#define CS6_SW8 0x83 -#define CS7_SW8 0x84 -#define CS8_SW8 0x85 -#define CS9_SW8 0x86 -#define CS10_SW8 0x87 -#define CS11_SW8 0x88 -#define CS12_SW8 0x89 -#define CS13_SW8 0x8A -#define CS14_SW8 0x8B -#define CS15_SW8 0x8C -#define CS16_SW8 0x8D -#define CS17_SW8 0x8E -#define CS18_SW8 0x8F diff --git a/drivers/led/issi/is31fl3746a-mono.c b/drivers/led/issi/is31fl3746a-mono.c new file mode 100644 index 0000000000..e0c29f3bd3 --- /dev/null +++ b/drivers/led/issi/is31fl3746a-mono.c @@ -0,0 +1,208 @@ +#include "is31fl3746a-mono.h" +#include +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3746A_PWM_REGISTER_COUNT 72 +#define IS31FL3746A_SCALING_REGISTER_COUNT 72 + +#ifndef IS31FL3746A_I2C_TIMEOUT +# define IS31FL3746A_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3746A_I2C_PERSISTENCE +# define IS31FL3746A_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3746A_CONFIGURATION +# define IS31FL3746A_CONFIGURATION 0x01 +#endif + +#ifndef IS31FL3746A_PWM_FREQUENCY +# define IS31FL3746A_PWM_FREQUENCY IS31FL3746A_PWM_FREQUENCY_29K_HZ +#endif + +#ifndef IS31FL3746A_SW_PULLDOWN +# define IS31FL3746A_SW_PULLDOWN IS31FL3746A_PDR_2K_OHM_SW_OFF +#endif + +#ifndef IS31FL3746A_CS_PULLUP +# define IS31FL3746A_CS_PULLUP IS31FL3746A_PUR_2K_OHM_CS_OFF +#endif + +#ifndef IS31FL3746A_GLOBAL_CURRENT +# define IS31FL3746A_GLOBAL_CURRENT 0xFF +#endif + +uint8_t i2c_transfer_buffer[20] = {0xFF}; + +uint8_t g_pwm_buffer[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; +bool g_scaling_registers_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; + +uint8_t g_scaling_registers[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_SCALING_REGISTER_COUNT]; + +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT) == 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT); +#endif +} + +void is31fl3746a_select_page(uint8_t addr, uint8_t page) { + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND_WRITE_LOCK, IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC); + is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND, page); +} + +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes page 0 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i + 1; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); + +#if IS31FL3746A_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT) != 0) break; + } +#else + i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT); +#endif + } +} + +void is31fl3746a_init_drivers(void) { + i2c_init(); + + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_1); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_2); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_3); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_scaling_register(i, 0xFF); + } + + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3746a_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + // Turn off all LEDs. + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, 0x00); + } + + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_FUNCTION); + + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PULLDOWNUP, (IS31FL3746A_SW_PULLDOWN << 4) | IS31FL3746A_CS_PULLUP); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3746A_GLOBAL_CURRENT); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_ENABLE, 0x01); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY, IS31FL3746A_PWM_FREQUENCY); + is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_CONFIGURATION, IS31FL3746A_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3746a_set_color(int index, uint8_t value) { + is31fl3746a_led_t led; + if (index >= 0 && index < IS31FL3746A_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer_update_required[led.driver] = true; + g_pwm_buffer[led.driver][led.v] = value; + } +} + +void is31fl3746a_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { + is31fl3746a_set_value(i, value); + } +} + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3746a_led_t led; + memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); + + g_scaling_registers[led.driver][led.v] = value; + + g_scaling_registers_update_required[led.driver] = true; +} + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); + + is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); + } + + g_pwm_buffer_update_required[index] = false; +} + +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { + if (g_scaling_registers_update_required[index]) { + is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); + + for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { + is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); + } + g_scaling_registers_update_required[index] = false; + } +} + +void is31fl3746a_flush(void) { + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_1, 0); +#if defined(IS31FL3746A_I2C_ADDRESS_2) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_2, 1); +# if defined(IS31FL3746A_I2C_ADDRESS_3) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_3, 2); +# if defined(IS31FL3746A_I2C_ADDRESS_4) + is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3746a-mono.h b/drivers/led/issi/is31fl3746a-mono.h new file mode 100644 index 0000000000..eda644ad19 --- /dev/null +++ b/drivers/led/issi/is31fl3746a-mono.h @@ -0,0 +1,192 @@ +/* Copyright 2017 Jason Williams + * Copyright 2018 Jack Humbert + * Copyright 2018 Yiancar + * Copyright 2020 MelGeek + * Copyright 2021 MasterSpoon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3746A_REG_ID 0xFC + +#define IS31FL3746A_REG_COMMAND 0xFD + +#define IS31FL3746A_COMMAND_PWM 0x00 +#define IS31FL3746A_COMMAND_SCALING 0x01 +#define IS31FL3746A_COMMAND_FUNCTION 0x01 + +#define IS31FL3746A_FUNCTION_REG_CONFIGURATION 0x50 +#define IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT 0x51 +#define IS31FL3746A_FUNCTION_REG_PULLDOWNUP 0x52 +#define IS31FL3746A_FUNCTION_REG_TEMPERATURE 0x5F +#define IS31FL3746A_FUNCTION_REG_SPREAD_SPECTRUM 0x60 +#define IS31FL3746A_FUNCTION_REG_RESET 0x8F +#define IS31FL3746A_FUNCTION_REG_PWM_ENABLE 0xE0 +#define IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY 0xE2 + +#define IS31FL3746A_REG_COMMAND_WRITE_LOCK 0xFE +#define IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC 0xC5 + +#define IS31FL3746A_I2C_ADDRESS_GND_GND 0x60 +#define IS31FL3746A_I2C_ADDRESS_GND_SCL 0x61 +#define IS31FL3746A_I2C_ADDRESS_GND_SDA 0x62 +#define IS31FL3746A_I2C_ADDRESS_GND_VCC 0x63 +#define IS31FL3746A_I2C_ADDRESS_SCL_GND 0x64 +#define IS31FL3746A_I2C_ADDRESS_SCL_SCL 0x65 +#define IS31FL3746A_I2C_ADDRESS_SCL_SDA 0x66 +#define IS31FL3746A_I2C_ADDRESS_SCL_VCC 0x67 +#define IS31FL3746A_I2C_ADDRESS_SDA_GND 0x68 +#define IS31FL3746A_I2C_ADDRESS_SDA_SCL 0x69 +#define IS31FL3746A_I2C_ADDRESS_SDA_SDA 0x6A +#define IS31FL3746A_I2C_ADDRESS_SDA_VCC 0x6B +#define IS31FL3746A_I2C_ADDRESS_VCC_GND 0x6C +#define IS31FL3746A_I2C_ADDRESS_VCC_SCL 0x6D +#define IS31FL3746A_I2C_ADDRESS_VCC_SDA 0x6E +#define IS31FL3746A_I2C_ADDRESS_VCC_VCC 0x6F + +#if defined(LED_MATRIX_IS31FL3746A) +# define IS31FL3746A_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +typedef struct is31fl3746a_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3746a_led_t; + +extern const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT]; + +void is31fl3746a_init_drivers(void); +void is31fl3746a_init(uint8_t addr, uint8_t sync); +void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data); +void is31fl3746a_select_page(uint8_t addr, uint8_t page); +void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void is31fl3746a_set_value(int index, uint8_t value); +void is31fl3746a_set_value_all(uint8_t value); + +void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value); + +void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3746a_flush(void); + +#define IS31FL3746A_PDR_0_OHM 0b000 // No pull-down resistor +#define IS31FL3746A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time +#define IS31FL3746A_PDR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PDR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PDR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PDR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PUR_0_OHM 0b000 // No pull-up resistor +#define IS31FL3746A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time +#define IS31FL3746A_PUR_1K_OHM 0b100 // 1 kOhm resistor +#define IS31FL3746A_PUR_2K_OHM 0b101 // 2 kOhm resistor +#define IS31FL3746A_PUR_4K_OHM 0b110 // 4 kOhm resistor +#define IS31FL3746A_PUR_8K_OHM 0b111 // 8 kOhm resistor + +#define IS31FL3746A_PWM_FREQUENCY_29K_HZ 0b000 +#define IS31FL3746A_PWM_FREQUENCY_14K5_HZ 0b001 +#define IS31FL3746A_PWM_FREQUENCY_7K25_HZ 0b010 +#define IS31FL3746A_PWM_FREQUENCY_3K63_HZ 0b011 +#define IS31FL3746A_PWM_FREQUENCY_1K81_HZ 0b100 +#define IS31FL3746A_PWM_FREQUENCY_906_HZ 0b101 +#define IS31FL3746A_PWM_FREQUENCY_453_HZ 0b110 + +#define CS1_SW1 0x00 +#define CS2_SW1 0x01 +#define CS3_SW1 0x02 +#define CS4_SW1 0x03 +#define CS5_SW1 0x04 +#define CS6_SW1 0x05 +#define CS7_SW1 0x06 +#define CS8_SW1 0x07 +#define CS9_SW1 0x08 +#define CS10_SW1 0x09 +#define CS11_SW1 0x0A +#define CS12_SW1 0x0B +#define CS13_SW1 0x0C +#define CS14_SW1 0x0D +#define CS15_SW1 0x0E +#define CS16_SW1 0x0F +#define CS17_SW1 0x10 +#define CS18_SW1 0x11 + +#define CS1_SW2 0x12 +#define CS2_SW2 0x13 +#define CS3_SW2 0x14 +#define CS4_SW2 0x15 +#define CS5_SW2 0x16 +#define CS6_SW2 0x17 +#define CS7_SW2 0x18 +#define CS8_SW2 0x19 +#define CS9_SW2 0x1A +#define CS10_SW2 0x1B +#define CS11_SW2 0x1C +#define CS12_SW2 0x1D +#define CS13_SW2 0x1E +#define CS14_SW2 0x1F +#define CS15_SW2 0x20 +#define CS16_SW2 0x21 +#define CS17_SW2 0x22 +#define CS18_SW2 0x23 + +#define CS1_SW3 0x24 +#define CS2_SW3 0x25 +#define CS3_SW3 0x26 +#define CS4_SW3 0x27 +#define CS5_SW3 0x28 +#define CS6_SW3 0x29 +#define CS7_SW3 0x2A +#define CS8_SW3 0x2B +#define CS9_SW3 0x2C +#define CS10_SW3 0x2D +#define CS11_SW3 0x2E +#define CS12_SW3 0x2F +#define CS13_SW3 0x30 +#define CS14_SW3 0x31 +#define CS15_SW3 0x32 +#define CS16_SW3 0x33 +#define CS17_SW3 0x34 +#define CS18_SW3 0x35 + +#define CS1_SW4 0x36 +#define CS2_SW4 0x37 +#define CS3_SW4 0x38 +#define CS4_SW4 0x39 +#define CS5_SW4 0x3A +#define CS6_SW4 0x3B +#define CS7_SW4 0x3C +#define CS8_SW4 0x3D +#define CS9_SW4 0x3E +#define CS10_SW4 0x3F +#define CS11_SW4 0x40 +#define CS12_SW4 0x41 +#define CS13_SW4 0x42 +#define CS14_SW4 0x43 +#define CS15_SW4 0x44 +#define CS16_SW4 0x45 +#define CS17_SW4 0x46 +#define CS18_SW4 0x47 diff --git a/drivers/led/issi/is31fl3746a-simple.c b/drivers/led/issi/is31fl3746a-simple.c deleted file mode 100644 index 3a29c511cb..0000000000 --- a/drivers/led/issi/is31fl3746a-simple.c +++ /dev/null @@ -1,208 +0,0 @@ -#include "is31fl3746a-simple.h" -#include -#include "i2c_master.h" -#include "wait.h" - -#define IS31FL3746A_PWM_REGISTER_COUNT 72 -#define IS31FL3746A_SCALING_REGISTER_COUNT 72 - -#ifndef IS31FL3746A_I2C_TIMEOUT -# define IS31FL3746A_I2C_TIMEOUT 100 -#endif - -#ifndef IS31FL3746A_I2C_PERSISTENCE -# define IS31FL3746A_I2C_PERSISTENCE 0 -#endif - -#ifndef IS31FL3746A_CONFIGURATION -# define IS31FL3746A_CONFIGURATION 0x01 -#endif - -#ifndef IS31FL3746A_PWM_FREQUENCY -# define IS31FL3746A_PWM_FREQUENCY IS31FL3746A_PWM_FREQUENCY_29K_HZ -#endif - -#ifndef IS31FL3746A_SW_PULLDOWN -# define IS31FL3746A_SW_PULLDOWN IS31FL3746A_PDR_2K_OHM_SW_OFF -#endif - -#ifndef IS31FL3746A_CS_PULLUP -# define IS31FL3746A_CS_PULLUP IS31FL3746A_PUR_2K_OHM_CS_OFF -#endif - -#ifndef IS31FL3746A_GLOBAL_CURRENT -# define IS31FL3746A_GLOBAL_CURRENT 0xFF -#endif - -uint8_t i2c_transfer_buffer[20] = {0xFF}; - -uint8_t g_pwm_buffer[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; -bool g_scaling_registers_update_required[IS31FL3746A_DRIVER_COUNT] = {false}; - -uint8_t g_scaling_registers[IS31FL3746A_DRIVER_COUNT][IS31FL3746A_SCALING_REGISTER_COUNT]; - -void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if IS31FL3746A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT) == 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 2, IS31FL3746A_I2C_TIMEOUT); -#endif -} - -void is31fl3746a_select_page(uint8_t addr, uint8_t page) { - is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND_WRITE_LOCK, IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC); - is31fl3746a_write_register(addr, IS31FL3746A_REG_COMMAND, page); -} - -void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes page 0 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i + 1; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - memcpy(i2c_transfer_buffer + 1, pwm_buffer + i, 16); - -#if IS31FL3746A_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < IS31FL3746A_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT) != 0) break; - } -#else - i2c_transmit(addr << 1, i2c_transfer_buffer, 17, IS31FL3746A_I2C_TIMEOUT); -#endif - } -} - -void is31fl3746a_init_drivers(void) { - i2c_init(); - - is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_1); -#if defined(IS31FL3746A_I2C_ADDRESS_2) - is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_2); -# if defined(IS31FL3746A_I2C_ADDRESS_3) - is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_3); -# if defined(IS31FL3746A_I2C_ADDRESS_4) - is31fl3746a_init(IS31FL3746A_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { - is31fl3746a_set_scaling_register(i, 0xFF); - } - - is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3746A_I2C_ADDRESS_2) - is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3746A_I2C_ADDRESS_3) - is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3746A_I2C_ADDRESS_4) - is31fl3746a_update_scaling_registers(IS31FL3746A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void is31fl3746a_init(uint8_t addr) { - // In order to avoid the LEDs being driven with garbage data - // in the LED driver's PWM registers, shutdown is enabled last. - // Set up the mode and other settings, clear the PWM registers, - // then disable software shutdown. - - is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); - - // Turn off all LEDs. - for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { - is31fl3746a_write_register(addr, i + 1, 0x00); - } - - is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); - - for (int i = 0; i < IS31FL3746A_PWM_REGISTER_COUNT; i++) { - is31fl3746a_write_register(addr, i + 1, 0x00); - } - - is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_FUNCTION); - - is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PULLDOWNUP, (IS31FL3746A_SW_PULLDOWN << 4) | IS31FL3746A_CS_PULLUP); - is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT, IS31FL3746A_GLOBAL_CURRENT); - is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_ENABLE, 0x01); - is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY, IS31FL3746A_PWM_FREQUENCY); - is31fl3746a_write_register(addr, IS31FL3746A_FUNCTION_REG_CONFIGURATION, IS31FL3746A_CONFIGURATION); - - // Wait 10ms to ensure the device has woken up. - wait_ms(10); -} - -void is31fl3746a_set_color(int index, uint8_t value) { - is31fl3746a_led_t led; - if (index >= 0 && index < IS31FL3746A_LED_COUNT) { - memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer_update_required[led.driver] = true; - g_pwm_buffer[led.driver][led.v] = value; - } -} - -void is31fl3746a_set_value_all(uint8_t value) { - for (int i = 0; i < IS31FL3746A_LED_COUNT; i++) { - is31fl3746a_set_value(i, value); - } -} - -void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value) { - is31fl3746a_led_t led; - memcpy_P(&led, (&g_is31fl3746a_leds[index]), sizeof(led)); - - g_scaling_registers[led.driver][led.v] = value; - - g_scaling_registers_update_required[led.driver] = true; -} - -void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_PWM); - - is31fl3746a_write_pwm_buffer(addr, g_pwm_buffer[index]); - } - - g_pwm_buffer_update_required[index] = false; -} - -void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index) { - if (g_scaling_registers_update_required[index]) { - is31fl3746a_select_page(addr, IS31FL3746A_COMMAND_SCALING); - - for (int i = 0; i < IS31FL3746A_SCALING_REGISTER_COUNT; i++) { - is31fl3746a_write_register(addr, i + 1, g_scaling_registers[index][i]); - } - g_scaling_registers_update_required[index] = false; - } -} - -void is31fl3746a_flush(void) { - is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_1, 0); -#if defined(IS31FL3746A_I2C_ADDRESS_2) - is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_2, 1); -# if defined(IS31FL3746A_I2C_ADDRESS_3) - is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_3, 2); -# if defined(IS31FL3746A_I2C_ADDRESS_4) - is31fl3746a_update_pwm_buffers(IS31FL3746A_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} diff --git a/drivers/led/issi/is31fl3746a-simple.h b/drivers/led/issi/is31fl3746a-simple.h deleted file mode 100644 index eda644ad19..0000000000 --- a/drivers/led/issi/is31fl3746a-simple.h +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright 2017 Jason Williams - * Copyright 2018 Jack Humbert - * Copyright 2018 Yiancar - * Copyright 2020 MelGeek - * Copyright 2021 MasterSpoon - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -#define IS31FL3746A_REG_ID 0xFC - -#define IS31FL3746A_REG_COMMAND 0xFD - -#define IS31FL3746A_COMMAND_PWM 0x00 -#define IS31FL3746A_COMMAND_SCALING 0x01 -#define IS31FL3746A_COMMAND_FUNCTION 0x01 - -#define IS31FL3746A_FUNCTION_REG_CONFIGURATION 0x50 -#define IS31FL3746A_FUNCTION_REG_GLOBAL_CURRENT 0x51 -#define IS31FL3746A_FUNCTION_REG_PULLDOWNUP 0x52 -#define IS31FL3746A_FUNCTION_REG_TEMPERATURE 0x5F -#define IS31FL3746A_FUNCTION_REG_SPREAD_SPECTRUM 0x60 -#define IS31FL3746A_FUNCTION_REG_RESET 0x8F -#define IS31FL3746A_FUNCTION_REG_PWM_ENABLE 0xE0 -#define IS31FL3746A_FUNCTION_REG_PWM_FREQUENCY 0xE2 - -#define IS31FL3746A_REG_COMMAND_WRITE_LOCK 0xFE -#define IS31FL3746A_COMMAND_WRITE_LOCK_MAGIC 0xC5 - -#define IS31FL3746A_I2C_ADDRESS_GND_GND 0x60 -#define IS31FL3746A_I2C_ADDRESS_GND_SCL 0x61 -#define IS31FL3746A_I2C_ADDRESS_GND_SDA 0x62 -#define IS31FL3746A_I2C_ADDRESS_GND_VCC 0x63 -#define IS31FL3746A_I2C_ADDRESS_SCL_GND 0x64 -#define IS31FL3746A_I2C_ADDRESS_SCL_SCL 0x65 -#define IS31FL3746A_I2C_ADDRESS_SCL_SDA 0x66 -#define IS31FL3746A_I2C_ADDRESS_SCL_VCC 0x67 -#define IS31FL3746A_I2C_ADDRESS_SDA_GND 0x68 -#define IS31FL3746A_I2C_ADDRESS_SDA_SCL 0x69 -#define IS31FL3746A_I2C_ADDRESS_SDA_SDA 0x6A -#define IS31FL3746A_I2C_ADDRESS_SDA_VCC 0x6B -#define IS31FL3746A_I2C_ADDRESS_VCC_GND 0x6C -#define IS31FL3746A_I2C_ADDRESS_VCC_SCL 0x6D -#define IS31FL3746A_I2C_ADDRESS_VCC_SDA 0x6E -#define IS31FL3746A_I2C_ADDRESS_VCC_VCC 0x6F - -#if defined(LED_MATRIX_IS31FL3746A) -# define IS31FL3746A_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -typedef struct is31fl3746a_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED is31fl3746a_led_t; - -extern const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT]; - -void is31fl3746a_init_drivers(void); -void is31fl3746a_init(uint8_t addr, uint8_t sync); -void is31fl3746a_write_register(uint8_t addr, uint8_t reg, uint8_t data); -void is31fl3746a_select_page(uint8_t addr, uint8_t page); -void is31fl3746a_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void is31fl3746a_set_value(int index, uint8_t value); -void is31fl3746a_set_value_all(uint8_t value); - -void is31fl3746a_set_scaling_register(uint8_t index, uint8_t value); - -void is31fl3746a_update_pwm_buffers(uint8_t addr, uint8_t index); -void is31fl3746a_update_scaling_registers(uint8_t addr, uint8_t index); - -void is31fl3746a_flush(void); - -#define IS31FL3746A_PDR_0_OHM 0b000 // No pull-down resistor -#define IS31FL3746A_PDR_0K5_OHM_SW_OFF 0b001 // 0.5 kOhm resistor in SWx off time -#define IS31FL3746A_PDR_1K_OHM_SW_OFF 0b010 // 1 kOhm resistor in SWx off time -#define IS31FL3746A_PDR_2K_OHM_SW_OFF 0b011 // 2 kOhm resistor in SWx off time -#define IS31FL3746A_PDR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3746A_PDR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3746A_PDR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3746A_PDR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3746A_PUR_0_OHM 0b000 // No pull-up resistor -#define IS31FL3746A_PUR_0K5_OHM_CS_OFF 0b001 // 0.5 kOhm resistor in CSy off time -#define IS31FL3746A_PUR_1K_OHM_CS_OFF 0b010 // 1 kOhm resistor in CSy off time -#define IS31FL3746A_PUR_2K_OHM_CS_OFF 0b011 // 2 kOhm resistor in CSy off time -#define IS31FL3746A_PUR_1K_OHM 0b100 // 1 kOhm resistor -#define IS31FL3746A_PUR_2K_OHM 0b101 // 2 kOhm resistor -#define IS31FL3746A_PUR_4K_OHM 0b110 // 4 kOhm resistor -#define IS31FL3746A_PUR_8K_OHM 0b111 // 8 kOhm resistor - -#define IS31FL3746A_PWM_FREQUENCY_29K_HZ 0b000 -#define IS31FL3746A_PWM_FREQUENCY_14K5_HZ 0b001 -#define IS31FL3746A_PWM_FREQUENCY_7K25_HZ 0b010 -#define IS31FL3746A_PWM_FREQUENCY_3K63_HZ 0b011 -#define IS31FL3746A_PWM_FREQUENCY_1K81_HZ 0b100 -#define IS31FL3746A_PWM_FREQUENCY_906_HZ 0b101 -#define IS31FL3746A_PWM_FREQUENCY_453_HZ 0b110 - -#define CS1_SW1 0x00 -#define CS2_SW1 0x01 -#define CS3_SW1 0x02 -#define CS4_SW1 0x03 -#define CS5_SW1 0x04 -#define CS6_SW1 0x05 -#define CS7_SW1 0x06 -#define CS8_SW1 0x07 -#define CS9_SW1 0x08 -#define CS10_SW1 0x09 -#define CS11_SW1 0x0A -#define CS12_SW1 0x0B -#define CS13_SW1 0x0C -#define CS14_SW1 0x0D -#define CS15_SW1 0x0E -#define CS16_SW1 0x0F -#define CS17_SW1 0x10 -#define CS18_SW1 0x11 - -#define CS1_SW2 0x12 -#define CS2_SW2 0x13 -#define CS3_SW2 0x14 -#define CS4_SW2 0x15 -#define CS5_SW2 0x16 -#define CS6_SW2 0x17 -#define CS7_SW2 0x18 -#define CS8_SW2 0x19 -#define CS9_SW2 0x1A -#define CS10_SW2 0x1B -#define CS11_SW2 0x1C -#define CS12_SW2 0x1D -#define CS13_SW2 0x1E -#define CS14_SW2 0x1F -#define CS15_SW2 0x20 -#define CS16_SW2 0x21 -#define CS17_SW2 0x22 -#define CS18_SW2 0x23 - -#define CS1_SW3 0x24 -#define CS2_SW3 0x25 -#define CS3_SW3 0x26 -#define CS4_SW3 0x27 -#define CS5_SW3 0x28 -#define CS6_SW3 0x29 -#define CS7_SW3 0x2A -#define CS8_SW3 0x2B -#define CS9_SW3 0x2C -#define CS10_SW3 0x2D -#define CS11_SW3 0x2E -#define CS12_SW3 0x2F -#define CS13_SW3 0x30 -#define CS14_SW3 0x31 -#define CS15_SW3 0x32 -#define CS16_SW3 0x33 -#define CS17_SW3 0x34 -#define CS18_SW3 0x35 - -#define CS1_SW4 0x36 -#define CS2_SW4 0x37 -#define CS3_SW4 0x38 -#define CS4_SW4 0x39 -#define CS5_SW4 0x3A -#define CS6_SW4 0x3B -#define CS7_SW4 0x3C -#define CS8_SW4 0x3D -#define CS9_SW4 0x3E -#define CS10_SW4 0x3F -#define CS11_SW4 0x40 -#define CS12_SW4 0x41 -#define CS13_SW4 0x42 -#define CS14_SW4 0x43 -#define CS15_SW4 0x44 -#define CS16_SW4 0x45 -#define CS17_SW4 0x46 -#define CS18_SW4 0x47 diff --git a/drivers/led/snled27351-mono.c b/drivers/led/snled27351-mono.c new file mode 100644 index 0000000000..4519243e0e --- /dev/null +++ b/drivers/led/snled27351-mono.c @@ -0,0 +1,272 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "snled27351-mono.h" +#include "i2c_master.h" + +#define SNLED27351_PWM_REGISTER_COUNT 192 +#define SNLED27351_LED_CONTROL_REGISTER_COUNT 24 + +#ifndef SNLED27351_I2C_TIMEOUT +# define SNLED27351_I2C_TIMEOUT 100 +#endif + +#ifndef SNLED27351_I2C_PERSISTENCE +# define SNLED27351_I2C_PERSISTENCE 0 +#endif + +#ifndef SNLED27351_PHASE_CHANNEL +# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL +#endif + +#ifndef SNLED27351_CURRENT_TUNE +# define SNLED27351_CURRENT_TUNE \ + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } +#endif + +uint8_t i2c_transfer_buffer[20]; + +// These buffers match the SNLED27351 PWM registers. +// The control buffers match the PG0 LED On/Off registers. +// Storing them like this is optimal for I2C transfers to the registers. +// We could optimize this and take out the unused registers from these +// buffers and the transfers in snled27351_write_pwm_buffer() but it's +// probably not worth the extra complexity. +uint8_t g_pwm_buffer[SNLED27351_DRIVER_COUNT][SNLED27351_PWM_REGISTER_COUNT]; +bool g_pwm_buffer_update_required[SNLED27351_DRIVER_COUNT] = {false}; + +uint8_t g_led_control_registers[SNLED27351_DRIVER_COUNT][SNLED27351_LED_CONTROL_REGISTER_COUNT] = {0}; +bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT] = {false}; + +bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) { + // If the transaction fails function returns false. + i2c_transfer_buffer[0] = reg; + i2c_transfer_buffer[1] = data; + +#if SNLED27351_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) { + return false; + } +#endif + return true; +} + +void snled27351_select_page(uint8_t addr, uint8_t page) { + snled27351_write_register(addr, SNLED27351_REG_COMMAND, page); +} + +bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { + // Assumes PG1 is already selected. + // If any of the transactions fails function returns false. + // Transmit PWM registers in 12 transfers of 16 bytes. + // i2c_transfer_buffer[] is 20 bytes + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (int i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 16) { + i2c_transfer_buffer[0] = i; + // Copy the data from i to i+15. + // Device will auto-increment register for data after the first byte + // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. + for (int j = 0; j < 16; j++) { + i2c_transfer_buffer[1 + j] = pwm_buffer[i + j]; + } + +#if SNLED27351_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) { + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) { + return false; + } + } +#else + if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) { + return false; + } +#endif + } + return true; +} + +void snled27351_init_drivers(void) { + i2c_init(); + + snled27351_init(SNLED27351_I2C_ADDRESS_1); +#if defined(SNLED27351_I2C_ADDRESS_2) + snled27351_init(SNLED27351_I2C_ADDRESS_2); +# if defined(SNLED27351_I2C_ADDRESS_3) + snled27351_init(SNLED27351_I2C_ADDRESS_3); +# if defined(SNLED27351_I2C_ADDRESS_4) + snled27351_init(SNLED27351_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < SNLED27351_LED_COUNT; i++) { + snled27351_set_led_control_register(i, true); + } + + snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_1, 0); +#if defined(SNLED27351_I2C_ADDRESS_2) + snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_2, 1); +# if defined(SNLED27351_I2C_ADDRESS_3) + snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_3, 2); +# if defined(SNLED27351_I2C_ADDRESS_4) + snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void snled27351_init(uint8_t addr) { + snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); + + // Setting LED driver to shutdown mode + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN); + // Setting internal channel pulldown/pullup + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_PULLDOWNUP, SNLED27351_PULLDOWNUP_ALL_ENABLED); + // Select number of scan phase + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SCAN_PHASE, SNLED27351_PHASE_CHANNEL); + // Setting PWM Delay Phase + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1, SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE); + // Setting Driving/Sinking Channel Slew Rate + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE); + // Setting Iref + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0); + + snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); + + for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) { + snled27351_write_register(addr, i, 0x00); + } + + snled27351_select_page(addr, SNLED27351_COMMAND_PWM); + + for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) { + snled27351_write_register(addr, i, 0x00); + } + + snled27351_select_page(addr, SNLED27351_COMMAND_CURRENT_TUNE); + + uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE; + for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) { + snled27351_write_register(addr, i, current_tune_reg_list[i]); + } + + snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); + + // Enable LEDs ON/OFF + for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) { + snled27351_write_register(addr, i, 0xFF); + } + + snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); + + // Setting LED driver to normal mode + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL); +} + +void snled27351_set_value(int index, uint8_t value) { + snled27351_led_t led; + if (index >= 0 && index < SNLED27351_LED_COUNT) { + memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led)); + + if (g_pwm_buffer[led.driver][led.v] == value) { + return; + } + g_pwm_buffer[led.driver][led.v] = value; + g_pwm_buffer_update_required[led.driver] = true; + } +} + +void snled27351_set_value_all(uint8_t value) { + for (int i = 0; i < SNLED27351_LED_COUNT; i++) { + snled27351_set_value(i, value); + } +} + +void snled27351_set_led_control_register(uint8_t index, bool value) { + snled27351_led_t led; + memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led)); + + uint8_t control_register = led.v / 8; + uint8_t bit_value = led.v % 8; + + if (value) { + g_led_control_registers[led.driver][control_register] |= (1 << bit_value); + } else { + g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); + } + + g_led_control_registers_update_required[led.driver] = true; +} + +void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (g_pwm_buffer_update_required[index]) { + snled27351_select_page(addr, SNLED27351_COMMAND_PWM); + + // If any of the transactions fail we risk writing dirty PG0, + // refresh page 0 just in case. + if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) { + g_led_control_registers_update_required[index] = true; + } + } + g_pwm_buffer_update_required[index] = false; +} + +void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) { + if (g_led_control_registers_update_required[index]) { + snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); + + for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) { + snled27351_write_register(addr, i, g_led_control_registers[index][i]); + } + } + g_led_control_registers_update_required[index] = false; +} + +void snled27351_flush(void) { + snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_1, 0); +#if defined(SNLED27351_I2C_ADDRESS_2) + snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_2, 1); +# if defined(SNLED27351_I2C_ADDRESS_3) + snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_3, 2); +# if defined(SNLED27351_I2C_ADDRESS_4) + snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void snled27351_sw_return_normal(uint8_t addr) { + snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); + + // Setting LED driver to normal mode + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL); +} + +void snled27351_sw_shutdown(uint8_t addr) { + snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); + + // Setting LED driver to shutdown mode + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN); + // Write SW Sleep Register + snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, SNLED27351_SOFTWARE_SLEEP_ENABLE); +} diff --git a/drivers/led/snled27351-mono.h b/drivers/led/snled27351-mono.h new file mode 100644 index 0000000000..0a4d2469f0 --- /dev/null +++ b/drivers/led/snled27351-mono.h @@ -0,0 +1,381 @@ +/* Copyright 2021 @ Keychron (https://www.keychron.com) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef CKLED2001_TIMEOUT +# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT +#endif +#ifdef CKLED2001_PERSISTENCE +# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE +#endif +#ifdef PHASE_CHANNEL +# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL +#endif +#ifdef CKLED2001_CURRENT_TUNE +# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE +#endif + +#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL +#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL +#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL +#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL +#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL +#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL +#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL +#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL +#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL +#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL +#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL +#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL + +#define ckled2001_led snled27351_led_t +#define g_ckled2001_leds g_snled27351_leds +// ======== + +#define SNLED27351_REG_COMMAND 0xFD +#define SNLED27351_COMMAND_LED_CONTROL 0x00 +#define SNLED27351_COMMAND_PWM 0x01 +#define SNLED27351_COMMAND_FUNCTION 0x03 +#define SNLED27351_COMMAND_CURRENT_TUNE 0x04 + +#define SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN 0x00 +#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN (0x0 << 0) +#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL (0x1 << 0) + +#define SNLED27351_FUNCTION_REG_ID 0x11 +#define SNLED27351_DRIVER_ID 0x8A + +#define SNLED27351_FUNCTION_REG_PULLDOWNUP 0x13 +#define SNLED27351_PULLDOWNUP_ALL_ENABLED 0xAA + +#define SNLED27351_FUNCTION_REG_SCAN_PHASE 0x14 +#define SNLED27351_SCAN_PHASE_12_CHANNEL 0x00 +#define SNLED27351_SCAN_PHASE_11_CHANNEL 0x01 +#define SNLED27351_SCAN_PHASE_10_CHANNEL 0x02 +#define SNLED27351_SCAN_PHASE_9_CHANNEL 0x03 +#define SNLED27351_SCAN_PHASE_8_CHANNEL 0x04 +#define SNLED27351_SCAN_PHASE_7_CHANNEL 0x05 +#define SNLED27351_SCAN_PHASE_6_CHANNEL 0x06 +#define SNLED27351_SCAN_PHASE_5_CHANNEL 0x07 +#define SNLED27351_SCAN_PHASE_4_CHANNEL 0x08 +#define SNLED27351_SCAN_PHASE_3_CHANNEL 0x09 +#define SNLED27351_SCAN_PHASE_2_CHANNEL 0x0A +#define SNLED27351_SCAN_PHASE_1_CHANNEL 0x0B + +#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1 0x15 +#define SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE (0b1 << 2) + +#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2 0x16 +#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE (0b1 << 6) +#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE (0b1 << 7) + +#define SNLED27351_FUNCTION_REG_OPEN_SHORT_ENABLE 0x17 +#define SNLED27351_OPEN_SHORT_ENABLE_SDS_ENABLE (0b1 << 6) +#define SNLED27351_OPEN_SHORT_ENABLE_ODS_ENABLE (0b1 << 7) + +#define SNLED27351_FUNCTION_REG_OPEN_SHORT_DUTY 0x18 + +#define SNLED27351_FUNCTION_REG_OPEN_SHORT_FLAG 0x19 +#define SNLED27351_OPEN_SHORT_FLAG_OSINT_ENABLE (0b1 << 6) +#define SNLED27351_OPEN_SHORT_FLAG_ODINT_ENABLE (0b1 << 7) + +#define SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP 0x1A +#define SNLED27351_SOFTWARE_SLEEP_ENABLE (0b1 << 1) + +// LED Control Registers +#define SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR 0x0 +#define SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR 0x17 +#define SNLED27351_LED_CONTROL_ON_OFF_LENGTH ((SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR - SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR) + 1) + +#define SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR 0x18 +#define SNLED27351_LED_CONTROL_OPEN_LAST_ADDR 0x2F +#define SNLED27351_LED_CONTROL_OPEN_LENGTH ((SNLED27351_LED_CONTROL_OPEN_LAST_ADDR - SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR) + 1) + +#define SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR 0x30 +#define SNLED27351_LED_CONTROL_SHORT_LAST_ADDR 0x47 +#define SNLED27351_LED_CONTROL_SHORT_LENGTH ((SNLED27351_LED_CONTROL_SHORT_LAST_ADDR - SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR) + 1) + +#define SNLED27351_LED_CONTROL_PAGE_LENGTH 0x48 + +// LED Control Registers +#define SNLED27351_LED_PWM_FIRST_ADDR 0x00 +#define SNLED27351_LED_PWM_LAST_ADDR 0xBF +#define SNLED27351_LED_PWM_LENGTH 0xC0 + +// Current Tune Registers +#define SNLED27351_LED_CURRENT_TUNE_FIRST_ADDR 0x00 +#define SNLED27351_LED_CURRENT_TUNE_LAST_ADDR 0x0B +#define SNLED27351_LED_CURRENT_TUNE_LENGTH 0x0C + +#define SNLED27351_I2C_ADDRESS_GND 0x74 +#define SNLED27351_I2C_ADDRESS_SCL 0x75 +#define SNLED27351_I2C_ADDRESS_SDA 0x76 +#define SNLED27351_I2C_ADDRESS_VDDIO 0x77 + +#if defined(LED_MATRIX_SNLED27351) +# define SNLED27351_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(SNLED27351_I2C_ADDRESS_4) +# define SNLED27351_DRIVER_COUNT 4 +#elif defined(SNLED27351_I2C_ADDRESS_3) +# define SNLED27351_DRIVER_COUNT 3 +#elif defined(SNLED27351_I2C_ADDRESS_2) +# define SNLED27351_DRIVER_COUNT 2 +#elif defined(SNLED27351_I2C_ADDRESS_1) +# define SNLED27351_DRIVER_COUNT 1 +#endif + +typedef struct snled27351_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED snled27351_led_t; + +extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT]; + +void snled27351_init_drivers(void); +void snled27351_init(uint8_t addr); +void snled27351_select_page(uint8_t addr, uint8_t page); +bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data); +bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); + +void snled27351_set_value(int index, uint8_t value); +void snled27351_set_value_all(uint8_t value); + +void snled27351_set_led_control_register(uint8_t index, bool value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index); +void snled27351_update_led_control_registers(uint8_t addr, uint8_t index); + +void snled27351_flush(void); + +void snled27351_sw_return_normal(uint8_t addr); +void snled27351_sw_shutdown(uint8_t addr); + +#define A_1 0x00 +#define A_2 0x01 +#define A_3 0x02 +#define A_4 0x03 +#define A_5 0x04 +#define A_6 0x05 +#define A_7 0x06 +#define A_8 0x07 +#define A_9 0x08 +#define A_10 0x09 +#define A_11 0x0A +#define A_12 0x0B +#define A_13 0x0C +#define A_14 0x0D +#define A_15 0x0E +#define A_16 0x0F + +#define B_1 0x10 +#define B_2 0x11 +#define B_3 0x12 +#define B_4 0x13 +#define B_5 0x14 +#define B_6 0x15 +#define B_7 0x16 +#define B_8 0x17 +#define B_9 0x18 +#define B_10 0x19 +#define B_11 0x1A +#define B_12 0x1B +#define B_13 0x1C +#define B_14 0x1D +#define B_15 0x1E +#define B_16 0x1F + +#define C_1 0x20 +#define C_2 0x21 +#define C_3 0x22 +#define C_4 0x23 +#define C_5 0x24 +#define C_6 0x25 +#define C_7 0x26 +#define C_8 0x27 +#define C_9 0x28 +#define C_10 0x29 +#define C_11 0x2A +#define C_12 0x2B +#define C_13 0x2C +#define C_14 0x2D +#define C_15 0x2E +#define C_16 0x2F + +#define D_1 0x30 +#define D_2 0x31 +#define D_3 0x32 +#define D_4 0x33 +#define D_5 0x34 +#define D_6 0x35 +#define D_7 0x36 +#define D_8 0x37 +#define D_9 0x38 +#define D_10 0x39 +#define D_11 0x3A +#define D_12 0x3B +#define D_13 0x3C +#define D_14 0x3D +#define D_15 0x3E +#define D_16 0x3F + +#define E_1 0x40 +#define E_2 0x41 +#define E_3 0x42 +#define E_4 0x43 +#define E_5 0x44 +#define E_6 0x45 +#define E_7 0x46 +#define E_8 0x47 +#define E_9 0x48 +#define E_10 0x49 +#define E_11 0x4A +#define E_12 0x4B +#define E_13 0x4C +#define E_14 0x4D +#define E_15 0x4E +#define E_16 0x4F + +#define F_1 0x50 +#define F_2 0x51 +#define F_3 0x52 +#define F_4 0x53 +#define F_5 0x54 +#define F_6 0x55 +#define F_7 0x56 +#define F_8 0x57 +#define F_9 0x58 +#define F_10 0x59 +#define F_11 0x5A +#define F_12 0x5B +#define F_13 0x5C +#define F_14 0x5D +#define F_15 0x5E +#define F_16 0x5F + +#define G_1 0x60 +#define G_2 0x61 +#define G_3 0x62 +#define G_4 0x63 +#define G_5 0x64 +#define G_6 0x65 +#define G_7 0x66 +#define G_8 0x67 +#define G_9 0x68 +#define G_10 0x69 +#define G_11 0x6A +#define G_12 0x6B +#define G_13 0x6C +#define G_14 0x6D +#define G_15 0x6E +#define G_16 0x6F + +#define H_1 0x70 +#define H_2 0x71 +#define H_3 0x72 +#define H_4 0x73 +#define H_5 0x74 +#define H_6 0x75 +#define H_7 0x76 +#define H_8 0x77 +#define H_9 0x78 +#define H_10 0x79 +#define H_11 0x7A +#define H_12 0x7B +#define H_13 0x7C +#define H_14 0x7D +#define H_15 0x7E +#define H_16 0x7F + +#define I_1 0x80 +#define I_2 0x81 +#define I_3 0x82 +#define I_4 0x83 +#define I_5 0x84 +#define I_6 0x85 +#define I_7 0x86 +#define I_8 0x87 +#define I_9 0x88 +#define I_10 0x89 +#define I_11 0x8A +#define I_12 0x8B +#define I_13 0x8C +#define I_14 0x8D +#define I_15 0x8E +#define I_16 0x8F + +#define J_1 0x90 +#define J_2 0x91 +#define J_3 0x92 +#define J_4 0x93 +#define J_5 0x94 +#define J_6 0x95 +#define J_7 0x96 +#define J_8 0x97 +#define J_9 0x98 +#define J_10 0x99 +#define J_11 0x9A +#define J_12 0x9B +#define J_13 0x9C +#define J_14 0x9D +#define J_15 0x9E +#define J_16 0x9F + +#define K_1 0xA0 +#define K_2 0xA1 +#define K_3 0xA2 +#define K_4 0xA3 +#define K_5 0xA4 +#define K_6 0xA5 +#define K_7 0xA6 +#define K_8 0xA7 +#define K_9 0xA8 +#define K_10 0xA9 +#define K_11 0xAA +#define K_12 0xAB +#define K_13 0xAC +#define K_14 0xAD +#define K_15 0xAE +#define K_16 0xAF + +#define L_1 0xB0 +#define L_2 0xB1 +#define L_3 0xB2 +#define L_4 0xB3 +#define L_5 0xB4 +#define L_6 0xB5 +#define L_7 0xB6 +#define L_8 0xB7 +#define L_9 0xB8 +#define L_10 0xB9 +#define L_11 0xBA +#define L_12 0xBB +#define L_13 0xBC +#define L_14 0xBD +#define L_15 0xBE +#define L_16 0xBF diff --git a/drivers/led/snled27351-simple.c b/drivers/led/snled27351-simple.c deleted file mode 100644 index 7b7a82f90f..0000000000 --- a/drivers/led/snled27351-simple.c +++ /dev/null @@ -1,272 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "snled27351-simple.h" -#include "i2c_master.h" - -#define SNLED27351_PWM_REGISTER_COUNT 192 -#define SNLED27351_LED_CONTROL_REGISTER_COUNT 24 - -#ifndef SNLED27351_I2C_TIMEOUT -# define SNLED27351_I2C_TIMEOUT 100 -#endif - -#ifndef SNLED27351_I2C_PERSISTENCE -# define SNLED27351_I2C_PERSISTENCE 0 -#endif - -#ifndef SNLED27351_PHASE_CHANNEL -# define SNLED27351_PHASE_CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL -#endif - -#ifndef SNLED27351_CURRENT_TUNE -# define SNLED27351_CURRENT_TUNE \ - { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } -#endif - -uint8_t i2c_transfer_buffer[20]; - -// These buffers match the SNLED27351 PWM registers. -// The control buffers match the PG0 LED On/Off registers. -// Storing them like this is optimal for I2C transfers to the registers. -// We could optimize this and take out the unused registers from these -// buffers and the transfers in snled27351_write_pwm_buffer() but it's -// probably not worth the extra complexity. -uint8_t g_pwm_buffer[SNLED27351_DRIVER_COUNT][SNLED27351_PWM_REGISTER_COUNT]; -bool g_pwm_buffer_update_required[SNLED27351_DRIVER_COUNT] = {false}; - -uint8_t g_led_control_registers[SNLED27351_DRIVER_COUNT][SNLED27351_LED_CONTROL_REGISTER_COUNT] = {0}; -bool g_led_control_registers_update_required[SNLED27351_DRIVER_COUNT] = {false}; - -bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data) { - // If the transaction fails function returns false. - i2c_transfer_buffer[0] = reg; - i2c_transfer_buffer[1] = data; - -#if SNLED27351_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 2, SNLED27351_I2C_TIMEOUT) != 0) { - return false; - } -#endif - return true; -} - -void snled27351_select_page(uint8_t addr, uint8_t page) { - snled27351_write_register(addr, SNLED27351_REG_COMMAND, page); -} - -bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) { - // Assumes PG1 is already selected. - // If any of the transactions fails function returns false. - // Transmit PWM registers in 12 transfers of 16 bytes. - // i2c_transfer_buffer[] is 20 bytes - - // Iterate over the pwm_buffer contents at 16 byte intervals. - for (int i = 0; i < SNLED27351_PWM_REGISTER_COUNT; i += 16) { - i2c_transfer_buffer[0] = i; - // Copy the data from i to i+15. - // Device will auto-increment register for data after the first byte - // Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer. - for (int j = 0; j < 16; j++) { - i2c_transfer_buffer[1 + j] = pwm_buffer[i + j]; - } - -#if SNLED27351_I2C_PERSISTENCE > 0 - for (uint8_t i = 0; i < SNLED27351_I2C_PERSISTENCE; i++) { - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) { - return false; - } - } -#else - if (i2c_transmit(addr << 1, i2c_transfer_buffer, 17, SNLED27351_I2C_TIMEOUT) != 0) { - return false; - } -#endif - } - return true; -} - -void snled27351_init_drivers(void) { - i2c_init(); - - snled27351_init(SNLED27351_I2C_ADDRESS_1); -#if defined(SNLED27351_I2C_ADDRESS_2) - snled27351_init(SNLED27351_I2C_ADDRESS_2); -# if defined(SNLED27351_I2C_ADDRESS_3) - snled27351_init(SNLED27351_I2C_ADDRESS_3); -# if defined(SNLED27351_I2C_ADDRESS_4) - snled27351_init(SNLED27351_I2C_ADDRESS_4); -# endif -# endif -#endif - - for (int i = 0; i < SNLED27351_LED_COUNT; i++) { - snled27351_set_led_control_register(i, true); - } - - snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_1, 0); -#if defined(SNLED27351_I2C_ADDRESS_2) - snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_2, 1); -# if defined(SNLED27351_I2C_ADDRESS_3) - snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_3, 2); -# if defined(SNLED27351_I2C_ADDRESS_4) - snled27351_update_led_control_registers(SNLED27351_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void snled27351_init(uint8_t addr) { - snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); - - // Setting LED driver to shutdown mode - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN); - // Setting internal channel pulldown/pullup - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_PULLDOWNUP, SNLED27351_PULLDOWNUP_ALL_ENABLED); - // Select number of scan phase - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SCAN_PHASE, SNLED27351_PHASE_CHANNEL); - // Setting PWM Delay Phase - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1, SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE); - // Setting Driving/Sinking Channel Slew Rate - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2, SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE | SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE); - // Setting Iref - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, 0); - - snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); - - for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) { - snled27351_write_register(addr, i, 0x00); - } - - snled27351_select_page(addr, SNLED27351_COMMAND_PWM); - - for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) { - snled27351_write_register(addr, i, 0x00); - } - - snled27351_select_page(addr, SNLED27351_COMMAND_CURRENT_TUNE); - - uint8_t current_tune_reg_list[SNLED27351_LED_CURRENT_TUNE_LENGTH] = SNLED27351_CURRENT_TUNE; - for (int i = 0; i < SNLED27351_LED_CURRENT_TUNE_LENGTH; i++) { - snled27351_write_register(addr, i, current_tune_reg_list[i]); - } - - snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); - - // Enable LEDs ON/OFF - for (int i = 0; i < SNLED27351_LED_CONTROL_ON_OFF_LENGTH; i++) { - snled27351_write_register(addr, i, 0xFF); - } - - snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); - - // Setting LED driver to normal mode - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL); -} - -void snled27351_set_value(int index, uint8_t value) { - snled27351_led_t led; - if (index >= 0 && index < SNLED27351_LED_COUNT) { - memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led)); - - if (g_pwm_buffer[led.driver][led.v] == value) { - return; - } - g_pwm_buffer[led.driver][led.v] = value; - g_pwm_buffer_update_required[led.driver] = true; - } -} - -void snled27351_set_value_all(uint8_t value) { - for (int i = 0; i < SNLED27351_LED_COUNT; i++) { - snled27351_set_value(i, value); - } -} - -void snled27351_set_led_control_register(uint8_t index, bool value) { - snled27351_led_t led; - memcpy_P(&led, (&g_snled27351_leds[index]), sizeof(led)); - - uint8_t control_register = led.v / 8; - uint8_t bit_value = led.v % 8; - - if (value) { - g_led_control_registers[led.driver][control_register] |= (1 << bit_value); - } else { - g_led_control_registers[led.driver][control_register] &= ~(1 << bit_value); - } - - g_led_control_registers_update_required[led.driver] = true; -} - -void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index) { - if (g_pwm_buffer_update_required[index]) { - snled27351_select_page(addr, SNLED27351_COMMAND_PWM); - - // If any of the transactions fail we risk writing dirty PG0, - // refresh page 0 just in case. - if (!snled27351_write_pwm_buffer(addr, g_pwm_buffer[index])) { - g_led_control_registers_update_required[index] = true; - } - } - g_pwm_buffer_update_required[index] = false; -} - -void snled27351_update_led_control_registers(uint8_t addr, uint8_t index) { - if (g_led_control_registers_update_required[index]) { - snled27351_select_page(addr, SNLED27351_COMMAND_LED_CONTROL); - - for (int i = 0; i < SNLED27351_LED_CONTROL_REGISTER_COUNT; i++) { - snled27351_write_register(addr, i, g_led_control_registers[index][i]); - } - } - g_led_control_registers_update_required[index] = false; -} - -void snled27351_flush(void) { - snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_1, 0); -#if defined(SNLED27351_I2C_ADDRESS_2) - snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_2, 1); -# if defined(SNLED27351_I2C_ADDRESS_3) - snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_3, 2); -# if defined(SNLED27351_I2C_ADDRESS_4) - snled27351_update_pwm_buffers(SNLED27351_I2C_ADDRESS_4, 3); -# endif -# endif -#endif -} - -void snled27351_sw_return_normal(uint8_t addr) { - snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); - - // Setting LED driver to normal mode - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL); -} - -void snled27351_sw_shutdown(uint8_t addr) { - snled27351_select_page(addr, SNLED27351_COMMAND_FUNCTION); - - // Setting LED driver to shutdown mode - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN, SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN); - // Write SW Sleep Register - snled27351_write_register(addr, SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP, SNLED27351_SOFTWARE_SLEEP_ENABLE); -} diff --git a/drivers/led/snled27351-simple.h b/drivers/led/snled27351-simple.h deleted file mode 100644 index 0a4d2469f0..0000000000 --- a/drivers/led/snled27351-simple.h +++ /dev/null @@ -1,381 +0,0 @@ -/* Copyright 2021 @ Keychron (https://www.keychron.com) - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#pragma once - -#include -#include -#include "progmem.h" -#include "util.h" - -// ======== DEPRECATED DEFINES - DO NOT USE ======== -#ifdef CKLED2001_TIMEOUT -# define SNLED27351_I2C_TIMEOUT CKLED2001_TIMEOUT -#endif -#ifdef CKLED2001_PERSISTENCE -# define SNLED27351_I2C_PERSISTENCE CKLED2001_PERSISTENCE -#endif -#ifdef PHASE_CHANNEL -# define SNLED27351_PHASE_CHANNEL PHASE_CHANNEL -#endif -#ifdef CKLED2001_CURRENT_TUNE -# define SNLED27351_CURRENT_TUNE CKLED2001_CURRENT_TUNE -#endif - -#define MSKPHASE_12CHANNEL SNLED27351_SCAN_PHASE_12_CHANNEL -#define MSKPHASE_11CHANNEL SNLED27351_SCAN_PHASE_11_CHANNEL -#define MSKPHASE_10CHANNEL SNLED27351_SCAN_PHASE_10_CHANNEL -#define MSKPHASE_9CHANNEL SNLED27351_SCAN_PHASE_9_CHANNEL -#define MSKPHASE_8CHANNEL SNLED27351_SCAN_PHASE_8_CHANNEL -#define MSKPHASE_7CHANNEL SNLED27351_SCAN_PHASE_7_CHANNEL -#define MSKPHASE_6CHANNEL SNLED27351_SCAN_PHASE_6_CHANNEL -#define MSKPHASE_5CHANNEL SNLED27351_SCAN_PHASE_5_CHANNEL -#define MSKPHASE_4CHANNEL SNLED27351_SCAN_PHASE_4_CHANNEL -#define MSKPHASE_3CHANNEL SNLED27351_SCAN_PHASE_3_CHANNEL -#define MSKPHASE_2CHANNEL SNLED27351_SCAN_PHASE_2_CHANNEL -#define MSKPHASE_1CHANNEL SNLED27351_SCAN_PHASE_1_CHANNEL - -#define ckled2001_led snled27351_led_t -#define g_ckled2001_leds g_snled27351_leds -// ======== - -#define SNLED27351_REG_COMMAND 0xFD -#define SNLED27351_COMMAND_LED_CONTROL 0x00 -#define SNLED27351_COMMAND_PWM 0x01 -#define SNLED27351_COMMAND_FUNCTION 0x03 -#define SNLED27351_COMMAND_CURRENT_TUNE 0x04 - -#define SNLED27351_FUNCTION_REG_SOFTWARE_SHUTDOWN 0x00 -#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_SHUTDOWN (0x0 << 0) -#define SNLED27351_SOFTWARE_SHUTDOWN_SSD_NORMAL (0x1 << 0) - -#define SNLED27351_FUNCTION_REG_ID 0x11 -#define SNLED27351_DRIVER_ID 0x8A - -#define SNLED27351_FUNCTION_REG_PULLDOWNUP 0x13 -#define SNLED27351_PULLDOWNUP_ALL_ENABLED 0xAA - -#define SNLED27351_FUNCTION_REG_SCAN_PHASE 0x14 -#define SNLED27351_SCAN_PHASE_12_CHANNEL 0x00 -#define SNLED27351_SCAN_PHASE_11_CHANNEL 0x01 -#define SNLED27351_SCAN_PHASE_10_CHANNEL 0x02 -#define SNLED27351_SCAN_PHASE_9_CHANNEL 0x03 -#define SNLED27351_SCAN_PHASE_8_CHANNEL 0x04 -#define SNLED27351_SCAN_PHASE_7_CHANNEL 0x05 -#define SNLED27351_SCAN_PHASE_6_CHANNEL 0x06 -#define SNLED27351_SCAN_PHASE_5_CHANNEL 0x07 -#define SNLED27351_SCAN_PHASE_4_CHANNEL 0x08 -#define SNLED27351_SCAN_PHASE_3_CHANNEL 0x09 -#define SNLED27351_SCAN_PHASE_2_CHANNEL 0x0A -#define SNLED27351_SCAN_PHASE_1_CHANNEL 0x0B - -#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_1 0x15 -#define SNLED27351_SLEW_RATE_CONTROL_MODE_1_PDP_ENABLE (0b1 << 2) - -#define SNLED27351_FUNCTION_REG_SLEW_RATE_CONTROL_MODE_2 0x16 -#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_SSL_ENABLE (0b1 << 6) -#define SNLED27351_SLEW_RATE_CONTROL_MODE_2_DSL_ENABLE (0b1 << 7) - -#define SNLED27351_FUNCTION_REG_OPEN_SHORT_ENABLE 0x17 -#define SNLED27351_OPEN_SHORT_ENABLE_SDS_ENABLE (0b1 << 6) -#define SNLED27351_OPEN_SHORT_ENABLE_ODS_ENABLE (0b1 << 7) - -#define SNLED27351_FUNCTION_REG_OPEN_SHORT_DUTY 0x18 - -#define SNLED27351_FUNCTION_REG_OPEN_SHORT_FLAG 0x19 -#define SNLED27351_OPEN_SHORT_FLAG_OSINT_ENABLE (0b1 << 6) -#define SNLED27351_OPEN_SHORT_FLAG_ODINT_ENABLE (0b1 << 7) - -#define SNLED27351_FUNCTION_REG_SOFTWARE_SLEEP 0x1A -#define SNLED27351_SOFTWARE_SLEEP_ENABLE (0b1 << 1) - -// LED Control Registers -#define SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR 0x0 -#define SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR 0x17 -#define SNLED27351_LED_CONTROL_ON_OFF_LENGTH ((SNLED27351_LED_CONTROL_ON_OFF_LAST_ADDR - SNLED27351_LED_CONTROL_ON_OFF_FIRST_ADDR) + 1) - -#define SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR 0x18 -#define SNLED27351_LED_CONTROL_OPEN_LAST_ADDR 0x2F -#define SNLED27351_LED_CONTROL_OPEN_LENGTH ((SNLED27351_LED_CONTROL_OPEN_LAST_ADDR - SNLED27351_LED_CONTROL_OPEN_FIRST_ADDR) + 1) - -#define SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR 0x30 -#define SNLED27351_LED_CONTROL_SHORT_LAST_ADDR 0x47 -#define SNLED27351_LED_CONTROL_SHORT_LENGTH ((SNLED27351_LED_CONTROL_SHORT_LAST_ADDR - SNLED27351_LED_CONTROL_SHORT_FIRST_ADDR) + 1) - -#define SNLED27351_LED_CONTROL_PAGE_LENGTH 0x48 - -// LED Control Registers -#define SNLED27351_LED_PWM_FIRST_ADDR 0x00 -#define SNLED27351_LED_PWM_LAST_ADDR 0xBF -#define SNLED27351_LED_PWM_LENGTH 0xC0 - -// Current Tune Registers -#define SNLED27351_LED_CURRENT_TUNE_FIRST_ADDR 0x00 -#define SNLED27351_LED_CURRENT_TUNE_LAST_ADDR 0x0B -#define SNLED27351_LED_CURRENT_TUNE_LENGTH 0x0C - -#define SNLED27351_I2C_ADDRESS_GND 0x74 -#define SNLED27351_I2C_ADDRESS_SCL 0x75 -#define SNLED27351_I2C_ADDRESS_SDA 0x76 -#define SNLED27351_I2C_ADDRESS_VDDIO 0x77 - -#if defined(LED_MATRIX_SNLED27351) -# define SNLED27351_LED_COUNT LED_MATRIX_LED_COUNT -#endif - -#if defined(SNLED27351_I2C_ADDRESS_4) -# define SNLED27351_DRIVER_COUNT 4 -#elif defined(SNLED27351_I2C_ADDRESS_3) -# define SNLED27351_DRIVER_COUNT 3 -#elif defined(SNLED27351_I2C_ADDRESS_2) -# define SNLED27351_DRIVER_COUNT 2 -#elif defined(SNLED27351_I2C_ADDRESS_1) -# define SNLED27351_DRIVER_COUNT 1 -#endif - -typedef struct snled27351_led_t { - uint8_t driver : 2; - uint8_t v; -} PACKED snled27351_led_t; - -extern const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT]; - -void snled27351_init_drivers(void); -void snled27351_init(uint8_t addr); -void snled27351_select_page(uint8_t addr, uint8_t page); -bool snled27351_write_register(uint8_t addr, uint8_t reg, uint8_t data); -bool snled27351_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer); - -void snled27351_set_value(int index, uint8_t value); -void snled27351_set_value_all(uint8_t value); - -void snled27351_set_led_control_register(uint8_t index, bool value); - -// This should not be called from an interrupt -// (eg. from a timer interrupt). -// Call this while idle (in between matrix scans). -// If the buffer is dirty, it will update the driver with the buffer. -void snled27351_update_pwm_buffers(uint8_t addr, uint8_t index); -void snled27351_update_led_control_registers(uint8_t addr, uint8_t index); - -void snled27351_flush(void); - -void snled27351_sw_return_normal(uint8_t addr); -void snled27351_sw_shutdown(uint8_t addr); - -#define A_1 0x00 -#define A_2 0x01 -#define A_3 0x02 -#define A_4 0x03 -#define A_5 0x04 -#define A_6 0x05 -#define A_7 0x06 -#define A_8 0x07 -#define A_9 0x08 -#define A_10 0x09 -#define A_11 0x0A -#define A_12 0x0B -#define A_13 0x0C -#define A_14 0x0D -#define A_15 0x0E -#define A_16 0x0F - -#define B_1 0x10 -#define B_2 0x11 -#define B_3 0x12 -#define B_4 0x13 -#define B_5 0x14 -#define B_6 0x15 -#define B_7 0x16 -#define B_8 0x17 -#define B_9 0x18 -#define B_10 0x19 -#define B_11 0x1A -#define B_12 0x1B -#define B_13 0x1C -#define B_14 0x1D -#define B_15 0x1E -#define B_16 0x1F - -#define C_1 0x20 -#define C_2 0x21 -#define C_3 0x22 -#define C_4 0x23 -#define C_5 0x24 -#define C_6 0x25 -#define C_7 0x26 -#define C_8 0x27 -#define C_9 0x28 -#define C_10 0x29 -#define C_11 0x2A -#define C_12 0x2B -#define C_13 0x2C -#define C_14 0x2D -#define C_15 0x2E -#define C_16 0x2F - -#define D_1 0x30 -#define D_2 0x31 -#define D_3 0x32 -#define D_4 0x33 -#define D_5 0x34 -#define D_6 0x35 -#define D_7 0x36 -#define D_8 0x37 -#define D_9 0x38 -#define D_10 0x39 -#define D_11 0x3A -#define D_12 0x3B -#define D_13 0x3C -#define D_14 0x3D -#define D_15 0x3E -#define D_16 0x3F - -#define E_1 0x40 -#define E_2 0x41 -#define E_3 0x42 -#define E_4 0x43 -#define E_5 0x44 -#define E_6 0x45 -#define E_7 0x46 -#define E_8 0x47 -#define E_9 0x48 -#define E_10 0x49 -#define E_11 0x4A -#define E_12 0x4B -#define E_13 0x4C -#define E_14 0x4D -#define E_15 0x4E -#define E_16 0x4F - -#define F_1 0x50 -#define F_2 0x51 -#define F_3 0x52 -#define F_4 0x53 -#define F_5 0x54 -#define F_6 0x55 -#define F_7 0x56 -#define F_8 0x57 -#define F_9 0x58 -#define F_10 0x59 -#define F_11 0x5A -#define F_12 0x5B -#define F_13 0x5C -#define F_14 0x5D -#define F_15 0x5E -#define F_16 0x5F - -#define G_1 0x60 -#define G_2 0x61 -#define G_3 0x62 -#define G_4 0x63 -#define G_5 0x64 -#define G_6 0x65 -#define G_7 0x66 -#define G_8 0x67 -#define G_9 0x68 -#define G_10 0x69 -#define G_11 0x6A -#define G_12 0x6B -#define G_13 0x6C -#define G_14 0x6D -#define G_15 0x6E -#define G_16 0x6F - -#define H_1 0x70 -#define H_2 0x71 -#define H_3 0x72 -#define H_4 0x73 -#define H_5 0x74 -#define H_6 0x75 -#define H_7 0x76 -#define H_8 0x77 -#define H_9 0x78 -#define H_10 0x79 -#define H_11 0x7A -#define H_12 0x7B -#define H_13 0x7C -#define H_14 0x7D -#define H_15 0x7E -#define H_16 0x7F - -#define I_1 0x80 -#define I_2 0x81 -#define I_3 0x82 -#define I_4 0x83 -#define I_5 0x84 -#define I_6 0x85 -#define I_7 0x86 -#define I_8 0x87 -#define I_9 0x88 -#define I_10 0x89 -#define I_11 0x8A -#define I_12 0x8B -#define I_13 0x8C -#define I_14 0x8D -#define I_15 0x8E -#define I_16 0x8F - -#define J_1 0x90 -#define J_2 0x91 -#define J_3 0x92 -#define J_4 0x93 -#define J_5 0x94 -#define J_6 0x95 -#define J_7 0x96 -#define J_8 0x97 -#define J_9 0x98 -#define J_10 0x99 -#define J_11 0x9A -#define J_12 0x9B -#define J_13 0x9C -#define J_14 0x9D -#define J_15 0x9E -#define J_16 0x9F - -#define K_1 0xA0 -#define K_2 0xA1 -#define K_3 0xA2 -#define K_4 0xA3 -#define K_5 0xA4 -#define K_6 0xA5 -#define K_7 0xA6 -#define K_8 0xA7 -#define K_9 0xA8 -#define K_10 0xA9 -#define K_11 0xAA -#define K_12 0xAB -#define K_13 0xAC -#define K_14 0xAD -#define K_15 0xAE -#define K_16 0xAF - -#define L_1 0xB0 -#define L_2 0xB1 -#define L_3 0xB2 -#define L_4 0xB3 -#define L_5 0xB4 -#define L_6 0xB5 -#define L_7 0xB6 -#define L_8 0xB7 -#define L_9 0xB8 -#define L_10 0xB9 -#define L_11 0xBA -#define L_12 0xBB -#define L_13 0xBC -#define L_14 0xBD -#define L_15 0xBE -#define L_16 0xBF diff --git a/keyboards/fallacy/indicators.c b/keyboards/fallacy/indicators.c index b95786db41..41d27b0972 100755 --- a/keyboards/fallacy/indicators.c +++ b/keyboards/fallacy/indicators.c @@ -15,7 +15,7 @@ */ #include "indicators.h" -#include "drivers/led/issi/is31fl3731-simple.h" +#include "drivers/led/issi/is31fl3731-mono.h" #include "i2c_master.h" /* Set up IS31FL3731 for use in powering indicator LEDs. Absolutely overkill for this job but it was already in the design. diff --git a/keyboards/fallacy/rules.mk b/keyboards/fallacy/rules.mk index 7fa230bae2..ee1a36c910 100755 --- a/keyboards/fallacy/rules.mk +++ b/keyboards/fallacy/rules.mk @@ -13,5 +13,5 @@ AUDIO_ENABLE = no # Audio output # project specific files SRC += indicators.c \ - drivers/led/issi/is31fl3731-simple.c + drivers/led/issi/is31fl3731-mono.c I2C_DRIVER_REQUIRED = yes diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt60_a/rules.mk +++ b/keyboards/wilba_tech/wt60_a/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt65_a/rules.mk +++ b/keyboards/wilba_tech/wt65_a/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt65_b/rules.mk b/keyboards/wilba_tech/wt65_b/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt65_b/rules.mk +++ b/keyboards/wilba_tech/wt65_b/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt75_a/rules.mk b/keyboards/wilba_tech/wt75_a/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt75_a/rules.mk +++ b/keyboards/wilba_tech/wt75_a/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt75_b/rules.mk b/keyboards/wilba_tech/wt75_b/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt75_b/rules.mk +++ b/keyboards/wilba_tech/wt75_b/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt75_c/rules.mk b/keyboards/wilba_tech/wt75_c/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt75_c/rules.mk +++ b/keyboards/wilba_tech/wt75_c/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk index 9ca8e8f973..f7482c7a2f 100644 --- a/keyboards/wilba_tech/wt80_a/rules.mk +++ b/keyboards/wilba_tech/wt80_a/rules.mk @@ -11,7 +11,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality AUDIO_ENABLE = no # Audio output # project specific files -SRC = drivers/led/issi/is31fl3736-simple.c \ +SRC = drivers/led/issi/is31fl3736-mono.c \ quantum/color.c \ keyboards/wilba_tech/wt_mono_backlight.c \ keyboards/wilba_tech/wt_main.c diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c index e218f0af4b..c954ae7c03 100644 --- a/keyboards/wilba_tech/wt_mono_backlight.c +++ b/keyboards/wilba_tech/wt_mono_backlight.c @@ -33,7 +33,7 @@ #error VIA_EEPROM_CUSTOM_CONFIG_SIZE was not defined to store backlight_config struct #endif -#include "drivers/led/issi/is31fl3736-simple.h" +#include "drivers/led/issi/is31fl3736-mono.h" #define BACKLIGHT_EFFECT_MAX 3 diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index 79d3cebead..d792600e1f 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -6,27 +6,27 @@ #include #if defined(LED_MATRIX_IS31FL3218) -# include "is31fl3218-simple.h" +# include "is31fl3218-mono.h" #elif defined(LED_MATRIX_IS31FL3731) -# include "is31fl3731-simple.h" +# include "is31fl3731-mono.h" #elif defined(LED_MATRIX_IS31FL3733) -# include "is31fl3733-simple.h" +# include "is31fl3733-mono.h" #elif defined(LED_MATRIX_IS31FL3736) -# include "is31fl3736-simple.h" +# include "is31fl3736-mono.h" #elif defined(LED_MATRIX_IS31FL3737) -# include "is31fl3737-simple.h" +# include "is31fl3737-mono.h" #elif defined(LED_MATRIX_IS31FL3741) -# include "is31fl3741-simple.h" +# include "is31fl3741-mono.h" #elif defined(LED_MATRIX_IS31FL3742A) -# include "is31fl3742a-simple.h" +# include "is31fl3742a-mono.h" #elif defined(LED_MATRIX_IS31FL3743A) -# include "is31fl3743a-simple.h" +# include "is31fl3743a-mono.h" #elif defined(LED_MATRIX_IS31FL3745) -# include "is31fl3745-simple.h" +# include "is31fl3745-mono.h" #elif defined(LED_MATRIX_IS31FL3746A) -# include "is31fl3746a-simple.h" +# include "is31fl3746a-mono.h" #elif defined(LED_MATRIX_SNLED27351) -# include "snled27351-simple.h" +# include "snled27351-mono.h" #endif typedef struct { -- cgit v1.2.3 From ce05dc6fa1ff0d508af1e5e79eeeb6359736df51 Mon Sep 17 00:00:00 2001 From: Marcel Robitaille Date: Tue, 9 Jan 2024 05:16:50 -0500 Subject: Add option for auto mouse movement threshold (#21398) Fixes #21396 --- docs/feature_pointing_device.md | 1 + quantum/pointing_device/pointing_device_auto_mouse.c | 15 +++++++++++---- quantum/pointing_device/pointing_device_auto_mouse.h | 10 ++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) (limited to 'quantum') diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md index 6fddf1fdda..c18eb52aab 100644 --- a/docs/feature_pointing_device.md +++ b/docs/feature_pointing_device.md @@ -728,6 +728,7 @@ There are a few ways to control the auto mouse feature with both `config.h` opti | `AUTO_MOUSE_TIME` | (Optional) Time layer remains active after activation | _ideally_ (250-1000) | _ms_ | `650 ms` | | `AUTO_MOUSE_DELAY` | (Optional) Lockout time after non-mouse key is pressed | _ideally_ (100-1000) | _ms_ | `TAPPING_TERM` or `200 ms` | | `AUTO_MOUSE_DEBOUNCE` | (Optional) Time delay from last activation to next update | _ideally_ (10 - 100) | _ms_ | `25 ms` | +| `AUTO_MOUSE_THRESHOLD` | (Optional) Amount of mouse movement required to switch layers | 0 - | _units_ | `10 units` | ### Adding mouse keys diff --git a/quantum/pointing_device/pointing_device_auto_mouse.c b/quantum/pointing_device/pointing_device_auto_mouse.c index 3135b9e531..1b11fffedb 100644 --- a/quantum/pointing_device/pointing_device_auto_mouse.c +++ b/quantum/pointing_device/pointing_device_auto_mouse.c @@ -17,6 +17,7 @@ #ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE +# include # include # include "pointing_device_auto_mouse.h" # include "debug.h" @@ -217,7 +218,11 @@ void auto_mouse_layer_off(void) { * @return bool of pointing_device activation */ __attribute__((weak)) bool auto_mouse_activation(report_mouse_t mouse_report) { - return mouse_report.x != 0 || mouse_report.y != 0 || mouse_report.h != 0 || mouse_report.v != 0 || mouse_report.buttons; + auto_mouse_context.total_mouse_movement.x += mouse_report.x; + auto_mouse_context.total_mouse_movement.y += mouse_report.y; + auto_mouse_context.total_mouse_movement.h += mouse_report.h; + auto_mouse_context.total_mouse_movement.v += mouse_report.v; + return abs(auto_mouse_context.total_mouse_movement.x) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.y) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.h) > AUTO_MOUSE_THRESHOLD || abs(auto_mouse_context.total_mouse_movement.v) > AUTO_MOUSE_THRESHOLD || mouse_report.buttons; } /** @@ -235,14 +240,16 @@ void pointing_device_task_auto_mouse(report_mouse_t mouse_report) { // update activation and reset debounce auto_mouse_context.status.is_activated = auto_mouse_activation(mouse_report); if (is_auto_mouse_active()) { - auto_mouse_context.timer.active = timer_read(); - auto_mouse_context.timer.delay = 0; + auto_mouse_context.total_mouse_movement = (total_mouse_movement_t){.x = 0, .y = 0, .h = 0, .v = 0}; + auto_mouse_context.timer.active = timer_read(); + auto_mouse_context.timer.delay = 0; if (!layer_state_is((AUTO_MOUSE_TARGET_LAYER))) { layer_on((AUTO_MOUSE_TARGET_LAYER)); } } else if (layer_state_is((AUTO_MOUSE_TARGET_LAYER)) && timer_elapsed(auto_mouse_context.timer.active) > auto_mouse_context.config.timeout) { layer_off((AUTO_MOUSE_TARGET_LAYER)); - auto_mouse_context.timer.active = 0; + auto_mouse_context.timer.active = 0; + auto_mouse_context.total_mouse_movement = (total_mouse_movement_t){.x = 0, .y = 0, .h = 0, .v = 0}; } } diff --git a/quantum/pointing_device/pointing_device_auto_mouse.h b/quantum/pointing_device/pointing_device_auto_mouse.h index 1343855e00..904f18b68e 100644 --- a/quantum/pointing_device/pointing_device_auto_mouse.h +++ b/quantum/pointing_device/pointing_device_auto_mouse.h @@ -42,8 +42,17 @@ #ifndef AUTO_MOUSE_DEBOUNCE # define AUTO_MOUSE_DEBOUNCE 25 #endif +#ifndef AUTO_MOUSE_THRESHOLD +# define AUTO_MOUSE_THRESHOLD 10 +#endif /* data structure */ +typedef struct { + mouse_xy_report_t x; + mouse_xy_report_t y; + int8_t v; + int8_t h; +} total_mouse_movement_t; typedef struct { struct { bool is_enabled; @@ -60,6 +69,7 @@ typedef struct { bool is_toggled; int8_t mouse_key_tracker; } status; + total_mouse_movement_t total_mouse_movement; } auto_mouse_context_t; /* ----------Set up and control------------------------------------------------------------------------------ */ -- cgit v1.2.3 From 8b48f0dea36c192a1a98a2ead3b72412e23d08d6 Mon Sep 17 00:00:00 2001 From: 3araht Date: Tue, 9 Jan 2024 20:05:30 +0900 Subject: MIDI sustain effect fix on qmk 0.22.2 (#22114) --- quantum/process_keycode/process_midi.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'quantum') diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 377fcb69e2..5ecd897d16 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -38,7 +38,7 @@ void process_midi_all_notes_off(void) { #endif // MIDI_BASIC #ifdef MIDI_ADVANCED -static uint8_t tone_status[2][MIDI_TONE_COUNT]; +static uint8_t tone_status[MIDI_TONE_COUNT]; static uint8_t midi_modulation; static int8_t midi_modulation_step; @@ -57,8 +57,7 @@ void midi_init(void) { midi_config.modulation_interval = 8; for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) { - tone_status[0][i] = MIDI_INVALID_NOTE; - tone_status[1][i] = 0; + tone_status[i] = MIDI_INVALID_NOTE; } midi_modulation = 0; @@ -77,21 +76,19 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = midi_config.velocity; if (record->event.pressed) { - uint8_t note = midi_compute_note(keycode); - midi_send_noteon(&midi_device, channel, note, velocity); - dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); - tone_status[1][tone] += 1; - if (tone_status[0][tone] == MIDI_INVALID_NOTE) { - tone_status[0][tone] = note; + if (tone_status[tone] == MIDI_INVALID_NOTE) { + uint8_t note = midi_compute_note(keycode); + midi_send_noteon(&midi_device, channel, note, velocity); + dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); + tone_status[tone] = note; } } else { - uint8_t note = tone_status[0][tone]; - tone_status[1][tone] -= 1; - if (tone_status[1][tone] == 0) { + uint8_t note = tone_status[tone]; + if (note != MIDI_INVALID_NOTE) { midi_send_noteoff(&midi_device, channel, note, velocity); dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); - tone_status[0][tone] = MIDI_INVALID_NOTE; } + tone_status[tone] = MIDI_INVALID_NOTE; } return false; } -- cgit v1.2.3 From 1f6dfd19cf93b365c6ad5227d2a8a054ff30cc24 Mon Sep 17 00:00:00 2001 From: Paul Landers Date: Tue, 9 Jan 2024 06:07:10 -0500 Subject: Ignore space cadet key release when caps word is active (#21721) --- quantum/process_keycode/process_caps_word.c | 4 ++++ quantum/process_keycode/process_space_cadet.c | 6 +++++- quantum/process_keycode/process_space_cadet.h | 1 + tests/caps_word/test_caps_word.cpp | 6 +++--- 4 files changed, 13 insertions(+), 4 deletions(-) (limited to 'quantum') diff --git a/quantum/process_keycode/process_caps_word.c b/quantum/process_keycode/process_caps_word.c index 1088c8f76c..b8fb868c6d 100644 --- a/quantum/process_keycode/process_caps_word.c +++ b/quantum/process_keycode/process_caps_word.c @@ -14,6 +14,7 @@ #include "process_caps_word.h" #include "process_auto_shift.h" +#include "process_space_cadet.h" #include "caps_word.h" #include "keycodes.h" #include "quantum_keycodes.h" @@ -110,6 +111,9 @@ bool process_caps_word(uint16_t keycode, keyrecord_t* record) { # endif // COMMAND_ENABLE ) { caps_word_on(); +# ifdef SPACE_CADET_ENABLE + reset_space_cadet(); +# endif // SPACE_CADET_ENABLE } # endif // defined(COMMAND_ENABLE) && !defined(IS_COMMAND) #endif // BOTH_SHIFTS_TURNS_ON_CAPS_WORD diff --git a/quantum/process_keycode/process_space_cadet.c b/quantum/process_keycode/process_space_cadet.c index f948ad6238..3e280d57d9 100644 --- a/quantum/process_keycode/process_space_cadet.c +++ b/quantum/process_keycode/process_space_cadet.c @@ -157,10 +157,14 @@ bool process_space_cadet(uint16_t keycode, keyrecord_t *record) { } default: { if (record->event.pressed) { - sc_last = 0; + reset_space_cadet(); } break; } } return true; } + +void reset_space_cadet() { + sc_last = 0; +} diff --git a/quantum/process_keycode/process_space_cadet.h b/quantum/process_keycode/process_space_cadet.h index 6d10051532..9d254e26fd 100644 --- a/quantum/process_keycode/process_space_cadet.h +++ b/quantum/process_keycode/process_space_cadet.h @@ -21,3 +21,4 @@ void perform_space_cadet(keyrecord_t *record, uint16_t sc_keycode, uint8_t holdMod, uint8_t tapMod, uint8_t keycode); bool process_space_cadet(uint16_t keycode, keyrecord_t *record); +void reset_space_cadet(void); diff --git a/tests/caps_word/test_caps_word.cpp b/tests/caps_word/test_caps_word.cpp index 802f1e960e..28d86e9324 100644 --- a/tests/caps_word/test_caps_word.cpp +++ b/tests/caps_word/test_caps_word.cpp @@ -423,8 +423,8 @@ TEST_P(CapsWordBothShifts, PressLRLR) { run_one_scan_loop(); right_shift.press(); - // For mod-tap and Space Cadet keys, wait for the tapping term. - if (left_shift.code == LSFT_T(KC_A) || left_shift.code == QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN) { + // For mod-tap, wait for the tapping term. + if (left_shift.code == LSFT_T(KC_A)) { idle_for(TAPPING_TERM); } @@ -461,7 +461,7 @@ TEST_P(CapsWordBothShifts, PressLRRL) { run_one_scan_loop(); right_shift.press(); - if (left_shift.code == LSFT_T(KC_A) || left_shift.code == QK_SPACE_CADET_LEFT_SHIFT_PARENTHESIS_OPEN) { + if (left_shift.code == LSFT_T(KC_A)) { idle_for(TAPPING_TERM); } run_one_scan_loop(); -- cgit v1.2.3 From e67d2c2f6fd3a50ac109eabbe93985f4e055963a Mon Sep 17 00:00:00 2001 From: Nebuleon Date: Tue, 9 Jan 2024 06:11:59 -0500 Subject: Add Canadian French input locale (#21456) Co-authored-by: Ryan --- .../extras/keycodes_canadian_french_0.0.1.hjson | 407 +++++++++++++++++++++ docs/reference_keymap_extras.md | 1 + quantum/keymap_extras/keymap_canadian_french.h | 122 ++++++ quantum/keymap_extras/sendstring_canadian_french.h | 120 ++++++ 4 files changed, 650 insertions(+) create mode 100644 data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson create mode 100644 quantum/keymap_extras/keymap_canadian_french.h create mode 100644 quantum/keymap_extras/sendstring_canadian_french.h (limited to 'quantum') diff --git a/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson new file mode 100644 index 0000000000..6fefd11f59 --- /dev/null +++ b/data/constants/keycodes/extras/keycodes_canadian_french_0.0.1.hjson @@ -0,0 +1,407 @@ +{ + "aliases": { +/* + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ ¸ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ` │ < │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ « │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ É │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "KC_GRV": { + "key": "FR_HASH", + "label": "#", + } + "KC_1": { + "key": "FR_1", + "label": "1", + } + "KC_2": { + "key": "FR_2", + "label": "2", + } + "KC_3": { + "key": "FR_3", + "label": "3", + } + "KC_4": { + "key": "FR_4", + "label": "4", + } + "KC_5": { + "key": "FR_5", + "label": "5", + } + "KC_6": { + "key": "FR_6", + "label": "6", + } + "KC_7": { + "key": "FR_7", + "label": "7", + } + "KC_8": { + "key": "FR_8", + "label": "8", + } + "KC_9": { + "key": "FR_9", + "label": "9", + } + "KC_0": { + "key": "FR_0", + "label": "0", + } + "KC_MINS": { + "key": "FR_MINS", + "label": "-", + } + "KC_EQL": { + "key": "FR_EQL", + "label": "=", + } + "KC_Q": { + "key": "FR_Q", + "label": "Q", + } + "KC_W": { + "key": "FR_W", + "label": "W", + } + "KC_E": { + "key": "FR_E", + "label": "E", + } + "KC_R": { + "key": "FR_R", + "label": "R", + } + "KC_T": { + "key": "FR_T", + "label": "T", + } + "KC_Y": { + "key": "FR_Y", + "label": "Y", + } + "KC_U": { + "key": "FR_U", + "label": "U", + } + "KC_I": { + "key": "FR_I", + "label": "I", + } + "KC_O": { + "key": "FR_O", + "label": "O", + } + "KC_P": { + "key": "FR_P", + "label": "P", + } + "KC_LBRC": { + "key": "FR_DCIR", + "label": "^ (dead)", + } + "KC_RBRC": { + "key": "FR_CEDL", + "label": "¸ (dead)", + } + "KC_A": { + "key": "FR_A", + "label": "A", + } + "KC_S": { + "key": "FR_S", + "label": "S", + } + "KC_D": { + "key": "FR_D", + "label": "D", + } + "KC_F": { + "key": "FR_F", + "label": "F", + } + "KC_G": { + "key": "FR_G", + "label": "G", + } + "KC_H": { + "key": "FR_H", + "label": "H", + } + "KC_J": { + "key": "FR_J", + "label": "J", + } + "KC_K": { + "key": "FR_K", + "label": "K", + } + "KC_L": { + "key": "FR_L", + "label": "L", + } + "KC_SCLN": { + "key": "FR_SCLN", + "label": ";", + } + "KC_QUOT": { + "key": "FR_DGRV", + "label": "` (dead)", + } + "KC_NUHS": { + "key": "FR_LABK", + "label": "<", + } + "KC_NUBS": { + "key": "FR_LDAQ", + "label": "«", + } + "KC_Z": { + "key": "FR_Z", + "label": "Z", + } + "KC_X": { + "key": "FR_X", + "label": "X", + } + "KC_C": { + "key": "FR_C", + "label": "C", + } + "KC_V": { + "key": "FR_V", + "label": "V", + } + "KC_B": { + "key": "FR_B", + "label": "B", + } + "KC_N": { + "key": "FR_N", + "label": "N", + } + "KC_M": { + "key": "FR_M", + "label": "M", + } + "KC_COMM": { + "key": "FR_COMM", + "label": ",", + } + "KC_DOT": { + "key": "FR_DOT", + "label": ".", + } + "KC_SLSH": { + "key": "FR_EACU", + "label": "É", + } +/* Shifted symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ | │ ! │ " │ / │ $ │ % │ ? │ & │ * │ ( │ ) │ _ │ + │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ : │ │ > │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ » │ │ │ │ │ │ │ │ ' │ │ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "S(FR_HASH)": { + "key": "FR_PIPE", + "label": "|", + } + "S(FR_1)": { + "key": "FR_EXLM", + "label": "!", + } + "S(FR_2)": { + "key": "FR_DQUO", + "label": "\"", + } + "S(FR_3)": { + "key": "FR_SLSH", + "label": "/", + } + "S(FR_4)": { + "key": "FR_DLR", + "label": "$", + } + "S(FR_5)": { + "key": "FR_PERC", + "label": "%", + } + "S(FR_6)": { + "key": "FR_QUES", + "label": "?", + } + "S(FR_7)": { + "key": "FR_AMPR", + "label": "&", + } + "S(FR_8)": { + "key": "FR_ASTR", + "label": "*", + } + "S(FR_9)": { + "key": "FR_LPRN", + "label": "(", + } + "S(FR_0)": { + "key": "FR_RPRN", + "label": ")", + } + "S(FR_MINS)": { + "key": "FR_UNDS", + "label": "_", + } + "S(FR_EQL)": { + "key": "FR_PLUS", + "label": "+", + } + "S(FR_CEDL)": { + "key": "FR_DIAE", + "label": "¨ (dead)", + } + "S(FR_SCLN)": { + "key": "FR_COLN", + "label": ":", + } + "S(FR_LABK)": { + "key": "FR_RABK", + "label": ">", + } + "S(FR_LDAQ)": { + "key": "FR_RDAQ", + "label": "»", + } + "S(FR_COMM)": { + "key": "FR_QUOT", + "label": "'", + } +/* AltGr symbols + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ + * │ \ │ ± │ @ │ £ │ ¢ │ ¤ │ ¬ │ ¦ │ ² │ ³ │ ¼ │ ½ │ ¾ │ │ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ + * │ │ │ │ │ │ │ │ │ │ § │ ¶ │ [ │ ] │ │ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ + * │ │ │ │ │ │ │ │ │ │ │ ~ │ { │ } │ │ + * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ + * │ │ ° │ │ │ │ │ │ │ µ │ ¯ │ - │ ´ │ │ + * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ + * │ │ │ │ │ │ │ │ │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ + */ + "ALGR(FR_HASH)": { + "key": "FR_BSLS", + "label": "\\", + } + "ALGR(FR_1)": { + "key": "FR_PLMN", + "label": "±", + } + "ALGR(FR_2)": { + "key": "FR_AT", + "label": "@", + } + "ALGR(FR_3)": { + "key": "FR_PND", + "label": "£", + } + "ALGR(FR_4)": { + "key": "FR_CENT", + "label": "¢", + } + "ALGR(FR_5)": { + "key": "FR_CURR", + "label": "¤", + } + "ALGR(FR_6)": { + "key": "FR_NOT", + "label": "¬", + } + "ALGR(FR_7)": { + "key": "FR_BRKP", + "label": "¦", + } + "ALGR(FR_8)": { + "key": "FR_SUP2", + "label": "²", + } + "ALGR(FR_9)": { + "key": "FR_SUP3", + "label": "³", + } + "ALGR(FR_0)": { + "key": "FR_QRTR", + "label": "¼", + } + "ALGR(FR_MINS)": { + "key": "FR_HALF", + "label": "½", + } + "ALGR(FR_EQL)": { + "key": "FR_TQTR", + "label": "¾", + } + "ALGR(FR_O)": { + "key": "FR_SECT", + "label": "§", + } + "ALGR(FR_P)": { + "key": "FR_PARA", + "label": "¶", + } + "ALGR(FR_DCIR)": { + "key": "FR_LBRC", + "label": "[", + } + "ALGR(FR_CEDL)": { + "key": "FR_RBRC", + "label": "]", + } + "ALGR(FR_SCLN)": { + "key": "FR_TILD", + "label": "~", + } + "ALGR(FR_DGRV)": { + "key": "FR_LCBR", + "label": "{", + } + "ALGR(FR_LABK)": { + "key": "FR_RCBR", + "label": "}", + } + "ALGR(FR_LDAQ)": { + "key": "FR_DEG", + "label": "°", + } + "ALGR(FR_M)": { + "key": "FR_MICR", + "label": "µ", + } + "ALGR(FR_COMM)": { + "key": "FR_MACR", + "label": "¯", + } + "ALGR(FR_DOT)": { + "key": "FR_SHYP", + "label": "­ (soft hyphen)", + } + "ALGR(FR_EACU)": { + "key": "FR_ACUT", + "label": "´ (dead)", + } + } +} diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md index 0a51c85853..cf2ab28876 100644 --- a/docs/reference_keymap_extras.md +++ b/docs/reference_keymap_extras.md @@ -36,6 +36,7 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q |French (AFNOR) |`keymap_french_afnor.h` |`sendstring_french_afnor.h` | |French (BÉPO) |`keymap_bepo.h` |`sendstring_bepo.h` | |French (Belgium) |`keymap_belgian.h` |`sendstring_belgian.h` | +|French (Canada) |`keymap_canadian_french.h` |`sendstring_canadian_french.h` | |French (Switzerland) |`keymap_swiss_fr.h` |`sendstring_swiss_fr.h` | |French (macOS, ISO) |`keymap_french_mac_iso.h` |`sendstring_french_mac_iso.h` | |German |`keymap_german.h` |`sendstring_german.h` | diff --git a/quantum/keymap_extras/keymap_canadian_french.h b/quantum/keymap_extras/keymap_canadian_french.h new file mode 100644 index 0000000000..a61d48d3ed --- /dev/null +++ b/quantum/keymap_extras/keymap_canadian_french.h @@ -0,0 +1,122 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +/******************************************************************************* + 88888888888 888 d8b .d888 d8b 888 d8b + 888 888 Y8P d88P" Y8P 888 Y8P + 888 888 888 888 + 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b + 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K + 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b. + 888 888 888 888 X88 888 888 888 Y8b. 888 X88 + 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P' + 888 888 + 888 888 + 888 888 + .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888 + d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888 + 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888 + Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888 + "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888 + 888 + Y8b d88P + "Y88P" +*******************************************************************************/ + +#pragma once +#include "keycodes.h" +// clang-format off + +// Aliases +#define FR_HASH KC_GRV // # +#define FR_1 KC_1 // 1 +#define FR_2 KC_2 // 2 +#define FR_3 KC_3 // 3 +#define FR_4 KC_4 // 4 +#define FR_5 KC_5 // 5 +#define FR_6 KC_6 // 6 +#define FR_7 KC_7 // 7 +#define FR_8 KC_8 // 8 +#define FR_9 KC_9 // 9 +#define FR_0 KC_0 // 0 +#define FR_MINS KC_MINS // - +#define FR_EQL KC_EQL // = +#define FR_Q KC_Q // Q +#define FR_W KC_W // W +#define FR_E KC_E // E +#define FR_R KC_R // R +#define FR_T KC_T // T +#define FR_Y KC_Y // Y +#define FR_U KC_U // U +#define FR_I KC_I // I +#define FR_O KC_O // O +#define FR_P KC_P // P +#define FR_DCIR KC_LBRC // ^ (dead) +#define FR_CEDL KC_RBRC // ¸ (dead) +#define FR_A KC_A // A +#define FR_S KC_S // S +#define FR_D KC_D // D +#define FR_F KC_F // F +#define FR_G KC_G // G +#define FR_H KC_H // H +#define FR_J KC_J // J +#define FR_K KC_K // K +#define FR_L KC_L // L +#define FR_SCLN KC_SCLN // ; +#define FR_DGRV KC_QUOT // ` (dead) +#define FR_LABK KC_NUHS // < +#define FR_LDAQ KC_NUBS // « +#define FR_Z KC_Z // Z +#define FR_X KC_X // X +#define FR_C KC_C // C +#define FR_V KC_V // V +#define FR_B KC_B // B +#define FR_N KC_N // N +#define FR_M KC_M // M +#define FR_COMM KC_COMM // , +#define FR_DOT KC_DOT // . +#define FR_EACU KC_SLSH // É +#define FR_PIPE S(FR_HASH) // | +#define FR_EXLM S(FR_1) // ! +#define FR_DQUO S(FR_2) // " +#define FR_SLSH S(FR_3) // / +#define FR_DLR S(FR_4) // $ +#define FR_PERC S(FR_5) // % +#define FR_QUES S(FR_6) // ? +#define FR_AMPR S(FR_7) // & +#define FR_ASTR S(FR_8) // * +#define FR_LPRN S(FR_9) // ( +#define FR_RPRN S(FR_0) // ) +#define FR_UNDS S(FR_MINS) // _ +#define FR_PLUS S(FR_EQL) // + +#define FR_DIAE S(FR_CEDL) // ¨ (dead) +#define FR_COLN S(FR_SCLN) // : +#define FR_RABK S(FR_LABK) // > +#define FR_RDAQ S(FR_LDAQ) // » +#define FR_QUOT S(FR_COMM) // ' +#define FR_BSLS ALGR(FR_HASH) // (backslash) +#define FR_PLMN ALGR(FR_1) // ± +#define FR_AT ALGR(FR_2) // @ +#define FR_PND ALGR(FR_3) // £ +#define FR_CENT ALGR(FR_4) // ¢ +#define FR_CURR ALGR(FR_5) // ¤ +#define FR_NOT ALGR(FR_6) // ¬ +#define FR_BRKP ALGR(FR_7) // ¦ +#define FR_SUP2 ALGR(FR_8) // ² +#define FR_SUP3 ALGR(FR_9) // ³ +#define FR_QRTR ALGR(FR_0) // ¼ +#define FR_HALF ALGR(FR_MINS) // ½ +#define FR_TQTR ALGR(FR_EQL) // ¾ +#define FR_SECT ALGR(FR_O) // § +#define FR_PARA ALGR(FR_P) // ¶ +#define FR_LBRC ALGR(FR_DCIR) // [ +#define FR_RBRC ALGR(FR_CEDL) // ] +#define FR_TILD ALGR(FR_SCLN) // ~ +#define FR_LCBR ALGR(FR_DGRV) // { +#define FR_RCBR ALGR(FR_LABK) // } +#define FR_DEG ALGR(FR_LDAQ) // ° +#define FR_MICR ALGR(FR_M) // µ +#define FR_MACR ALGR(FR_COMM) // ¯ +#define FR_SHYP ALGR(FR_DOT) // ­ (soft hyphen) +#define FR_ACUT ALGR(FR_EACU) // ´ (dead) + diff --git a/quantum/keymap_extras/sendstring_canadian_french.h b/quantum/keymap_extras/sendstring_canadian_french.h new file mode 100644 index 0000000000..2abba3a9d3 --- /dev/null +++ b/quantum/keymap_extras/sendstring_canadian_french.h @@ -0,0 +1,120 @@ +/* Copyright 2023 Nebuleon + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// Sendstring lookup tables for Canadian French layouts + +#pragma once + +#include "keymap_canadian_french.h" +#include "send_string.h" + +// clang-format off + +const uint8_t ascii_to_shift_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 1, 1, 0, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 1), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 1, 1), + KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1), + KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0) +}; + +const uint8_t ascii_to_altgr_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0) +}; + +const uint8_t ascii_to_dead_lut[16] PROGMEM = { + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 1, 0), + KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0), + KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0) +}; + +const uint8_t ascii_to_keycode_lut[128] PROGMEM = { + // NUL SOH STX ETX EOT ENQ ACK BEL + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // BS TAB LF VT FF CR SO SI + KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // DLE DC1 DC2 DC3 DC4 NAK SYN ETB + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // CAN EM SUB ESC FS GS RS US + XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + + // ! " # $ % & ' + KC_SPC, FR_1, FR_2, FR_HASH, FR_4, FR_5, FR_7, FR_COMM, + // ( ) * + , - . / + FR_9, FR_0, FR_8, FR_EQL, FR_COMM, FR_MINS, FR_DOT, FR_3, + // 0 1 2 3 4 5 6 7 + FR_0, FR_1, FR_2, FR_3, FR_4, FR_5, FR_6, FR_7, + // 8 9 : ; < = > ? + FR_8, FR_9, FR_SCLN, FR_SCLN, FR_LABK, FR_EQL, FR_LABK, FR_6, + // @ A B C D E F G + FR_2, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G, + // H I J K L M N O + FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O, + // P Q R S T U V W + FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W, + // X Y Z [ \ ] ^ _ + FR_X, FR_Y, FR_Z, FR_DCIR, FR_HASH, FR_CEDL, FR_DCIR, FR_MINS, + // ` a b c d e f g + FR_DGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G, + // h i j k l m n o + FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O, + // p q r s t u v w + FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W, + // x y z { | } ~ DEL + FR_X, FR_Y, FR_Z, FR_DGRV, FR_HASH, FR_LABK, FR_SCLN, KC_DEL +}; -- cgit v1.2.3 From f39386a112c440c02c7003d59b1624590140dd07 Mon Sep 17 00:00:00 2001 From: フィルターペーパー Date: Tue, 9 Jan 2024 19:12:42 +0800 Subject: Solid reactive: improve fading effect (#22656) --- quantum/rgb_matrix/animations/solid_reactive_anim.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'quantum') diff --git a/quantum/rgb_matrix/animations/solid_reactive_anim.h b/quantum/rgb_matrix/animations/solid_reactive_anim.h index edf6041350..e18ffb5f2b 100644 --- a/quantum/rgb_matrix/animations/solid_reactive_anim.h +++ b/quantum/rgb_matrix/animations/solid_reactive_anim.h @@ -7,7 +7,7 @@ static HSV SOLID_REACTIVE_math(HSV hsv, uint16_t offset) { # ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE hsv.h = scale16by8(g_rgb_timer, qadd8(rgb_matrix_config.speed, 8) >> 4); # endif - hsv.h += qsub8(130, offset); + hsv.h += scale8(255 - offset, 64); return hsv; } -- cgit v1.2.3 From 6cdc00d0464cdde528673bdadcff4be89fab0bb4 Mon Sep 17 00:00:00 2001 From: QMK Bot Date: Tue, 9 Jan 2024 06:18:34 -0500 Subject: [CI] Regenerate Files (#22872) --- quantum/keymap_extras/keymap_canadian_french.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'quantum') diff --git a/quantum/keymap_extras/keymap_canadian_french.h b/quantum/keymap_extras/keymap_canadian_french.h index a61d48d3ed..63c9166a31 100644 --- a/quantum/keymap_extras/keymap_canadian_french.h +++ b/quantum/keymap_extras/keymap_canadian_french.h @@ -1,4 +1,4 @@ -// Copyright 2023 QMK +// Copyright 2024 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* -- cgit v1.2.3 From ccec4867c80d25548871e2534d2ca6205891824a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Tue, 9 Jan 2024 11:24:53 +0000 Subject: Align `SPLIT_HAND_MATRIX_GRID` left/right logic with `SPLIT_HAND_PIN` (#22775) --- docs/config_options.md | 2 +- docs/feature_split_keyboard.md | 6 +++--- docs/ja/config_options.md | 2 +- docs/ja/feature_split_keyboard.md | 4 ++-- keyboards/bandominedoni/bandominedoni.c | 6 +++--- keyboards/bandominedoni/config.h | 1 + keyboards/helix/rev3_4rows/config.h | 1 - keyboards/helix/rev3_5rows/config.h | 1 - keyboards/hillside/46/0_1/config.h | 1 + keyboards/hillside/52/0_1/config.h | 1 + keyboards/keychron/q11/config.h | 1 - keyboards/pisces/config.h | 2 ++ keyboards/rate/pistachio/rev2/config.h | 1 + keyboards/splitkb/kyria/rev2/config.h | 1 - quantum/split_common/split_util.c | 6 +++--- 15 files changed, 19 insertions(+), 17 deletions(-) (limited to 'quantum') diff --git a/docs/config_options.md b/docs/config_options.md index bc28f603fa..045d9c0747 100644 --- a/docs/config_options.md +++ b/docs/config_options.md @@ -275,7 +275,7 @@ There are a few different ways to set handedness for split keyboards (listed in * For using high/low pin to determine handedness, low = right hand, high = left hand. Replace `B7` with the pin you are using. This is optional, and if you leave `SPLIT_HAND_PIN` undefined, then you can still use the EE_HANDS method or MASTER_LEFT / MASTER_RIGHT defines like the stock Let's Split uses. * `#define SPLIT_HAND_MATRIX_GRID ,` - * The handedness is determined by using the intersection of the keyswitches in the key matrix, which does not exist. Normally, when this intersection is shorted (level low), it is considered left. If you define `#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT`, it is determined to be right when the level is low. + * The handedness is determined by using the intersection of the keyswitches in the key matrix, which does not exist. Normally, when this intersection is shorted (level low), it is considered right. If you define `#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT`, it is determined to be left when the level is low. * `#define EE_HANDS` (only works if `SPLIT_HAND_PIN` and `SPLIT_HAND_MATRIX_GRID` are not defined) * Reads the handedness value stored in the EEPROM after `eeprom-lefthand.eep`/`eeprom-righthand.eep` has been flashed to their respective halves. diff --git a/docs/feature_split_keyboard.md b/docs/feature_split_keyboard.md index 8f695a2b7c..59159cb3fa 100644 --- a/docs/feature_split_keyboard.md +++ b/docs/feature_split_keyboard.md @@ -119,12 +119,12 @@ You can configure the firmware to read key matrix pins on the controller to dete The first pin is the output pin and the second is the input pin. -Some keyboards have unused intersections in the key matrix. This setting uses one of these unused intersections to determine the handness. +Some keyboards have unused intersections in the key matrix. This setting uses one of these unused intersections to determine the handedness. -Normally, when a diode is connected to an intersection, it is judged to be left. If you add the following definition, it will be judged to be right. +Normally, when a diode is connected to an intersection, it is judged to be right. If you add the following definition, it will be judged to be left. ```c -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT ``` Note that adding a diode at a previously unused intersection will effectively tell the firmware that there is a key held down at that point. You can instruct qmk to ignore that intersection by defining `MATRIX_MASKED` and then defining a `matrix_row_t matrix_mask[MATRIX_ROWS]` array in your keyboard config. Each bit of a single value (starting form the least-significant bit) is used to tell qmk whether or not to pay attention to key presses at that intersection. diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md index 5e98da5eee..a349081d6a 100644 --- a/docs/ja/config_options.md +++ b/docs/ja/config_options.md @@ -248,7 +248,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。 * high/low ピンを使って左右を決定します。low = 右手、high = 左手。`B7` を使っているピンに置き換えます。これはオプションで、`SPLIT_HAND_PIN` が未定義のままである場合、EE_HANDS メソッドまたは標準の Let's Splitが使っている MASTER_LEFT / MASTER_RIGHT 定義をまだ使うことができます。 * `#define SPLIT_HAND_MATRIX_GRID ,` - * 左右はキーマトリックスのキースイッチが存在しない交点を使って決定されます。通常、この交点が短絡している(ローレベル)のときに左側と見なされます。もし `#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT` が定義されている場合は、ローレベルの時に右側と決定されます。 + * 左右はキーマトリックスのキースイッチが存在しない交点を使って決定されます。通常、この交点が短絡している(ローレベル)のときに右側と見なされます。もし `#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT` が定義されている場合は、ローレベルの時に左側と決定されます。 * `#define EE_HANDS` (`SPLIT_HAND_PIN` と `SPLIT_HAND_MATRIX_GRID` が定義されていない場合のみ動作します) * `eeprom-lefthand.eep`/`eeprom-righthand.eep` がそれぞれの半分に書き込まれた後で、EEPROM 内に格納されている左右の設定の値を読み込みます。 diff --git a/docs/ja/feature_split_keyboard.md b/docs/ja/feature_split_keyboard.md index 3bdf96d1c7..c84b782d87 100644 --- a/docs/ja/feature_split_keyboard.md +++ b/docs/ja/feature_split_keyboard.md @@ -108,10 +108,10 @@ SPLIT_TRANSPORT = custom キーマトリックスに未使用の交点があるキーボードがあります。この設定は、左右の決定にこれらの未使用の交点の1つを使用します。 -通常、ダイオードが交点に接続されている場合、左側と判断されます。次の定義を追加すると、右側と判断されます。 +通常、ダイオードが交点に接続されている場合、右側と判断されます。次の定義を追加すると、左側と判断されます。 ```c -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT ``` #### EEPROM による左右の設定 diff --git a/keyboards/bandominedoni/bandominedoni.c b/keyboards/bandominedoni/bandominedoni.c index 47be95a62b..2884e41c9c 100644 --- a/keyboards/bandominedoni/bandominedoni.c +++ b/keyboards/bandominedoni/bandominedoni.c @@ -97,11 +97,11 @@ static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN; hand_side = readPin(SPLIT_HAND_PIN) ? LEFT : RIGHT; return (hand_side == LEFT); #elif defined(SPLIT_HAND_MATRIX_GRID) -# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT - hand_side = peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID) ? LEFT : RIGHT; +# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT + hand_side = peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID) ? RIGHT : LEFT; return (hand_side == LEFT); # else - hand_side = peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID) ? RIGHT : LEFT; + hand_side = peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID) ? LEFT : RIGHT; return (hand_side == LEFT); # endif #elif defined(EE_HANDS) diff --git a/keyboards/bandominedoni/config.h b/keyboards/bandominedoni/config.h index 1d317a945b..ecab8fc61f 100644 --- a/keyboards/bandominedoni/config.h +++ b/keyboards/bandominedoni/config.h @@ -19,6 +19,7 @@ #ifndef MASTER_RIGHT // SPLIT_HAND_MATRIX_GRID was initially designed to use with left hand side diode D35 mounted and not pressing K7 on the right hand side during boot. However when a USB cable is reconnected immediately, it fails. Decided to use "MASTER_RIGHT" to make it more reliable. # define SPLIT_HAND_MATRIX_GRID B5, D0 +# define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT #endif #define SPLIT_USB_DETECT diff --git a/keyboards/helix/rev3_4rows/config.h b/keyboards/helix/rev3_4rows/config.h index 000a09d1ab..cc1a925295 100644 --- a/keyboards/helix/rev3_4rows/config.h +++ b/keyboards/helix/rev3_4rows/config.h @@ -39,7 +39,6 @@ along with this program. If not, see . /* Split hand configration */ #define SPLIT_HAND_MATRIX_GRID D7,B2 -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT /* Custom font */ #define OLED_FONT_H "keyboards/helix/common/glcdfont.c" diff --git a/keyboards/helix/rev3_5rows/config.h b/keyboards/helix/rev3_5rows/config.h index 79162a097c..733f8b5a55 100644 --- a/keyboards/helix/rev3_5rows/config.h +++ b/keyboards/helix/rev3_5rows/config.h @@ -39,7 +39,6 @@ along with this program. If not, see . /* Split hand configration */ #define SPLIT_HAND_MATRIX_GRID D7,B2 -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT /* Custom font */ #define OLED_FONT_H "keyboards/helix/common/glcdfont.c" diff --git a/keyboards/hillside/46/0_1/config.h b/keyboards/hillside/46/0_1/config.h index 20c4deca40..136be2f581 100644 --- a/keyboards/hillside/46/0_1/config.h +++ b/keyboards/hillside/46/0_1/config.h @@ -6,6 +6,7 @@ /* Split */ #define SPLIT_HAND_MATRIX_GRID B5, F6 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT #define MATRIX_MASKED /* Haptic hardware */ diff --git a/keyboards/hillside/52/0_1/config.h b/keyboards/hillside/52/0_1/config.h index 20c4deca40..136be2f581 100644 --- a/keyboards/hillside/52/0_1/config.h +++ b/keyboards/hillside/52/0_1/config.h @@ -6,6 +6,7 @@ /* Split */ #define SPLIT_HAND_MATRIX_GRID B5, F6 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT #define MATRIX_MASKED /* Haptic hardware */ diff --git a/keyboards/keychron/q11/config.h b/keyboards/keychron/q11/config.h index 146e42d68c..949e5cf1da 100755 --- a/keyboards/keychron/q11/config.h +++ b/keyboards/keychron/q11/config.h @@ -22,7 +22,6 @@ /* handedness */ #define SPLIT_HAND_MATRIX_GRID A2, A15 -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT #define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `q11.c` diff --git a/keyboards/pisces/config.h b/keyboards/pisces/config.h index 4cb5aaf54e..cbdce6f83e 100644 --- a/keyboards/pisces/config.h +++ b/keyboards/pisces/config.h @@ -18,6 +18,8 @@ /* Select hand configuration */ #define SPLIT_HAND_MATRIX_GRID B0,B7 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT + #define MATRIX_MASKED #define SPLIT_USB_DETECT diff --git a/keyboards/rate/pistachio/rev2/config.h b/keyboards/rate/pistachio/rev2/config.h index 8b5dcbc9f4..8a12d3d9ee 100644 --- a/keyboards/rate/pistachio/rev2/config.h +++ b/keyboards/rate/pistachio/rev2/config.h @@ -21,6 +21,7 @@ along with this program. If not, see . /* Split hand configration */ #define SPLIT_HAND_MATRIX_GRID D4,D3 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT #define RGBLIGHT_LAYERS diff --git a/keyboards/splitkb/kyria/rev2/config.h b/keyboards/splitkb/kyria/rev2/config.h index d39b8eca88..5aa142f90b 100644 --- a/keyboards/splitkb/kyria/rev2/config.h +++ b/keyboards/splitkb/kyria/rev2/config.h @@ -20,7 +20,6 @@ along with this program. If not, see . // Side detection // col 4 row 3 on right-hand-side #define SPLIT_HAND_MATRIX_GRID E6, B3 // row first because the board is col2row -#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT #define MATRIX_MASKED // actual mask is defined by `matrix_mask` in `rev2.c` /* diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 874339361d..2f592bd4cf 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -147,10 +147,10 @@ __attribute__((weak)) bool is_keyboard_left_impl(void) { return readPin(SPLIT_HAND_PIN); # endif #elif defined(SPLIT_HAND_MATRIX_GRID) -# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT - return peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); -# else +# ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT return !peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); +# else + return peek_matrix_intersection(SPLIT_HAND_MATRIX_GRID); # endif #elif defined(EE_HANDS) if (!eeconfig_is_enabled()) { -- cgit v1.2.3 From d9b1ab9ae03a5d6ca09902a1c0d2927548829de8 Mon Sep 17 00:00:00 2001 From: JohSchneider Date: Wed, 10 Jan 2024 16:38:13 +0000 Subject: pointing_device: motion pin define and c-format weirdness (#22802) the mutual exclusive POINTING_DEVICE_MOTION_PIN and SPLIT_POINTING_ENABLE influence if and how the `pointing_device_driver.get_report` is triggered. now the way the define is wrapping around an "unbraced" if leads clang-format to weirdly indent the first line in the 'SPLIT_POINTING_ENABLE' as the first command after the if. this hints that any code addition in between the two - that possibly should run regardless, would break the if-def enabled code. this can be solved by adding a pair of curly braces in the POINTING_DEVICE_MOTION_PIN part, to clearly denote which commands are to be skipped if the motion pin shows now activity. Co-authored-by: Johannes --- quantum/pointing_device/pointing_device.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'quantum') diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c index 17dc701a41..2fa49ade8e 100644 --- a/quantum/pointing_device/pointing_device.c +++ b/quantum/pointing_device/pointing_device.c @@ -251,14 +251,15 @@ __attribute__((weak)) bool pointing_device_task(void) { # else if (readPin(POINTING_DEVICE_MOTION_PIN)) # endif + { #endif #if defined(SPLIT_POINTING_ENABLE) # if defined(POINTING_DEVICE_COMBINED) static uint8_t old_buttons = 0; - local_mouse_report.buttons = old_buttons; - local_mouse_report = pointing_device_driver.get_report(local_mouse_report); - old_buttons = local_mouse_report.buttons; + local_mouse_report.buttons = old_buttons; + local_mouse_report = pointing_device_driver.get_report(local_mouse_report); + old_buttons = local_mouse_report.buttons; # elif defined(POINTING_DEVICE_LEFT) || defined(POINTING_DEVICE_RIGHT) local_mouse_report = POINTING_DEVICE_THIS_SIDE ? pointing_device_driver.get_report(local_mouse_report) : shared_mouse_report; # else @@ -268,6 +269,10 @@ __attribute__((weak)) bool pointing_device_task(void) { local_mouse_report = pointing_device_driver.get_report(local_mouse_report); #endif // defined(SPLIT_POINTING_ENABLE) +#ifdef POINTING_DEVICE_MOTION_PIN + } +#endif + // allow kb to intercept and modify report #if defined(SPLIT_POINTING_ENABLE) && defined(POINTING_DEVICE_COMBINED) if (is_keyboard_left()) { -- cgit v1.2.3 From a522b1f15627c69f94cbc814968be5a63519b8e3 Mon Sep 17 00:00:00 2001 From: Ryan Date: Tue, 16 Jan 2024 13:26:40 +1100 Subject: i2c: rename read/write register functions (#22905) --- docs/i2c_driver.md | 24 +++++++-------- drivers/gpio/mcp23018.c | 12 ++++---- drivers/gpio/pca9505.c | 8 ++--- drivers/gpio/pca9555.c | 10 +++--- drivers/haptic/drv2605l.c | 2 +- drivers/oled/oled_driver.c | 2 +- drivers/sensors/azoteq_iqs5xx.c | 36 +++++++++++----------- drivers/sensors/cirque_pinnacle_i2c.c | 10 +++--- drivers/sensors/pimoroni_trackball.c | 4 +-- keyboards/3w6/rev1/matrix.c | 6 ++-- .../keymaps/default_pimoroni/pimoroni_trackball.c | 2 +- keyboards/3w6/rev2/matrix.c | 6 ++-- keyboards/argyle/matrix.c | 6 ++-- keyboards/barleycorn_smd/matrix.c | 6 ++-- keyboards/ergodox_stm32/ergodox_stm32.c | 8 ++--- keyboards/ergodox_stm32/matrix.c | 4 +-- keyboards/fc660c/ad5258.c | 6 ++-- keyboards/fc980c/ad5258.c | 6 ++-- keyboards/frobiac/blackbowl/matrix.c | 8 ++--- keyboards/handwired/d48/ds1307.c | 4 +-- keyboards/handwired/dactyl/matrix.c | 12 ++++---- .../handwired/onekey/keymaps/i2c_scanner/keymap.c | 2 +- keyboards/kagizaraya/chidori/board.c | 30 +++++++++--------- keyboards/matrix/abelx/aw9523b.c | 14 ++++----- keyboards/matrix/abelx/tca6424.c | 4 +-- keyboards/matrix/m20add/tca6424.c | 4 +-- keyboards/rate/pistachio_pro/lib/bme280.c | 14 ++++----- keyboards/rgbkb/common/touch_encoder.c | 4 +-- keyboards/sx60/matrix.c | 4 +-- keyboards/sx60/sx60.c | 4 +-- keyboards/system76/launch_1/usb_mux.c | 4 +-- keyboards/torn/mcp23018.c | 4 +-- keyboards/touchpad/matrix.c | 2 +- keyboards/yiancardesigns/barleycorn/matrix.c | 6 ++-- keyboards/yiancardesigns/gingham/gingham.c | 4 +-- keyboards/yiancardesigns/gingham/matrix.c | 10 +++--- keyboards/yiancardesigns/seigaiha/matrix.c | 6 ++-- keyboards/yiancardesigns/seigaiha/seigaiha.c | 2 +- keyboards/zsa/moonlander/matrix.c | 2 +- platforms/avr/drivers/i2c_master.c | 8 ++--- platforms/avr/drivers/i2c_master.h | 15 ++++++--- platforms/chibios/drivers/i2c_master.c | 8 ++--- platforms/chibios/drivers/i2c_master.h | 15 ++++++--- quantum/split_common/transport.c | 6 ++-- 44 files changed, 184 insertions(+), 170 deletions(-) (limited to 'quantum') diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md index faff0a1d7b..2457e8e7b9 100644 --- a/docs/i2c_driver.md +++ b/docs/i2c_driver.md @@ -197,11 +197,11 @@ Receive multiple bytes from the selected I2C device. --- -### `i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-writereg +### `i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-write-register Writes to a register with an 8-bit address on the I2C device. -#### Arguments :id=api-i2c-writereg-arguments +#### Arguments :id=api-i2c-write-register-arguments - `uint8_t devaddr` The 7-bit I2C address of the device. @@ -214,17 +214,17 @@ Writes to a register with an 8-bit address on the I2C device. - `uint16_t timeout` The time in milliseconds to wait for a response from the target device. -#### Return Value :id=api-i2c-writereg-return +#### Return Value :id=api-i2c-write-register-return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. --- -### `i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-writereg16 +### `i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-write-register16 Writes to a register with a 16-bit address (big endian) on the I2C device. -#### Arguments :id=api-i2c-writereg16-arguments +#### Arguments :id=api-i2c-write-register16-arguments - `uint8_t devaddr` The 7-bit I2C address of the device. @@ -237,17 +237,17 @@ Writes to a register with a 16-bit address (big endian) on the I2C device. - `uint16_t timeout` The time in milliseconds to wait for a response from the target device. -#### Return Value :id=api-i2c-writereg16-return +#### Return Value :id=api-i2c-write-register16-return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. --- -### `i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-readreg +### `i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-read-register Reads from a register with an 8-bit address on the I2C device. -#### Arguments :id=api-i2c-readreg-arguments +#### Arguments :id=api-i2c-read-register-arguments - `uint8_t devaddr` The 7-bit I2C address of the device. @@ -258,17 +258,17 @@ Reads from a register with an 8-bit address on the I2C device. - `uint16_t timeout` The time in milliseconds to wait for a response from the target device. -#### Return Value :id=api-i2c-readreg-return +#### Return Value :id=api-i2c-read-register-return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. --- -### `i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` +### `i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout)` :id=api-i2c-read-register16 Reads from a register with a 16-bit address (big endian) on the I2C device. -#### Arguments :id=api-i2c-readreg16-arguments +#### Arguments :id=api-i2c-read-register16-arguments - `uint8_t devaddr` The 7-bit I2C address of the device. @@ -279,7 +279,7 @@ Reads from a register with a 16-bit address (big endian) on the I2C device. - `uint16_t timeout` The time in milliseconds to wait for a response from the target device. -#### Return Value :id=api-i2c-readreg16-return +#### Return Value :id=api-i2c-read-register16-return `I2C_STATUS_TIMEOUT` if the timeout period elapses, `I2C_STATUS_ERROR` if some other error occurs, otherwise `I2C_STATUS_SUCCESS`. diff --git a/drivers/gpio/mcp23018.c b/drivers/gpio/mcp23018.c index 41cbfe087e..3eca4f9d34 100644 --- a/drivers/gpio/mcp23018.c +++ b/drivers/gpio/mcp23018.c @@ -33,13 +33,13 @@ bool mcp23018_set_config(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) uint8_t cmdDirection = port ? CMD_IODIRB : CMD_IODIRA; uint8_t cmdPullup = port ? CMD_GPPUB : CMD_GPPUA; - i2c_status_t ret = i2c_writeReg(addr, cmdDirection, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmdDirection, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_set_config::directionFAILED::%u\n", ret); return false; } - ret = i2c_writeReg(addr, cmdPullup, &conf, sizeof(conf), TIMEOUT); + ret = i2c_write_register(addr, cmdPullup, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_set_config::pullupFAILED::%u\n", ret); return false; @@ -52,7 +52,7 @@ bool mcp23018_set_output(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA; - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_set_output::FAILED::%u\n", ret); return false; @@ -65,7 +65,7 @@ bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t conf[2] = {confA, confB}; - i2c_status_t ret = i2c_writeReg(addr, CMD_GPIOA, &conf[0], sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, CMD_GPIOA, &conf[0], sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_set_output::FAILED::%u\n", ret); return false; @@ -78,7 +78,7 @@ bool mcp23018_readPins(uint8_t slave_addr, mcp23018_port_t port, uint8_t* out) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t cmd = port ? CMD_GPIOB : CMD_GPIOA; - i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT); + i2c_status_t ret = i2c_read_register(addr, cmd, out, sizeof(uint8_t), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_readPins::FAILED::%u\n", ret); return false; @@ -97,7 +97,7 @@ bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* out) { data16 data = {.u16 = 0}; - i2c_status_t ret = i2c_readReg(addr, CMD_GPIOA, &data.u8[0], sizeof(data), TIMEOUT); + i2c_status_t ret = i2c_read_register(addr, CMD_GPIOA, &data.u8[0], sizeof(data), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("mcp23018_readPins::FAILED::%u\n", ret); return false; diff --git a/drivers/gpio/pca9505.c b/drivers/gpio/pca9505.c index 5803746c96..4a11724ecf 100644 --- a/drivers/gpio/pca9505.c +++ b/drivers/gpio/pca9505.c @@ -66,7 +66,7 @@ bool pca9505_set_config(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) { break; } - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9505_set_config::FAILED\n"); return false; @@ -96,7 +96,7 @@ bool pca9505_set_polarity(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) break; } - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9505_set_polarity::FAILED\n"); return false; @@ -126,7 +126,7 @@ bool pca9505_set_output(uint8_t slave_addr, pca9505_port_t port, uint8_t conf) { break; } - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9505_set_output::FAILED\n"); return false; @@ -156,7 +156,7 @@ bool pca9505_readPins(uint8_t slave_addr, pca9505_port_t port, uint8_t* out) { break; } - i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT); + i2c_status_t ret = i2c_read_register(addr, cmd, out, sizeof(uint8_t), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9505_readPins::FAILED\n"); return false; diff --git a/drivers/gpio/pca9555.c b/drivers/gpio/pca9555.c index adcd040083..23727d21b3 100644 --- a/drivers/gpio/pca9555.c +++ b/drivers/gpio/pca9555.c @@ -37,7 +37,7 @@ bool pca9555_set_config(uint8_t slave_addr, pca9555_port_t port, uint8_t conf) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t cmd = port ? CMD_CONFIG_1 : CMD_CONFIG_0; - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9555_set_config::FAILED\n"); return false; @@ -50,7 +50,7 @@ bool pca9555_set_output(uint8_t slave_addr, pca9555_port_t port, uint8_t conf) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t cmd = port ? CMD_OUTPUT_1 : CMD_OUTPUT_0; - i2c_status_t ret = i2c_writeReg(addr, cmd, &conf, sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, cmd, &conf, sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9555_set_output::FAILED\n"); return false; @@ -63,7 +63,7 @@ bool pca9555_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t conf[2] = {confA, confB}; - i2c_status_t ret = i2c_writeReg(addr, CMD_OUTPUT_0, &conf[0], sizeof(conf), TIMEOUT); + i2c_status_t ret = i2c_write_register(addr, CMD_OUTPUT_0, &conf[0], sizeof(conf), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { dprintf("pca9555_set_output::FAILED::%u\n", ret); return false; @@ -76,7 +76,7 @@ bool pca9555_readPins(uint8_t slave_addr, pca9555_port_t port, uint8_t* out) { uint8_t addr = SLAVE_TO_ADDR(slave_addr); uint8_t cmd = port ? CMD_INPUT_1 : CMD_INPUT_0; - i2c_status_t ret = i2c_readReg(addr, cmd, out, sizeof(uint8_t), TIMEOUT); + i2c_status_t ret = i2c_read_register(addr, cmd, out, sizeof(uint8_t), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9555_readPins::FAILED\n"); return false; @@ -95,7 +95,7 @@ bool pca9555_readPins_all(uint8_t slave_addr, uint16_t* out) { data16 data = {.u16 = 0}; - i2c_status_t ret = i2c_readReg(addr, CMD_INPUT_0, &data.u8[0], sizeof(data), TIMEOUT); + i2c_status_t ret = i2c_read_register(addr, CMD_INPUT_0, &data.u8[0], sizeof(data), TIMEOUT); if (ret != I2C_STATUS_SUCCESS) { print("pca9555_readPins_all::FAILED\n"); return false; diff --git a/drivers/haptic/drv2605l.c b/drivers/haptic/drv2605l.c index 1ad2ad385f..a5adde5366 100644 --- a/drivers/haptic/drv2605l.c +++ b/drivers/haptic/drv2605l.c @@ -29,7 +29,7 @@ void drv2605l_write(uint8_t reg_addr, uint8_t data) { } uint8_t drv2605l_read(uint8_t reg_addr) { - i2c_readReg(DRV2605L_I2C_ADDRESS << 1, reg_addr, &drv2605l_read_buffer, 1, 100); + i2c_read_register(DRV2605L_I2C_ADDRESS << 1, reg_addr, &drv2605l_read_buffer, 1, 100); return drv2605l_read_buffer; } diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 4a2121cd7c..c674675d11 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c @@ -253,7 +253,7 @@ __attribute__((weak)) bool oled_send_data(const uint8_t *data, uint16_t size) { spi_stop(); return true; #elif defined(OLED_TRANSPORT_I2C) - i2c_status_t status = i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), I2C_DATA, data, size, OLED_I2C_TIMEOUT); + i2c_status_t status = i2c_write_register((OLED_DISPLAY_ADDRESS << 1), I2C_DATA, data, size, OLED_I2C_TIMEOUT); return (status == I2C_STATUS_SUCCESS); #endif } diff --git a/drivers/sensors/azoteq_iqs5xx.c b/drivers/sensors/azoteq_iqs5xx.c index 521f558b5f..1d688ddf25 100644 --- a/drivers/sensors/azoteq_iqs5xx.c +++ b/drivers/sensors/azoteq_iqs5xx.c @@ -107,18 +107,18 @@ static struct { i2c_status_t azoteq_iqs5xx_wake(void) { uint8_t data = 0; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)&data, sizeof(data), 1); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)&data, sizeof(data), 1); i2c_stop(); wait_us(150); return status; } i2c_status_t azoteq_iqs5xx_end_session(void) { const uint8_t END_BYTE = 1; // any data - return i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_END_COMMS, &END_BYTE, 1, AZOTEQ_IQS5XX_TIMEOUT_MS); + return i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_END_COMMS, &END_BYTE, 1, AZOTEQ_IQS5XX_TIMEOUT_MS); } i2c_status_t azoteq_iqs5xx_get_base_data(azoteq_iqs5xx_base_data_t *base_data) { - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)base_data, 10, AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PREVIOUS_CYCLE_TIME, (uint8_t *)base_data, 10, AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { azoteq_iqs5xx_end_session(); } @@ -131,7 +131,7 @@ i2c_status_t azoteq_iqs5xx_get_report_rate(azoteq_iqs5xx_report_rate_t *report_r return I2C_STATUS_ERROR; } uint16_t selected_reg = AZOTEQ_IQS5XX_REG_REPORT_RATE_ACTIVE + (2 * mode); - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS); if (end_session) { azoteq_iqs5xx_end_session(); } @@ -147,7 +147,7 @@ i2c_status_t azoteq_iqs5xx_set_report_rate(uint16_t report_rate_ms, azoteq_iqs5x azoteq_iqs5xx_report_rate_t report_rate = {0}; report_rate.h = (uint8_t)((report_rate_ms >> 8) & 0xFF); report_rate.l = (uint8_t)(report_rate_ms & 0xFF); - i2c_status_t status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)&report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, selected_reg, (uint8_t *)&report_rate, 2, AZOTEQ_IQS5XX_TIMEOUT_MS); if (end_session) { azoteq_iqs5xx_end_session(); } @@ -156,10 +156,10 @@ i2c_status_t azoteq_iqs5xx_set_report_rate(uint16_t report_rate_ms, azoteq_iqs5x i2c_status_t azoteq_iqs5xx_set_reati(bool enabled, bool end_session) { azoteq_iqs5xx_system_config_0_t config = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { config.reati = enabled; - status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } if (end_session) { azoteq_iqs5xx_end_session(); @@ -169,7 +169,7 @@ i2c_status_t azoteq_iqs5xx_set_reati(bool enabled, bool end_session) { i2c_status_t azoteq_iqs5xx_set_event_mode(bool enabled, bool end_session) { azoteq_iqs5xx_system_config_1_t config = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { config.event_mode = enabled; config.touch_event = true; @@ -179,7 +179,7 @@ i2c_status_t azoteq_iqs5xx_set_event_mode(bool enabled, bool end_session) { config.reati_event = false; config.alp_prox_event = false; config.gesture_event = true; - status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONFIG_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_config_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } if (end_session) { azoteq_iqs5xx_end_session(); @@ -189,7 +189,7 @@ i2c_status_t azoteq_iqs5xx_set_event_mode(bool enabled, bool end_session) { i2c_status_t azoteq_iqs5xx_set_gesture_config(bool end_session) { azoteq_iqs5xx_gesture_config_t config = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS); pd_dprintf("azo scroll: %d\n", config.multi_finger_gestures.scroll); if (status == I2C_STATUS_SUCCESS) { config.single_finger_gestures.single_tap = AZOTEQ_IQS5XX_TAP_ENABLE; @@ -211,7 +211,7 @@ i2c_status_t azoteq_iqs5xx_set_gesture_config(bool end_session) { config.scroll_initial_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_SCROLL_INITIAL_DISTANCE); config.zoom_initial_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_ZOOM_INITIAL_DISTANCE); config.zoom_consecutive_distance = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(AZOTEQ_IQS5XX_ZOOM_CONSECUTIVE_DISTANCE); - status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SINGLE_FINGER_GESTURES, (uint8_t *)&config, sizeof(azoteq_iqs5xx_gesture_config_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } if (end_session) { azoteq_iqs5xx_end_session(); @@ -221,7 +221,7 @@ i2c_status_t azoteq_iqs5xx_set_gesture_config(bool end_session) { i2c_status_t azoteq_iqs5xx_set_xy_config(bool flip_x, bool flip_y, bool switch_xy, bool palm_reject, bool end_session) { azoteq_iqs5xx_xy_config_0_t config = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { if (flip_x) { config.flip_x = !config.flip_x; @@ -233,7 +233,7 @@ i2c_status_t azoteq_iqs5xx_set_xy_config(bool flip_x, bool flip_y, bool switch_x config.switch_xy_axis = !config.switch_xy_axis; } config.palm_reject = palm_reject; - status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_XY_CONFIG_0, (uint8_t *)&config, sizeof(azoteq_iqs5xx_xy_config_0_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } if (end_session) { azoteq_iqs5xx_end_session(); @@ -243,11 +243,11 @@ i2c_status_t azoteq_iqs5xx_set_xy_config(bool flip_x, bool flip_y, bool switch_x i2c_status_t azoteq_iqs5xx_reset_suspend(bool reset, bool suspend, bool end_session) { azoteq_iqs5xx_system_control_1_t config = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { config.reset = reset; config.suspend = suspend; - status = i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + status = i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_SYSTEM_CONTROL_1, (uint8_t *)&config, sizeof(azoteq_iqs5xx_system_control_1_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } if (end_session) { azoteq_iqs5xx_end_session(); @@ -260,14 +260,14 @@ void azoteq_iqs5xx_set_cpi(uint16_t cpi) { azoteq_iqs5xx_resolution_t resolution = {0}; resolution.x_resolution = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(MIN(azoteq_iqs5xx_device_resolution_t.resolution_x, AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_X(cpi))); resolution.y_resolution = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(MIN(azoteq_iqs5xx_device_resolution_t.resolution_y, AZOTEQ_IQS5XX_INCH_TO_RESOLUTION_Y(cpi))); - i2c_writeReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_write_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS); } } uint16_t azoteq_iqs5xx_get_cpi(void) { if (azoteq_iqs5xx_product_number != AZOTEQ_IQS5XX_UNKNOWN) { azoteq_iqs5xx_resolution_t resolution = {0}; - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_X_RESOLUTION, (uint8_t *)&resolution, sizeof(azoteq_iqs5xx_resolution_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { return AZOTEQ_IQS5XX_RESOLUTION_X_TO_INCH(AZOTEQ_IQS5XX_SWAP_H_L_BYTES(resolution.x_resolution)); } @@ -276,7 +276,7 @@ uint16_t azoteq_iqs5xx_get_cpi(void) { } uint16_t azoteq_iqs5xx_get_product(void) { - i2c_status_t status = i2c_readReg16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PRODUCT_NUMBER, (uint8_t *)&azoteq_iqs5xx_product_number, sizeof(uint16_t), AZOTEQ_IQS5XX_TIMEOUT_MS); + i2c_status_t status = i2c_read_register16(AZOTEQ_IQS5XX_ADDRESS, AZOTEQ_IQS5XX_REG_PRODUCT_NUMBER, (uint8_t *)&azoteq_iqs5xx_product_number, sizeof(uint16_t), AZOTEQ_IQS5XX_TIMEOUT_MS); if (status == I2C_STATUS_SUCCESS) { azoteq_iqs5xx_product_number = AZOTEQ_IQS5XX_SWAP_H_L_BYTES(azoteq_iqs5xx_product_number); } diff --git a/drivers/sensors/cirque_pinnacle_i2c.c b/drivers/sensors/cirque_pinnacle_i2c.c index 3c11e5f079..c9b9bece5f 100644 --- a/drivers/sensors/cirque_pinnacle_i2c.c +++ b/drivers/sensors/cirque_pinnacle_i2c.c @@ -14,9 +14,9 @@ extern bool touchpad_init; void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) { uint8_t cmdByte = READ_MASK | address; // Form the READ command byte if (touchpad_init) { - i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT); - if (i2c_readReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) { - pd_dprintf("error cirque_pinnacle i2c_readReg\n"); + i2c_write_register(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT); + if (i2c_read_register(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) { + pd_dprintf("error cirque_pinnacle i2c_read_register\n"); touchpad_init = false; } i2c_stop(); @@ -28,8 +28,8 @@ void RAP_Write(uint8_t address, uint8_t data) { uint8_t cmdByte = WRITE_MASK | address; // Form the WRITE command byte if (touchpad_init) { - if (i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) { - pd_dprintf("error cirque_pinnacle i2c_writeReg\n"); + if (i2c_write_register(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) { + pd_dprintf("error cirque_pinnacle i2c_write_register\n"); touchpad_init = false; } i2c_stop(); diff --git a/drivers/sensors/pimoroni_trackball.c b/drivers/sensors/pimoroni_trackball.c index 326e59744f..9c6d26d73d 100644 --- a/drivers/sensors/pimoroni_trackball.c +++ b/drivers/sensors/pimoroni_trackball.c @@ -56,13 +56,13 @@ void pimoroni_trackball_set_cpi(uint16_t cpi) { void pimoroni_trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) { uint8_t data[4] = {r, g, b, w}; - __attribute__((unused)) i2c_status_t status = i2c_writeReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LED_RED, data, sizeof(data), PIMORONI_TRACKBALL_TIMEOUT); + __attribute__((unused)) i2c_status_t status = i2c_write_register(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LED_RED, data, sizeof(data), PIMORONI_TRACKBALL_TIMEOUT); pd_dprintf("Trackball RGBW i2c_status_t: %d\n", status); } i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data) { - i2c_status_t status = i2c_readReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), PIMORONI_TRACKBALL_TIMEOUT); + i2c_status_t status = i2c_read_register(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), PIMORONI_TRACKBALL_TIMEOUT); #ifdef POINTING_DEVICE_DEBUG static uint16_t d_timer; diff --git a/keyboards/3w6/rev1/matrix.c b/keyboards/3w6/rev1/matrix.c index 8bb6c77aaa..aa3e43fbe0 100644 --- a/keyboards/3w6/rev1/matrix.c +++ b/keyboards/3w6/rev1/matrix.c @@ -70,7 +70,7 @@ uint8_t init_tca9555(void) { // This means: we will write on pins 0 to 2 on port 1. read rest 0b11111000, }; - tca9555_status = i2c_writeReg(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT); + tca9555_status = i2c_write_register(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT); return tca9555_status; } @@ -189,7 +189,7 @@ static matrix_row_t read_cols(uint8_t row) { } else { uint8_t data = 0; uint8_t ports[2] = {0}; - tca9555_status = i2c_readReg(I2C_ADDR, IREGP0, ports, 2, I2C_TIMEOUT); + tca9555_status = i2c_read_register(I2C_ADDR, IREGP0, ports, 2, I2C_TIMEOUT); if (tca9555_status) { // if there was an error // do nothing return 0; @@ -252,7 +252,7 @@ static void select_row(uint8_t row) { } uint8_t ports[2] = {port0, port1}; - tca9555_status = i2c_writeReg(I2C_ADDR, OREGP0, ports, 2, I2C_TIMEOUT); + tca9555_status = i2c_write_register(I2C_ADDR, OREGP0, ports, 2, I2C_TIMEOUT); // Select the desired row by writing a byte for the entire GPIOB bus where only the bit representing the row we want to select is a zero (write instruction) and every other bit is a one. // Note that the row - MATRIX_ROWS_PER_SIDE reflects the fact that being on the right hand, the columns are numbered from MATRIX_ROWS_PER_SIDE to MATRIX_ROWS, but the pins we want to write to are indexed from zero up on the GPIOB bus. } diff --git a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c b/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c index a6661cdc07..35a85b5476 100644 --- a/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c +++ b/keyboards/3w6/rev2/keymaps/default_pimoroni/pimoroni_trackball.c @@ -120,7 +120,7 @@ bool pointing_device_task(void) { static uint16_t debounce_timer; uint8_t state[5] = {}; if (timer_elapsed(i2c_timeout_timer) > I2C_WAITCHECK) { - if (i2c_readReg(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) { + if (i2c_read_register(TRACKBALL_WRITE, 0x04, state, 5, I2C_TIMEOUT) == I2C_STATUS_SUCCESS) { if (!state[4] && !debounce) { if (scrolling) { #ifdef PIMORONI_TRACKBALL_INVERT_X diff --git a/keyboards/3w6/rev2/matrix.c b/keyboards/3w6/rev2/matrix.c index 49cb09a9f8..da7a5344e5 100644 --- a/keyboards/3w6/rev2/matrix.c +++ b/keyboards/3w6/rev2/matrix.c @@ -70,7 +70,7 @@ uint8_t init_tca9555(void) { // This means: we will write on pins 0 to 3 on port 1. read rest 0b11110000, }; - tca9555_status = i2c_writeReg(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT); + tca9555_status = i2c_write_register(I2C_ADDR, IODIRA, conf, 2, I2C_TIMEOUT); return tca9555_status; } @@ -189,7 +189,7 @@ static matrix_row_t read_cols(uint8_t row) { } else { uint8_t data = 0; uint8_t port0 = 0; - tca9555_status = i2c_readReg(I2C_ADDR, IREGP0, &port0, 1, I2C_TIMEOUT); + tca9555_status = i2c_read_register(I2C_ADDR, IREGP0, &port0, 1, I2C_TIMEOUT); if (tca9555_status) { // if there was an error // do nothing return 0; @@ -250,7 +250,7 @@ static void select_row(uint8_t row) { default: break; } - tca9555_status = i2c_writeReg(I2C_ADDR, OREGP1, &port1, 1, I2C_TIMEOUT); + tca9555_status = i2c_write_register(I2C_ADDR, OREGP1, &port1, 1, I2C_TIMEOUT); // Select the desired row by writing a byte for the entire GPIOB bus where only the bit representing the row we want to select is a zero (write instruction) and every other bit is a one. // Note that the row - MATRIX_ROWS_PER_SIDE reflects the fact that being on the right hand, the columns are numbered from MATRIX_ROWS_PER_SIDE to MATRIX_ROWS, but the pins we want to write to are indexed from zero up on the GPIOB bus. } diff --git a/keyboards/argyle/matrix.c b/keyboards/argyle/matrix.c index 7430c6d9d8..d723392a01 100644 --- a/keyboards/argyle/matrix.c +++ b/keyboards/argyle/matrix.c @@ -78,9 +78,9 @@ static void init_pins(void) { unselect_rows(); // Set I/O uint8_t send_data = 0xFF; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); // Set Pull-up - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); for (uint8_t x = 0; x < MATRIX_COLS; x++) { if (col_pins[x] != NO_PIN) { @@ -111,7 +111,7 @@ static bool matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t curre matrix_output_select_delay(); uint8_t port_expander_buffer; - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &port_expander_buffer, 1, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &port_expander_buffer, 1, 20); // For each col... // matrix_row_t row_shifter = MATRIX_ROW_SHIFTER; diff --git a/keyboards/barleycorn_smd/matrix.c b/keyboards/barleycorn_smd/matrix.c index b717452f3d..315093c8a9 100644 --- a/keyboards/barleycorn_smd/matrix.c +++ b/keyboards/barleycorn_smd/matrix.c @@ -42,9 +42,9 @@ static void init_pins(void) { unselect_rows(); // Set I/O uint8_t send_data[2] = { 0xFF, 0x03}; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data[0], 2, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data[0], 2, 20); // Set Pull-up - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x0C, &send_data[0], 2, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x0C, &send_data[0], 2, 20); for (uint8_t x = 0; x < MATRIX_COLS; x++) { if ( x < 8 ) { @@ -75,7 +75,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) matrix_io_delay(); uint8_t port_expander_col_buffer[2]; - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x12, &port_expander_col_buffer[0], 2, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x12, &port_expander_col_buffer[0], 2, 20); // For each col... for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { diff --git a/keyboards/ergodox_stm32/ergodox_stm32.c b/keyboards/ergodox_stm32/ergodox_stm32.c index 2a919506dc..99d51866f7 100644 --- a/keyboards/ergodox_stm32/ergodox_stm32.c +++ b/keyboards/ergodox_stm32/ergodox_stm32.c @@ -59,16 +59,16 @@ uint8_t init_mcp23017(void) { uint8_t data[2]; data[0] = 0x0; data[1] = 0b00111111; - mcp23017_status = i2c_writeReg(I2C_ADDR, I2C_IODIRA, data, 2, 50000); + mcp23017_status = i2c_write_register(I2C_ADDR, I2C_IODIRA, data, 2, 50000); if (mcp23017_status) goto out; data[0] = 0xFFU; - mcp23017_status = i2c_writeReg(I2C_ADDR, I2C_GPIOA, data, 1, 5000); + mcp23017_status = i2c_write_register(I2C_ADDR, I2C_GPIOA, data, 1, 5000); if (mcp23017_status) goto out; - mcp23017_status = i2c_writeReg(I2C_ADDR, I2C_GPPUB, data+1, 1, 2); + mcp23017_status = i2c_write_register(I2C_ADDR, I2C_GPPUB, data+1, 1, 2); if (mcp23017_status) goto out; out: return mcp23017_status; - // i2c_readReg(I2C_ADDR, ); + // i2c_read_register(I2C_ADDR, ); } diff --git a/keyboards/ergodox_stm32/matrix.c b/keyboards/ergodox_stm32/matrix.c index 3eb35cd7bb..6acd2dda22 100644 --- a/keyboards/ergodox_stm32/matrix.c +++ b/keyboards/ergodox_stm32/matrix.c @@ -134,7 +134,7 @@ static matrix_row_t read_cols(uint8_t row) { uint8_t data = 0xFF; if (!mcp23017_status) { uint8_t regAddr = I2C_GPIOB; - mcp23017_status = i2c_readReg(I2C_ADDR, regAddr, &data, 1, 10); + mcp23017_status = i2c_read_register(I2C_ADDR, regAddr, &data, 1, 10); } if (mcp23017_status) { return 0; @@ -174,7 +174,7 @@ static void select_row(uint8_t row) { if (row < MATRIX_ROWS_PER_SIDE) { if (!mcp23017_status) { uint8_t data = (0xFF & ~(1 << row)); - mcp23017_status = i2c_writeReg(I2C_ADDR, I2C_GPIOA, &data, 1, 10); + mcp23017_status = i2c_write_register(I2C_ADDR, I2C_GPIOA, &data, 1, 10); } } else { GPIOB->BRR = 0x1 << (row+1); diff --git a/keyboards/fc660c/ad5258.c b/keyboards/fc660c/ad5258.c index f7ff2f3dc1..9d33c10ce4 100644 --- a/keyboards/fc660c/ad5258.c +++ b/keyboards/fc660c/ad5258.c @@ -35,18 +35,18 @@ void ad5258_init(void) { uint8_t ad5258_read_rdac(void) { // read RDAC register uint8_t ret = 0; - i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &ret, 1, 100); + i2c_read_register(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &ret, 1, 100); return ret; } uint8_t ad5258_read_eeprom(void) { uint8_t ret = 0; - i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_EEPROM, &ret, 1, 100); + i2c_read_register(AD5258_I2C_ADDRESS, AD5258_INST_EEPROM, &ret, 1, 100); return ret; } void ad5258_write_rdac(uint8_t rdac) { // write RDAC register: uint8_t data = rdac & 0x3F; - i2c_writeReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &data, 1, 100); + i2c_write_register(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &data, 1, 100); } diff --git a/keyboards/fc980c/ad5258.c b/keyboards/fc980c/ad5258.c index f7ff2f3dc1..9d33c10ce4 100644 --- a/keyboards/fc980c/ad5258.c +++ b/keyboards/fc980c/ad5258.c @@ -35,18 +35,18 @@ void ad5258_init(void) { uint8_t ad5258_read_rdac(void) { // read RDAC register uint8_t ret = 0; - i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &ret, 1, 100); + i2c_read_register(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &ret, 1, 100); return ret; } uint8_t ad5258_read_eeprom(void) { uint8_t ret = 0; - i2c_readReg(AD5258_I2C_ADDRESS, AD5258_INST_EEPROM, &ret, 1, 100); + i2c_read_register(AD5258_I2C_ADDRESS, AD5258_INST_EEPROM, &ret, 1, 100); return ret; } void ad5258_write_rdac(uint8_t rdac) { // write RDAC register: uint8_t data = rdac & 0x3F; - i2c_writeReg(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &data, 1, 100); + i2c_write_register(AD5258_I2C_ADDRESS, AD5258_INST_RDAC, &data, 1, 100); } diff --git a/keyboards/frobiac/blackbowl/matrix.c b/keyboards/frobiac/blackbowl/matrix.c index 727e26ddc1..2a2c2618ab 100644 --- a/keyboards/frobiac/blackbowl/matrix.c +++ b/keyboards/frobiac/blackbowl/matrix.c @@ -45,10 +45,10 @@ void matrix_init_custom(void) { uint8_t pullup[2] = {0, expander_input_mask}; for (uint8_t i = 0; i < 2; ++i) { - expander_status = i2c_writeReg(i2c_addr[i], IODIRA, direction, 2, I2C_TIMEOUT); + expander_status = i2c_write_register(i2c_addr[i], IODIRA, direction, 2, I2C_TIMEOUT); if (expander_status) return; - expander_status = i2c_writeReg(i2c_addr[i], GPPUA, pullup, 2, I2C_TIMEOUT); + expander_status = i2c_write_register(i2c_addr[i], GPPUA, pullup, 2, I2C_TIMEOUT); } } @@ -79,7 +79,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) // On both expanders: select col and read rows for (size_t i = 0; i < 2; ++i) { if (!expander_status) { - expander_status = i2c_writeReg(i2c_addr[i], EXPANDER_COL_REGISTER, &port, 1, I2C_TIMEOUT); + expander_status = i2c_write_register(i2c_addr[i], EXPANDER_COL_REGISTER, &port, 1, I2C_TIMEOUT); } wait_us(30); @@ -87,7 +87,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) return false; } - expander_status = i2c_readReg(i2c_addr[i], EXPANDER_ROW_REGISTER, &column_state[i], 1, I2C_TIMEOUT); + expander_status = i2c_read_register(i2c_addr[i], EXPANDER_ROW_REGISTER, &column_state[i], 1, I2C_TIMEOUT); column_state[i] = (~column_state[i]) & ((1 << MATRIX_ROWS_PER_SIDE) - 1); } diff --git a/keyboards/handwired/d48/ds1307.c b/keyboards/handwired/d48/ds1307.c index f6b57d50d2..2b3a88f315 100644 --- a/keyboards/handwired/d48/ds1307.c +++ b/keyboards/handwired/d48/ds1307.c @@ -8,12 +8,12 @@ void ds1307_set_time(uint8_t h, uint8_t m, uint8_t s) { ((h % 10) | ((h / 10) << 4)) & 0x3F, 0, 0, 0, 0, 0 }; // 24-hour mode - i2c_writeReg(DS1307_ADDR, 0, data, 8, 100); + i2c_write_register(DS1307_ADDR, 0, data, 8, 100); } void ds1307_get_time(uint8_t *h, uint8_t *m, uint8_t *s) { uint8_t data[3]; - i2c_readReg(DS1307_ADDR, 0, data, 3, 100); + i2c_read_register(DS1307_ADDR, 0, data, 3, 100); i2c_stop(); *s = (data[0] & 0b1111) + ((data[0] & 0b1110000) >> 4) * 10; *m = (data[1] & 0b1111) + ((data[1] & 0b1110000) >> 4) * 10; diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c index d87fe4cbd1..140f4236c1 100644 --- a/keyboards/handwired/dactyl/matrix.c +++ b/keyboards/handwired/dactyl/matrix.c @@ -216,10 +216,10 @@ void init_expander(void) { #endif - expander_status = i2c_writeReg(I2C_ADDR, IODIRA, direction, 2, I2C_TIMEOUT); + expander_status = i2c_write_register(I2C_ADDR, IODIRA, direction, 2, I2C_TIMEOUT); if (expander_status) return; - expander_status = i2c_writeReg(I2C_ADDR, GPPUA, pullup, 2, I2C_TIMEOUT); + expander_status = i2c_write_register(I2C_ADDR, GPPUA, pullup, 2, I2C_TIMEOUT); } uint8_t matrix_scan(void) @@ -333,7 +333,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) // Read columns from expander, unless it's in an error state if (! expander_status) { uint8_t state = 0; - expander_status = i2c_readReg(I2C_ADDR, EXPANDER_COL_REGISTER, &state, 1, I2C_TIMEOUT); + expander_status = i2c_read_register(I2C_ADDR, EXPANDER_COL_REGISTER, &state, 1, I2C_TIMEOUT); if (! expander_status) { current_matrix[current_row] |= (~state) & expander_input_pin_mask; } @@ -359,7 +359,7 @@ static void select_row(uint8_t row) { // set active row low : 0 // set other rows hi-Z : 1 uint8_t port = 0xFF & ~(1<led_status[led_index] = status; uint8_t iodir = board_merge_led_config(board, 0xff); uint8_t data = board_merge_led_status(board, 0x00); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&data, sizeof(data), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&data, sizeof(data), BOARD_I2C_TIMEOUT); } static uint8_t board_merge_led_config(board_info_t* board, uint8_t iodir) { @@ -86,30 +86,30 @@ static bool board_slave_config(board_info_t* board) { i2c_status_t res = 0; // Set to input - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRA, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRA, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); if (res < 0) return false; // RESTRICTION: LEDs only on PORT B. set = board_merge_led_config(board, set); - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); if (res < 0) return false; set = 0xff; // Pull up for input - enable - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPPUA, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPPUA, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); if (res < 0) return false; - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPPUB, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPPUB, (const uint8_t*)&set, sizeof(set), BOARD_I2C_TIMEOUT); if (res < 0) return false; // Disable interrupt - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPINTENA, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPINTENA, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); if (res < 0) return false; - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPINTENB, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPINTENB, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); if (res < 0) return false; // Polarity - same logic - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IPOLA, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IPOLA, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); if (res < 0) return false; - res = i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IPOLB, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); + res = i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IPOLB, (const uint8_t*)&clear, sizeof(clear), BOARD_I2C_TIMEOUT); if (res < 0) return false; return true; @@ -203,7 +203,7 @@ static uint8_t board_read_slave_cols(board_info_t* board) { return 0xff; } uint8_t data = 0xff; - i2c_status_t res = i2c_readReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPIOA, &data, sizeof(data), BOARD_I2C_TIMEOUT); + i2c_status_t res = i2c_read_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_GPIOA, &data, sizeof(data), BOARD_I2C_TIMEOUT); return (res < 0) ? 0xff : data; } @@ -214,8 +214,8 @@ static void board_select_slave_row(board_info_t* board, uint8_t board_row) { uint8_t pin = board->row_pins[board_row]; uint8_t iodir = board_merge_led_config(board, PIN2MASK(pin)); uint8_t status = board_merge_led_status(board, PIN2MASK(pin)); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&status, sizeof(status), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&status, sizeof(status), BOARD_I2C_TIMEOUT); } static void board_unselect_slave_rows(board_info_t* board) { @@ -224,8 +224,8 @@ static void board_unselect_slave_rows(board_info_t* board) { } uint8_t iodir = board_merge_led_config(board, 0xff); uint8_t data = board_merge_led_status(board, 0x00); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); - i2c_writeReg(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&data, sizeof(data), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_IODIRB, (const uint8_t*)&iodir, sizeof(iodir), BOARD_I2C_TIMEOUT); + i2c_write_register(EXPANDER_ADDR(board->i2c_address), EXPANDER_OLATB, (const uint8_t*)&data, sizeof(data), BOARD_I2C_TIMEOUT); } static void board_unselect_slave_row(board_info_t* board, uint8_t board_row) { board_unselect_slave_rows(board); } diff --git a/keyboards/matrix/abelx/aw9523b.c b/keyboards/matrix/abelx/aw9523b.c index 8c6e8eaccf..860a71740d 100644 --- a/keyboards/matrix/abelx/aw9523b.c +++ b/keyboards/matrix/abelx/aw9523b.c @@ -51,15 +51,15 @@ void aw9523b_init(uint8_t addr) i2c_init(); // reset chip uint8_t data = 0; - i2c_writeReg(addr, AW9523B_RESET, &data, 1, TIMEOUT); + i2c_write_register(addr, AW9523B_RESET, &data, 1, TIMEOUT); wait_ms(1); // set max led current data = 0x03; // 37mA/4 - i2c_writeReg(addr, AW9523B_CTL, &data, 1, TIMEOUT); + i2c_write_register(addr, AW9523B_CTL, &data, 1, TIMEOUT); // set port to led mode data = 0; - i2c_writeReg(addr, AW9523B_P0_LED, &data, 1, TIMEOUT); - i2c_writeReg(addr, AW9523B_P1_LED, &data, 1, TIMEOUT); + i2c_write_register(addr, AW9523B_P0_LED, &data, 1, TIMEOUT); + i2c_write_register(addr, AW9523B_P1_LED, &data, 1, TIMEOUT); // clear pwm buff for (uint8_t i = 0; i < 16; i++) { aw9523b_pwm_buf[i] = 0; @@ -91,9 +91,9 @@ void aw9523b_update_pwm_buffers(uint8_t addr) if (aw9523b_pwm_dirty) { for (uint8_t i = 0; i < AW9523B_RGB_NUM; i++){ aw9523b_led led = g_aw9523b_leds[i]; - i2c_writeReg(addr, led.r, &aw9523b_pwm_buf[PWM2BUF(led.r)], 1, TIMEOUT); - i2c_writeReg(addr, led.g, &aw9523b_pwm_buf[PWM2BUF(led.g)], 1, TIMEOUT); - i2c_writeReg(addr, led.b, &aw9523b_pwm_buf[PWM2BUF(led.b)], 1, TIMEOUT); + i2c_write_register(addr, led.r, &aw9523b_pwm_buf[PWM2BUF(led.r)], 1, TIMEOUT); + i2c_write_register(addr, led.g, &aw9523b_pwm_buf[PWM2BUF(led.g)], 1, TIMEOUT); + i2c_write_register(addr, led.b, &aw9523b_pwm_buf[PWM2BUF(led.b)], 1, TIMEOUT); } aw9523b_pwm_dirty = false; } diff --git a/keyboards/matrix/abelx/tca6424.c b/keyboards/matrix/abelx/tca6424.c index 44dc7909d8..c632157256 100644 --- a/keyboards/matrix/abelx/tca6424.c +++ b/keyboards/matrix/abelx/tca6424.c @@ -47,13 +47,13 @@ void tca6424_init(void) static void write_port(uint8_t p, uint8_t d) { - i2c_writeReg(TCA6424_ADDR, p, &d, 1, TIMEOUT); + i2c_write_register(TCA6424_ADDR, p, &d, 1, TIMEOUT); } static uint8_t read_port(uint8_t port) { uint8_t data = 0; - i2c_readReg(TCA6424_ADDR, port, &data, 1, TIMEOUT); + i2c_read_register(TCA6424_ADDR, port, &data, 1, TIMEOUT); return data; } diff --git a/keyboards/matrix/m20add/tca6424.c b/keyboards/matrix/m20add/tca6424.c index 38cea9f15f..c6ffa4c2fe 100644 --- a/keyboards/matrix/m20add/tca6424.c +++ b/keyboards/matrix/m20add/tca6424.c @@ -45,13 +45,13 @@ void tca6424_init(void) static void write_port(uint8_t p, uint8_t d) { - i2c_writeReg(TCA6424_ADDR, p, &d, 1, TIMEOUT); + i2c_write_register(TCA6424_ADDR, p, &d, 1, TIMEOUT); } static uint8_t read_port(uint8_t port) { uint8_t data = 0; - i2c_readReg(TCA6424_ADDR, port, &data, 1, TIMEOUT); + i2c_read_register(TCA6424_ADDR, port, &data, 1, TIMEOUT); return data; } diff --git a/keyboards/rate/pistachio_pro/lib/bme280.c b/keyboards/rate/pistachio_pro/lib/bme280.c index f3dc231dc5..ac7a4873ba 100644 --- a/keyboards/rate/pistachio_pro/lib/bme280.c +++ b/keyboards/rate/pistachio_pro/lib/bme280.c @@ -102,9 +102,9 @@ static int32_t t_fine; static void readTrim(void) { uint8_t data[32]; - i2c_readReg(BME280_ADDRESS, BME280_REG_CALIB00, &data[0], 24, I2C_BME280_TIMEOUT); - i2c_readReg(BME280_ADDRESS, BME280_REG_CALIB25, &data[25], 1, I2C_BME280_TIMEOUT); - i2c_readReg(BME280_ADDRESS, BME280_REG_CALIB26, &data[25], 7, I2C_BME280_TIMEOUT); + i2c_read_register(BME280_ADDRESS, BME280_REG_CALIB00, &data[0], 24, I2C_BME280_TIMEOUT); + i2c_read_register(BME280_ADDRESS, BME280_REG_CALIB25, &data[25], 1, I2C_BME280_TIMEOUT); + i2c_read_register(BME280_ADDRESS, BME280_REG_CALIB26, &data[25], 7, I2C_BME280_TIMEOUT); dig_T1 = (data[1] << 8) | data[0]; dig_T2 = (data[3] << 8) | data[2]; @@ -131,7 +131,7 @@ static void readTrim(void) { static void readData(void) { uint8_t data[8]; - i2c_readReg(BME280_ADDRESS, 0xF7, &data[0], 8, I2C_BME280_TIMEOUT); + i2c_read_register(BME280_ADDRESS, 0xF7, &data[0], 8, I2C_BME280_TIMEOUT); pres_raw = data[0]; pres_raw = (pres_raw<<8) | data[1]; @@ -210,9 +210,9 @@ void bme280_init(void) { config_reg = BME280_CONFIG_VAL; i2c_init(); - i2c_writeReg(BME280_ADDRESS, BME280_REG_CTRL_HUM, &ctrl_hum_reg, 1, I2C_BME280_TIMEOUT); - i2c_writeReg(BME280_ADDRESS, BME280_REG_CTRL_MEAS, &ctrl_meas_reg, 1, I2C_BME280_TIMEOUT); - i2c_writeReg(BME280_ADDRESS, BME280_REG_CONFIG, &config_reg, 1, I2C_BME280_TIMEOUT); + i2c_write_register(BME280_ADDRESS, BME280_REG_CTRL_HUM, &ctrl_hum_reg, 1, I2C_BME280_TIMEOUT); + i2c_write_register(BME280_ADDRESS, BME280_REG_CTRL_MEAS, &ctrl_meas_reg, 1, I2C_BME280_TIMEOUT); + i2c_write_register(BME280_ADDRESS, BME280_REG_CONFIG, &config_reg, 1, I2C_BME280_TIMEOUT); readTrim(); return; diff --git a/keyboards/rgbkb/common/touch_encoder.c b/keyboards/rgbkb/common/touch_encoder.c index 5f0e4f0cca..18037b8fb5 100644 --- a/keyboards/rgbkb/common/touch_encoder.c +++ b/keyboards/rgbkb/common/touch_encoder.c @@ -125,7 +125,7 @@ bool touch_slave_init = false; slave_touch_status_t touch_slave_state = { 0, 0 }; static bool write_register8(uint8_t address, uint8_t data) { - i2c_status_t status = i2c_writeReg((I2C_ADDRESS << 1), address, &data, sizeof(data), I2C_TIMEOUT); + i2c_status_t status = i2c_write_register((I2C_ADDRESS << 1), address, &data, sizeof(data), I2C_TIMEOUT); if (status != I2C_STATUS_SUCCESS) { xprintf("write_register8 %d failed %d\n", address, status); } @@ -133,7 +133,7 @@ static bool write_register8(uint8_t address, uint8_t data) { } static bool read_register(uint8_t address, uint8_t* data, uint16_t length) { - i2c_status_t status = i2c_readReg((I2C_ADDRESS << 1), address, data, length, I2C_TIMEOUT); + i2c_status_t status = i2c_read_register((I2C_ADDRESS << 1), address, data, length, I2C_TIMEOUT); if (status != I2C_STATUS_SUCCESS) { xprintf("read_register %d failed %d\n", address, status); return false; diff --git a/keyboards/sx60/matrix.c b/keyboards/sx60/matrix.c index 66bc494be6..22f37db539 100644 --- a/keyboards/sx60/matrix.c +++ b/keyboards/sx60/matrix.c @@ -214,7 +214,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) return 0; } else { uint8_t data = 0; - mcp23018_status = i2c_readReg(I2C_ADDR, GPIOA, &data, 1, I2C_TIMEOUT); + mcp23018_status = i2c_read_register(I2C_ADDR, GPIOA, &data, 1, I2C_TIMEOUT); if (!mcp23018_status) { current_matrix[current_row] |= (~((uint16_t)data) << 8); } @@ -245,7 +245,7 @@ static void select_row(uint8_t row) set active row output : 1 set other rows hi-Z : 1 */ uint8_t port = 0xFF & ~(1<addr << 1, 0x1D, cc, 1, I2C_TIMEOUT); } +i2c_status_t ptn5110_get_cc_status(struct PTN5110* self, uint8_t* cc) { return i2c_read_register(self->addr << 1, 0x1D, cc, 1, I2C_TIMEOUT); } // Set PTN5110 SSMUX orientation. // Returns zero on success or a negative number on error. @@ -362,7 +362,7 @@ i2c_status_t ptn5110_set_ssmux(struct PTN5110* self, bool orientation) { return // Write PTN5110 COMMAND. // Returns zero on success or negative number on error. -i2c_status_t ptn5110_command(struct PTN5110* self, uint8_t command) { return i2c_writeReg(self->addr << 1, 0x23, &command, 1, I2C_TIMEOUT); } +i2c_status_t ptn5110_command(struct PTN5110* self, uint8_t command) { return i2c_write_register(self->addr << 1, 0x23, &command, 1, I2C_TIMEOUT); } // Set orientation of PTN5110 operating as a sink, call this once. // Returns zero on success or a negative number on error. diff --git a/keyboards/torn/mcp23018.c b/keyboards/torn/mcp23018.c index 12c4f9bc7f..ba26e67ba9 100644 --- a/keyboards/torn/mcp23018.c +++ b/keyboards/torn/mcp23018.c @@ -48,7 +48,7 @@ i2c_status_t mcp23018_writeReg(uint8_t regaddr, const uint8_t* data, uint16_t le return mcp23018_status; } - mcp23018_status = i2c_writeReg((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT); + mcp23018_status = i2c_write_register((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT); return mcp23018_status; } @@ -57,6 +57,6 @@ i2c_status_t mcp23018_readReg(uint8_t regaddr, uint8_t* data, uint16_t length) { return mcp23018_status; } - mcp23018_status = i2c_readReg((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT); + mcp23018_status = i2c_read_register((MCP23018_ADDR << 1), regaddr, data, length, MCP23018_TIMEOUT); return mcp23018_status; } diff --git a/keyboards/touchpad/matrix.c b/keyboards/touchpad/matrix.c index 6bffb826bd..87944cb7cc 100644 --- a/keyboards/touchpad/matrix.c +++ b/keyboards/touchpad/matrix.c @@ -38,7 +38,7 @@ volatile uint8_t LEDs[6][6] = {{0}};//Stores current LED values //Read data from the cap touch IC uint8_t readDataFromTS(uint8_t reg) { uint8_t rx[1] = { 0 }; - if (i2c_readReg(0x1C << 1, reg, rx, 1, 100) == 0) { + if (i2c_read_register(0x1C << 1, reg, rx, 1, 100) == 0) { return rx[0]; } return 0; diff --git a/keyboards/yiancardesigns/barleycorn/matrix.c b/keyboards/yiancardesigns/barleycorn/matrix.c index 99366d6098..9ef2926566 100644 --- a/keyboards/yiancardesigns/barleycorn/matrix.c +++ b/keyboards/yiancardesigns/barleycorn/matrix.c @@ -42,9 +42,9 @@ static void init_pins(void) { unselect_rows(); // Set I/O uint8_t send_data[2] = { 0xFF, 0x03}; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data[0], 2, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data[0], 2, 20); // Set Pull-up - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x0C, &send_data[0], 2, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x0C, &send_data[0], 2, 20); for (uint8_t x = 0; x < MATRIX_COLS; x++) { if ( x < 8 ) { @@ -75,7 +75,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) matrix_io_delay(); uint8_t port_expander_col_buffer[2]; - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x12, &port_expander_col_buffer[0], 2, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x12, &port_expander_col_buffer[0], 2, 20); // For each col... for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { diff --git a/keyboards/yiancardesigns/gingham/gingham.c b/keyboards/yiancardesigns/gingham/gingham.c index 496ae35705..f34d4d7cfd 100644 --- a/keyboards/yiancardesigns/gingham/gingham.c +++ b/keyboards/yiancardesigns/gingham/gingham.c @@ -22,7 +22,7 @@ void matrix_init_kb(void) { // Due to the way the port expander is setup both LEDs are already outputs. This is set n matrix.copy //Turn the red LED on as power indicator. send_data = 0x10; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20); matrix_init_user(); } @@ -31,7 +31,7 @@ bool led_update_kb(led_t led_state) { bool res = led_update_user(led_state); if(res) { send_data = led_state.caps_lock ? 0x18 : 0x10; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &send_data, 1, 20); } return res; } diff --git a/keyboards/yiancardesigns/gingham/matrix.c b/keyboards/yiancardesigns/gingham/matrix.c index 47c8830565..d17518b494 100644 --- a/keyboards/yiancardesigns/gingham/matrix.c +++ b/keyboards/yiancardesigns/gingham/matrix.c @@ -42,9 +42,9 @@ static void init_pins(void) { unselect_rows(); // Set I/O uint8_t send_data = 0x07; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); // Set Pull-up - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); for (uint8_t x = 0; x < MATRIX_COLS; x++) { if ( (x > 0) && (x < 12) ) { @@ -80,15 +80,15 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) // Select the col pin to read (active low) switch (col_index) { case 0 : - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); pin_state = pin_state & 0x01; break; case 12 : - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); pin_state = pin_state & (1 << 2); break; case 13 : - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &pin_state, 1, 20); pin_state = pin_state & (1 << 1); break; default : diff --git a/keyboards/yiancardesigns/seigaiha/matrix.c b/keyboards/yiancardesigns/seigaiha/matrix.c index 212b8015f0..55ee239db4 100644 --- a/keyboards/yiancardesigns/seigaiha/matrix.c +++ b/keyboards/yiancardesigns/seigaiha/matrix.c @@ -42,9 +42,9 @@ static void init_pins(void) { unselect_rows(); // Set I/O uint8_t send_data = 0x1F; - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x00, &send_data, 1, 20); // Set Pull-up - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x06, &send_data, 1, 20); for (uint8_t x = 0; x < MATRIX_COLS; x++) { if ( x < 10 ) { @@ -75,7 +75,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) matrix_io_delay(); uint8_t port_expander_col_buffer; - i2c_readReg((PORT_EXPANDER_ADDRESS << 1), 0x09, &port_expander_col_buffer, 1, 20); + i2c_read_register((PORT_EXPANDER_ADDRESS << 1), 0x09, &port_expander_col_buffer, 1, 20); // For each col... for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) { diff --git a/keyboards/yiancardesigns/seigaiha/seigaiha.c b/keyboards/yiancardesigns/seigaiha/seigaiha.c index 7a39637b91..03d420f053 100644 --- a/keyboards/yiancardesigns/seigaiha/seigaiha.c +++ b/keyboards/yiancardesigns/seigaiha/seigaiha.c @@ -26,7 +26,7 @@ void led_update_ports(led_t led_state) { } else { send_data &= ~(1 << 5); } - i2c_writeReg((PORT_EXPANDER_ADDRESS << 1), 0x0A, &send_data, 1, 20); + i2c_write_register((PORT_EXPANDER_ADDRESS << 1), 0x0A, &send_data, 1, 20); } __attribute__((weak)) layer_state_t layer_state_set_user(layer_state_t state) { diff --git a/keyboards/zsa/moonlander/matrix.c b/keyboards/zsa/moonlander/matrix.c index 36017fcd12..aa97d0721f 100644 --- a/keyboards/zsa/moonlander/matrix.c +++ b/keyboards/zsa/moonlander/matrix.c @@ -144,7 +144,7 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) { // read col mcp23018_tx[0] = 0x13; // GPIOB - if (MSG_OK != i2c_readReg(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx[0], &mcp23018_rx[0], 1, MOONLANDER_I2C_TIMEOUT)) { + if (MSG_OK != i2c_read_register(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx[0], &mcp23018_rx[0], 1, MOONLANDER_I2C_TIMEOUT)) { dprintf("error vert\n"); mcp23018_initd = false; } diff --git a/platforms/avr/drivers/i2c_master.c b/platforms/avr/drivers/i2c_master.c index 58939f3e00..0183103707 100644 --- a/platforms/avr/drivers/i2c_master.c +++ b/platforms/avr/drivers/i2c_master.c @@ -189,7 +189,7 @@ i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16 return (status < 0) ? status : I2C_STATUS_SUCCESS; } -i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { i2c_status_t status = i2c_start(devaddr | 0x00, timeout); if (status >= 0) { status = i2c_write(regaddr, timeout); @@ -204,7 +204,7 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, return status; } -i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { i2c_status_t status = i2c_start(devaddr | 0x00, timeout); if (status >= 0) { status = i2c_write(regaddr >> 8, timeout); @@ -223,7 +223,7 @@ i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* da return status; } -i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { i2c_status_t status = i2c_start(devaddr, timeout); if (status < 0) { goto error; @@ -256,7 +256,7 @@ error: return (status < 0) ? status : I2C_STATUS_SUCCESS; } -i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { i2c_status_t status = i2c_start(devaddr, timeout); if (status < 0) { goto error; diff --git a/platforms/avr/drivers/i2c_master.h b/platforms/avr/drivers/i2c_master.h index 04ef126c80..18587c4a57 100644 --- a/platforms/avr/drivers/i2c_master.h +++ b/platforms/avr/drivers/i2c_master.h @@ -21,6 +21,13 @@ #include +// ### DEPRECATED - DO NOT USE ### +#define i2c_writeReg(devaddr, regaddr, data, length, timeout) i2c_write_register(devaddr, regaddr, data, length, timeout) +#define i2c_writeReg16(devaddr, regaddr, data, length, timeout) i2c_write_register16(devaddr, regaddr, data, length, timeout) +#define i2c_readReg(devaddr, regaddr, data, length, timeout) i2c_read_register(devaddr, regaddr, data, length, timeout) +#define i2c_readReg16(devaddr, regaddr, data, length, timeout) i2c_read_register16(devaddr, regaddr, data, length, timeout) +// ############################### + #define I2C_READ 0x01 #define I2C_WRITE 0x00 @@ -40,8 +47,8 @@ int16_t i2c_read_ack(uint16_t timeout); int16_t i2c_read_nack(uint16_t timeout); i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout); i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); void i2c_stop(void); diff --git a/platforms/chibios/drivers/i2c_master.c b/platforms/chibios/drivers/i2c_master.c index 7c49f9d005..5ee2738e6d 100644 --- a/platforms/chibios/drivers/i2c_master.c +++ b/platforms/chibios/drivers/i2c_master.c @@ -170,7 +170,7 @@ i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16 return i2c_epilogue(status); } -i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); @@ -184,7 +184,7 @@ i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, return i2c_epilogue(status); } -i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout) { i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); @@ -199,14 +199,14 @@ i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* da return i2c_epilogue(status); } -i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); msg_t status = i2cMasterTransmitTimeout(&I2C_DRIVER, (i2c_address >> 1), ®addr, 1, data, length, TIME_MS2I(timeout)); return i2c_epilogue(status); } -i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { +i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout) { i2c_address = devaddr; i2cStart(&I2C_DRIVER, &i2cconfig); uint8_t register_packet[2] = {regaddr >> 8, regaddr & 0xFF}; diff --git a/platforms/chibios/drivers/i2c_master.h b/platforms/chibios/drivers/i2c_master.h index deee7ecc08..5f16367831 100644 --- a/platforms/chibios/drivers/i2c_master.h +++ b/platforms/chibios/drivers/i2c_master.h @@ -26,6 +26,13 @@ #include +// ### DEPRECATED - DO NOT USE ### +#define i2c_writeReg(devaddr, regaddr, data, length, timeout) i2c_write_register(devaddr, regaddr, data, length, timeout) +#define i2c_writeReg16(devaddr, regaddr, data, length, timeout) i2c_write_register16(devaddr, regaddr, data, length, timeout) +#define i2c_readReg(devaddr, regaddr, data, length, timeout) i2c_read_register(devaddr, regaddr, data, length, timeout) +#define i2c_readReg16(devaddr, regaddr, data, length, timeout) i2c_read_register16(devaddr, regaddr, data, length, timeout) +// ############################### + typedef int16_t i2c_status_t; #define I2C_STATUS_SUCCESS (0) @@ -36,8 +43,8 @@ void i2c_init(void); i2c_status_t i2c_start(uint8_t address); i2c_status_t i2c_transmit(uint8_t address, const uint8_t* data, uint16_t length, uint16_t timeout); i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_writeReg16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); -i2c_status_t i2c_readReg16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_write_register(uint8_t devaddr, uint8_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_write_register16(uint8_t devaddr, uint16_t regaddr, const uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_read_register(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); +i2c_status_t i2c_read_register16(uint8_t devaddr, uint16_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout); void i2c_stop(void); diff --git a/quantum/split_common/transport.c b/quantum/split_common/transport.c index aade3c98d7..83edc34859 100644 --- a/quantum/split_common/transport.c +++ b/quantum/split_common/transport.c @@ -56,7 +56,7 @@ i2c_status_t transport_trigger_callback(int8_t id) { // Kick off the "callback executor", now that data has been written to the slave split_shmem->transaction_id = id; split_transaction_desc_t *trans = &split_transaction_table[I2C_EXECUTE_CALLBACK]; - return i2c_writeReg(SLAVE_I2C_ADDRESS, trans->initiator2target_offset, split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size, SLAVE_I2C_TIMEOUT); + return i2c_write_register(SLAVE_I2C_ADDRESS, trans->initiator2target_offset, split_trans_initiator2target_buffer(trans), trans->initiator2target_buffer_size, SLAVE_I2C_TIMEOUT); } bool transport_execute_transaction(int8_t id, const void *initiator2target_buf, uint16_t initiator2target_length, void *target2initiator_buf, uint16_t target2initiator_length) { @@ -65,7 +65,7 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf, if (initiator2target_length > 0) { size_t len = trans->initiator2target_buffer_size < initiator2target_length ? trans->initiator2target_buffer_size : initiator2target_length; memcpy(split_trans_initiator2target_buffer(trans), initiator2target_buf, len); - if ((status = i2c_writeReg(SLAVE_I2C_ADDRESS, trans->initiator2target_offset, split_trans_initiator2target_buffer(trans), len, SLAVE_I2C_TIMEOUT)) < 0) { + if ((status = i2c_write_register(SLAVE_I2C_ADDRESS, trans->initiator2target_offset, split_trans_initiator2target_buffer(trans), len, SLAVE_I2C_TIMEOUT)) < 0) { return false; } } @@ -77,7 +77,7 @@ bool transport_execute_transaction(int8_t id, const void *initiator2target_buf, if (target2initiator_length > 0) { size_t len = trans->target2initiator_buffer_size < target2initiator_length ? trans->target2initiator_buffer_size : target2initiator_length; - if ((status = i2c_readReg(SLAVE_I2C_ADDRESS, trans->target2initiator_offset, split_trans_target2initiator_buffer(trans), len, SLAVE_I2C_TIMEOUT)) < 0) { + if ((status = i2c_read_register(SLAVE_I2C_ADDRESS, trans->target2initiator_offset, split_trans_target2initiator_buffer(trans), len, SLAVE_I2C_TIMEOUT)) < 0) { return false; } memcpy(target2initiator_buf, split_trans_target2initiator_buffer(trans), len); -- cgit v1.2.3 From a632593769758244f10f577adb69b30e06f64985 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 26 Jan 2024 16:32:06 +0000 Subject: Migrate and remove deprecated debug utils (#22961) --- keyboards/40percentclub/ut47/matrix.c | 2 +- keyboards/amjkeyboard/amj96/matrix.c | 2 +- keyboards/bioi/bluetooth_custom.c | 10 +--- keyboards/converter/ibm_terminal/matrix.c | 26 ++++----- keyboards/converter/m0110_usb/m0110.c | 3 +- keyboards/converter/palm_usb/matrix.c | 5 +- keyboards/converter/sun_usb/matrix.c | 2 +- keyboards/handwired/frenchdev/matrix.c | 2 +- keyboards/ibm/model_m/mschwingen/matrix.c | 3 +- keyboards/kinesis/alvicstep/matrix.c | 2 +- keyboards/sirius/unigo66/main.c | 2 +- quantum/led.c | 4 +- quantum/logging/debug.h | 90 ------------------------------- 13 files changed, 26 insertions(+), 127 deletions(-) (limited to 'quantum') diff --git a/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c index 97922e2dbe..02ed88b709 100644 --- a/keyboards/40percentclub/ut47/matrix.c +++ b/keyboards/40percentclub/ut47/matrix.c @@ -76,7 +76,7 @@ uint8_t matrix_scan(void) if (matrix_debouncing[i] != cols) { matrix_debouncing[i] = cols; if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); + dprintf("bounce!: %02X\n", debouncing); } debouncing = DEBOUNCE; } diff --git a/keyboards/amjkeyboard/amj96/matrix.c b/keyboards/amjkeyboard/amj96/matrix.c index 2999c6241b..7faf40d4fe 100644 --- a/keyboards/amjkeyboard/amj96/matrix.c +++ b/keyboards/amjkeyboard/amj96/matrix.c @@ -88,7 +88,7 @@ uint8_t matrix_scan(void) if (matrix_debouncing[i] != cols) { matrix_debouncing[i] = cols; if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); + dprintf("bounce!: %02X\n", debouncing); } debouncing = DEBOUNCE; } diff --git a/keyboards/bioi/bluetooth_custom.c b/keyboards/bioi/bluetooth_custom.c index 4ea277f731..c3e12d3c6a 100644 --- a/keyboards/bioi/bluetooth_custom.c +++ b/keyboards/bioi/bluetooth_custom.c @@ -59,9 +59,7 @@ static void bluefruit_trace_footer(void) static void bluefruit_serial_send(uint8_t data) { #ifdef BLUEFRUIT_TRACE_SERIAL - dprintf(" "); - debug_hex8(data); - dprintf(" "); + dprintf(" %02X ", data); #endif serial_send(data); } @@ -146,11 +144,7 @@ void bluetooth_send_consumer(uint16_t usage) uint16_t bitmap = CONSUMER2BLUEFRUIT(usage); #ifdef BLUEFRUIT_TRACE_SERIAL - dprintf("\nData: "); - debug_hex16(data); - dprintf("; bitmap: "); - debug_hex16(bitmap); - dprintf("\n"); + dprintf("\nData: %04X; bitmap: %04X\n", data, bitmap); bluefruit_trace_header(); #endif send_str(PSTR("AT+BLEHIDCONTROLKEY=0x")); diff --git a/keyboards/converter/ibm_terminal/matrix.c b/keyboards/converter/ibm_terminal/matrix.c index de346a0f70..d245ff61b2 100644 --- a/keyboards/converter/ibm_terminal/matrix.c +++ b/keyboards/converter/ibm_terminal/matrix.c @@ -87,23 +87,23 @@ uint8_t matrix_scan(void) uint8_t code; if ((code = ps2_host_recv())) { - debug("r"); debug_hex(code); debug(" "); + dprintf("r%02X ", code); } switch (state) { case RESET: - debug("wFF "); + dprint("wFF "); if (ps2_host_send(0xFF) == 0xFA) { - debug("[ack]\nRESET_RESPONSE: "); + dprint("[ack]\nRESET_RESPONSE: "); state = RESET_RESPONSE; } break; case RESET_RESPONSE: if (code == 0xAA) { - debug("[ok]\nKBD_ID: "); + dprint("[ok]\nKBD_ID: "); state = KBD_ID0; } else if (code) { - debug("err\nRESET: "); + dprint("err\nRESET: "); state = RESET; } break; @@ -115,14 +115,14 @@ uint8_t matrix_scan(void) break; case KBD_ID1: if (code) { - debug("\nCONFIG: "); + dprint("\nCONFIG: "); state = CONFIG; } break; case CONFIG: - debug("wF8 "); + dprint("wF8 "); if (ps2_host_send(0xF8) == 0xFA) { - debug("[ack]\nREADY\n"); + dprint("[ack]\nREADY\n"); state = READY; } break; @@ -132,16 +132,16 @@ uint8_t matrix_scan(void) break; case 0xF0: state = F0_BREAK; - debug(" "); + dprint(" "); break; default: // normal key make if (code < 0x88) { matrix_make(code); } else { - debug("unexpected scan code at READY: "); debug_hex(code); debug("\n"); + dprintf("unexpected scan code at READY: %02X\n", code); } state = READY; - debug("\n"); + dprint("\n"); } break; case F0_BREAK: // Break code @@ -152,10 +152,10 @@ uint8_t matrix_scan(void) if (code < 0x88) { matrix_break(code); } else { - debug("unexpected scan code at F0: "); debug_hex(code); debug("\n"); + dprintf("unexpected scan code at F0: %02X\n", code); } state = READY; - debug("\n"); + dprint("\n"); } break; } diff --git a/keyboards/converter/m0110_usb/m0110.c b/keyboards/converter/m0110_usb/m0110.c index f3097fb465..308eb936e3 100644 --- a/keyboards/converter/m0110_usb/m0110.c +++ b/keyboards/converter/m0110_usb/m0110.c @@ -312,8 +312,7 @@ static inline uint8_t instant(void) { m0110_send(M0110_INSTANT); uint8_t data = m0110_recv(); if (data != M0110_NULL) { - debug_hex(data); - debug(" "); + dprintf("%02X ", data); } return data; } diff --git a/keyboards/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c index 016b562254..8ae89deb6a 100644 --- a/keyboards/converter/palm_usb/matrix.c +++ b/keyboards/converter/palm_usb/matrix.c @@ -168,7 +168,7 @@ uint8_t get_serial_byte(void) { while(1) { code = uart_read(); if (code) { - debug_hex(code); debug(" "); + dprintf("%02X ", code); return code; } } @@ -316,8 +316,7 @@ uint8_t matrix_scan(void) last_activity = timer_read(); disconnect_counter=0; // if we are getting serial data, we're connected. - debug_hex(code); debug(" "); - + dprintf("%02X ", code); switch (code) { case 0xFD: // unexpected reset byte 2 diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c index bf1d5f807f..6d52d5cd6c 100644 --- a/keyboards/converter/sun_usb/matrix.c +++ b/keyboards/converter/sun_usb/matrix.c @@ -111,7 +111,7 @@ uint8_t matrix_scan(void) code = uart_read(); if (!code) return 0; - debug_hex(code); debug(" "); + dprintf("%02X ", code); switch (code) { case 0xFF: // reset success: FF 04 diff --git a/keyboards/handwired/frenchdev/matrix.c b/keyboards/handwired/frenchdev/matrix.c index 3afc6dcee6..af7c8b5444 100644 --- a/keyboards/handwired/frenchdev/matrix.c +++ b/keyboards/handwired/frenchdev/matrix.c @@ -151,7 +151,7 @@ uint8_t matrix_scan(void) if (matrix_debouncing[i] != cols) { matrix_debouncing[i] = cols; if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); + dprintf("bounce!: %02X\n", debouncing); } debouncing = DEBOUNCE; } diff --git a/keyboards/ibm/model_m/mschwingen/matrix.c b/keyboards/ibm/model_m/mschwingen/matrix.c index 9997b65975..361803edec 100644 --- a/keyboards/ibm/model_m/mschwingen/matrix.c +++ b/keyboards/ibm/model_m/mschwingen/matrix.c @@ -60,8 +60,7 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) row_data = spi_read() << 8; row_data |= spi_read(); - debug_hex8(~row_data); - dprint(" "); + dprintf("%02X ", ~row_data); // For each row... for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) { diff --git a/keyboards/kinesis/alvicstep/matrix.c b/keyboards/kinesis/alvicstep/matrix.c index 07df19e966..e1e637725b 100644 --- a/keyboards/kinesis/alvicstep/matrix.c +++ b/keyboards/kinesis/alvicstep/matrix.c @@ -116,7 +116,7 @@ uint8_t matrix_scan(void) if (matrix_debouncing[i] != row) { matrix_debouncing[i] = row; if (debouncing) { - debug("bounce!: "); debug_hex(debouncing); debug("\n"); + dprintf("bounce!: %02X\n", debouncing); } debouncing = DEBOUNCE; } diff --git a/keyboards/sirius/unigo66/main.c b/keyboards/sirius/unigo66/main.c index b4f2a91e49..4f8e2f0c94 100644 --- a/keyboards/sirius/unigo66/main.c +++ b/keyboards/sirius/unigo66/main.c @@ -85,7 +85,7 @@ int main(void) _delay_ms(1000); } - debug("init: done\n"); + dprintln("init: done"); for (;;) { keyboard_task(); diff --git a/quantum/led.c b/quantum/led.c index 8d86374a6f..1e7ee9db76 100644 --- a/quantum/led.c +++ b/quantum/led.c @@ -183,9 +183,7 @@ void led_task(void) { last_led_modification_time = timer_read32(); if (debug_keyboard) { - debug("led_task: "); - debug_hex8(led_status); - debug("\n"); + dprintf("led_task: %02X\n", led_status); } led_set(led_status); } diff --git a/quantum/logging/debug.h b/quantum/logging/debug.h index 8415310356..25d57b156b 100644 --- a/quantum/logging/debug.h +++ b/quantum/logging/debug.h @@ -69,101 +69,11 @@ extern debug_config_t debug_config; } while (0) # define dmsg(s) dprintf("%s at %d: %s\n", __FILE__, __LINE__, s) -/* Deprecated. DO NOT USE these anymore, use dprintf instead. */ -# define debug(s) \ - do { \ - if (debug_enable) print(s); \ - } while (0) -# define debugln(s) \ - do { \ - if (debug_enable) println(s); \ - } while (0) -# define debug_msg(s) \ - do { \ - if (debug_enable) { \ - print(__FILE__); \ - print(" at "); \ - print_dec(__LINE__); \ - print(" in "); \ - print(": "); \ - print(s); \ - } \ - } while (0) -# define debug_dec(data) \ - do { \ - if (debug_enable) print_dec(data); \ - } while (0) -# define debug_decs(data) \ - do { \ - if (debug_enable) print_decs(data); \ - } while (0) -# define debug_hex4(data) \ - do { \ - if (debug_enable) print_hex4(data); \ - } while (0) -# define debug_hex8(data) \ - do { \ - if (debug_enable) print_hex8(data); \ - } while (0) -# define debug_hex16(data) \ - do { \ - if (debug_enable) print_hex16(data); \ - } while (0) -# define debug_hex32(data) \ - do { \ - if (debug_enable) print_hex32(data); \ - } while (0) -# define debug_bin8(data) \ - do { \ - if (debug_enable) print_bin8(data); \ - } while (0) -# define debug_bin16(data) \ - do { \ - if (debug_enable) print_bin16(data); \ - } while (0) -# define debug_bin32(data) \ - do { \ - if (debug_enable) print_bin32(data); \ - } while (0) -# define debug_bin_reverse8(data) \ - do { \ - if (debug_enable) print_bin_reverse8(data); \ - } while (0) -# define debug_bin_reverse16(data) \ - do { \ - if (debug_enable) print_bin_reverse16(data); \ - } while (0) -# define debug_bin_reverse32(data) \ - do { \ - if (debug_enable) print_bin_reverse32(data); \ - } while (0) -# define debug_hex(data) debug_hex8(data) -# define debug_bin(data) debug_bin8(data) -# define debug_bin_reverse(data) debug_bin8(data) - #else /* NO_DEBUG */ # define dprint(s) # define dprintln(s) # define dprintf(fmt, ...) # define dmsg(s) -# define debug(s) -# define debugln(s) -# define debug_msg(s) -# define debug_dec(data) -# define debug_decs(data) -# define debug_hex4(data) -# define debug_hex8(data) -# define debug_hex16(data) -# define debug_hex32(data) -# define debug_bin8(data) -# define debug_bin16(data) -# define debug_bin32(data) -# define debug_bin_reverse8(data) -# define debug_bin_reverse16(data) -# define debug_bin_reverse32(data) -# define debug_hex(data) -# define debug_bin(data) -# define debug_bin_reverse(data) #endif /* NO_DEBUG */ -- cgit v1.2.3 From bb711456329beda1ab8573fbac3ad51bd398872b Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 27 Jan 2024 04:30:29 +0000 Subject: Tidy up print/debug logging headers (#22969) --- platforms/avr/_print.h | 7 ------- quantum/logging/debug.h | 26 +++++++------------------- quantum/logging/print.h | 36 +++++++++++++----------------------- 3 files changed, 20 insertions(+), 49 deletions(-) (limited to 'quantum') diff --git a/platforms/avr/_print.h b/platforms/avr/_print.h index 5c1fdd26d8..bf8247c2f3 100644 --- a/platforms/avr/_print.h +++ b/platforms/avr/_print.h @@ -24,10 +24,3 @@ #pragma once #include "avr/xprintf.h" - -// Create user & normal print defines -#define print(s) xputs(PSTR(s)) -#define println(s) xputs(PSTR(s "\r\n")) -#define uprint(s) xputs(PSTR(s)) -#define uprintln(s) xputs(PSTR(s "\r\n")) -#define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__) \ No newline at end of file diff --git a/quantum/logging/debug.h b/quantum/logging/debug.h index 25d57b156b..017f9b9181 100644 --- a/quantum/logging/debug.h +++ b/quantum/logging/debug.h @@ -54,26 +54,14 @@ extern debug_config_t debug_config; * Debug print utils */ #ifndef NO_DEBUG - -# define dprint(s) \ - do { \ - if (debug_enable) print(s); \ - } while (0) -# define dprintln(s) \ - do { \ - if (debug_enable) println(s); \ +# define dprintf(fmt, ...) \ + do { \ + if (debug_config.enable) xprintf(fmt, ##__VA_ARGS__); \ } while (0) -# define dprintf(fmt, ...) \ - do { \ - if (debug_enable) xprintf(fmt, ##__VA_ARGS__); \ - } while (0) -# define dmsg(s) dprintf("%s at %d: %s\n", __FILE__, __LINE__, s) - #else /* NO_DEBUG */ - -# define dprint(s) -# define dprintln(s) # define dprintf(fmt, ...) -# define dmsg(s) - #endif /* NO_DEBUG */ + +#define dprint(s) dprintf(s) +#define dprintln(s) dprintf(s "\r\n") +#define dmsg(s) dprintf("%s at %d: %s\n", __FILE__, __LINE__, s) diff --git a/quantum/logging/print.h b/quantum/logging/print.h index 4c4195de50..984bc10758 100644 --- a/quantum/logging/print.h +++ b/quantum/logging/print.h @@ -52,40 +52,27 @@ void print_set_sendchar(sendchar_func_t func); # if __has_include_next("_print.h") # include_next "_print.h" /* Include the platforms print.h */ # else -// Fall back to lib/printf -# include "printf.h" // lib/printf/printf.h - -// Create user & normal print defines -# define print(s) printf(s) -# define println(s) printf(s "\r\n") +# include "printf.h" // // Fall back to lib/printf/printf.h # define xprintf printf -# define uprint(s) printf(s) -# define uprintln(s) printf(s "\r\n") -# define uprintf printf - -# endif /* __has_include_next("_print.h") */ -#else /* NO_PRINT */ -# undef xprintf +# endif +#else // Remove print defines -# define print(s) -# define println(s) +# undef xprintf # define xprintf(fmt, ...) -# define uprintf(fmt, ...) -# define uprint(s) -# define uprintln(s) +#endif -#endif /* NO_PRINT */ +// Resolve before USER_PRINT can remove +#define uprintf xprintf #ifdef USER_PRINT // Remove normal print defines -# undef print -# undef println # undef xprintf -# define print(s) -# define println(s) # define xprintf(fmt, ...) #endif +#define print(s) xprintf(s) +#define println(s) xprintf(s "\r\n") + #define print_dec(i) xprintf("%u", i) #define print_decs(i) xprintf("%d", i) /* hex */ @@ -121,6 +108,9 @@ void print_set_sendchar(sendchar_func_t func); // // !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!! +#define uprint(s) uprintf(s) +#define uprintln(s) uprintf(s "\r\n") + /* decimal */ #define uprint_dec(i) uprintf("%u", i) #define uprint_decs(i) uprintf("%d", i) -- cgit v1.2.3 From 5cd31fda9c1302044f4423d940be7c888d15ad1a Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sun, 28 Jan 2024 22:51:58 +0000 Subject: Begin removal of bootmagic lite terminology (#22970) --- builddefs/common_features.mk | 15 --------- builddefs/generic_features.mk | 1 + quantum/bootmagic/bootmagic.c | 69 ++++++++++++++++++++++++++++++++++++++ quantum/bootmagic/bootmagic.h | 7 ++-- quantum/bootmagic/bootmagic_lite.c | 69 -------------------------------------- quantum/bootmagic/bootmagic_lite.h | 25 -------------- quantum/bootmagic/magic.c | 54 ----------------------------- quantum/bootmagic/magic.h | 18 ---------- quantum/keyboard.c | 58 +++++++++++++++++++++----------- quantum/keycode_config.c | 2 ++ quantum/quantum.h | 5 ++- 11 files changed, 120 insertions(+), 203 deletions(-) create mode 100644 quantum/bootmagic/bootmagic.c delete mode 100644 quantum/bootmagic/bootmagic_lite.c delete mode 100644 quantum/bootmagic/bootmagic_lite.h delete mode 100644 quantum/bootmagic/magic.c delete mode 100644 quantum/bootmagic/magic.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index a6193991f8..513a3678a9 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -608,24 +608,9 @@ ifeq ($(strip $(VIA_ENABLE)), yes) TRI_LAYER_ENABLE := yes endif -VALID_MAGIC_TYPES := yes -BOOTMAGIC_ENABLE ?= no -ifneq ($(strip $(BOOTMAGIC_ENABLE)), no) - ifeq ($(filter $(BOOTMAGIC_ENABLE),$(VALID_MAGIC_TYPES)),) - $(call CATASTROPHIC_ERROR,Invalid BOOTMAGIC_ENABLE,BOOTMAGIC_ENABLE="$(BOOTMAGIC_ENABLE)" is not a valid type of magic) - endif - ifneq ($(strip $(BOOTMAGIC_ENABLE)), no) - OPT_DEFS += -DBOOTMAGIC_LITE - QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/bootmagic_lite.c - endif -endif -COMMON_VPATH += $(QUANTUM_DIR)/bootmagic -QUANTUM_SRC += $(QUANTUM_DIR)/bootmagic/magic.c - VALID_CUSTOM_MATRIX_TYPES:= yes lite no CUSTOM_MATRIX ?= no - ifneq ($(strip $(CUSTOM_MATRIX)), yes) ifeq ($(filter $(CUSTOM_MATRIX),$(VALID_CUSTOM_MATRIX_TYPES)),) $(call CATASTROPHIC_ERROR,Invalid CUSTOM_MATRIX,CUSTOM_MATRIX="$(CUSTOM_MATRIX)" is not a valid custom matrix type) diff --git a/builddefs/generic_features.mk b/builddefs/generic_features.mk index 9c86958625..dc34a64230 100644 --- a/builddefs/generic_features.mk +++ b/builddefs/generic_features.mk @@ -21,6 +21,7 @@ SPACE_CADET_ENABLE ?= yes GENERIC_FEATURES = \ AUTO_SHIFT \ AUTOCORRECT \ + BOOTMAGIC \ CAPS_WORD \ COMBO \ COMMAND \ diff --git a/quantum/bootmagic/bootmagic.c b/quantum/bootmagic/bootmagic.c new file mode 100644 index 0000000000..efce6bfd12 --- /dev/null +++ b/quantum/bootmagic/bootmagic.c @@ -0,0 +1,69 @@ +/* Copyright 2021 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include "bootmagic.h" +#include "matrix.h" +#include "keyboard.h" +#include "wait.h" +#include "eeconfig.h" +#include "bootloader.h" + +/** \brief Reset eeprom + * + * ...just incase someone wants to only change the eeprom behaviour + */ +__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) { + eeconfig_disable(); +} + +/** \brief The lite version of TMK's bootmagic based on Wilba. + * + * 100% less potential for accidentally making the keyboard do stupid things. + */ +__attribute__((weak)) void bootmagic_lite(void) { + // We need multiple scans because debouncing can't be turned off. + matrix_scan(); +#if defined(DEBOUNCE) && DEBOUNCE > 0 + wait_ms(DEBOUNCE * 2); +#else + wait_ms(30); +#endif + matrix_scan(); + + // If the configured key (commonly Esc) is held down on power up, + // reset the EEPROM valid state and jump to bootloader. + // This isn't very generalized, but we need something that doesn't + // rely on user's keymaps in firmware or EEPROM. + uint8_t row = BOOTMAGIC_LITE_ROW; + uint8_t col = BOOTMAGIC_LITE_COLUMN; + +#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT) + if (!is_keyboard_left()) { + row = BOOTMAGIC_LITE_ROW_RIGHT; + col = BOOTMAGIC_LITE_COLUMN_RIGHT; + } +#endif + + if (matrix_get_row(row) & (1 << col)) { + bootmagic_lite_reset_eeprom(); + + // Jump to bootloader. + bootloader_jump(); + } +} + +void bootmagic(void) { + bootmagic_lite(); +} diff --git a/quantum/bootmagic/bootmagic.h b/quantum/bootmagic/bootmagic.h index db826025ce..4b5f5f7c5e 100644 --- a/quantum/bootmagic/bootmagic.h +++ b/quantum/bootmagic/bootmagic.h @@ -15,8 +15,11 @@ */ #pragma once -#if defined(BOOTMAGIC_LITE) -# include "bootmagic_lite.h" +#ifndef BOOTMAGIC_LITE_COLUMN +# define BOOTMAGIC_LITE_COLUMN 0 +#endif +#ifndef BOOTMAGIC_LITE_ROW +# define BOOTMAGIC_LITE_ROW 0 #endif void bootmagic(void); diff --git a/quantum/bootmagic/bootmagic_lite.c b/quantum/bootmagic/bootmagic_lite.c deleted file mode 100644 index efce6bfd12..0000000000 --- a/quantum/bootmagic/bootmagic_lite.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include "bootmagic.h" -#include "matrix.h" -#include "keyboard.h" -#include "wait.h" -#include "eeconfig.h" -#include "bootloader.h" - -/** \brief Reset eeprom - * - * ...just incase someone wants to only change the eeprom behaviour - */ -__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) { - eeconfig_disable(); -} - -/** \brief The lite version of TMK's bootmagic based on Wilba. - * - * 100% less potential for accidentally making the keyboard do stupid things. - */ -__attribute__((weak)) void bootmagic_lite(void) { - // We need multiple scans because debouncing can't be turned off. - matrix_scan(); -#if defined(DEBOUNCE) && DEBOUNCE > 0 - wait_ms(DEBOUNCE * 2); -#else - wait_ms(30); -#endif - matrix_scan(); - - // If the configured key (commonly Esc) is held down on power up, - // reset the EEPROM valid state and jump to bootloader. - // This isn't very generalized, but we need something that doesn't - // rely on user's keymaps in firmware or EEPROM. - uint8_t row = BOOTMAGIC_LITE_ROW; - uint8_t col = BOOTMAGIC_LITE_COLUMN; - -#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT) - if (!is_keyboard_left()) { - row = BOOTMAGIC_LITE_ROW_RIGHT; - col = BOOTMAGIC_LITE_COLUMN_RIGHT; - } -#endif - - if (matrix_get_row(row) & (1 << col)) { - bootmagic_lite_reset_eeprom(); - - // Jump to bootloader. - bootloader_jump(); - } -} - -void bootmagic(void) { - bootmagic_lite(); -} diff --git a/quantum/bootmagic/bootmagic_lite.h b/quantum/bootmagic/bootmagic_lite.h deleted file mode 100644 index 17777e6b4a..0000000000 --- a/quantum/bootmagic/bootmagic_lite.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#pragma once - -#ifndef BOOTMAGIC_LITE_COLUMN -# define BOOTMAGIC_LITE_COLUMN 0 -#endif -#ifndef BOOTMAGIC_LITE_ROW -# define BOOTMAGIC_LITE_ROW 0 -#endif - -void bootmagic_lite(void); diff --git a/quantum/bootmagic/magic.c b/quantum/bootmagic/magic.c deleted file mode 100644 index d68df3fa58..0000000000 --- a/quantum/bootmagic/magic.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#include -#include -#include "wait.h" -#include "matrix.h" -#include "bootloader.h" -#include "debug.h" -#include "keycode_config.h" -#include "host.h" -#include "action_layer.h" -#include "eeconfig.h" -#include "bootmagic.h" - -keymap_config_t keymap_config; - -__attribute__((weak)) void bootmagic(void) {} - -/** \brief Magic - * - * FIXME: Needs doc - */ -void magic(void) { - /* check signature */ - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } - - /* init globals */ - debug_config.raw = eeconfig_read_debug(); - keymap_config.raw = eeconfig_read_keymap(); - - bootmagic(); - - /* read here just incase bootmagic process changed its value */ - layer_state_t default_layer = (layer_state_t)eeconfig_read_default_layer(); - default_layer_set(default_layer); - - /* Also initialize layer state to trigger callback functions for layer_state */ - layer_state_set_kb((layer_state_t)layer_state); -} diff --git a/quantum/bootmagic/magic.h b/quantum/bootmagic/magic.h deleted file mode 100644 index 2c3969b85c..0000000000 --- a/quantum/bootmagic/magic.h +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -#pragma once - -void magic(void); diff --git a/quantum/keyboard.c b/quantum/keyboard.c index b5fa1a6e2e..9bdf6e6344 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -20,7 +20,6 @@ along with this program. If not, see . #include "keycode_config.h" #include "matrix.h" #include "keymap_introspection.h" -#include "magic.h" #include "host.h" #include "led.h" #include "keycode.h" @@ -33,6 +32,9 @@ along with this program. If not, see . #include "sendchar.h" #include "eeconfig.h" #include "action_layer.h" +#ifdef BOOTMAGIC_ENABLE +# include "bootmagic.h" +#endif #ifdef AUDIO_ENABLE # include "audio.h" #endif @@ -370,28 +372,30 @@ void housekeeping_task(void) { housekeeping_task_user(); } -/** \brief Init tasks previously located in matrix_init_quantum +/** \brief quantum_init * - * TODO: rationalise against keyboard_init and current split role + * Init global state */ void quantum_init(void) { - magic(); - led_init_ports(); -#ifdef BACKLIGHT_ENABLE - backlight_init_ports(); -#endif -#ifdef AUDIO_ENABLE - audio_init(); -#endif -#ifdef LED_MATRIX_ENABLE - led_matrix_init(); -#endif -#ifdef RGB_MATRIX_ENABLE - rgb_matrix_init(); -#endif -#if defined(UNICODE_COMMON_ENABLE) - unicode_input_mode_init(); + /* check signature */ + if (!eeconfig_is_enabled()) { + eeconfig_init(); + } + + /* init globals */ + debug_config.raw = eeconfig_read_debug(); + keymap_config.raw = eeconfig_read_keymap(); + +#ifdef BOOTMAGIC_ENABLE + bootmagic(); #endif + + /* read here just incase bootmagic process changed its value */ + layer_state_t default_layer = (layer_state_t)eeconfig_read_default_layer(); + default_layer_set(default_layer); + + /* Also initialize layer state to trigger callback functions for layer_state */ + layer_state_set_kb((layer_state_t)layer_state); } /** \brief keyboard_init @@ -412,6 +416,22 @@ void keyboard_init(void) { #endif matrix_init(); quantum_init(); + led_init_ports(); +#ifdef BACKLIGHT_ENABLE + backlight_init_ports(); +#endif +#ifdef AUDIO_ENABLE + audio_init(); +#endif +#ifdef LED_MATRIX_ENABLE + led_matrix_init(); +#endif +#ifdef RGB_MATRIX_ENABLE + rgb_matrix_init(); +#endif +#if defined(UNICODE_COMMON_ENABLE) + unicode_input_mode_init(); +#endif #if defined(CRC_ENABLE) crc_init(); #endif diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c index 864488a65c..cbfbcc8140 100644 --- a/quantum/keycode_config.c +++ b/quantum/keycode_config.c @@ -16,6 +16,8 @@ #include "keycode_config.h" +keymap_config_t keymap_config; + /** \brief keycode_config * * This function is used to check a specific keycode against the bootmagic config, diff --git a/quantum/quantum.h b/quantum/quantum.h index 996e93a12f..98d848581d 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -42,7 +42,6 @@ #include "action_layer.h" #include "eeconfig.h" #include "bootloader.h" -#include "bootmagic.h" #include "timer.h" #include "sync_timer.h" #include "gpio.h" @@ -59,6 +58,10 @@ #include #include +#ifdef BOOTMAGIC_ENABLE +# include "bootmagic.h" +#endif + #ifdef DEFERRED_EXEC_ENABLE # include "deferred_exec.h" #endif -- cgit v1.2.3 From 734c7afa7d142e9d052d067615540d067ed4fdcf Mon Sep 17 00:00:00 2001 From: Fabien Fellay Date: Tue, 30 Jan 2024 04:56:32 +0100 Subject: Add missing rgb matrix default parameters (#22281) --- docs/feature_led_matrix.md | 1 + docs/feature_rgb_matrix.md | 3 ++- quantum/led_matrix/led_matrix.c | 2 +- quantum/led_matrix/led_matrix.h | 4 ++++ quantum/rgb_matrix/rgb_matrix.c | 2 +- quantum/rgb_matrix/rgb_matrix.h | 4 ++++ 6 files changed, 13 insertions(+), 3 deletions(-) (limited to 'quantum') diff --git a/docs/feature_led_matrix.md b/docs/feature_led_matrix.md index 080a693d18..6cb173face 100644 --- a/docs/feature_led_matrix.md +++ b/docs/feature_led_matrix.md @@ -365,6 +365,7 @@ For inspiration and examples, check out the built-in effects under `quantum/led_ #define LED_MATRIX_DEFAULT_MODE LED_MATRIX_SOLID // Sets the default mode, if none has been set #define LED_MATRIX_DEFAULT_VAL LED_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set #define LED_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set +#define LED_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set #define LED_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR ``` diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 5a67f64c1b..25c924b9c9 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -873,12 +873,13 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master #define RGB_MATRIX_LED_PROCESS_LIMIT (RGB_MATRIX_LED_COUNT + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness) #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness) #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 200 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255 +#define RGB_MATRIX_DEFAULT_ON true // Sets the default enabled state, if none has been set #define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT // Sets the default mode, if none has been set #define RGB_MATRIX_DEFAULT_HUE 0 // Sets the default hue value, if none has been set #define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set -#define RGB_MATRIX_DEFAULT_ON true // Sets the default enabled state, if none has been set #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set #define RGB_MATRIX_DEFAULT_SPD 127 // Sets the default animation speed, if none has been set +#define RGB_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL // Sets the default LED flags, if none has been set #define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature) #define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right. // If reactive effects are enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index 760a8b7484..c0fb4c810b 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -98,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); } diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index eeaeee20b5..941d42aeca 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -58,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 diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index 4865664ac0..655aca1867 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -100,7 +100,7 @@ void eeconfig_update_rgb_matrix_default(void) { rgb_matrix_config.mode = RGB_MATRIX_DEFAULT_MODE; rgb_matrix_config.hsv = (HSV){RGB_MATRIX_DEFAULT_HUE, RGB_MATRIX_DEFAULT_SAT, RGB_MATRIX_DEFAULT_VAL}; rgb_matrix_config.speed = RGB_MATRIX_DEFAULT_SPD; - rgb_matrix_config.flags = LED_FLAG_ALL; + rgb_matrix_config.flags = RGB_MATRIX_DEFAULT_FLAGS; eeconfig_flush_rgb_matrix(true); } diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index b1bf839bf6..f8a6845e02 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -78,6 +78,10 @@ # define RGB_MATRIX_DEFAULT_SPD UINT8_MAX / 2 #endif +#ifndef RGB_MATRIX_DEFAULT_FLAGS +# define RGB_MATRIX_DEFAULT_FLAGS LED_FLAG_ALL +#endif + #ifndef RGB_MATRIX_LED_FLUSH_LIMIT # define RGB_MATRIX_LED_FLUSH_LIMIT 16 #endif -- cgit v1.2.3 From 3dee67a05a7f64991924dd92762194a9233e3b2f Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Thu, 1 Feb 2024 11:58:30 +0000 Subject: Remove redundant steno eeconfig init (#22680) --- quantum/process_keycode/process_steno.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'quantum') diff --git a/quantum/process_keycode/process_steno.c b/quantum/process_keycode/process_steno.c index bd4361580b..c491d6f1d8 100644 --- a/quantum/process_keycode/process_steno.c +++ b/quantum/process_keycode/process_steno.c @@ -128,9 +128,6 @@ static const uint16_t combinedmap_second[] PROGMEM = {STN_S2, STN_KL, STN_WL, ST #ifdef STENO_ENABLE_ALL void steno_init(void) { - if (!eeconfig_is_enabled()) { - eeconfig_init(); - } mode = eeprom_read_byte(EECONFIG_STENOMODE); } -- cgit v1.2.3 From 6890c1aeb82c0c2239841db57e1bd99c3a0651a5 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 16 Feb 2024 09:54:09 +0000 Subject: Workaround for `make test:all DEBUG=1` (#23047) --- quantum/logging/debug.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'quantum') diff --git a/quantum/logging/debug.h b/quantum/logging/debug.h index 017f9b9181..d0590474c0 100644 --- a/quantum/logging/debug.h +++ b/quantum/logging/debug.h @@ -17,6 +17,10 @@ along with this program. If not, see . #pragma once +#ifndef PROTOCOL_ARM_ATSAM +# include +#endif + #include #include "print.h" -- cgit v1.2.3 From b8646bc40bd616167da150f6da4eda372f7de23d Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 17 Feb 2024 00:18:26 +1100 Subject: Update naming convention for GPIO control macros (#23085) --- docs/custom_quantum_functions.md | 10 +++++----- docs/feature_led_indicators.md | 12 ++++++------ docs/gpio_control.md | 38 +++++++++++++++++++------------------- docs/i2c_driver.md | 4 ++-- platforms/arm_atsam/gpio.h | 24 ++++++++++++------------ platforms/avr/gpio.h | 22 +++++++++++----------- platforms/chibios/gpio.h | 34 +++++++++++++++++----------------- platforms/gpio.h | 19 ++++++++++++++++++- quantum/encoder/tests/mock.c | 4 ++-- quantum/encoder/tests/mock.h | 8 ++++---- quantum/encoder/tests/mock_split.c | 4 ++-- quantum/encoder/tests/mock_split.h | 8 ++++---- 12 files changed, 102 insertions(+), 85 deletions(-) (limited to 'quantum') diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md index 957633837c..bc3b28bbba 100644 --- a/docs/custom_quantum_functions.md +++ b/docs/custom_quantum_functions.md @@ -119,11 +119,11 @@ void keyboard_pre_init_user(void) { // Call the keyboard pre init code. // Set our LED pins as output - setPinOutput(B0); - setPinOutput(B1); - setPinOutput(B2); - setPinOutput(B3); - setPinOutput(B4); + gpio_set_pin_output(B0); + gpio_set_pin_output(B1); + gpio_set_pin_output(B2); + gpio_set_pin_output(B3); + gpio_set_pin_output(B4); } ``` diff --git a/docs/feature_led_indicators.md b/docs/feature_led_indicators.md index 1f71cdb1c8..b35a174490 100644 --- a/docs/feature_led_indicators.md +++ b/docs/feature_led_indicators.md @@ -56,16 +56,16 @@ This is a template indicator function that can be implemented on keyboard level bool led_update_kb(led_t led_state) { bool res = led_update_user(led_state); if(res) { - // writePin sets the pin high for 1 and low for 0. + // gpio_write_pin sets the pin high for 1 and low for 0. // In this example the pins are inverted, setting // it low/0 turns it on, and high/1 turns the LED off. // This behavior depends on whether the LED is between the pin // and VCC or the pin and GND. - writePin(B0, !led_state.num_lock); - writePin(B1, !led_state.caps_lock); - writePin(B2, !led_state.scroll_lock); - writePin(B3, !led_state.compose); - writePin(B4, !led_state.kana); + gpio_write_pin(B0, !led_state.num_lock); + gpio_write_pin(B1, !led_state.caps_lock); + gpio_write_pin(B2, !led_state.scroll_lock); + gpio_write_pin(B3, !led_state.compose); + gpio_write_pin(B4, !led_state.kana); } return res; } diff --git a/docs/gpio_control.md b/docs/gpio_control.md index 12413dfc8e..90798fc87b 100644 --- a/docs/gpio_control.md +++ b/docs/gpio_control.md @@ -2,29 +2,29 @@ QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms. -## Functions :id=functions - -The following functions provide basic control of GPIOs and are found in `platforms//gpio.h`. - -| Function | Description | Old AVR Examples | Old ChibiOS/ARM Examples | -|------------------------------|-----------------------------------------------------|-------------------------------------------------|--------------------------------------------------| -| `setPinInput(pin)` | Set pin as input with high impedance (High-Z) | `DDRB &= ~(1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT)` | -| `setPinInputHigh(pin)` | Set pin as input with builtin pull-up resistor | `DDRB &= ~(1<<2); PORTB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)` | -| `setPinInputLow(pin)` | Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR) | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)` | -| `setPinOutput(pin)` | Set pin as output (alias of `setPinOutputPushPull`) | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` | -| `setPinOutputPushPull(pin)` | Set pin as output, push/pull mode | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` | -| `setPinOutputOpenDrain(pin)` | Set pin as output, open-drain mode | N/A (Not implemented on AVR) | `palSetLineMode(pin, PAL_MODE_OUTPUT_OPENDRAIN)` | -| `writePinHigh(pin)` | Set pin level as high, assuming it is an output | `PORTB \|= (1<<2)` | `palSetLine(pin)` | -| `writePinLow(pin)` | Set pin level as low, assuming it is an output | `PORTB &= ~(1<<2)` | `palClearLine(pin)` | -| `writePin(pin, level)` | Set pin level, assuming it is an output | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` | -| `readPin(pin)` | Returns the level of the pin | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)` | `palReadLine(pin)` | -| `togglePin(pin)` | Invert pin level, assuming it is an output | `PORTB ^= (1<<2)` | `palToggleLine(pin)` | +## Macros :id=macros + +The following macros provide basic control of GPIOs and are found in `platforms//gpio.h`. + +|Macro |Description | +|-------------------------------------|---------------------------------------------------------------------| +|`gpio_set_pin_input(pin)` |Set pin as input with high impedance (High-Z) | +|`gpio_set_pin_input_high(pin)` |Set pin as input with builtin pull-up resistor | +|`gpio_set_pin_input_low(pin)` |Set pin as input with builtin pull-down resistor (unavailable on AVR)| +|`gpio_set_pin_output(pin)` |Set pin as output (alias of `gpio_set_pin_output_push_pull`) | +|`gpio_set_pin_output_push_pull(pin)` |Set pin as output, push/pull mode | +|`gpio_set_pin_output_open_drain(pin)`|Set pin as output, open-drain mode (unavailable on AVR and ATSAM) | +|`gpio_write_pin_high(pin)` |Set pin level as high, assuming it is an output | +|`gpio_write_pin_low(pin)` |Set pin level as low, assuming it is an output | +|`gpio_write_pin(pin, level)` |Set pin level, assuming it is an output | +|`gpio_read_pin(pin)` |Returns the level of the pin | +|`gpio_toggle_pin(pin)` |Invert pin level, assuming it is an output | ## Advanced Settings :id=advanced-settings -Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device and include any needed libraries. For AVR, the standard avr/io.h library is used; for STM32, the ChibiOS [PAL library](https://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used. +Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device. For AVR, the standard `avr/io.h` library is used; for STM32, the ChibiOS [PAL library](https://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used. -## Atomic Operation +## Atomic Operation :id=atomic-operation The above functions are not always guaranteed to work atomically. Therefore, if you want to prevent interruptions in the middle of operations when using multiple combinations of the above functions, use the following `ATOMIC_BLOCK_FORCEON` macro. diff --git a/docs/i2c_driver.md b/docs/i2c_driver.md index 868715a62c..9a3c08b90b 100644 --- a/docs/i2c_driver.md +++ b/docs/i2c_driver.md @@ -127,8 +127,8 @@ This function is weakly defined, meaning it can be overridden if necessary for y ```c void i2c_init(void) { - setPinInput(B6); // Try releasing special pins for a short time - setPinInput(B7); + gpio_set_pin_input(B6); // Try releasing special pins for a short time + gpio_set_pin_input(B7); wait_ms(10); // Wait for the release to happen palSetPadMode(GPIOB, 6, PAL_MODE_ALTERNATE(4) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_PUPDR_PULLUP); // Set B6 to I2C function diff --git a/platforms/arm_atsam/gpio.h b/platforms/arm_atsam/gpio.h index a42aaff54d..fd8caeab0b 100644 --- a/platforms/arm_atsam/gpio.h +++ b/platforms/arm_atsam/gpio.h @@ -15,7 +15,7 @@ */ #pragma once -#include "stdint.h" +#include #include "samd51j18a.h" #include "pin_defs.h" @@ -26,13 +26,13 @@ typedef uint8_t pin_t; #define SAMD_PIN(pin) ((pin)&0x1f) #define SAMD_PIN_MASK(pin) (1 << ((pin)&0x1f)) -#define setPinInput(pin) \ +#define gpio_set_pin_input(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].PINCFG[SAMD_PIN(pin)].bit.INEN = 1; \ PORT->Group[SAMD_PORT(pin)].DIRCLR.reg = SAMD_PIN_MASK(pin); \ } while (0) -#define setPinInputHigh(pin) \ +#define gpio_set_pin_input_high(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].DIRCLR.reg = SAMD_PIN_MASK(pin); \ PORT->Group[SAMD_PORT(pin)].OUTSET.reg = SAMD_PIN_MASK(pin); \ @@ -40,7 +40,7 @@ typedef uint8_t pin_t; PORT->Group[SAMD_PORT(pin)].PINCFG[SAMD_PIN(pin)].bit.PULLEN = 1; \ } while (0) -#define setPinInputLow(pin) \ +#define gpio_set_pin_input_low(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].DIRCLR.reg = SAMD_PIN_MASK(pin); \ PORT->Group[SAMD_PORT(pin)].OUTCLR.reg = SAMD_PIN_MASK(pin); \ @@ -48,27 +48,27 @@ typedef uint8_t pin_t; PORT->Group[SAMD_PORT(pin)].PINCFG[SAMD_PIN(pin)].bit.PULLEN = 1; \ } while (0) -#define setPinOutputPushPull(pin) \ +#define gpio_set_pin_output_push_pull(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].DIRSET.reg = SAMD_PIN_MASK(pin); \ PORT->Group[SAMD_PORT(pin)].OUTCLR.reg = SAMD_PIN_MASK(pin); \ } while (0) -#define setPinOutputOpenDrain(pin) _Static_assert(0, "arm_atsam platform does not implement an open-drain output") +#define gpio_set_pin_output_open_drain(pin) _Static_assert(0, "Open-drain outputs are not available on ATSAM") -#define setPinOutput(pin) setPinOutputPushPull(pin) +#define gpio_set_pin_output(pin) gpio_set_pin_output_push_pull(pin) -#define writePinHigh(pin) \ +#define gpio_write_pin_high(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].OUTSET.reg = SAMD_PIN_MASK(pin); \ } while (0) -#define writePinLow(pin) \ +#define gpio_write_pin_low(pin) \ do { \ PORT->Group[SAMD_PORT(pin)].OUTCLR.reg = SAMD_PIN_MASK(pin); \ } while (0) -#define writePin(pin, level) \ +#define gpio_write_pin(pin, level) \ do { \ if (level) \ PORT->Group[SAMD_PORT(pin)].OUTSET.reg = SAMD_PIN_MASK(pin); \ @@ -76,6 +76,6 @@ typedef uint8_t pin_t; PORT->Group[SAMD_PORT(pin)].OUTCLR.reg = SAMD_PIN_MASK(pin); \ } while (0) -#define readPin(pin) ((PORT->Group[SAMD_PORT(pin)].IN.reg & SAMD_PIN_MASK(pin)) != 0) +#define gpio_read_pin(pin) ((PORT->Group[SAMD_PORT(pin)].IN.reg & SAMD_PIN_MASK(pin)) != 0) -#define togglePin(pin) (PORT->Group[SAMD_PORT(pin)].OUTTGL.reg = SAMD_PIN_MASK(pin)) +#define gpio_toggle_pin(pin) (PORT->Group[SAMD_PORT(pin)].OUTTGL.reg = SAMD_PIN_MASK(pin)) diff --git a/platforms/avr/gpio.h b/platforms/avr/gpio.h index 95f15c28dc..6f089bc663 100644 --- a/platforms/avr/gpio.h +++ b/platforms/avr/gpio.h @@ -22,17 +22,17 @@ typedef uint8_t pin_t; /* Operation of GPIO by pin. */ -#define setPinInput(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) -#define setPinInputHigh(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) -#define setPinInputLow(pin) _Static_assert(0, "AVR processors cannot implement an input as pull low") -#define setPinOutputPushPull(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF)) -#define setPinOutputOpenDrain(pin) _Static_assert(0, "AVR platform does not implement an open-drain output") -#define setPinOutput(pin) setPinOutputPushPull(pin) +#define gpio_set_pin_input(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) +#define gpio_set_pin_input_high(pin) (DDRx_ADDRESS(pin) &= ~_BV((pin)&0xF), PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) +#define gpio_set_pin_input_low(pin) _Static_assert(0, "GPIO pulldowns in input mode are not available on AVR") +#define gpio_set_pin_output_push_pull(pin) (DDRx_ADDRESS(pin) |= _BV((pin)&0xF)) +#define gpio_set_pin_output_open_drain(pin) _Static_assert(0, "Open-drain outputs are not available on AVR") +#define gpio_set_pin_output(pin) gpio_set_pin_output_push_pull(pin) -#define writePinHigh(pin) (PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) -#define writePinLow(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) -#define writePin(pin, level) ((level) ? writePinHigh(pin) : writePinLow(pin)) +#define gpio_write_pin_high(pin) (PORTx_ADDRESS(pin) |= _BV((pin)&0xF)) +#define gpio_write_pin_low(pin) (PORTx_ADDRESS(pin) &= ~_BV((pin)&0xF)) +#define gpio_write_pin(pin, level) ((level) ? gpio_write_pin_high(pin) : gpio_write_pin_low(pin)) -#define readPin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF))) +#define gpio_read_pin(pin) ((bool)(PINx_ADDRESS(pin) & _BV((pin)&0xF))) -#define togglePin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF)) +#define gpio_toggle_pin(pin) (PORTx_ADDRESS(pin) ^= _BV((pin)&0xF)) diff --git a/platforms/chibios/gpio.h b/platforms/chibios/gpio.h index 80551abac5..a8d6554f29 100644 --- a/platforms/chibios/gpio.h +++ b/platforms/chibios/gpio.h @@ -22,24 +22,24 @@ typedef ioline_t pin_t; /* Operation of GPIO by pin. */ -#define setPinInput(pin) palSetLineMode((pin), PAL_MODE_INPUT) -#define setPinInputHigh(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLUP) -#define setPinInputLow(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLDOWN) -#define setPinOutputPushPull(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_PUSHPULL) -#define setPinOutputOpenDrain(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_OPENDRAIN) -#define setPinOutput(pin) setPinOutputPushPull(pin) +#define gpio_set_pin_input(pin) palSetLineMode((pin), PAL_MODE_INPUT) +#define gpio_set_pin_input_high(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLUP) +#define gpio_set_pin_input_low(pin) palSetLineMode((pin), PAL_MODE_INPUT_PULLDOWN) +#define gpio_set_pin_output_push_pull(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_PUSHPULL) +#define gpio_set_pin_output_open_drain(pin) palSetLineMode((pin), PAL_MODE_OUTPUT_OPENDRAIN) +#define gpio_set_pin_output(pin) gpio_set_pin_output_push_pull(pin) -#define writePinHigh(pin) palSetLine(pin) -#define writePinLow(pin) palClearLine(pin) -#define writePin(pin, level) \ - do { \ - if (level) { \ - writePinHigh(pin); \ - } else { \ - writePinLow(pin); \ - } \ +#define gpio_write_pin_high(pin) palSetLine(pin) +#define gpio_write_pin_low(pin) palClearLine(pin) +#define gpio_write_pin(pin, level) \ + do { \ + if (level) { \ + gpio_write_pin_high(pin); \ + } else { \ + gpio_write_pin_low(pin); \ + } \ } while (0) -#define readPin(pin) palReadLine(pin) +#define gpio_read_pin(pin) palReadLine(pin) -#define togglePin(pin) palToggleLine(pin) +#define gpio_toggle_pin(pin) palToggleLine(pin) diff --git a/platforms/gpio.h b/platforms/gpio.h index b47f6f8e43..6a87e75b01 100644 --- a/platforms/gpio.h +++ b/platforms/gpio.h @@ -19,4 +19,21 @@ #if __has_include_next("gpio.h") # include_next "gpio.h" /* Include the platforms gpio.h */ -#endif \ No newline at end of file +#endif + +// ======== DEPRECATED DEFINES - DO NOT USE ======== + +#define setPinInput(pin) gpio_set_pin_input(pin) +#define setPinInputHigh(pin) gpio_set_pin_input_high(pin) +#define setPinInputLow(pin) gpio_set_pin_input_low(pin) +#define setPinOutputPushPull(pin) gpio_set_pin_output_push_pull(pin) +#define setPinOutputOpenDrain(pin) gpio_set_pin_output_open_drain(pin) +#define setPinOutput(pin) gpio_set_pin_output_push_pull(pin) + +#define writePinHigh(pin) gpio_write_pin_high(pin) +#define writePinLow(pin) gpio_write_pin_low(pin) +#define writePin(pin, level) gpio_write_pin(pin, level) + +#define readPin(pin) gpio_read_pin(pin) + +#define togglePin(pin) gpio_toggle_pin(pin) diff --git a/quantum/encoder/tests/mock.c b/quantum/encoder/tests/mock.c index 61f2f8294d..1524e61ca4 100644 --- a/quantum/encoder/tests/mock.c +++ b/quantum/encoder/tests/mock.c @@ -19,14 +19,14 @@ bool pins[32] = {0}; bool pinIsInputHigh[32] = {0}; -uint8_t mockSetPinInputHigh(pin_t pin) { +uint8_t mock_set_pin_input_high(pin_t pin) { // dprintf("Setting pin %d input high.", pin); pins[pin] = true; pinIsInputHigh[pin] = true; return 0; } -bool mockReadPin(pin_t pin) { +bool mock_read_pin(pin_t pin) { return pins[pin]; } diff --git a/quantum/encoder/tests/mock.h b/quantum/encoder/tests/mock.h index 80c336b5ef..28774b82ab 100644 --- a/quantum/encoder/tests/mock.h +++ b/quantum/encoder/tests/mock.h @@ -24,11 +24,11 @@ typedef uint8_t pin_t; extern bool pins[]; extern bool pinIsInputHigh[]; -#define setPinInputHigh(pin) (mockSetPinInputHigh(pin)) -#define readPin(pin) (mockReadPin(pin)) +#define gpio_set_pin_input_high(pin) (mock_set_pin_input_high(pin)) +#define gpio_read_pin(pin) (mock_read_pin(pin)) -uint8_t mockSetPinInputHigh(pin_t pin); +uint8_t mock_set_pin_input_high(pin_t pin); -bool mockReadPin(pin_t pin); +bool mock_read_pin(pin_t pin); bool setPin(pin_t pin, bool val); diff --git a/quantum/encoder/tests/mock_split.c b/quantum/encoder/tests/mock_split.c index 5cc6cd19e1..f024c2058d 100644 --- a/quantum/encoder/tests/mock_split.c +++ b/quantum/encoder/tests/mock_split.c @@ -19,14 +19,14 @@ bool pins[32] = {0}; bool pinIsInputHigh[32] = {0}; -uint8_t mockSetPinInputHigh(pin_t pin) { +uint8_t mock_set_pin_input_high(pin_t pin) { // dprintf("Setting pin %d input high.", pin); pins[pin] = true; pinIsInputHigh[pin] = true; return 0; } -bool mockReadPin(pin_t pin) { +bool mock_read_pin(pin_t pin) { return pins[pin]; } diff --git a/quantum/encoder/tests/mock_split.h b/quantum/encoder/tests/mock_split.h index 2fc12f1830..8b4a141078 100644 --- a/quantum/encoder/tests/mock_split.h +++ b/quantum/encoder/tests/mock_split.h @@ -28,11 +28,11 @@ void encoder_update_raw(uint8_t* slave_state); extern bool pins[]; extern bool pinIsInputHigh[]; -#define setPinInputHigh(pin) (mockSetPinInputHigh(pin)) -#define readPin(pin) (mockReadPin(pin)) +#define gpio_set_pin_input_high(pin) (mock_set_pin_input_high(pin)) +#define gpio_read_pin(pin) (mock_read_pin(pin)) -uint8_t mockSetPinInputHigh(pin_t pin); +uint8_t mock_set_pin_input_high(pin_t pin); -bool mockReadPin(pin_t pin); +bool mock_read_pin(pin_t pin); bool setPin(pin_t pin, bool val); -- cgit v1.2.3 From 3a0f11a66178116ee935dd5b58332962666de5f2 Mon Sep 17 00:00:00 2001 From: Pablo Martínez Date: Fri, 16 Feb 2024 14:58:00 +0100 Subject: [QP] Native palette support for fonts (#20645) Co-authored-by: Joel Challis --- quantum/painter/qp_draw.h | 5 +++++ quantum/painter/qp_draw_codec.c | 40 ++++++++++++++++++++++++++++++++++++++++ quantum/painter/qp_draw_image.c | 29 ++--------------------------- quantum/painter/qp_draw_text.c | 11 ++--------- 4 files changed, 49 insertions(+), 36 deletions(-) (limited to 'quantum') diff --git a/quantum/painter/qp_draw.h b/quantum/painter/qp_draw.h index 3d073efe8c..7546c061a7 100644 --- a/quantum/painter/qp_draw.h +++ b/quantum/painter/qp_draw.h @@ -92,4 +92,9 @@ typedef struct qp_internal_byte_output_state_t { bool qp_internal_byte_appender(uint8_t byteval, void* cb_arg); +// Helper shared between image and font rendering, sends pixels to the display using: +// - qp_internal_decode_palette + qp_internal_pixel_appender (bpp <= 8) +// - qp_internal_send_bytes (bpp > 8) +bool qp_internal_appender(painter_device_t device, uint8_t bpp, uint32_t pixel_count, qp_internal_byte_input_callback input_callback, void* input_state); + qp_internal_byte_input_callback qp_internal_prepare_input_state(qp_internal_byte_input_state_t* input_state, painter_compression_t compression); diff --git a/quantum/painter/qp_draw_codec.c b/quantum/painter/qp_draw_codec.c index cee2e32e28..4ff41d0650 100644 --- a/quantum/painter/qp_draw_codec.c +++ b/quantum/painter/qp_draw_codec.c @@ -1,4 +1,5 @@ // Copyright 2021 Nick Brassel (@tzarc) +// Copyright 2023 Pablo Martinez (@elpekenin) // SPDX-License-Identifier: GPL-2.0-or-later #include "qp_internal.h" @@ -164,6 +165,45 @@ bool qp_internal_byte_appender(uint8_t byteval, void* cb_arg) { return true; } +// Helper shared between image and font rendering -- uses either (qp_internal_decode_palette + qp_internal_pixel_appender) or (qp_internal_send_bytes) to send data data to the display based on the asset's native-ness +bool qp_internal_appender(painter_device_t device, uint8_t bpp, uint32_t pixel_count, qp_internal_byte_input_callback input_callback, void* input_state) { + painter_driver_t* driver = (painter_driver_t*)device; + + bool ret = false; + + // Non-native pixel format + if (bpp <= 8) { + // Set up the output state + qp_internal_pixel_output_state_t output_state = {.device = device, .pixel_write_pos = 0, .max_pixels = qp_internal_num_pixels_in_buffer(device)}; + + // Decode the pixel data and stream to the display + ret = qp_internal_decode_palette(device, pixel_count, bpp, input_callback, input_state, qp_internal_global_pixel_lookup_table, qp_internal_pixel_appender, &output_state); + // Any leftovers need transmission as well. + if (ret && output_state.pixel_write_pos > 0) { + ret &= driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, output_state.pixel_write_pos); + } + } + + // Native pixel format + else if (bpp != driver->native_bits_per_pixel) { + qp_dprintf("Asset's bpp (%d) doesn't match the target display's native_bits_per_pixel (%d)\n", bpp, driver->native_bits_per_pixel); + return false; + } else { + // Set up the output state + qp_internal_byte_output_state_t output_state = {.device = device, .byte_write_pos = 0, .max_bytes = qp_internal_num_pixels_in_buffer(device) * driver->native_bits_per_pixel / 8}; + + // Stream the raw pixel data to the display + uint32_t byte_count = pixel_count * bpp / 8; + ret = qp_internal_send_bytes(device, byte_count, input_callback, input_state, qp_internal_byte_appender, &output_state); + // Any leftovers need transmission as well. + if (ret && output_state.byte_write_pos > 0) { + ret &= driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, output_state.byte_write_pos * 8 / driver->native_bits_per_pixel); + } + } + + return ret; +} + qp_internal_byte_input_callback qp_internal_prepare_input_state(qp_internal_byte_input_state_t* input_state, painter_compression_t compression) { switch (compression) { case IMAGE_UNCOMPRESSED: diff --git a/quantum/painter/qp_draw_image.c b/quantum/painter/qp_draw_image.c index 87c59148c2..18fa38cb19 100644 --- a/quantum/painter/qp_draw_image.c +++ b/quantum/painter/qp_draw_image.c @@ -263,33 +263,8 @@ static bool qp_drawimage_recolor_impl(painter_device_t device, uint16_t x, uint1 return false; } - bool ret = false; - if (!frame_info->is_panel_native) { - // Set up the output state - qp_internal_pixel_output_state_t output_state = {.device = device, .pixel_write_pos = 0, .max_pixels = qp_internal_num_pixels_in_buffer(device)}; - - // Decode the pixel data and stream to the display - ret = qp_internal_decode_palette(device, pixel_count, frame_info->bpp, input_callback, &input_state, qp_internal_global_pixel_lookup_table, qp_internal_pixel_appender, &output_state); - // Any leftovers need transmission as well. - if (ret && output_state.pixel_write_pos > 0) { - ret &= driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, output_state.pixel_write_pos); - } - } else if (frame_info->bpp != driver->native_bits_per_pixel) { - // Prevent stuff like drawing 24bpp images on 16bpp displays - qp_dprintf("Image's bpp doesn't match the target display's native_bits_per_pixel\n"); - return false; - } else { - // Set up the output state - qp_internal_byte_output_state_t output_state = {.device = device, .byte_write_pos = 0, .max_bytes = qp_internal_num_pixels_in_buffer(device) * driver->native_bits_per_pixel / 8}; - - // Stream the raw pixel data to the display - uint32_t byte_count = pixel_count * frame_info->bpp / 8; - ret = qp_internal_send_bytes(device, byte_count, input_callback, &input_state, qp_internal_byte_appender, &output_state); - // Any leftovers need transmission as well. - if (ret && output_state.byte_write_pos > 0) { - ret &= driver->driver_vtable->pixdata(device, qp_internal_global_pixdata_buffer, output_state.byte_write_pos * 8 / driver->native_bits_per_pixel); - } - } + // Decode and stream pixels + bool ret = qp_internal_appender(device, frame_info->bpp, pixel_count, input_callback, &input_state); qp_dprintf("qp_drawimage_recolor: %s\n", ret ? "ok" : "fail"); qp_comms_stop(device); diff --git a/quantum/painter/qp_draw_text.c b/quantum/painter/qp_draw_text.c index 1ac5cab646..664c89c6e5 100644 --- a/quantum/painter/qp_draw_text.c +++ b/quantum/painter/qp_draw_text.c @@ -364,16 +364,9 @@ static inline bool qp_font_code_point_handler_drawglyph(qff_font_handle_t *qff_f // Move the x-position for the next glyph state->xpos += width; - // Decode the pixel data for the glyph + // Decode the pixel data for the glyph, and stream it uint32_t pixel_count = ((uint32_t)width) * height; - bool ret = qp_internal_decode_palette(state->device, pixel_count, qff_font->bpp, state->input_callback, state->input_state, qp_internal_global_pixel_lookup_table, qp_internal_pixel_appender, state->output_state); - - // Any leftovers need transmission as well. - if (ret && state->output_state->pixel_write_pos > 0) { - ret &= driver->driver_vtable->pixdata(state->device, qp_internal_global_pixdata_buffer, state->output_state->pixel_write_pos); - } - - return ret; + return qp_internal_appender(state->device, qff_font->bpp, pixel_count, state->input_callback, state->input_state); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 13434fc066ef0b213587f773cc05f1c5b7d31113 Mon Sep 17 00:00:00 2001 From: Skyler Hawthorne Date: Fri, 16 Feb 2024 09:01:01 -0500 Subject: Insert delay between shifted chars in send_string_with_delay (#19280) --- quantum/action.c | 4 +--- quantum/send_string/send_string.c | 36 +++++++++++++++++++++++++----------- quantum/send_string/send_string.h | 14 ++++++++++++-- 3 files changed, 38 insertions(+), 16 deletions(-) (limited to 'quantum') diff --git a/quantum/action.c b/quantum/action.c index 29822c39e9..8dae32b2cb 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -1011,9 +1011,7 @@ __attribute__((weak)) void unregister_code(uint8_t code) { */ __attribute__((weak)) void tap_code_delay(uint8_t code, uint16_t delay) { register_code(code); - for (uint16_t i = delay; i > 0; i--) { - wait_ms(1); - } + wait_ms(delay); unregister_code(code); } diff --git a/quantum/send_string/send_string.c b/quantum/send_string/send_string.c index 820fc25163..8b59c19219 100644 --- a/quantum/send_string/send_string.c +++ b/quantum/send_string/send_string.c @@ -147,7 +147,7 @@ __attribute__((weak)) const uint8_t ascii_to_keycode_lut[128] PROGMEM = { #define PGM_LOADBIT(mem, pos) ((pgm_read_byte(&((mem)[(pos) / 8])) >> ((pos) % 8)) & 0x01) void send_string(const char *string) { - send_string_with_delay(string, 0); + send_string_with_delay(string, TAP_CODE_DELAY); } void send_string_with_delay(const char *string, uint8_t interval) { @@ -156,6 +156,7 @@ void send_string_with_delay(const char *string, uint8_t interval) { if (!ascii_code) break; if (ascii_code == SS_QMK_PREFIX) { ascii_code = *(++string); + if (ascii_code == SS_TAP_CODE) { // tap uint8_t keycode = *(++string); @@ -172,28 +173,30 @@ void send_string_with_delay(const char *string, uint8_t interval) { // delay int ms = 0; uint8_t keycode = *(++string); + while (isdigit(keycode)) { ms *= 10; ms += keycode - '0'; keycode = *(++string); } - while (ms--) - wait_ms(1); + + wait_ms(ms); } + + wait_ms(interval); } else { - send_char(ascii_code); + send_char_with_delay(ascii_code, interval); } + ++string; - // interval - { - uint8_t ms = interval; - while (ms--) - wait_ms(1); - } } } void send_char(char ascii_code) { + send_char_with_delay(ascii_code, TAP_CODE_DELAY); +} + +void send_char_with_delay(char ascii_code, uint8_t interval) { #if defined(AUDIO_ENABLE) && defined(SENDSTRING_BELL) if (ascii_code == '\a') { // BEL PLAY_SONG(bell_song); @@ -208,19 +211,30 @@ void send_char(char ascii_code) { if (is_shifted) { register_code(KC_LEFT_SHIFT); + wait_ms(interval); } + if (is_altgred) { register_code(KC_RIGHT_ALT); + wait_ms(interval); } - tap_code(keycode); + + tap_code_delay(keycode, interval); + wait_ms(interval); + if (is_altgred) { unregister_code(KC_RIGHT_ALT); + wait_ms(interval); } + if (is_shifted) { unregister_code(KC_LEFT_SHIFT); + wait_ms(interval); } + if (is_dead) { tap_code(KC_SPACE); + wait_ms(interval); } } diff --git a/quantum/send_string/send_string.h b/quantum/send_string/send_string.h index dbaed43ebc..f727ec507d 100644 --- a/quantum/send_string/send_string.h +++ b/quantum/send_string/send_string.h @@ -49,7 +49,7 @@ extern const uint8_t ascii_to_keycode_lut[128]; /** * \brief Type out a string of ASCII characters. * - * This function simply calls `send_string_with_delay(string, 0)`. + * This function simply calls `send_string_with_delay(string, TAP_CODE_DELAY)`. * * Most keycodes from the basic keycode range are also supported by way of a special sequence - see `send_string_keycodes.h`. * @@ -61,17 +61,27 @@ void send_string(const char *string); * \brief Type out a string of ASCII characters, with a delay between each character. * * \param string The string to type out. - * \param interval The amount of time, in milliseconds, to wait before typing the next character. + * \param interval The amount of time, in milliseconds, to wait before typing the next character. Note this can be set to 0 to ensure no delay, regardless of what TAP_CODE_DELAY is set to. */ void send_string_with_delay(const char *string, uint8_t interval); /** * \brief Type out an ASCII character. * + * This function simply calls `send_char_with_delay(string, TAP_CODE_DELAY)`. + * * \param ascii_code The character to type. */ void send_char(char ascii_code); +/** + * \brief Type out an ASCII character, with a delay between any modifiers. + * + * \param ascii_code The character to type. + * \param interval The amount of time, in milliseconds, to wait in between key presses. Note this can be set to 0 to ensure no delay, regardless of what TAP_CODE_DELAY is set to. + */ +void send_char_with_delay(char ascii_code, uint8_t interval); + /** * \brief Type out an eight digit (unsigned 32-bit) hexadecimal value. * -- cgit v1.2.3 From 77e88674986ee14bd1799b1ab19b4c94af083bac Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Fri, 16 Feb 2024 14:14:46 +0000 Subject: Fix joystick initialization (#22953) --- builddefs/common_features.mk | 5 +-- docs/feature_joystick.md | 8 ---- quantum/joystick.c | 101 +++++++++++++++++++++++++------------------ quantum/joystick.h | 30 ++++++------- quantum/keyboard.c | 3 ++ 5 files changed, 79 insertions(+), 68 deletions(-) (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 513a3678a9..dab4ea083a 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -815,15 +815,12 @@ ifeq ($(strip $(JOYSTICK_ENABLE)), yes) $(call CATASTROPHIC_ERROR,Invalid JOYSTICK_DRIVER,JOYSTICK_DRIVER="$(JOYSTICK_DRIVER)" is not a valid joystick driver) endif OPT_DEFS += -DJOYSTICK_ENABLE + OPT_DEFS += -DJOYSTICK_$(strip $(shell echo $(JOYSTICK_DRIVER) | tr '[:lower:]' '[:upper:]')) SRC += $(QUANTUM_DIR)/process_keycode/process_joystick.c SRC += $(QUANTUM_DIR)/joystick.c ifeq ($(strip $(JOYSTICK_DRIVER)), analog) ANALOG_DRIVER_REQUIRED = yes - OPT_DEFS += -DANALOG_JOYSTICK_ENABLE - endif - ifeq ($(strip $(JOYSTICK_DRIVER)), digital) - OPT_DEFS += -DDIGITAL_JOYSTICK_ENABLE endif endif diff --git a/docs/feature_joystick.md b/docs/feature_joystick.md index 7b699aef17..0e4529b2eb 100644 --- a/docs/feature_joystick.md +++ b/docs/feature_joystick.md @@ -50,10 +50,6 @@ Axes can be configured using one of the following macros: * `JOYSTICK_AXIS_IN(input_pin, low, rest, high)` The ADC samples the provided pin. `low`, `high` and `rest` correspond to the minimum, maximum, and resting (or centered) analog values of the axis, respectively. - * `JOYSTICK_AXIS_IN_OUT(input_pin, output_pin, low, rest, high)` - Same as `JOYSTICK_AXIS_IN()`, but the provided `output_pin` will be pulled high before `input_pin` is read. - * `JOYSTICK_AXIS_IN_OUT_GROUND(input_pin, output_pin, ground_pin, low, rest, high)` - Same as `JOYSTICK_AXIS_IN_OUT()`, but the provided `ground_pin` will be pulled low before reading from `input_pin`. * `JOYSTICK_AXIS_VIRTUAL` No ADC reading is performed. The value should be provided by user code. @@ -160,12 +156,8 @@ Describes a single axis. #### Members :id=api-joystick-config-t-members - - `pin_t output_pin` - A pin to set as output high when reading the analog value, or `JS_VIRTUAL_AXIS`. - `pin_t input_pin` The pin to read the analog value from, or `JS_VIRTUAL_AXIS`. - - `pin_t ground_pin` - A pin to set as output low when reading the analog value, or `JS_VIRTUAL_AXIS`. - `uint16_t min_digit` The minimum analog value. - `uint16_t mid_digit` diff --git a/quantum/joystick.c b/quantum/joystick.c index 02818e4acd..3e9edeb8e2 100644 --- a/quantum/joystick.c +++ b/quantum/joystick.c @@ -15,10 +15,12 @@ */ #include "joystick.h" - -#include "analog.h" #include "wait.h" +#if defined(JOYSTICK_ANALOG) +# include "analog.h" +#endif + joystick_t joystick_state = { .buttons = {0}, .axes = @@ -31,21 +33,47 @@ joystick_t joystick_state = { }; // array defining the reading of analog values for each axis -__attribute__((weak)) joystick_config_t joystick_axes[JOYSTICK_AXIS_COUNT] = {}; +__attribute__((weak)) joystick_config_t joystick_axes[JOYSTICK_AXIS_COUNT] = { +#if JOYSTICK_AXIS_COUNT > 0 + [0 ...(JOYSTICK_AXIS_COUNT - 1)] = JOYSTICK_AXIS_VIRTUAL +#endif +}; -__attribute__((weak)) void joystick_task(void) { - joystick_read_axes(); +__attribute__((weak)) void joystick_axis_init(uint8_t axis) { + if (axis >= JOYSTICK_AXIS_COUNT) return; + +#if defined(JOYSTICK_ANALOG) + setPinInput(joystick_axes[axis].input_pin); +#endif +} + +__attribute__((weak)) uint16_t joystick_axis_sample(uint8_t axis) { + if (axis >= JOYSTICK_AXIS_COUNT) return 0; + +#if defined(JOYSTICK_ANALOG) + return analogReadPin(joystick_axes[axis].input_pin); +#else + // default to resting position + return joystick_axes[axis].mid_digit; +#endif +} + +static inline bool is_virtual_axis(uint8_t axis) { + return joystick_axes[axis].input_pin == NO_PIN; } void joystick_flush(void) { - if (joystick_state.dirty) { - host_joystick_send(&joystick_state); - joystick_state.dirty = false; - } + if (!joystick_state.dirty) return; + + // TODO: host.h? + void host_joystick_send(joystick_t * joystick); + host_joystick_send(&joystick_state); + joystick_state.dirty = false; } void register_joystick_button(uint8_t button) { if (button >= JOYSTICK_BUTTON_COUNT) return; + joystick_state.buttons[button / 8] |= 1 << (button % 8); joystick_state.dirty = true; joystick_flush(); @@ -53,6 +81,7 @@ void register_joystick_button(uint8_t button) { void unregister_joystick_button(uint8_t button) { if (button >= JOYSTICK_BUTTON_COUNT) return; + joystick_state.buttons[button / 8] &= ~(1 << (button % 8)); joystick_state.dirty = true; joystick_flush(); @@ -61,37 +90,7 @@ void unregister_joystick_button(uint8_t button) { int16_t joystick_read_axis(uint8_t axis) { if (axis >= JOYSTICK_AXIS_COUNT) return 0; - // disable pull-up resistor - writePinLow(joystick_axes[axis].input_pin); - - // if pin was a pull-up input, we need to uncharge it by turning it low - // before making it a low input - setPinOutput(joystick_axes[axis].input_pin); - - wait_us(10); - - if (joystick_axes[axis].output_pin != JS_VIRTUAL_AXIS) { - setPinOutput(joystick_axes[axis].output_pin); - writePinHigh(joystick_axes[axis].output_pin); - } - - if (joystick_axes[axis].ground_pin != JS_VIRTUAL_AXIS) { - setPinOutput(joystick_axes[axis].ground_pin); - writePinLow(joystick_axes[axis].ground_pin); - } - - wait_us(10); - - setPinInput(joystick_axes[axis].input_pin); - - wait_us(10); - -#if defined(ANALOG_JOYSTICK_ENABLE) && (defined(__AVR__) || defined(PROTOCOL_CHIBIOS)) - int16_t axis_val = analogReadPin(joystick_axes[axis].input_pin); -#else - // default to resting position - int16_t axis_val = joystick_axes[axis].mid_digit; -#endif + int16_t axis_val = joystick_axis_sample(axis); // test the converted value against the lower range int32_t ref = joystick_axes[axis].mid_digit; @@ -111,10 +110,22 @@ int16_t joystick_read_axis(uint8_t axis) { return ranged_val; } +void joystick_init_axes(void) { +#if JOYSTICK_AXIS_COUNT > 0 + for (int i = 0; i < JOYSTICK_AXIS_COUNT; ++i) { + if (is_virtual_axis(i)) { + continue; + } + + joystick_axis_init(i); + } +#endif +} + void joystick_read_axes(void) { #if JOYSTICK_AXIS_COUNT > 0 for (int i = 0; i < JOYSTICK_AXIS_COUNT; ++i) { - if (joystick_axes[i].input_pin == JS_VIRTUAL_AXIS) { + if (is_virtual_axis(i)) { continue; } @@ -133,3 +144,11 @@ void joystick_set_axis(uint8_t axis, int16_t value) { joystick_state.dirty = true; } } + +void joystick_init(void) { + joystick_init_axes(); +} + +void joystick_task(void) { + joystick_read_axes(); +} diff --git a/quantum/joystick.h b/quantum/joystick.h index 5de4ba66c6..5a69ceac64 100644 --- a/quantum/joystick.h +++ b/quantum/joystick.h @@ -52,24 +52,15 @@ #define JOYSTICK_MAX_VALUE ((1L << (JOYSTICK_AXIS_RESOLUTION - 1)) - 1) -// configure on input_pin of the joystick_axes array entry to JS_VIRTUAL_AXIS -// to prevent it from being read from the ADC. This allows outputing forged axis value. -// -#define JS_VIRTUAL_AXIS 0xFF - +// configure on input_pin of the joystick_axes array entry to NO_PIN +// to prevent it from being read from the ADC. This allows outputting forged axis value. #define JOYSTICK_AXIS_VIRTUAL \ - { JS_VIRTUAL_AXIS, JS_VIRTUAL_AXIS, JS_VIRTUAL_AXIS, 0, 1023 } + { NO_PIN, 0, JOYSTICK_MAX_VALUE / 2, JOYSTICK_MAX_VALUE } #define JOYSTICK_AXIS_IN(INPUT_PIN, LOW, REST, HIGH) \ - { JS_VIRTUAL_AXIS, INPUT_PIN, JS_VIRTUAL_AXIS, LOW, REST, HIGH } -#define JOYSTICK_AXIS_IN_OUT(INPUT_PIN, OUTPUT_PIN, LOW, REST, HIGH) \ - { OUTPUT_PIN, INPUT_PIN, JS_VIRTUAL_AXIS, LOW, REST, HIGH } -#define JOYSTICK_AXIS_IN_OUT_GROUND(INPUT_PIN, OUTPUT_PIN, GROUND_PIN, LOW, REST, HIGH) \ - { OUTPUT_PIN, INPUT_PIN, GROUND_PIN, LOW, REST, HIGH } + { INPUT_PIN, LOW, REST, HIGH } typedef struct { - pin_t output_pin; pin_t input_pin; - pin_t ground_pin; // the AVR ADC offers 10 bit precision, with significant bits on the higher part uint16_t min_digit; @@ -87,6 +78,14 @@ typedef struct { extern joystick_t joystick_state; +/** + * \brief Handle the initialization of the subsystem. + */ +void joystick_init(void); + +/** + * \brief Handle various subsystem background tasks. + */ void joystick_task(void); /** @@ -117,6 +116,9 @@ void unregister_joystick_button(uint8_t button); */ int16_t joystick_read_axis(uint8_t axis); +/** + * \brief Sample and process the all axis. + */ void joystick_read_axes(void); /** @@ -127,6 +129,4 @@ void joystick_read_axes(void); */ void joystick_set_axis(uint8_t axis, int16_t value); -void host_joystick_send(joystick_t *joystick); - /** \} */ diff --git a/quantum/keyboard.c b/quantum/keyboard.c index 9bdf6e6344..ab25b02547 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -460,6 +460,9 @@ void keyboard_init(void) { #ifdef DIP_SWITCH_ENABLE dip_switch_init(); #endif +#ifdef JOYSTICK_ENABLE + joystick_init(); +#endif #ifdef SLEEP_LED_ENABLE sleep_led_init(); #endif -- cgit v1.2.3 From 80f3da36e571fa702b1d3df693fd545801250eca Mon Sep 17 00:00:00 2001 From: Andre Brait Date: Fri, 16 Feb 2024 15:19:02 +0100 Subject: [Core] Add OS detection callbacks (#21777) --- docs/feature_os_detection.md | 50 +++++- quantum/keyboard.c | 7 + quantum/os_detection.c | 170 +++++++++++++++------ quantum/os_detection.h | 22 ++- quantum/os_detection/tests/os_detection.cpp | 229 ++++++++++++++++++++++++++++ quantum/os_detection/tests/rules.mk | 4 +- quantum/quantum.h | 4 + tmk_core/protocol/usb_device_state.c | 9 ++ 8 files changed, 437 insertions(+), 58 deletions(-) (limited to 'quantum') diff --git a/docs/feature_os_detection.md b/docs/feature_os_detection.md index 907638bcfa..a50ee7ccc2 100644 --- a/docs/feature_os_detection.md +++ b/docs/feature_os_detection.md @@ -14,7 +14,7 @@ In your `rules.mk` add: OS_DETECTION_ENABLE = yes ``` -Include `"os_detection.h"` in your `keymap.c`. +It will automatically include the required headers file. It declares `os_variant_t detected_host_os(void);` which you can call to get detected OS. It returns one of the following values: @@ -32,6 +32,54 @@ enum { ?> Note that it takes some time after firmware is booted to detect the OS. This time is quite short, probably hundreds of milliseconds, but this data may be not ready in keyboard and layout setup functions which run very early during firmware startup. +## Callbacks :id=callbacks + +If you want to perform custom actions when the OS is detected, then you can use the `process_detected_host_os_kb` function on the keyboard level source file, or `process_detected_host_os_user` function in the user `keymap.c`. + +```c +bool process_detected_host_os_kb(os_variant_t detected_os) { + if (!process_detected_host_os_user(detected_os)) { + return false; + } + switch (detected_os) { + case OS_MACOS: + case OS_IOS: + rgb_matrix_set_color_all(RGB_WHITE); + break; + case OS_WINDOWS: + rgb_matrix_set_color_all(RGB_BLUE); + break; + case OS_LINUX: + rgb_matrix_set_color_all(RGB_ORANGE); + break; + case OS_UNSURE: + rgb_matrix_set_color_all(RGB_RED); + break; + } + + return true; +} +``` + +## OS detection stability + +The OS detection is currently handled while the USB device descriptor is being assembled. +The process is done in steps, generating a number of intermediate results until it stabilizes. +We therefore resort to debouncing the result until it has been stable for a given amount of milliseconds. +This amount can be configured, in case your board is not stable within the default debouncing time of 200ms. + +## KVM and USB switches + +Some KVM and USB switches may not trigger the USB controller on the keyboard to fully reset upon switching machines. +If your keyboard does not redetect the OS in this situation, you can force the keyboard to reset when the USB initialization event is detected, forcing the USB controller to be reconfigured. + +## Configuration Options + +* `#define OS_DETECTION_DEBOUNCE 200` + * defined the debounce time for OS detection, in milliseconds +* `#define OS_DETECTION_KEYBOARD_RESET` + * enables the keyboard reset upon a USB device reinitilization, such as switching devices on some KVMs + ## Debug If OS is guessed incorrectly, you may want to collect data about USB setup packets to refine the detection logic. diff --git a/quantum/keyboard.c b/quantum/keyboard.c index ab25b02547..1d6657c230 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -137,6 +137,9 @@ along with this program. If not, see . #ifdef WPM_ENABLE # include "wpm.h" #endif +#ifdef OS_DETECTION_ENABLE +# include "os_detection.h" +#endif static uint32_t last_input_modification_time = 0; uint32_t last_input_activity_time(void) { @@ -741,4 +744,8 @@ void keyboard_task(void) { #endif led_task(); + +#ifdef OS_DETECTION_ENABLE + os_detection_task(); +#endif } diff --git a/quantum/os_detection.c b/quantum/os_detection.c index e606227136..b674f05b35 100644 --- a/quantum/os_detection.c +++ b/quantum/os_detection.c @@ -16,20 +16,25 @@ #include "os_detection.h" -#include +#ifdef OS_DETECTION_ENABLE -#ifdef OS_DETECTION_DEBUG_ENABLE -# include "eeconfig.h" -# include "eeprom.h" -# include "print.h" +# include +# include "timer.h" +# ifdef OS_DETECTION_KEYBOARD_RESET +# include "quantum.h" +# endif -# define STORED_USB_SETUPS 50 -# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE +# ifdef OS_DETECTION_DEBUG_ENABLE +# include "eeconfig.h" +# include "eeprom.h" +# include "print.h" -uint16_t usb_setups[STORED_USB_SETUPS]; -#endif +# define STORED_USB_SETUPS 50 +# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE + +static uint16_t usb_setups[STORED_USB_SETUPS]; +# endif -#ifdef OS_DETECTION_ENABLE struct setups_data_t { uint8_t count; uint8_t cnt_02; @@ -45,43 +50,63 @@ struct setups_data_t setups_data = { .cnt_ff = 0, }; -os_variant_t detected_os = OS_UNSURE; +# ifndef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 200 +# endif -// Some collected sequences of wLength can be found in tests. -void make_guess(void) { - if (setups_data.count < 3) { - return; - } - if (setups_data.cnt_ff >= 2 && setups_data.cnt_04 >= 1) { - detected_os = OS_WINDOWS; - return; - } - if (setups_data.count == setups_data.cnt_ff) { - // Linux has 3 packets with 0xFF. - detected_os = OS_LINUX; - return; - } - if (setups_data.count == 5 && setups_data.last_wlength == 0xFF && setups_data.cnt_ff == 1 && setups_data.cnt_02 == 2) { - detected_os = OS_MACOS; - return; - } - if (setups_data.count == 4 && setups_data.cnt_ff == 0 && setups_data.cnt_02 == 2) { - // iOS and iPadOS don't have the last 0xFF packet. - detected_os = OS_IOS; - return; - } - if (setups_data.cnt_ff == 0 && setups_data.cnt_02 == 3 && setups_data.cnt_04 == 1) { - // This is actually PS5. - detected_os = OS_LINUX; - return; +// 2s should always be more than enough (otherwise, you may have other issues) +# if OS_DETECTION_DEBOUNCE > 2000 +# undef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 2000 +# endif + +typedef uint16_t debouncing_t; + +static volatile os_variant_t detected_os = OS_UNSURE; +static os_variant_t reported_os = OS_UNSURE; + +// we need to be able to report OS_UNSURE if that is the stable result of the guesses +static bool first_report = true; + +// to react on USB state changes +static volatile enum usb_device_state current_usb_device_state = USB_DEVICE_STATE_INIT; +static enum usb_device_state reported_usb_device_state = USB_DEVICE_STATE_INIT; + +// the OS detection might be unstable for a while, "debounce" it +static volatile bool debouncing = false; +static volatile fast_timer_t last_time; + +void os_detection_task(void) { + if (current_usb_device_state == USB_DEVICE_STATE_CONFIGURED) { + // debouncing goes for both the detected OS as well as the USB state + if (debouncing && timer_elapsed_fast(last_time) >= OS_DETECTION_DEBOUNCE) { + debouncing = false; + reported_usb_device_state = current_usb_device_state; + if (detected_os != reported_os || first_report) { + first_report = false; + reported_os = detected_os; + process_detected_host_os_kb(detected_os); + } + } } - if (setups_data.cnt_ff >= 1 && setups_data.cnt_02 == 0 && setups_data.cnt_04 == 0) { - // This is actually Quest 2 or Nintendo Switch. - detected_os = OS_LINUX; - return; +# ifdef OS_DETECTION_KEYBOARD_RESET + // resetting the keyboard on the USB device state change callback results in instability, so delegate that to this task + // only take action if it's been stable at least once, to avoid issues with some KVMs + else if (current_usb_device_state == USB_DEVICE_STATE_INIT && reported_usb_device_state != USB_DEVICE_STATE_INIT) { + soft_reset_keyboard(); } +# endif } +__attribute__((weak)) bool process_detected_host_os_kb(os_variant_t detected_os) { + return process_detected_host_os_user(detected_os); +} + +__attribute__((weak)) bool process_detected_host_os_user(os_variant_t detected_os) { + return true; +} + +// Some collected sequences of wLength can be found in tests. void process_wlength(const uint16_t w_length) { # ifdef OS_DETECTION_DEBUG_ENABLE usb_setups[setups_data.count] = w_length; @@ -95,7 +120,37 @@ void process_wlength(const uint16_t w_length) { } else if (w_length == 0xFF) { setups_data.cnt_ff++; } - make_guess(); + + // now try to make a guess + os_variant_t guessed = OS_UNSURE; + if (setups_data.count >= 3) { + if (setups_data.cnt_ff >= 2 && setups_data.cnt_04 >= 1) { + guessed = OS_WINDOWS; + } else if (setups_data.count == setups_data.cnt_ff) { + // Linux has 3 packets with 0xFF. + guessed = OS_LINUX; + } else if (setups_data.count == 5 && setups_data.last_wlength == 0xFF && setups_data.cnt_ff == 1 && setups_data.cnt_02 == 2) { + guessed = OS_MACOS; + } else if (setups_data.count == 4 && setups_data.cnt_ff == 0 && setups_data.cnt_02 == 2) { + // iOS and iPadOS don't have the last 0xFF packet. + guessed = OS_IOS; + } else if (setups_data.cnt_ff == 0 && setups_data.cnt_02 == 3 && setups_data.cnt_04 == 1) { + // This is actually PS5. + guessed = OS_LINUX; + } else if (setups_data.cnt_ff >= 1 && setups_data.cnt_02 == 0 && setups_data.cnt_04 == 0) { + // This is actually Quest 2 or Nintendo Switch. + guessed = OS_LINUX; + } + } + + // only replace the guessed value if not unsure + if (guessed != OS_UNSURE) { + detected_os = guessed; + } + + // whatever the result, debounce + last_time = timer_read_fast(); + debouncing = true; } os_variant_t detected_host_os(void) { @@ -104,25 +159,38 @@ os_variant_t detected_host_os(void) { void erase_wlength_data(void) { memset(&setups_data, 0, sizeof(setups_data)); - detected_os = OS_UNSURE; + detected_os = OS_UNSURE; + reported_os = OS_UNSURE; + current_usb_device_state = USB_DEVICE_STATE_INIT; + reported_usb_device_state = USB_DEVICE_STATE_INIT; + debouncing = false; + first_report = true; +} + +void os_detection_notify_usb_device_state_change(enum usb_device_state usb_device_state) { + // treat this like any other source of instability + current_usb_device_state = usb_device_state; + last_time = timer_read_fast(); + debouncing = true; } # if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os) { detected_os = os; + last_time = timer_read_fast(); + debouncing = true; } -# endif // defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) -#endif // OS_DETECTION_ENABLE +# endif -#ifdef OS_DETECTION_DEBUG_ENABLE +# ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void) { -# ifdef CONSOLE_ENABLE +# ifdef CONSOLE_ENABLE uint8_t cnt = eeprom_read_byte(EEPROM_USER_OFFSET); for (uint16_t i = 0; i < cnt; ++i) { uint16_t* addr = (uint16_t*)EEPROM_USER_OFFSET + i * sizeof(uint16_t) + sizeof(uint8_t); xprintf("i: %d, wLength: 0x%02X\n", i, eeprom_read_word(addr)); } -# endif +# endif } void store_setups_in_eeprom(void) { @@ -133,4 +201,6 @@ void store_setups_in_eeprom(void) { } } -#endif // OS_DETECTION_DEBUG_ENABLE +# endif // OS_DETECTION_DEBUG_ENABLE + +#endif diff --git a/quantum/os_detection.h b/quantum/os_detection.h index 3496ea0ed2..470f30943a 100644 --- a/quantum/os_detection.h +++ b/quantum/os_detection.h @@ -16,9 +16,12 @@ #pragma once -#include - #ifdef OS_DETECTION_ENABLE + +# include +# include +# include "usb_device_state.h" + typedef enum { OS_UNSURE, OS_LINUX, @@ -30,13 +33,20 @@ typedef enum { void process_wlength(const uint16_t w_length); os_variant_t detected_host_os(void); void erase_wlength_data(void); +void os_detection_notify_usb_device_state_change(enum usb_device_state usb_device_state); + +void os_detection_task(void); + +bool process_detected_host_os_kb(os_variant_t os); +bool process_detected_host_os_user(os_variant_t os); # if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os); -# endif // defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) -#endif +# endif -#ifdef OS_DETECTION_DEBUG_ENABLE +# ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void); void store_setups_in_eeprom(void); -#endif +# endif + +#endif // OS_DETECTION_ENABLE diff --git a/quantum/os_detection/tests/os_detection.cpp b/quantum/os_detection/tests/os_detection.cpp index 102349852e..11e93fdea8 100644 --- a/quantum/os_detection/tests/os_detection.cpp +++ b/quantum/os_detection/tests/os_detection.cpp @@ -18,12 +18,20 @@ extern "C" { #include "os_detection.h" +#include "timer.h" + +void advance_time(uint32_t ms); } +static uint32_t reported_count; +static os_variant_t reported_os; + class OsDetectionTest : public ::testing::Test { protected: void SetUp() override { erase_wlength_data(); + reported_count = 0; + reported_os = OS_UNSURE; } }; @@ -34,6 +42,24 @@ os_variant_t check_sequence(const std::vector &w_lengths) { return detected_host_os(); } +bool process_detected_host_os_kb(os_variant_t os) { + reported_count = reported_count + 1; + reported_os = os; +} + +void assert_not_reported(void) { + // check that it does not report the result, nor any intermediate results + EXPECT_EQ(reported_count, 0); + EXPECT_EQ(reported_os, OS_UNSURE); +} + +void assert_reported(os_variant_t os) { + // check that it reports exclusively the result, not any intermediate results + EXPECT_EQ(reported_count, 1); + EXPECT_EQ(reported_os, os); + EXPECT_EQ(reported_os, detected_host_os()); +} + /* Some collected data. ChibiOS: @@ -77,88 +103,291 @@ Quest 2: [FF, FF, FF, FE, ...] */ TEST_F(OsDetectionTest, TestLinux) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosMacos) { EXPECT_EQ(check_sequence({0x2, 0x24, 0x2, 0x28, 0xFF}), OS_MACOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaMacos) { EXPECT_EQ(check_sequence({0x2, 0x10, 0x2, 0xE, 0xFF}), OS_MACOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbMacos) { EXPECT_EQ(check_sequence({0x2, 0xE, 0x2, 0xE, 0xFF}), OS_MACOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosIos) { EXPECT_EQ(check_sequence({0x2, 0x24, 0x2, 0x28}), OS_IOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaIos) { EXPECT_EQ(check_sequence({0x2, 0x10, 0x2, 0xE}), OS_IOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbIos) { EXPECT_EQ(check_sequence({0x2, 0xE, 0x2, 0xE}), OS_IOS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosWindows10) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0x24, 0x4, 0x24, 0x4, 0xFF, 0x24, 0xFF, 0x4, 0xFF, 0x24, 0x4, 0x24, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosWindows10_2) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0x24, 0x4, 0x24, 0x4, 0x24, 0x4, 0x24, 0x4, 0x24}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaWindows10) { EXPECT_EQ(check_sequence({0x12, 0xFF, 0xFF, 0x4, 0x10, 0xFF, 0xFF, 0xFF, 0x4, 0x10, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaWindows10_2) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0x10, 0xFF, 0x4, 0xFF, 0x10, 0xFF, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaWindows10_3) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0x10, 0x4, 0x10}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbWindows10) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0xE, 0xFF}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbWindows10_2) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0x4, 0xE, 0x4}), OS_WINDOWS); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosPs5) { EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0x28, 0x2, 0x24}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaPs5) { EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2, 0x10}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbPs5) { EXPECT_EQ(check_sequence({0x2, 0x4, 0x2, 0xE, 0x2}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosNintendoSwitch) { EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestLufaNintendoSwitch) { EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40, 0xFF, 0x40, 0x40}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbNintendoSwitch) { EXPECT_EQ(check_sequence({0x82, 0xFF, 0x40, 0x40}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestChibiosQuest2) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } TEST_F(OsDetectionTest, TestVusbQuest2) { EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); + os_detection_task(); + assert_not_reported(); +} + +// Regression reported in https://github.com/qmk/qmk_firmware/pull/21777#issuecomment-1922815841 +TEST_F(OsDetectionTest, TestDetectMacM1AsIOS) { + EXPECT_EQ(check_sequence({0x02, 0x32, 0x02, 0x24, 0x101, 0xFF}), OS_IOS); + os_detection_task(); + assert_not_reported(); +} + +TEST_F(OsDetectionTest, TestDoNotReportIfUsbUnstable) { + EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); + os_detection_task(); + assert_not_reported(); + + advance_time(OS_DETECTION_DEBOUNCE); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_LINUX); +} + +TEST_F(OsDetectionTest, TestReportAfterDebounce) { + EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE}), OS_LINUX); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + os_detection_task(); + assert_not_reported(); + + advance_time(1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_LINUX); + + advance_time(OS_DETECTION_DEBOUNCE - 3); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_LINUX); + + advance_time(1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_LINUX); + + // advancing the timer alone must not cause a report + advance_time(1); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_LINUX); + // the task will cause a report + os_detection_task(); + assert_reported(OS_LINUX); + EXPECT_EQ(detected_host_os(), OS_LINUX); + + // check that it remains the same after a long time + advance_time(OS_DETECTION_DEBOUNCE * 15); + assert_reported(OS_LINUX); + EXPECT_EQ(detected_host_os(), OS_LINUX); +} + +TEST_F(OsDetectionTest, TestReportAfterDebounceLongWait) { + EXPECT_EQ(check_sequence({0x12, 0xFF, 0xFF, 0x4, 0x10, 0xFF, 0xFF, 0xFF, 0x4, 0x10, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A}), OS_WINDOWS); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + os_detection_task(); + assert_not_reported(); + + advance_time(1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + + // advancing the timer alone must not cause a report + advance_time(OS_DETECTION_DEBOUNCE * 15); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + // the task will cause a report + os_detection_task(); + assert_reported(OS_WINDOWS); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + + // check that it remains the same after a long time + advance_time(OS_DETECTION_DEBOUNCE * 10); + os_detection_task(); + assert_reported(OS_WINDOWS); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); +} + +TEST_F(OsDetectionTest, TestReportUnsure) { + EXPECT_EQ(check_sequence({0x12, 0xFF}), OS_UNSURE); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + os_detection_task(); + assert_not_reported(); + + advance_time(1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_UNSURE); + + // advancing the timer alone must not cause a report + advance_time(OS_DETECTION_DEBOUNCE - 1); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_UNSURE); + // the task will cause a report + os_detection_task(); + assert_reported(OS_UNSURE); + EXPECT_EQ(detected_host_os(), OS_UNSURE); + + // check that it remains the same after a long time + advance_time(OS_DETECTION_DEBOUNCE * 10); + os_detection_task(); + assert_reported(OS_UNSURE); + EXPECT_EQ(detected_host_os(), OS_UNSURE); +} + +TEST_F(OsDetectionTest, TestDoNotReportIntermediateResults) { + EXPECT_EQ(check_sequence({0x12, 0xFF}), OS_UNSURE); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + os_detection_task(); + assert_not_reported(); + + advance_time(OS_DETECTION_DEBOUNCE - 1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_UNSURE); + + // at this stage, the final result has not been reached yet + EXPECT_EQ(check_sequence({0xFF}), OS_LINUX); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + advance_time(OS_DETECTION_DEBOUNCE - 1); + os_detection_task(); + assert_not_reported(); + // the intermedite but yet unstable result is exposed through detected_host_os() + EXPECT_EQ(detected_host_os(), OS_LINUX); + + // the remainder is processed + EXPECT_EQ(check_sequence({0x4, 0x10, 0xFF, 0xFF, 0xFF, 0x4, 0x10, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A, 0x20A}), OS_WINDOWS); + os_detection_notify_usb_device_state_change(USB_DEVICE_STATE_CONFIGURED); + advance_time(OS_DETECTION_DEBOUNCE - 1); + os_detection_task(); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + + // advancing the timer alone must not cause a report + advance_time(1); + assert_not_reported(); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + // the task will cause a report + os_detection_task(); + assert_reported(OS_WINDOWS); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); + + // check that it remains the same after a long time + advance_time(OS_DETECTION_DEBOUNCE * 10); + os_detection_task(); + assert_reported(OS_WINDOWS); + EXPECT_EQ(detected_host_os(), OS_WINDOWS); +} + +TEST_F(OsDetectionTest, TestDoNotGoBackToUnsure) { + // 0x02 would cause it to go back to Unsure, so check that it does not + EXPECT_EQ(check_sequence({0xFF, 0xFF, 0xFF, 0xFE, 0x02}), OS_LINUX); + os_detection_task(); + assert_not_reported(); } diff --git a/quantum/os_detection/tests/rules.mk b/quantum/os_detection/tests/rules.mk index 9bfe373f46..1b69b71ba9 100644 --- a/quantum/os_detection/tests/rules.mk +++ b/quantum/os_detection/tests/rules.mk @@ -1,5 +1,7 @@ os_detection_DEFS := -DOS_DETECTION_ENABLE +os_detection_DEFS += -DOS_DETECTION_DEBOUNCE=50 os_detection_SRC := \ $(QUANTUM_PATH)/os_detection/tests/os_detection.cpp \ - $(QUANTUM_PATH)/os_detection.c + $(QUANTUM_PATH)/os_detection.c \ + $(PLATFORM_PATH)/$(PLATFORM_KEY)/timer.c diff --git a/quantum/quantum.h b/quantum/quantum.h index 98d848581d..5446ab1ad7 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h @@ -236,6 +236,10 @@ extern layer_state_t layer_state; # include "process_repeat_key.h" #endif +#ifdef OS_DETECTION_ENABLE +# include "os_detection.h" +#endif + void set_single_persistent_default_layer(uint8_t default_layer); #define IS_LAYER_ON(layer) layer_state_is(layer) diff --git a/tmk_core/protocol/usb_device_state.c b/tmk_core/protocol/usb_device_state.c index 8d56ba4d2f..4cd241528d 100644 --- a/tmk_core/protocol/usb_device_state.c +++ b/tmk_core/protocol/usb_device_state.c @@ -20,6 +20,10 @@ # include "haptic.h" #endif +#ifdef OS_DETECTION_ENABLE +# include "os_detection.h" +#endif + enum usb_device_state usb_device_state = USB_DEVICE_STATE_NO_INIT; __attribute__((weak)) void notify_usb_device_state_change_kb(enum usb_device_state usb_device_state) { @@ -32,7 +36,12 @@ static void notify_usb_device_state_change(enum usb_device_state usb_device_stat #if defined(HAPTIC_ENABLE) && HAPTIC_OFF_IN_LOW_POWER haptic_notify_usb_device_state_change(); #endif + notify_usb_device_state_change_kb(usb_device_state); + +#ifdef OS_DETECTION_ENABLE + os_detection_notify_usb_device_state_change(usb_device_state); +#endif } void usb_device_state_set_configuration(bool isConfigured, uint8_t configurationNumber) { -- cgit v1.2.3 From f6709e65ebfd385a9963348d41c19abe9b91e8ad Mon Sep 17 00:00:00 2001 From: HorrorTroll Date: Fri, 16 Feb 2024 21:41:35 +0700 Subject: Add RGB matrix & LED Matrix support for IS31FL3729 (#21944) Co-authored-by: Xelus22 Co-authored-by: dexter93 --- builddefs/common_features.mk | 16 +- docs/reference_info_json.md | 2 +- drivers/led/issi/is31fl3729-mono.c | 220 ++++++++++++++++++++++++++ drivers/led/issi/is31fl3729-mono.h | 265 +++++++++++++++++++++++++++++++ drivers/led/issi/is31fl3729.c | 226 +++++++++++++++++++++++++++ drivers/led/issi/is31fl3729.h | 267 ++++++++++++++++++++++++++++++++ quantum/led_matrix/led_matrix_drivers.c | 8 + quantum/led_matrix/led_matrix_drivers.h | 2 + quantum/rgb_matrix/rgb_matrix_drivers.c | 8 + quantum/rgb_matrix/rgb_matrix_drivers.h | 2 + 10 files changed, 1013 insertions(+), 3 deletions(-) create mode 100644 drivers/led/issi/is31fl3729-mono.c create mode 100644 drivers/led/issi/is31fl3729-mono.h create mode 100644 drivers/led/issi/is31fl3729.c create mode 100644 drivers/led/issi/is31fl3729.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index dab4ea083a..90e0ff827d 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -340,7 +340,7 @@ LED_MATRIX_DRIVER := snled27351 endif LED_MATRIX_ENABLE ?= no -VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 custom +VALID_LED_MATRIX_TYPES := is31fl3218 is31fl3729 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 custom ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) ifeq ($(filter $(LED_MATRIX_DRIVER),$(VALID_LED_MATRIX_TYPES)),) @@ -365,6 +365,12 @@ ifeq ($(strip $(LED_MATRIX_ENABLE)), yes) SRC += is31fl3218-mono.c endif + ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3729) + I2C_DRIVER_REQUIRED = yes + COMMON_VPATH += $(DRIVER_PATH)/led/issi + SRC += is31fl3729-mono.c + endif + ifeq ($(strip $(LED_MATRIX_DRIVER)), is31fl3731) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi @@ -437,7 +443,7 @@ endif RGB_MATRIX_ENABLE ?= no -VALID_RGB_MATRIX_TYPES := aw20216s is31fl3218 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 ws2812 custom +VALID_RGB_MATRIX_TYPES := aw20216s is31fl3218 is31fl3729 is31fl3731 is31fl3733 is31fl3736 is31fl3737 is31fl3741 is31fl3742a is31fl3743a is31fl3745 is31fl3746a snled27351 ws2812 custom ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),) $(call CATASTROPHIC_ERROR,Invalid RGB_MATRIX_DRIVER,RGB_MATRIX_DRIVER="$(RGB_MATRIX_DRIVER)" is not a valid matrix type) @@ -468,6 +474,12 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) SRC += is31fl3218.c endif + ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3729) + I2C_DRIVER_REQUIRED = yes + COMMON_VPATH += $(DRIVER_PATH)/led/issi + SRC += is31fl3729.c + endif + ifeq ($(strip $(RGB_MATRIX_DRIVER)), is31fl3731) I2C_DRIVER_REQUIRED = yes COMMON_VPATH += $(DRIVER_PATH)/led/issi diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md index 1f73ec8fae..796db1f244 100644 --- a/docs/reference_info_json.md +++ b/docs/reference_info_json.md @@ -633,7 +633,7 @@ Configures the [RGB Matrix](feature_rgb_matrix.md) feature. * The default animation speed. * Default: `128` * `driver` (Required) - * The driver to use. Must be one of `aw20216s`, `custom`, `is31fl3218`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`, `ws2812`. + * The driver to use. Must be one of `aw20216s`, `custom`, `is31fl3218`, `is31fl3729`, `is31fl3731`, `is31fl3733`, `is31fl3736`, `is31fl3737`, `is31fl3741`, `is31fl3742a`, `is31fl3743a`, `is31fl3745`, `is31fl3746a`, `snled27351`, `ws2812`. * `hue_steps` * The number of hue adjustment steps. * Default: `8` diff --git a/drivers/led/issi/is31fl3729-mono.c b/drivers/led/issi/is31fl3729-mono.c new file mode 100644 index 0000000000..1617dd40a7 --- /dev/null +++ b/drivers/led/issi/is31fl3729-mono.c @@ -0,0 +1,220 @@ +/* Copyright 2024 HorrorTroll + * Copyright 2024 Harrison Chan (Xelus) + * Copyright 2024 Dimitris Mantzouranis + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3729-mono.h" +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3729_PWM_REGISTER_COUNT 143 +#define IS31FL3729_SCALING_REGISTER_COUNT 16 + +#ifndef IS31FL3729_I2C_TIMEOUT +# define IS31FL3729_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3729_I2C_PERSISTENCE +# define IS31FL3729_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3729_CONFIGURATION +# define IS31FL3729_CONFIGURATION IS31FL3729_CONFIG_SWS_15_9 +#endif + +#ifndef IS31FL3729_GLOBAL_CURRENT +# define IS31FL3729_GLOBAL_CURRENT 0x40 +#endif + +#ifndef IS31FL3729_PULLDOWNUP +# define IS31FL3729_PULLDOWNUP 0x33 +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM +# define IS31FL3729_SPREAD_SPECTRUM IS31FL3729_SSP_DISABLE +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM_RANGE +# define IS31FL3729_SPREAD_SPECTRUM_RANGE IS31FL3729_RNG_5_PERCENT +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME +# define IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME IS31FL3729_CLT_1980_US +#endif + +#ifndef IS31FL3729_PWM_FREQUENCY +# define IS31FL3729_PWM_FREQUENCY IS31FL3729_PWM_FREQUENCY_32K_HZ +#endif + +// These buffers match the PWM & scaling registers. +// Storing them like this is optimal for I2C transfers to the registers. +typedef struct is31fl3729_driver_t { + uint8_t pwm_buffer[IS31FL3729_PWM_REGISTER_COUNT]; + bool pwm_buffer_dirty; + uint8_t scaling_buffer[IS31FL3729_SCALING_REGISTER_COUNT]; + bool scaling_buffer_dirty; +} PACKED is31fl3729_driver_t; + +is31fl3729_driver_t driver_buffers[IS31FL3729_DRIVER_COUNT] = {{ + .pwm_buffer = {0}, + .pwm_buffer_dirty = false, + .scaling_buffer = {0}, + .scaling_buffer_dirty = false, +}}; + +void is31fl3729_write_register(uint8_t addr, uint8_t reg, uint8_t data) { +#if IS31FL3729_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3729_I2C_PERSISTENCE; i++) { + if (i2c_write_register(addr << 1, reg, &data, 1, IS31FL3729_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break; + } +#else + i2c_write_register(addr << 1, reg, &data, 1, IS31FL3729_I2C_TIMEOUT); +#endif +} + +void is31fl3729_write_pwm_buffer(uint8_t addr, uint8_t index) { + // Transmit PWM registers in 9 transfers of 16 bytes. + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (uint8_t i = 0; i <= IS31FL3729_PWM_REGISTER_COUNT; i += 16) { +#if IS31FL3729_I2C_PERSISTENCE > 0 + for (uint8_t j = 0; j < IS31FL3729_I2C_PERSISTENCE; j++) { + if (i2c_write_register(addr << 1, i, driver_buffers[index].pwm_buffer + i, 16, IS31FL3729_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break; + } +#else + i2c_write_register(addr << 1, i, driver_buffers[index].pwm_buffer + i, 16, IS31FL3729_I2C_TIMEOUT); +#endif + } +} + +void is31fl3729_init_drivers(void) { + i2c_init(); + + is31fl3729_init(IS31FL3729_I2C_ADDRESS_1); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_2); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_3); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3729_LED_COUNT; i++) { + is31fl3729_set_scaling_register(i, 0xFF); + } + + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_1, 0); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_2, 1); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_3, 2); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3729_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + // Set Pull up & Down for SWx CSy + is31fl3729_write_register(addr, IS31FL3729_REG_PULLDOWNUP, IS31FL3729_PULLDOWNUP); + + // Set Spread Spectrum Register if applicable + is31fl3729_write_register(addr, IS31FL3729_REG_SPREAD_SPECTRUM, ((IS31FL3729_SPREAD_SPECTRUM & 0b1) << 4) | ((IS31FL3729_SPREAD_SPECTRUM_RANGE & 0b11) << 2) | (IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME & 0b11)); + + // Set PWM Frequency Register if applicable + is31fl3729_write_register(addr, IS31FL3729_REG_PWM_FREQUENCY, IS31FL3729_PWM_FREQUENCY); + + // Set Golbal Current Control Register + is31fl3729_write_register(addr, IS31FL3729_REG_GLOBAL_CURRENT, IS31FL3729_GLOBAL_CURRENT); + + // Set to Normal operation + is31fl3729_write_register(addr, IS31FL3729_REG_CONFIGURATION, IS31FL3729_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3729_set_value(int index, uint8_t value) { + is31fl3729_led_t led; + if (index >= 0 && index < IS31FL3729_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3729_leds[index]), sizeof(led)); + + if (driver_buffers[led.driver].pwm_buffer[led.v] == value) { + return; + } + + driver_buffers[led.driver].pwm_buffer[led.v] = value; + driver_buffers[led.driver].pwm_buffer_dirty = true; + } +} + +void is31fl3729_set_value_all(uint8_t value) { + for (int i = 0; i < IS31FL3729_LED_COUNT; i++) { + is31fl3729_set_value(i, value); + } +} + +void is31fl3729_set_scaling_register(uint8_t index, uint8_t value) { + is31fl3729_led_t led; + memcpy_P(&led, (&g_is31fl3729_leds[index]), sizeof(led)); + + // need to do a bit of checking here since 3729 scaling is per CS pin. + // not the usual per single LED key as per other ISSI drivers + // only enable them, since they should be default disabled + int cs_value = (led.v & 0x0F) - 1; + + driver_buffers[led.driver].scaling_buffer[cs_value] = value; + driver_buffers[led.driver].scaling_buffer_dirty = true; +} + +void is31fl3729_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (driver_buffers[index].pwm_buffer_dirty) { + is31fl3729_write_pwm_buffer(addr, index); + + driver_buffers[index].pwm_buffer_dirty = false; + } +} + +void is31fl3729_update_scaling_registers(uint8_t addr, uint8_t index) { + if (driver_buffers[index].scaling_buffer_dirty) { + for (uint8_t i = 0; i < IS31FL3729_SCALING_REGISTER_COUNT; i++) { + is31fl3729_write_register(addr, IS31FL3729_REG_SCALING + i, driver_buffers[index].scaling_buffer[i]); + } + + driver_buffers[index].scaling_buffer_dirty = false; + } +} + +void is31fl3729_flush(void) { + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_1, 0); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_2, 1); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_3, 2); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3729-mono.h b/drivers/led/issi/is31fl3729-mono.h new file mode 100644 index 0000000000..815c200fd9 --- /dev/null +++ b/drivers/led/issi/is31fl3729-mono.h @@ -0,0 +1,265 @@ +/* Copyright 2024 HorrorTroll + * Copyright 2024 Harrison Chan (Xelus) + * Copyright 2024 Dimitris Mantzouranis + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3729_REG_SCALING 0x90 +#define IS31FL3729_REG_CONFIGURATION 0xA0 +#define IS31FL3729_REG_GLOBAL_CURRENT 0xA1 +#define IS31FL3729_REG_PULLDOWNUP 0xB0 +#define IS31FL3729_REG_SPREAD_SPECTRUM 0xB1 +#define IS31FL3729_REG_PWM_FREQUENCY 0xB2 +#define IS31FL3729_REG_RESET 0xCF + +#define IS31FL3729_I2C_ADDRESS_GND 0x34 +#define IS31FL3729_I2C_ADDRESS_SCL 0x35 +#define IS31FL3729_I2C_ADDRESS_SDA 0x36 +#define IS31FL3729_I2C_ADDRESS_VCC 0x37 + +#if defined(LED_MATRIX_IS31FL3729) +# define IS31FL3729_LED_COUNT LED_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3729_I2C_ADDRESS_4) +# define IS31FL3729_DRIVER_COUNT 4 +#elif defined(IS31FL3729_I2C_ADDRESS_3) +# define IS31FL3729_DRIVER_COUNT 3 +#elif defined(IS31FL3729_I2C_ADDRESS_2) +# define IS31FL3729_DRIVER_COUNT 2 +#elif defined(IS31FL3729_I2C_ADDRESS_1) +# define IS31FL3729_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3729_led_t { + uint8_t driver : 2; + uint8_t v; +} PACKED is31fl3729_led_t; + +extern const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT]; + +void is31fl3729_init_drivers(void); +void is31fl3729_init(uint8_t addr); +void is31fl3729_write_register(uint8_t addr, uint8_t reg, uint8_t data); + +void is31fl3729_set_value(int index, uint8_t value); +void is31fl3729_set_value_all(uint8_t value); + +void is31fl3729_set_scaling_register(uint8_t index, uint8_t value); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3729_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3729_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3729_flush(void); + +// Noise reduction using Spread Spectrum register +#define IS31FL3729_SSP_DISABLE 0b0 +#define IS31FL3729_SSP_ENABLE 0b1 + +#define IS31FL3729_RNG_5_PERCENT 0b00 +#define IS31FL3729_RNG_15_PERCENT 0b01 +#define IS31FL3729_RNG_24_PERCENT 0b10 +#define IS31FL3729_RNG_34_PERCENT 0b11 + +#define IS31FL3729_CLT_1980_US 0b00 +#define IS31FL3729_CLT_1200_US 0b01 +#define IS31FL3729_CLT_820_US 0b10 +#define IS31FL3729_CLT_660_US 0b11 + +// Noise reduction using PWM Frequency register +#define IS31FL3729_PWM_FREQUENCY_55K_HZ 0b000 +#define IS31FL3729_PWM_FREQUENCY_32K_HZ 0b001 +#define IS31FL3729_PWM_FREQUENCY_4K_HZ 0b010 +#define IS31FL3729_PWM_FREQUENCY_2K_HZ 0b011 +#define IS31FL3729_PWM_FREQUENCY_1K_HZ 0b100 +#define IS31FL3729_PWM_FREQUENCY_500_HZ 0b101 +#define IS31FL3729_PWM_FREQUENCY_250_HZ 0b110 +#define IS31FL3729_PWM_FREQUENCY_80K_HZ 0b111 + +// Change SWx Setting using Configuration register +#define IS31FL3729_CONFIG_SWS_15_9 0x01 // 15 CS x 9 SW matrix +#define IS31FL3729_CONFIG_SWS_16_8 0x11 // 16 CS x 8 SW matrix +#define IS31FL3729_CONFIG_SWS_16_7 0x21 // 16 CS x 7 SW matrix +#define IS31FL3729_CONFIG_SWS_16_6 0x31 // 16 CS x 6 SW matrix +#define IS31FL3729_CONFIG_SWS_16_5 0x41 // 16 CS x 5 SW matrix +#define IS31FL3729_CONFIG_SWS_16_4 0x51 // 16 CS x 4 SW matrix +#define IS31FL3729_CONFIG_SWS_16_3 0x61 // 16 CS x 3 SW matrix +#define IS31FL3729_CONFIG_SWS_16_2 0x71 // 16 CS x 2 SW matrix + +// Map CS SW locations to order in PWM / Scaling buffers +// This matches the ORDER in the Datasheet Register not the POSITION +// It will always count from 0x01 to (ISSI_MAX_LEDS - 1) +#define SW1_CS1 0x01 +#define SW1_CS2 0x02 +#define SW1_CS3 0x03 +#define SW1_CS4 0x04 +#define SW1_CS5 0x05 +#define SW1_CS6 0x06 +#define SW1_CS7 0x07 +#define SW1_CS8 0x08 +#define SW1_CS9 0x09 +#define SW1_CS10 0x0A +#define SW1_CS11 0x0B +#define SW1_CS12 0x0C +#define SW1_CS13 0x0D +#define SW1_CS14 0x0E +#define SW1_CS15 0x0F +#define SW1_CS16 0x10 + +#define SW2_CS1 0x11 +#define SW2_CS2 0x12 +#define SW2_CS3 0x13 +#define SW2_CS4 0x14 +#define SW2_CS5 0x15 +#define SW2_CS6 0x16 +#define SW2_CS7 0x17 +#define SW2_CS8 0x18 +#define SW2_CS9 0x19 +#define SW2_CS10 0x1A +#define SW2_CS11 0x1B +#define SW2_CS12 0x1C +#define SW2_CS13 0x1D +#define SW2_CS14 0x1E +#define SW2_CS15 0x1F +#define SW2_CS16 0x20 + +#define SW3_CS1 0x21 +#define SW3_CS2 0x22 +#define SW3_CS3 0x23 +#define SW3_CS4 0x24 +#define SW3_CS5 0x25 +#define SW3_CS6 0x26 +#define SW3_CS7 0x27 +#define SW3_CS8 0x28 +#define SW3_CS9 0x29 +#define SW3_CS10 0x2A +#define SW3_CS11 0x2B +#define SW3_CS12 0x2C +#define SW3_CS13 0x2D +#define SW3_CS14 0x2E +#define SW3_CS15 0x2F +#define SW3_CS16 0x30 + +#define SW4_CS1 0x31 +#define SW4_CS2 0x32 +#define SW4_CS3 0x33 +#define SW4_CS4 0x34 +#define SW4_CS5 0x35 +#define SW4_CS6 0x36 +#define SW4_CS7 0x37 +#define SW4_CS8 0x38 +#define SW4_CS9 0x39 +#define SW4_CS10 0x3A +#define SW4_CS11 0x3B +#define SW4_CS12 0x3C +#define SW4_CS13 0x3D +#define SW4_CS14 0x3E +#define SW4_CS15 0x3F +#define SW4_CS16 0x40 + +#define SW5_CS1 0x41 +#define SW5_CS2 0x42 +#define SW5_CS3 0x43 +#define SW5_CS4 0x44 +#define SW5_CS5 0x45 +#define SW5_CS6 0x46 +#define SW5_CS7 0x47 +#define SW5_CS8 0x48 +#define SW5_CS9 0x49 +#define SW5_CS10 0x4A +#define SW5_CS11 0x4B +#define SW5_CS12 0x4C +#define SW5_CS13 0x4D +#define SW5_CS14 0x4E +#define SW5_CS15 0x4F +#define SW5_CS16 0x50 + +#define SW6_CS1 0x51 +#define SW6_CS2 0x52 +#define SW6_CS3 0x53 +#define SW6_CS4 0x54 +#define SW6_CS5 0x55 +#define SW6_CS6 0x56 +#define SW6_CS7 0x57 +#define SW6_CS8 0x58 +#define SW6_CS9 0x59 +#define SW6_CS10 0x5A +#define SW6_CS11 0x5B +#define SW6_CS12 0x5C +#define SW6_CS13 0x5D +#define SW6_CS14 0x5E +#define SW6_CS15 0x5F +#define SW6_CS16 0x60 + +#define SW7_CS1 0x61 +#define SW7_CS2 0x62 +#define SW7_CS3 0x63 +#define SW7_CS4 0x64 +#define SW7_CS5 0x65 +#define SW7_CS6 0x66 +#define SW7_CS7 0x67 +#define SW7_CS8 0x68 +#define SW7_CS9 0x69 +#define SW7_CS10 0x6A +#define SW7_CS11 0x6B +#define SW7_CS12 0x6C +#define SW7_CS13 0x6D +#define SW7_CS14 0x6E +#define SW7_CS15 0x6F +#define SW7_CS16 0x70 + +#define SW8_CS1 0x71 +#define SW8_CS2 0x72 +#define SW8_CS3 0x73 +#define SW8_CS4 0x74 +#define SW8_CS5 0x75 +#define SW8_CS6 0x76 +#define SW8_CS7 0x77 +#define SW8_CS8 0x78 +#define SW8_CS9 0x79 +#define SW8_CS10 0x7A +#define SW8_CS11 0x7B +#define SW8_CS12 0x7C +#define SW8_CS13 0x7D +#define SW8_CS14 0x7E +#define SW8_CS15 0x7F +#define SW8_CS16 0x80 + +#define SW9_CS1 0x81 +#define SW9_CS2 0x82 +#define SW9_CS3 0x83 +#define SW9_CS4 0x84 +#define SW9_CS5 0x85 +#define SW9_CS6 0x86 +#define SW9_CS7 0x87 +#define SW9_CS8 0x88 +#define SW9_CS9 0x89 +#define SW9_CS10 0x8A +#define SW9_CS11 0x8B +#define SW9_CS12 0x8C +#define SW9_CS13 0x8D +#define SW9_CS14 0x8E +#define SW9_CS15 0x8F diff --git a/drivers/led/issi/is31fl3729.c b/drivers/led/issi/is31fl3729.c new file mode 100644 index 0000000000..06f2d168d0 --- /dev/null +++ b/drivers/led/issi/is31fl3729.c @@ -0,0 +1,226 @@ +/* Copyright 2024 HorrorTroll + * Copyright 2024 Harrison Chan (Xelus) + * Copyright 2024 Dimitris Mantzouranis + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "is31fl3729.h" +#include "i2c_master.h" +#include "wait.h" + +#define IS31FL3729_PWM_REGISTER_COUNT 143 +#define IS31FL3729_SCALING_REGISTER_COUNT 16 + +#ifndef IS31FL3729_I2C_TIMEOUT +# define IS31FL3729_I2C_TIMEOUT 100 +#endif + +#ifndef IS31FL3729_I2C_PERSISTENCE +# define IS31FL3729_I2C_PERSISTENCE 0 +#endif + +#ifndef IS31FL3729_CONFIGURATION +# define IS31FL3729_CONFIGURATION IS31FL3729_CONFIG_SWS_15_9 +#endif + +#ifndef IS31FL3729_GLOBAL_CURRENT +# define IS31FL3729_GLOBAL_CURRENT 0x40 +#endif + +#ifndef IS31FL3729_PULLDOWNUP +# define IS31FL3729_PULLDOWNUP 0x33 +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM +# define IS31FL3729_SPREAD_SPECTRUM IS31FL3729_SSP_DISABLE +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM_RANGE +# define IS31FL3729_SPREAD_SPECTRUM_RANGE IS31FL3729_RNG_5_PERCENT +#endif + +#ifndef IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME +# define IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME IS31FL3729_CLT_1980_US +#endif + +#ifndef IS31FL3729_PWM_FREQUENCY +# define IS31FL3729_PWM_FREQUENCY IS31FL3729_PWM_FREQUENCY_32K_HZ +#endif + +// These buffers match the PWM & scaling registers. +// Storing them like this is optimal for I2C transfers to the registers. +typedef struct is31fl3729_driver_t { + uint8_t pwm_buffer[IS31FL3729_PWM_REGISTER_COUNT]; + bool pwm_buffer_dirty; + uint8_t scaling_buffer[IS31FL3729_SCALING_REGISTER_COUNT]; + bool scaling_buffer_dirty; +} PACKED is31fl3729_driver_t; + +is31fl3729_driver_t driver_buffers[IS31FL3729_DRIVER_COUNT] = {{ + .pwm_buffer = {0}, + .pwm_buffer_dirty = false, + .scaling_buffer = {0}, + .scaling_buffer_dirty = false, +}}; + +void is31fl3729_write_register(uint8_t addr, uint8_t reg, uint8_t data) { +#if IS31FL3729_I2C_PERSISTENCE > 0 + for (uint8_t i = 0; i < IS31FL3729_I2C_PERSISTENCE; i++) { + if (i2c_write_register(addr << 1, reg, &data, 1, IS31FL3729_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break; + } +#else + i2c_write_register(addr << 1, reg, &data, 1, IS31FL3729_I2C_TIMEOUT); +#endif +} + +void is31fl3729_write_pwm_buffer(uint8_t addr, uint8_t index) { + // Transmit PWM registers in 9 transfers of 16 bytes. + + // Iterate over the pwm_buffer contents at 16 byte intervals. + for (uint8_t i = 0; i <= IS31FL3729_PWM_REGISTER_COUNT; i += 16) { +#if IS31FL3729_I2C_PERSISTENCE > 0 + for (uint8_t j = 0; j < IS31FL3729_I2C_PERSISTENCE; j++) { + if (i2c_write_register(addr << 1, i, driver_buffers[index].pwm_buffer + i, 16, IS31FL3729_I2C_TIMEOUT) == I2C_STATUS_SUCCESS) break; + } +#else + i2c_write_register(addr << 1, i, driver_buffers[index].pwm_buffer + i, 16, IS31FL3729_I2C_TIMEOUT); +#endif + } +} + +void is31fl3729_init_drivers(void) { + i2c_init(); + + is31fl3729_init(IS31FL3729_I2C_ADDRESS_1); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_2); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_3); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_init(IS31FL3729_I2C_ADDRESS_4); +# endif +# endif +#endif + + for (int i = 0; i < IS31FL3729_LED_COUNT; i++) { + is31fl3729_set_scaling_register(i, 0xFF, 0xFF, 0xFF); + } + + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_1, 0); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_2, 1); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_3, 2); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_update_scaling_registers(IS31FL3729_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} + +void is31fl3729_init(uint8_t addr) { + // In order to avoid the LEDs being driven with garbage data + // in the LED driver's PWM registers, shutdown is enabled last. + // Set up the mode and other settings, clear the PWM registers, + // then disable software shutdown. + + // Set Pull up & Down for SWx CSy + is31fl3729_write_register(addr, IS31FL3729_REG_PULLDOWNUP, IS31FL3729_PULLDOWNUP); + + // Set Spread Spectrum Register if applicable + is31fl3729_write_register(addr, IS31FL3729_REG_SPREAD_SPECTRUM, ((IS31FL3729_SPREAD_SPECTRUM & 0b1) << 4) | ((IS31FL3729_SPREAD_SPECTRUM_RANGE & 0b11) << 2) | (IS31FL3729_SPREAD_SPECTRUM_CYCLE_TIME & 0b11)); + + // Set PWM Frequency Register if applicable + is31fl3729_write_register(addr, IS31FL3729_REG_PWM_FREQUENCY, IS31FL3729_PWM_FREQUENCY); + + // Set Golbal Current Control Register + is31fl3729_write_register(addr, IS31FL3729_REG_GLOBAL_CURRENT, IS31FL3729_GLOBAL_CURRENT); + + // Set to Normal operation + is31fl3729_write_register(addr, IS31FL3729_REG_CONFIGURATION, IS31FL3729_CONFIGURATION); + + // Wait 10ms to ensure the device has woken up. + wait_ms(10); +} + +void is31fl3729_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3729_led_t led; + if (index >= 0 && index < IS31FL3729_LED_COUNT) { + memcpy_P(&led, (&g_is31fl3729_leds[index]), sizeof(led)); + + if (driver_buffers[led.driver].pwm_buffer[led.r] == red && driver_buffers[led.driver].pwm_buffer[led.g] == green && driver_buffers[led.driver].pwm_buffer[led.b] == blue) { + return; + } + + driver_buffers[led.driver].pwm_buffer[led.r] = red; + driver_buffers[led.driver].pwm_buffer[led.g] = green; + driver_buffers[led.driver].pwm_buffer[led.b] = blue; + driver_buffers[led.driver].pwm_buffer_dirty = true; + } +} + +void is31fl3729_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (int i = 0; i < IS31FL3729_LED_COUNT; i++) { + is31fl3729_set_color(i, red, green, blue); + } +} + +void is31fl3729_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue) { + is31fl3729_led_t led; + memcpy_P(&led, (&g_is31fl3729_leds[index]), sizeof(led)); + + // need to do a bit of checking here since 3729 scaling is per CS pin. + // not the usual per RGB key as per other ISSI drivers + // only enable them, since they should be default disabled + int cs_red = (led.r & 0x0F) - 1; + int cs_green = (led.g & 0x0F) - 1; + int cs_blue = (led.b & 0x0F) - 1; + + driver_buffers[led.driver].scaling_buffer[cs_red] = red; + driver_buffers[led.driver].scaling_buffer[cs_green] = green; + driver_buffers[led.driver].scaling_buffer[cs_blue] = blue; + driver_buffers[led.driver].scaling_buffer_dirty = true; +} + +void is31fl3729_update_pwm_buffers(uint8_t addr, uint8_t index) { + if (driver_buffers[index].pwm_buffer_dirty) { + is31fl3729_write_pwm_buffer(addr, index); + + driver_buffers[index].pwm_buffer_dirty = false; + } +} + +void is31fl3729_update_scaling_registers(uint8_t addr, uint8_t index) { + if (driver_buffers[index].scaling_buffer_dirty) { + for (uint8_t i = 0; i < IS31FL3729_SCALING_REGISTER_COUNT; i++) { + is31fl3729_write_register(addr, IS31FL3729_REG_SCALING + i, driver_buffers[index].scaling_buffer[i]); + } + + driver_buffers[index].scaling_buffer_dirty = false; + } +} + +void is31fl3729_flush(void) { + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_1, 0); +#if defined(IS31FL3729_I2C_ADDRESS_2) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_2, 1); +# if defined(IS31FL3729_I2C_ADDRESS_3) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_3, 2); +# if defined(IS31FL3729_I2C_ADDRESS_4) + is31fl3729_update_pwm_buffers(IS31FL3729_I2C_ADDRESS_4, 3); +# endif +# endif +#endif +} diff --git a/drivers/led/issi/is31fl3729.h b/drivers/led/issi/is31fl3729.h new file mode 100644 index 0000000000..6f2672b6a3 --- /dev/null +++ b/drivers/led/issi/is31fl3729.h @@ -0,0 +1,267 @@ +/* Copyright 2024 HorrorTroll + * Copyright 2024 Harrison Chan (Xelus) + * Copyright 2024 Dimitris Mantzouranis + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include +#include +#include "progmem.h" +#include "util.h" + +#define IS31FL3729_REG_SCALING 0x90 +#define IS31FL3729_REG_CONFIGURATION 0xA0 +#define IS31FL3729_REG_GLOBAL_CURRENT 0xA1 +#define IS31FL3729_REG_PULLDOWNUP 0xB0 +#define IS31FL3729_REG_SPREAD_SPECTRUM 0xB1 +#define IS31FL3729_REG_PWM_FREQUENCY 0xB2 +#define IS31FL3729_REG_RESET 0xCF + +#define IS31FL3729_I2C_ADDRESS_GND 0x34 +#define IS31FL3729_I2C_ADDRESS_SCL 0x35 +#define IS31FL3729_I2C_ADDRESS_SDA 0x36 +#define IS31FL3729_I2C_ADDRESS_VCC 0x37 + +#if defined(RGB_MATRIX_IS31FL3729) +# define IS31FL3729_LED_COUNT RGB_MATRIX_LED_COUNT +#endif + +#if defined(IS31FL3729_I2C_ADDRESS_4) +# define IS31FL3729_DRIVER_COUNT 4 +#elif defined(IS31FL3729_I2C_ADDRESS_3) +# define IS31FL3729_DRIVER_COUNT 3 +#elif defined(IS31FL3729_I2C_ADDRESS_2) +# define IS31FL3729_DRIVER_COUNT 2 +#elif defined(IS31FL3729_I2C_ADDRESS_1) +# define IS31FL3729_DRIVER_COUNT 1 +#endif + +typedef struct is31fl3729_led_t { + uint8_t driver : 2; + uint8_t r; + uint8_t g; + uint8_t b; +} PACKED is31fl3729_led_t; + +extern const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT]; + +void is31fl3729_init_drivers(void); +void is31fl3729_init(uint8_t addr); +void is31fl3729_write_register(uint8_t addr, uint8_t reg, uint8_t data); + +void is31fl3729_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void is31fl3729_set_color_all(uint8_t red, uint8_t green, uint8_t blue); + +void is31fl3729_set_scaling_register(uint8_t index, uint8_t red, uint8_t green, uint8_t blue); + +// This should not be called from an interrupt +// (eg. from a timer interrupt). +// Call this while idle (in between matrix scans). +// If the buffer is dirty, it will update the driver with the buffer. +void is31fl3729_update_pwm_buffers(uint8_t addr, uint8_t index); +void is31fl3729_update_scaling_registers(uint8_t addr, uint8_t index); + +void is31fl3729_flush(void); + +// Noise reduction using Spread Spectrum register +#define IS31FL3729_SSP_DISABLE 0b0 +#define IS31FL3729_SSP_ENABLE 0b1 + +#define IS31FL3729_RNG_5_PERCENT 0b00 +#define IS31FL3729_RNG_15_PERCENT 0b01 +#define IS31FL3729_RNG_24_PERCENT 0b10 +#define IS31FL3729_RNG_34_PERCENT 0b11 + +#define IS31FL3729_CLT_1980_US 0b00 +#define IS31FL3729_CLT_1200_US 0b01 +#define IS31FL3729_CLT_820_US 0b10 +#define IS31FL3729_CLT_660_US 0b11 + +// Noise reduction using PWM Frequency register +#define IS31FL3729_PWM_FREQUENCY_55K_HZ 0b000 +#define IS31FL3729_PWM_FREQUENCY_32K_HZ 0b001 +#define IS31FL3729_PWM_FREQUENCY_4K_HZ 0b010 +#define IS31FL3729_PWM_FREQUENCY_2K_HZ 0b011 +#define IS31FL3729_PWM_FREQUENCY_1K_HZ 0b100 +#define IS31FL3729_PWM_FREQUENCY_500_HZ 0b101 +#define IS31FL3729_PWM_FREQUENCY_250_HZ 0b110 +#define IS31FL3729_PWM_FREQUENCY_80K_HZ 0b111 + +// Change SWx Setting using Configuration register +#define IS31FL3729_CONFIG_SWS_15_9 0x01 // 15 CS x 9 SW matrix +#define IS31FL3729_CONFIG_SWS_16_8 0x11 // 16 CS x 8 SW matrix +#define IS31FL3729_CONFIG_SWS_16_7 0x21 // 16 CS x 7 SW matrix +#define IS31FL3729_CONFIG_SWS_16_6 0x31 // 16 CS x 6 SW matrix +#define IS31FL3729_CONFIG_SWS_16_5 0x41 // 16 CS x 5 SW matrix +#define IS31FL3729_CONFIG_SWS_16_4 0x51 // 16 CS x 4 SW matrix +#define IS31FL3729_CONFIG_SWS_16_3 0x61 // 16 CS x 3 SW matrix +#define IS31FL3729_CONFIG_SWS_16_2 0x71 // 16 CS x 2 SW matrix + +// Map CS SW locations to order in PWM / Scaling buffers +// This matches the ORDER in the Datasheet Register not the POSITION +// It will always count from 0x01 to (ISSI_MAX_LEDS - 1) +#define SW1_CS1 0x01 +#define SW1_CS2 0x02 +#define SW1_CS3 0x03 +#define SW1_CS4 0x04 +#define SW1_CS5 0x05 +#define SW1_CS6 0x06 +#define SW1_CS7 0x07 +#define SW1_CS8 0x08 +#define SW1_CS9 0x09 +#define SW1_CS10 0x0A +#define SW1_CS11 0x0B +#define SW1_CS12 0x0C +#define SW1_CS13 0x0D +#define SW1_CS14 0x0E +#define SW1_CS15 0x0F +#define SW1_CS16 0x10 + +#define SW2_CS1 0x11 +#define SW2_CS2 0x12 +#define SW2_CS3 0x13 +#define SW2_CS4 0x14 +#define SW2_CS5 0x15 +#define SW2_CS6 0x16 +#define SW2_CS7 0x17 +#define SW2_CS8 0x18 +#define SW2_CS9 0x19 +#define SW2_CS10 0x1A +#define SW2_CS11 0x1B +#define SW2_CS12 0x1C +#define SW2_CS13 0x1D +#define SW2_CS14 0x1E +#define SW2_CS15 0x1F +#define SW2_CS16 0x20 + +#define SW3_CS1 0x21 +#define SW3_CS2 0x22 +#define SW3_CS3 0x23 +#define SW3_CS4 0x24 +#define SW3_CS5 0x25 +#define SW3_CS6 0x26 +#define SW3_CS7 0x27 +#define SW3_CS8 0x28 +#define SW3_CS9 0x29 +#define SW3_CS10 0x2A +#define SW3_CS11 0x2B +#define SW3_CS12 0x2C +#define SW3_CS13 0x2D +#define SW3_CS14 0x2E +#define SW3_CS15 0x2F +#define SW3_CS16 0x30 + +#define SW4_CS1 0x31 +#define SW4_CS2 0x32 +#define SW4_CS3 0x33 +#define SW4_CS4 0x34 +#define SW4_CS5 0x35 +#define SW4_CS6 0x36 +#define SW4_CS7 0x37 +#define SW4_CS8 0x38 +#define SW4_CS9 0x39 +#define SW4_CS10 0x3A +#define SW4_CS11 0x3B +#define SW4_CS12 0x3C +#define SW4_CS13 0x3D +#define SW4_CS14 0x3E +#define SW4_CS15 0x3F +#define SW4_CS16 0x40 + +#define SW5_CS1 0x41 +#define SW5_CS2 0x42 +#define SW5_CS3 0x43 +#define SW5_CS4 0x44 +#define SW5_CS5 0x45 +#define SW5_CS6 0x46 +#define SW5_CS7 0x47 +#define SW5_CS8 0x48 +#define SW5_CS9 0x49 +#define SW5_CS10 0x4A +#define SW5_CS11 0x4B +#define SW5_CS12 0x4C +#define SW5_CS13 0x4D +#define SW5_CS14 0x4E +#define SW5_CS15 0x4F +#define SW5_CS16 0x50 + +#define SW6_CS1 0x51 +#define SW6_CS2 0x52 +#define SW6_CS3 0x53 +#define SW6_CS4 0x54 +#define SW6_CS5 0x55 +#define SW6_CS6 0x56 +#define SW6_CS7 0x57 +#define SW6_CS8 0x58 +#define SW6_CS9 0x59 +#define SW6_CS10 0x5A +#define SW6_CS11 0x5B +#define SW6_CS12 0x5C +#define SW6_CS13 0x5D +#define SW6_CS14 0x5E +#define SW6_CS15 0x5F +#define SW6_CS16 0x60 + +#define SW7_CS1 0x61 +#define SW7_CS2 0x62 +#define SW7_CS3 0x63 +#define SW7_CS4 0x64 +#define SW7_CS5 0x65 +#define SW7_CS6 0x66 +#define SW7_CS7 0x67 +#define SW7_CS8 0x68 +#define SW7_CS9 0x69 +#define SW7_CS10 0x6A +#define SW7_CS11 0x6B +#define SW7_CS12 0x6C +#define SW7_CS13 0x6D +#define SW7_CS14 0x6E +#define SW7_CS15 0x6F +#define SW7_CS16 0x70 + +#define SW8_CS1 0x71 +#define SW8_CS2 0x72 +#define SW8_CS3 0x73 +#define SW8_CS4 0x74 +#define SW8_CS5 0x75 +#define SW8_CS6 0x76 +#define SW8_CS7 0x77 +#define SW8_CS8 0x78 +#define SW8_CS9 0x79 +#define SW8_CS10 0x7A +#define SW8_CS11 0x7B +#define SW8_CS12 0x7C +#define SW8_CS13 0x7D +#define SW8_CS14 0x7E +#define SW8_CS15 0x7F +#define SW8_CS16 0x80 + +#define SW9_CS1 0x81 +#define SW9_CS2 0x82 +#define SW9_CS3 0x83 +#define SW9_CS4 0x84 +#define SW9_CS5 0x85 +#define SW9_CS6 0x86 +#define SW9_CS7 0x87 +#define SW9_CS8 0x88 +#define SW9_CS9 0x89 +#define SW9_CS10 0x8A +#define SW9_CS11 0x8B +#define SW9_CS12 0x8C +#define SW9_CS13 0x8D +#define SW9_CS14 0x8E +#define SW9_CS15 0x8F diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index b866383481..2e80bd0375 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -33,6 +33,14 @@ const led_matrix_driver_t led_matrix_driver = { .set_value_all = is31fl3218_set_value_all, }; +#elif defined(LED_MATRIX_IS31FL3729) +const led_matrix_driver_t led_matrix_driver = { + .init = is31fl3729_init_drivers, + .flush = is31fl3729_flush, + .set_value = is31fl3729_set_value, + .set_value_all = is31fl3729_set_value_all, +}; + #elif defined(LED_MATRIX_IS31FL3731) const led_matrix_driver_t led_matrix_driver = { .init = is31fl3731_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index d792600e1f..a961784a62 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -7,6 +7,8 @@ #if defined(LED_MATRIX_IS31FL3218) # include "is31fl3218-mono.h" +#elif defined(LED_MATRIX_IS31FL3729) +# include "is31fl3729-mono.h" #elif defined(LED_MATRIX_IS31FL3731) # include "is31fl3731-mono.h" #elif defined(LED_MATRIX_IS31FL3733) diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index b5e539657d..95d1e884f0 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -36,6 +36,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3218_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3729) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3729_init_drivers, + .flush = is31fl3729_flush, + .set_color = is31fl3729_set_color, + .set_color_all = is31fl3729_set_color_all, +}; + #elif defined(RGB_MATRIX_IS31FL3731) const rgb_matrix_driver_t rgb_matrix_driver = { .init = is31fl3731_init_drivers, diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index 8f919b1b3c..a24cb03a18 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -9,6 +9,8 @@ # include "aw20216s.h" #elif defined(RGB_MATRIX_IS31FL3218) # include "is31fl3218.h" +#elif defined(RGB_MATRIX_IS31FL3729) +# include "is31fl3729.h" #elif defined(RGB_MATRIX_IS31FL3731) # include "is31fl3731.h" #elif defined(RGB_MATRIX_IS31FL3733) -- cgit v1.2.3 From 538333571754c3cbeec92bc793b1b8023744cbbd Mon Sep 17 00:00:00 2001 From: Pablo Martínez Date: Sat, 17 Feb 2024 08:36:05 +0100 Subject: [Driver] ILI9486 on Quantum Painter (#18521) Co-authored-by: Nick Brassel --- docs/quantum_painter.md | 34 +++ drivers/painter/comms/qp_comms_spi.h | 1 + drivers/painter/ili9xxx/qp_ili9486.c | 298 +++++++++++++++++++++++++++ drivers/painter/ili9xxx/qp_ili9486.h | 52 +++++ drivers/painter/ili9xxx/qp_ili9xxx_opcodes.h | 1 + quantum/painter/qp.h | 6 + quantum/painter/qp_internal.c | 1 + quantum/painter/rules.mk | 12 ++ 8 files changed, 405 insertions(+) create mode 100644 drivers/painter/ili9xxx/qp_ili9486.c create mode 100644 drivers/painter/ili9xxx/qp_ili9486.h (limited to 'quantum') diff --git a/docs/quantum_painter.md b/docs/quantum_painter.md index dc855b1bf6..7f524b07ee 100644 --- a/docs/quantum_painter.md +++ b/docs/quantum_painter.md @@ -24,6 +24,7 @@ Supported devices: | GC9A01 | RGB LCD (circular) | 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += gc9a01_spi` | | ILI9163 | RGB LCD | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9163_spi` | | ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` | +| ILI9486 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9486_spi` | | ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` | | SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` | | ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` | @@ -281,6 +282,39 @@ The maximum number of displays can be configured by changing the following in yo Native color format rgb565 is compatible with ILI9341 +#### ** ILI9486 ** + +Enabling support for the ILI9486 in Quantum Painter is done by adding the following to `rules.mk`: + +```make +QUANTUM_PAINTER_ENABLE = yes +QUANTUM_PAINTER_DRIVERS += ili9486_spi +``` + +Creating a ILI9486 device in firmware can then be done with the following API: + +```c +painter_device_t qp_ili9486_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); +``` + +There's another variant for this [Waveshare module](https://www.waveshare.com/wiki/3.5inch_TFT_Touch_Shield), because it has a quirky SPI->Parallel converter. You can create it with: + +```c +painter_device_t qp_ili9486_make_spi_waveshare_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); +``` + +The device handle returned from these functions can be used to perform all other drawing operations. + +The maximum number of displays can be configured by changing the following in your `config.h` (default is 1): + +```c +// 3 displays: +#define ILI9486_NUM_DEVICES 3 +``` + +Native color format rgb888 is compatible with ILI9486 +Native color format rgb565 is compatible with ILI9486 Waveshare + #### ** ILI9488 ** Enabling support for the ILI9488 in Quantum Painter is done by adding the following to `rules.mk`: diff --git a/drivers/painter/comms/qp_comms_spi.h b/drivers/painter/comms/qp_comms_spi.h index ff323c3c10..c39ea95f72 100644 --- a/drivers/painter/comms/qp_comms_spi.h +++ b/drivers/painter/comms/qp_comms_spi.h @@ -38,6 +38,7 @@ typedef struct qp_comms_spi_dc_reset_config_t { bool command_params_uses_command_pin; // keep D/C held low when sending command sequences for data bytes } qp_comms_spi_dc_reset_config_t; +bool qp_comms_spi_dc_reset_init(painter_device_t device); void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd); uint32_t qp_comms_spi_dc_reset_send_data(painter_device_t device, const void* data, uint32_t byte_count); void qp_comms_spi_dc_reset_bulk_command_sequence(painter_device_t device, const uint8_t* sequence, size_t sequence_len); diff --git a/drivers/painter/ili9xxx/qp_ili9486.c b/drivers/painter/ili9xxx/qp_ili9486.c new file mode 100644 index 0000000000..c4f3c15cec --- /dev/null +++ b/drivers/painter/ili9xxx/qp_ili9486.c @@ -0,0 +1,298 @@ +// Copyright 2021 Nick Brassel (@tzarc) +// Copyright 2023 Pablo Martinez (@elpekenin) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "qp_internal.h" +#include "qp_comms.h" +#include "qp_ili9486.h" +#include "qp_ili9xxx_opcodes.h" +#include "qp_tft_panel.h" + +#ifdef QUANTUM_PAINTER_ILI9486_SPI_ENABLE +# include "spi_master.h" +# include +#endif // QUANTUM_PAINTER_ILI9486_SPI_ENABLE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Common + +// Driver storage +tft_panel_dc_reset_painter_device_t ili9486_drivers[ILI9486_NUM_DEVICES] = {0}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialization + +bool qp_ili9486_init(painter_device_t device, painter_rotation_t rotation) { + // clang-format off + const uint8_t ili9486_init_sequence[] = { + // Command, Delay, N, Data[N] + ILI9XXX_CMD_RESET, 120, 0, + ILI9XXX_SET_PIX_FMT, 0, 1, 0x55, + ILI9XXX_SET_PGAMMA, 0, 15, 0x0F, 0x1F, 0x1C, 0x0C, 0x0F, 0x08, 0x48, 0x98, 0x37, 0x0A, 0x13, 0x04, 0x11, 0x0D, 0x00, + ILI9XXX_SET_NGAMMA, 0, 15, 0x0F, 0x32, 0x2E, 0x0B, 0x0D, 0x05, 0x47, 0x75, 0x37, 0x06, 0x10, 0x03, 0x24, 0x20, 0x00, + ILI9XXX_SET_POWER_CTL_1, 0, 2, 0x0D, 0x0D, + ILI9XXX_SET_POWER_CTL_2, 0, 2, 0x43, 0x00, + ILI9XXX_SET_POWER_CTL_3, 0, 1, 0x00, + ILI9XXX_SET_VCOM_CTL_1, 0, 4, 0x00, 0x48, 0x00, 0x48, + ILI9XXX_SET_INVERSION_CTL, 0, 1, 0x02, + }; + // clang-format on + qp_comms_bulk_command_sequence(device, ili9486_init_sequence, sizeof(ili9486_init_sequence)); + + // Configure the rotation (i.e. the ordering and direction of memory writes in GRAM) + const uint8_t madctl[] = { + [QP_ROTATION_0] = ILI9XXX_MADCTL_BGR, + [QP_ROTATION_90] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV, + [QP_ROTATION_180] = ILI9XXX_MADCTL_BGR, + [QP_ROTATION_270] = ILI9XXX_MADCTL_BGR | ILI9XXX_MADCTL_MV, + }; + const uint8_t functl[] = { + [QP_ROTATION_0] = 0x42, + [QP_ROTATION_90] = 0x62, + [QP_ROTATION_180] = 0x22, + [QP_ROTATION_270] = 0x02, + }; + + // clang-format off + uint8_t rotation_sequence[] = { + // Command, Delay, N, Data[N] + ILI9XXX_SET_MEM_ACS_CTL, 0, 1, madctl[rotation], + ILI9XXX_SET_FUNCTION_CTL, 0, 2, 0x00, functl[rotation], + ILI9XXX_CMD_SLEEP_OFF, 5, 0, + ILI9XXX_CMD_DISPLAY_ON, 5, 0, + }; + // clang-format on + qp_comms_bulk_command_sequence(device, rotation_sequence, sizeof(rotation_sequence)); + + return true; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Driver vtable + +// waveshare variant needs some tweaks due to shift registers +static void qp_comms_spi_dc_reset_send_command_odd_cs_pulse(painter_device_t device, uint8_t cmd) { + painter_driver_t * driver = (painter_driver_t *)device; + qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; + + writePinLow(comms_config->spi_config.chip_select_pin); + qp_comms_spi_dc_reset_send_command(device, cmd); + writePinHigh(comms_config->spi_config.chip_select_pin); +} + +static uint32_t qp_comms_spi_send_data_odd_cs_pulse(painter_device_t device, const void *data, uint32_t byte_count) { + painter_driver_t * driver = (painter_driver_t *)device; + qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; + + uint32_t bytes_remaining = byte_count; + const uint8_t *p = (const uint8_t *)data; + uint32_t max_msg_length = 1024; + + writePinHigh(comms_config->dc_pin); + while (bytes_remaining > 0) { + uint32_t bytes_this_loop = QP_MIN(bytes_remaining, max_msg_length); + bool odd_bytes = bytes_this_loop & 1; + + // send data + writePinLow(comms_config->spi_config.chip_select_pin); + spi_transmit(p, bytes_this_loop); + p += bytes_this_loop; + + // extra CS toggle, for alignment + if (odd_bytes) { + writePinHigh(comms_config->spi_config.chip_select_pin); + writePinLow(comms_config->spi_config.chip_select_pin); + } + + bytes_remaining -= bytes_this_loop; + } + + return byte_count - bytes_remaining; +} + +static uint32_t qp_ili9486_send_data_toggling(painter_device_t device, const uint8_t *data, uint32_t byte_count) { + painter_driver_t * driver = (painter_driver_t *)device; + qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; + + uint32_t ret; + for (uint8_t j = 0; j < byte_count; ++j) { + writePinLow(comms_config->spi_config.chip_select_pin); + ret = qp_comms_spi_dc_reset_send_data(device, &data[j], 1); + writePinHigh(comms_config->spi_config.chip_select_pin); + } + + return ret; +} + +static void qp_comms_spi_send_command_sequence_odd_cs_pulse(painter_device_t device, const uint8_t *sequence, size_t sequence_len) { + for (size_t i = 0; i < sequence_len;) { + uint8_t command = sequence[i]; + uint8_t delay = sequence[i + 1]; + uint8_t num_bytes = sequence[i + 2]; + + qp_comms_spi_dc_reset_send_command_odd_cs_pulse(device, command); + if (num_bytes > 0) { + qp_ili9486_send_data_toggling(device, &sequence[i + 3], num_bytes); + } + + if (delay > 0) { + wait_ms(delay); + } + i += (3 + num_bytes); + } +} + +static bool qp_ili9486_viewport(painter_device_t device, uint16_t left, uint16_t top, uint16_t right, uint16_t bottom) { + painter_driver_t * driver = (painter_driver_t *)device; + tft_panel_dc_reset_painter_driver_vtable_t *vtable = (tft_panel_dc_reset_painter_driver_vtable_t *)driver->driver_vtable; + + // Fix up the drawing location if required + left += driver->offset_x; + right += driver->offset_x; + top += driver->offset_y; + bottom += driver->offset_y; + + // Check if we need to manually swap the window coordinates based on whether or not we're in a sideways rotation + if (vtable->swap_window_coords && (driver->rotation == QP_ROTATION_90 || driver->rotation == QP_ROTATION_270)) { + uint16_t temp; + + temp = left; + left = top; + top = temp; + + temp = right; + right = bottom; + bottom = temp; + } + + // Set up the x-window + uint8_t xbuf[4] = {left >> 8, left & 0xFF, right >> 8, right & 0xFF}; + qp_comms_spi_dc_reset_send_command_odd_cs_pulse(device, vtable->opcodes.set_column_address); + qp_ili9486_send_data_toggling(device, xbuf, 4); + + // Set up the y-window + uint8_t ybuf[4] = {top >> 8, top & 0xFF, bottom >> 8, bottom & 0xFF}; + qp_comms_spi_dc_reset_send_command_odd_cs_pulse(device, vtable->opcodes.set_row_address); + qp_ili9486_send_data_toggling(device, ybuf, 4); + + // Lock in the window + qp_comms_spi_dc_reset_send_command_odd_cs_pulse(device, vtable->opcodes.enable_writes); + return true; +} + +// Regular +const tft_panel_dc_reset_painter_driver_vtable_t ili9486_driver_vtable = { + .base = + { + .init = qp_ili9486_init, + .power = qp_tft_panel_power, + .clear = qp_tft_panel_clear, + .flush = qp_tft_panel_flush, + .pixdata = qp_tft_panel_pixdata, + .viewport = qp_tft_panel_viewport, + .palette_convert = qp_tft_panel_palette_convert_rgb565_swapped, + .append_pixels = qp_tft_panel_append_pixels_rgb565, + .append_pixdata = qp_tft_panel_append_pixdata, + }, + .num_window_bytes = 2, + .swap_window_coords = false, + .opcodes = + { + .display_on = ILI9XXX_CMD_DISPLAY_ON, + .display_off = ILI9XXX_CMD_DISPLAY_OFF, + .set_column_address = ILI9XXX_SET_COL_ADDR, + .set_row_address = ILI9XXX_SET_PAGE_ADDR, + .enable_writes = ILI9XXX_SET_MEM, + }, +}; + +// Waveshare tweaks +const tft_panel_dc_reset_painter_driver_vtable_t ili9486_waveshare_driver_vtable = { + .base = + { + .init = qp_ili9486_init, + .power = qp_tft_panel_power, + .clear = qp_tft_panel_clear, + .flush = qp_tft_panel_flush, + .pixdata = qp_tft_panel_pixdata, + .viewport = qp_ili9486_viewport, + .palette_convert = qp_tft_panel_palette_convert_rgb565_swapped, + .append_pixels = qp_tft_panel_append_pixels_rgb565, + .append_pixdata = qp_tft_panel_append_pixdata, + }, + .num_window_bytes = 2, + .swap_window_coords = false, + .opcodes = + { + .display_on = ILI9XXX_CMD_DISPLAY_ON, + .display_off = ILI9XXX_CMD_DISPLAY_OFF, + .set_column_address = ILI9XXX_SET_COL_ADDR, + .set_row_address = ILI9XXX_SET_PAGE_ADDR, + .enable_writes = ILI9XXX_SET_MEM, + }, +}; + +static const painter_comms_with_command_vtable_t spi_comms_odd_cs_pulse_vtable = { + .base = + { + .comms_init = qp_comms_spi_dc_reset_init, + .comms_start = qp_comms_spi_start, + .comms_send = qp_comms_spi_send_data_odd_cs_pulse, + .comms_stop = qp_comms_spi_stop, + }, + .send_command = qp_comms_spi_dc_reset_send_command_odd_cs_pulse, + .bulk_command_sequence = qp_comms_spi_send_command_sequence_odd_cs_pulse, +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// SPI + +#ifdef QUANTUM_PAINTER_ILI9486_SPI_ENABLE + +// Factory function for creating a handle to the ILI9486 device +painter_device_t qp_ili9486_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) { + for (uint32_t i = 0; i < ILI9486_NUM_DEVICES; ++i) { + tft_panel_dc_reset_painter_device_t *driver = &ili9486_drivers[i]; + if (!driver->base.driver_vtable) { + driver->base.driver_vtable = (const painter_driver_vtable_t *)&ili9486_driver_vtable; + driver->base.comms_vtable = (const painter_comms_vtable_t *)&spi_comms_with_dc_vtable; + driver->base.native_bits_per_pixel = 16; // RGB565 + driver->base.panel_width = panel_width; + driver->base.panel_height = panel_height; + driver->base.rotation = QP_ROTATION_0; + driver->base.offset_x = 0; + driver->base.offset_y = 0; + + // SPI and other pin configuration + driver->base.comms_config = &driver->spi_dc_reset_config; + driver->spi_dc_reset_config.spi_config.chip_select_pin = chip_select_pin; + driver->spi_dc_reset_config.spi_config.divisor = spi_divisor; + driver->spi_dc_reset_config.spi_config.lsb_first = false; + driver->spi_dc_reset_config.spi_config.mode = spi_mode; + driver->spi_dc_reset_config.dc_pin = dc_pin; + driver->spi_dc_reset_config.reset_pin = reset_pin; + + if (!qp_internal_register_device((painter_device_t)driver)) { + memset(driver, 0, sizeof(tft_panel_dc_reset_painter_device_t)); + return NULL; + } + + return (painter_device_t)driver; + } + } + return NULL; +} + +painter_device_t qp_ili9486_make_spi_waveshare_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode) { + painter_device_t device = qp_ili9486_make_spi_device(panel_width, panel_height, chip_select_pin, dc_pin, reset_pin, spi_divisor, spi_mode); + if (device) { + tft_panel_dc_reset_painter_device_t *driver = (tft_panel_dc_reset_painter_device_t *)device; + driver->base.driver_vtable = (const painter_driver_vtable_t *)&ili9486_waveshare_driver_vtable; + driver->base.comms_vtable = (const painter_comms_vtable_t *)&spi_comms_odd_cs_pulse_vtable; + } + return device; +} + +#endif // QUANTUM_PAINTER_ILI9486_SPI_ENABLE + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/drivers/painter/ili9xxx/qp_ili9486.h b/drivers/painter/ili9xxx/qp_ili9486.h new file mode 100644 index 0000000000..9976a78da4 --- /dev/null +++ b/drivers/painter/ili9xxx/qp_ili9486.h @@ -0,0 +1,52 @@ +// Copyright 2021 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "gpio.h" +#include "qp_internal.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter ILI9486 configurables (add to your keyboard's config.h) + +#ifndef ILI9486_NUM_DEVICES +/** + * @def This controls the maximum number of ILI9486 devices that Quantum Painter can communicate with at any one time. + * Increasing this number allows for multiple displays to be used. + */ +# define ILI9486_NUM_DEVICES 1 +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Quantum Painter ILI9486 device factories + +#ifdef QUANTUM_PAINTER_ILI9486_SPI_ENABLE +/** + * Factory method for an ILI9486 SPI LCD device. + * + * @param panel_width[in] the width of the display panel + * @param panel_height[in] the height of the display panel + * @param chip_select_pin[in] the GPIO pin used for SPI chip select + * @param dc_pin[in] the GPIO pin used for D/C control + * @param reset_pin[in] the GPIO pin used for RST + * @param spi_divisor[in] the SPI divisor to use when communicating with the display + * @param spi_mode[in] the SPI mode to use when communicating with the display + * @return the device handle used with all drawing routines in Quantum Painter + */ +painter_device_t qp_ili9486_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); + +/** + * Factory method for an ILI9486 SPI LCD device. + * + * @param panel_width[in] the width of the display panel + * @param panel_height[in] the height of the display panel + * @param chip_select_pin[in] the GPIO pin used for SPI chip select + * @param dc_pin[in] the GPIO pin used for D/C control + * @param reset_pin[in] the GPIO pin used for RST + * @param spi_divisor[in] the SPI divisor to use when communicating with the display + * @param spi_mode[in] the SPI mode to use when communicating with the display + * @return the device handle used with all drawing routines in Quantum Painter + */ +painter_device_t qp_ili9486_make_spi_waveshare_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode); + +#endif // QUANTUM_PAINTER_ILI9486_SPI_ENABLE diff --git a/drivers/painter/ili9xxx/qp_ili9xxx_opcodes.h b/drivers/painter/ili9xxx/qp_ili9xxx_opcodes.h index f57e638e03..906f6cd772 100644 --- a/drivers/painter/ili9xxx/qp_ili9xxx_opcodes.h +++ b/drivers/painter/ili9xxx/qp_ili9xxx_opcodes.h @@ -70,6 +70,7 @@ #define ILI9XXX_SET_LIGHT_CTL_8 0xBF // Set backlight ctl 8 #define ILI9XXX_SET_POWER_CTL_1 0xC0 // Set power ctl 1 #define ILI9XXX_SET_POWER_CTL_2 0xC1 // Set power ctl 2 +#define ILI9XXX_SET_POWER_CTL_3 0xC2 // Set power ctl 3 #define ILI9XXX_SET_VCOM_CTL_1 0xC5 // Set VCOM ctl 1 #define ILI9XXX_SET_VCOM_CTL_2 0xC7 // Set VCOM ctl 2 #define ILI9XXX_POWER_CTL_A 0xCB // Set power control A diff --git a/quantum/painter/qp.h b/quantum/painter/qp.h index 873a9d9f32..02acbf589a 100644 --- a/quantum/painter/qp.h +++ b/quantum/painter/qp.h @@ -509,6 +509,12 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai # define ILI9341_NUM_DEVICES 0 #endif // QUANTUM_PAINTER_ILI9341_ENABLE +#ifdef QUANTUM_PAINTER_ILI9486_ENABLE +# include "qp_ili9486.h" +#else // QUANTUM_PAINTER_ILI9486_ENABLE +# define ILI9486_NUM_DEVICES 0 +#endif // QUANTUM_PAINTER_ILI9486_ENABLE + #ifdef QUANTUM_PAINTER_ILI9488_ENABLE # include "qp_ili9488.h" #else // QUANTUM_PAINTER_ILI9488_ENABLE diff --git a/quantum/painter/qp_internal.c b/quantum/painter/qp_internal.c index 0e81467e26..1f0f981796 100644 --- a/quantum/painter/qp_internal.c +++ b/quantum/painter/qp_internal.c @@ -11,6 +11,7 @@ enum { // NOTE: We intentionally do not include surfaces here, despite them conforming to the same API. QP_NUM_DEVICES = (ILI9163_NUM_DEVICES) // ILI9163 + (ILI9341_NUM_DEVICES) // ILI9341 + + (ILI9486_NUM_DEVICES) // ILI9486 + (ILI9488_NUM_DEVICES) // ILI9488 + (ST7789_NUM_DEVICES) // ST7789 + (ST7735_NUM_DEVICES) // ST7735 diff --git a/quantum/painter/rules.mk b/quantum/painter/rules.mk index ca81cffb03..d991a6d742 100644 --- a/quantum/painter/rules.mk +++ b/quantum/painter/rules.mk @@ -9,6 +9,7 @@ VALID_QUANTUM_PAINTER_DRIVERS := \ surface \ ili9163_spi \ ili9341_spi \ + ili9486_spi \ ili9488_spi \ st7735_spi \ st7789_spi \ @@ -80,6 +81,17 @@ define handle_quantum_painter_driver $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ $(DRIVER_PATH)/painter/ili9xxx/qp_ili9341.c \ + else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9486_spi) + QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes + QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes + OPT_DEFS += -DQUANTUM_PAINTER_ILI9486_ENABLE -DQUANTUM_PAINTER_ILI9486_SPI_ENABLE + COMMON_VPATH += \ + $(DRIVER_PATH)/painter/tft_panel \ + $(DRIVER_PATH)/painter/ili9xxx + SRC += \ + $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \ + $(DRIVER_PATH)/painter/ili9xxx/qp_ili9486.c \ + else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ili9488_spi) QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes -- cgit v1.2.3 From e2dbe39b9475b0d46702e5a32432cb248d72290c Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Sat, 17 Feb 2024 12:27:34 +0000 Subject: Removal of bootmagic lite terminology (#22979) --- data/mappings/info_config.hjson | 8 ++-- docs/feature_bootmagic.md | 28 +++++------ docs/ja/feature_bootmagic.md | 10 ++-- keyboards/crkbd/post_config.h | 16 +++---- .../tractyl_manuform/5x6_right/f411/f411.c | 12 ++--- keyboards/jorne/post_config.h | 16 +++---- keyboards/junco/rev1/post_config.h | 8 ++-- .../nullbitsco/scramble/keymaps/oled/config.h | 4 +- keyboards/phoenix/phoenix.c | 2 +- quantum/bootmagic/bootmagic.c | 54 +++++++++++++--------- quantum/bootmagic/bootmagic.h | 23 +++++++-- 11 files changed, 103 insertions(+), 78 deletions(-) (limited to 'quantum') diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 2c4a75df89..e2e9569372 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -36,10 +36,10 @@ "BACKLIGHT_DEFAULT_LEVEL": {"info_key": "backlight.default.brightness", "value_type": "int"}, // Bootmagic - "BOOTMAGIC_LITE_COLUMN": {"info_key": "bootmagic.matrix.1", "value_type": "int"}, - "BOOTMAGIC_LITE_COLUMN_RIGHT": {"info_key": "split.bootmagic.matrix.1", "value_type": "int"}, - "BOOTMAGIC_LITE_ROW": {"info_key": "bootmagic.matrix.0", "value_type": "int"}, - "BOOTMAGIC_LITE_ROW_RIGHT": {"info_key": "split.bootmagic.matrix.0", "value_type": "int"}, + "BOOTMAGIC_COLUMN": {"info_key": "bootmagic.matrix.1", "value_type": "int"}, + "BOOTMAGIC_COLUMN_RIGHT": {"info_key": "split.bootmagic.matrix.1", "value_type": "int"}, + "BOOTMAGIC_ROW": {"info_key": "bootmagic.matrix.0", "value_type": "int"}, + "BOOTMAGIC_ROW_RIGHT": {"info_key": "split.bootmagic.matrix.0", "value_type": "int"}, // Caps Word "BOTH_SHIFTS_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.both_shifts_turns_on", "value_type": "flag"}, diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md index 4239cdfd2a..564760be92 100644 --- a/docs/feature_bootmagic.md +++ b/docs/feature_bootmagic.md @@ -1,8 +1,8 @@ -# Bootmagic Lite :id=bootmagic-lite +# Bootmagic :id=bootmagic -The Bootmagic Lite feature that only handles jumping into the bootloader. This is great for boards that don't have a physical reset button, giving you a way to jump into the bootloader +The Bootmagic feature that only handles jumping into the bootloader. This is great for boards that don't have a physical reset button, giving you a way to jump into the bootloader -On some keyboards Bootmagic Lite is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with: +On some keyboards Bootmagic is disabled by default. If this is the case, it must be explicitly enabled in your `rules.mk` with: ```make BOOTMAGIC_ENABLE = yes @@ -11,15 +11,15 @@ BOOTMAGIC_ENABLE = yes Additionally, you may want to specify which key to use. This is especially useful for keyboards that have unusual matrices. To do so, you need to specify the row and column of the key that you want to use. Add these entries to your `config.h` file: ```c -#define BOOTMAGIC_LITE_ROW 0 -#define BOOTMAGIC_LITE_COLUMN 1 +#define BOOTMAGIC_ROW 0 +#define BOOTMAGIC_COLUMN 1 ``` By default, these are set to 0 and 0, which is usually the "ESC" key on a majority of keyboards. And to trigger the bootloader, you hold this key down when plugging the keyboard in. Just the single key. -!> Using Bootmagic Lite will **always reset** the EEPROM, so you will lose any settings that have been saved. +!> Using Bootmagic will **always reset** the EEPROM, so you will lose any settings that have been saved. ## Split Keyboards @@ -44,35 +44,35 @@ When [handedness](feature_split_keyboard.md#setting-handedness) is predetermined } ``` -If you pick the top right key for the right half, it is `R05` on the top layout. Within the key matrix below, `R05` is located on row 4 columnn 4. To use that key as the right half's Bootmagic Lite trigger, add these entries to your `config.h` file: +If you pick the top right key for the right half, it is `R05` on the top layout. Within the key matrix below, `R05` is located on row 4 columnn 4. To use that key as the right half's Bootmagic trigger, add these entries to your `config.h` file: ```c -#define BOOTMAGIC_LITE_ROW_RIGHT 4 -#define BOOTMAGIC_LITE_COLUMN_RIGHT 4 +#define BOOTMAGIC_ROW_RIGHT 4 +#define BOOTMAGIC_COLUMN_RIGHT 4 ``` ?> These values are not set by default. -## Advanced Bootmagic Lite +## Advanced Bootmagic -The `bootmagic_lite` function is defined weakly, so that you can replace this in your code, if you need. A great example of this is the Zeal60 boards that have some additional handling needed. +The `bootmagic_scan` function is defined weakly, so that you can replace this in your code, if you need. A great example of this is the Zeal60 boards that have some additional handling needed. To replace the function, all you need to do is add something like this to your code: ```c -void bootmagic_lite(void) { +void bootmagic_scan(void) { matrix_scan(); wait_ms(DEBOUNCE * 2); matrix_scan(); - if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) { + if (matrix_get_row(BOOTMAGIC_ROW) & (1 << BOOTMAGIC_COLUMN)) { // Jump to bootloader. bootloader_jump(); } } ``` -You can define additional logic here. For instance, resetting the EEPROM or requiring additional keys to be pressed to trigger Bootmagic Lite. Keep in mind that `bootmagic_lite` is called before a majority of features are initialized in the firmware. +You can define additional logic here. For instance, resetting the EEPROM or requiring additional keys to be pressed to trigger Bootmagic. Keep in mind that `bootmagic_scan` is called before a majority of features are initialized in the firmware. ## Addenda diff --git a/docs/ja/feature_bootmagic.md b/docs/ja/feature_bootmagic.md index 2ad6fc8531..c146176a7e 100644 --- a/docs/ja/feature_bootmagic.md +++ b/docs/ja/feature_bootmagic.md @@ -139,8 +139,8 @@ BOOTMAGIC_ENABLE = lite さらに、どのキーを使うかを指定したほうが良いかもしれません。これは普通ではないマトリックスを持つキーボードで特に便利です。そのためには、使いたいキーの行と列を指定する必要があります。`config.h` ファイルにこれらのエントリを追加します: ```c -#define BOOTMAGIC_LITE_ROW 0 -#define BOOTMAGIC_LITE_COLUMN 1 +#define BOOTMAGIC_ROW 0 +#define BOOTMAGIC_COLUMN 1 ``` デフォルトでは、これらは 0 と 0 に設定されます。これは通常はほとんどのキーボードで "ESC" キーです。 @@ -154,8 +154,8 @@ BOOTMAGIC_ENABLE = lite `SPLIT_HAND_PIN` のようなオプションで、左右の設定があらかじめ決められている場合は、キーボードの左右で別のキーを設定する必要があるかもしれません。これを行うには、`config.h` ファイルに以下のエントリを追加します。 ```c -#define BOOTMAGIC_LITE_ROW_RIGHT 4 -#define BOOTMAGIC_LITE_COLUMN_RIGHT 1 +#define BOOTMAGIC_ROW_RIGHT 4 +#define BOOTMAGIC_COLUMN_RIGHT 1 ``` デフォルトでは、これらの値は設定されていません。 @@ -172,7 +172,7 @@ void bootmagic_lite(void) { wait_ms(DEBOUNCE * 2); matrix_scan(); - if (matrix_get_row(BOOTMAGIC_LITE_ROW) & (1 << BOOTMAGIC_LITE_COLUMN)) { + if (matrix_get_row(BOOTMAGIC_ROW) & (1 << BOOTMAGIC_COLUMN)) { // ブートローダにジャンプする。 bootloader_jump(); } diff --git a/keyboards/crkbd/post_config.h b/keyboards/crkbd/post_config.h index 133014b02a..aaf405a5bf 100644 --- a/keyboards/crkbd/post_config.h +++ b/keyboards/crkbd/post_config.h @@ -16,18 +16,18 @@ #pragma once -#ifndef BOOTMAGIC_LITE_ROW -# define BOOTMAGIC_LITE_ROW 0 +#ifndef BOOTMAGIC_ROW +# define BOOTMAGIC_ROW 0 #endif -#ifndef BOOTMAGIC_LITE_COLUMN -# define BOOTMAGIC_LITE_COLUMN 1 +#ifndef BOOTMAGIC_COLUMN +# define BOOTMAGIC_COLUMN 1 #endif -#ifndef BOOTMAGIC_LITE_ROW_RIGHT -# define BOOTMAGIC_LITE_ROW_RIGHT 4 +#ifndef BOOTMAGIC_ROW_RIGHT +# define BOOTMAGIC_ROW_RIGHT 4 #endif -#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT -# define BOOTMAGIC_LITE_COLUMN_RIGHT 1 +#ifndef BOOTMAGIC_COLUMN_RIGHT +# define BOOTMAGIC_COLUMN_RIGHT 1 #endif #ifdef RGBLIGHT_ENABLE diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c index 10986fd25f..a0c3ee0f4e 100644 --- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c +++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c @@ -24,7 +24,7 @@ void matrix_scan_sub_kb(void) { } } -__attribute__((weak)) void bootmagic_lite(void) { +__attribute__((weak)) void bootmagic_scan(void) { // We need multiple scans because debouncing can't be turned off. matrix_scan(); #if defined(DEBOUNCE) && DEBOUNCE > 0 @@ -34,13 +34,13 @@ __attribute__((weak)) void bootmagic_lite(void) { #endif matrix_scan(); - uint8_t row = BOOTMAGIC_LITE_ROW; - uint8_t col = BOOTMAGIC_LITE_COLUMN; + uint8_t row = BOOTMAGIC_ROW; + uint8_t col = BOOTMAGIC_COLUMN; -#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT) +#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_ROW_RIGHT) && defined(BOOTMAGIC_COLUMN_RIGHT) if (!is_keyboard_left()) { - row = BOOTMAGIC_LITE_ROW_RIGHT; - col = BOOTMAGIC_LITE_COLUMN_RIGHT; + row = BOOTMAGIC_ROW_RIGHT; + col = BOOTMAGIC_COLUMN_RIGHT; } #endif diff --git a/keyboards/jorne/post_config.h b/keyboards/jorne/post_config.h index 4a4c71517a..7d159c0de2 100644 --- a/keyboards/jorne/post_config.h +++ b/keyboards/jorne/post_config.h @@ -2,18 +2,18 @@ // SPDX-License-Identifier: GPL-2.0-or-later #pragma once -#ifndef BOOTMAGIC_LITE_ROW -# define BOOTMAGIC_LITE_ROW 0 +#ifndef BOOTMAGIC_ROW +# define BOOTMAGIC_ROW 0 #endif -#ifndef BOOTMAGIC_LITE_COLUMN -# define BOOTMAGIC_LITE_COLUMN 1 +#ifndef BOOTMAGIC_COLUMN +# define BOOTMAGIC_COLUMN 1 #endif -#ifndef BOOTMAGIC_LITE_ROW_RIGHT -# define BOOTMAGIC_LITE_ROW_RIGHT 4 +#ifndef BOOTMAGIC_ROW_RIGHT +# define BOOTMAGIC_ROW_RIGHT 4 #endif -#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT -# define BOOTMAGIC_LITE_COLUMN_RIGHT 1 +#ifndef BOOTMAGIC_COLUMN_RIGHT +# define BOOTMAGIC_COLUMN_RIGHT 1 #endif #ifdef RGBLIGHT_ENABLE diff --git a/keyboards/junco/rev1/post_config.h b/keyboards/junco/rev1/post_config.h index bcc15a941a..d9fa5e4c60 100644 --- a/keyboards/junco/rev1/post_config.h +++ b/keyboards/junco/rev1/post_config.h @@ -7,9 +7,9 @@ // Top left for left side is default in core // Top right for right side -#ifndef BOOTMAGIC_LITE_ROW_RIGHT -# define BOOTMAGIC_LITE_ROW_RIGHT 5 +#ifndef BOOTMAGIC_ROW_RIGHT +# define BOOTMAGIC_ROW_RIGHT 5 #endif -#ifndef BOOTMAGIC_LITE_COLUMN_RIGHT -# define BOOTMAGIC_LITE_COLUMN_RIGHT 0 +#ifndef BOOTMAGIC_COLUMN_RIGHT +# define BOOTMAGIC_COLUMN_RIGHT 0 #endif diff --git a/keyboards/nullbitsco/scramble/keymaps/oled/config.h b/keyboards/nullbitsco/scramble/keymaps/oled/config.h index cd980b0936..67a896c8af 100644 --- a/keyboards/nullbitsco/scramble/keymaps/oled/config.h +++ b/keyboards/nullbitsco/scramble/keymaps/oled/config.h @@ -18,5 +18,5 @@ along with this program. If not, see . #pragma once // Alternate boot pins for accessing the bootloader, // since the boot switch is blocked by the OLED. -#define BOOTMAGIC_LITE_ROW 1 -#define BOOTMAGIC_LITE_COLUMN 2 +#define BOOTMAGIC_ROW 1 +#define BOOTMAGIC_COLUMN 2 diff --git a/keyboards/phoenix/phoenix.c b/keyboards/phoenix/phoenix.c index 706a65b4de..e870f987f4 100644 --- a/keyboards/phoenix/phoenix.c +++ b/keyboards/phoenix/phoenix.c @@ -2,7 +2,7 @@ #include "usb_main.h" #include "phoenix.h" -void bootmagic_lite(void) { +void bootmagic_scan(void) { matrix_scan(); wait_ms(5); matrix_scan(); diff --git a/quantum/bootmagic/bootmagic.c b/quantum/bootmagic/bootmagic.c index efce6bfd12..419ec5229e 100644 --- a/quantum/bootmagic/bootmagic.c +++ b/quantum/bootmagic/bootmagic.c @@ -20,44 +20,54 @@ #include "eeconfig.h" #include "bootloader.h" +#ifndef BOOTMAGIC_DEBOUNCE +# if defined(DEBOUNCE) && DEBOUNCE > 0 +# define BOOTMAGIC_DEBOUNCE (DEBOUNCE * 2) +# else +# define BOOTMAGIC_DEBOUNCE 30 +# endif +#endif + /** \brief Reset eeprom * * ...just incase someone wants to only change the eeprom behaviour */ -__attribute__((weak)) void bootmagic_lite_reset_eeprom(void) { +__attribute__((weak)) void bootmagic_reset_eeprom(void) { eeconfig_disable(); } -/** \brief The lite version of TMK's bootmagic based on Wilba. - * - * 100% less potential for accidentally making the keyboard do stupid things. +/** \brief Decide reboot based on current matrix state */ -__attribute__((weak)) void bootmagic_lite(void) { - // We need multiple scans because debouncing can't be turned off. - matrix_scan(); -#if defined(DEBOUNCE) && DEBOUNCE > 0 - wait_ms(DEBOUNCE * 2); -#else - wait_ms(30); -#endif - matrix_scan(); - +__attribute__((weak)) bool bootmagic_should_reset(void) { // If the configured key (commonly Esc) is held down on power up, // reset the EEPROM valid state and jump to bootloader. // This isn't very generalized, but we need something that doesn't // rely on user's keymaps in firmware or EEPROM. - uint8_t row = BOOTMAGIC_LITE_ROW; - uint8_t col = BOOTMAGIC_LITE_COLUMN; + uint8_t row = BOOTMAGIC_ROW; + uint8_t col = BOOTMAGIC_COLUMN; -#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT) +#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_ROW_RIGHT) && defined(BOOTMAGIC_COLUMN_RIGHT) if (!is_keyboard_left()) { - row = BOOTMAGIC_LITE_ROW_RIGHT; - col = BOOTMAGIC_LITE_COLUMN_RIGHT; + row = BOOTMAGIC_ROW_RIGHT; + col = BOOTMAGIC_COLUMN_RIGHT; } #endif - if (matrix_get_row(row) & (1 << col)) { - bootmagic_lite_reset_eeprom(); + return matrix_get_row(row) & (1 << col); +} + +/** \brief The abridged version of TMK's bootmagic based on Wilba. + * + * 100% less potential for accidentally making the keyboard do stupid things. + */ +__attribute__((weak)) void bootmagic_scan(void) { + // We need multiple scans because debouncing can't be turned off. + matrix_scan(); + wait_ms(BOOTMAGIC_DEBOUNCE); + matrix_scan(); + + if (bootmagic_should_reset()) { + bootmagic_reset_eeprom(); // Jump to bootloader. bootloader_jump(); @@ -65,5 +75,5 @@ __attribute__((weak)) void bootmagic_lite(void) { } void bootmagic(void) { - bootmagic_lite(); + bootmagic_scan(); } diff --git a/quantum/bootmagic/bootmagic.h b/quantum/bootmagic/bootmagic.h index 4b5f5f7c5e..ee6fb49748 100644 --- a/quantum/bootmagic/bootmagic.h +++ b/quantum/bootmagic/bootmagic.h @@ -15,11 +15,26 @@ */ #pragma once -#ifndef BOOTMAGIC_LITE_COLUMN -# define BOOTMAGIC_LITE_COLUMN 0 +// ======== DEPRECATED DEFINES - DO NOT USE ======== +#ifdef BOOTMAGIC_LITE_ROW +# define BOOTMAGIC_ROW BOOTMAGIC_LITE_ROW #endif -#ifndef BOOTMAGIC_LITE_ROW -# define BOOTMAGIC_LITE_ROW 0 +#ifdef BOOTMAGIC_LITE_COLUMN +# define BOOTMAGIC_COLUMN BOOTMAGIC_LITE_COLUMN +#endif +#ifdef BOOTMAGIC_LITE_ROW_RIGHT +# define BOOTMAGIC_ROW_RIGHT BOOTMAGIC_LITE_ROW_RIGHT +#endif +#ifdef BOOTMAGIC_LITE_COLUMN_RIGHT +# define BOOTMAGIC_COLUMN_RIGHT BOOTMAGIC_LITE_COLUMN_RIGHT +#endif +// ======== + +#ifndef BOOTMAGIC_COLUMN +# define BOOTMAGIC_COLUMN 0 +#endif +#ifndef BOOTMAGIC_ROW +# define BOOTMAGIC_ROW 0 #endif void bootmagic(void); -- cgit v1.2.3 From 2d1aed78a67b3d2b002cc739ef087963b05b76b8 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sun, 18 Feb 2024 17:08:27 +1100 Subject: Update GPIO macro usages in core (#23093) --- drivers/bluetooth/bluefruit_le.cpp | 18 ++++---- drivers/eeprom/eeprom_i2c.c | 12 +++--- drivers/gpio/sn74x138.c | 24 +++++------ drivers/gpio/sn74x154.c | 18 ++++---- drivers/haptic/solenoid.c | 14 +++---- drivers/lcd/hd44780.c | 48 +++++++++++----------- drivers/lcd/st7565.c | 16 ++++---- drivers/led/apa102.c | 24 +++++------ drivers/led/aw20216s.c | 4 +- drivers/led/issi/is31fl3218-mono.c | 4 +- drivers/led/issi/is31fl3218.c | 4 +- drivers/led/issi/is31fl3731-mono.c | 4 +- drivers/led/issi/is31fl3731.c | 4 +- drivers/led/issi/is31fl3733-mono.c | 4 +- drivers/led/issi/is31fl3733.c | 4 +- drivers/led/issi/is31fl3736-mono.c | 4 +- drivers/led/issi/is31fl3736.c | 4 +- drivers/led/issi/is31fl3737-mono.c | 4 +- drivers/led/issi/is31fl3737.c | 4 +- drivers/led/issi/is31fl3741-mono.c | 4 +- drivers/led/issi/is31fl3741.c | 4 +- drivers/led/issi/is31fl3742a-mono.c | 4 +- drivers/led/issi/is31fl3742a.c | 4 +- drivers/led/issi/is31fl3743a-mono.c | 4 +- drivers/led/issi/is31fl3743a.c | 4 +- drivers/led/issi/is31fl3745-mono.c | 4 +- drivers/led/issi/is31fl3745.c | 4 +- drivers/led/issi/is31fl3746a-mono.c | 4 +- drivers/led/issi/is31fl3746a.c | 4 +- drivers/led/snled27351-mono.c | 4 +- drivers/led/snled27351.c | 4 +- drivers/oled/oled_driver.c | 20 ++++----- drivers/painter/comms/qp_comms_spi.c | 20 ++++----- drivers/sensors/adns5050.c | 32 +++++++-------- drivers/sensors/adns9800.c | 2 +- drivers/sensors/analog_joystick.c | 8 ++-- drivers/sensors/paw3204.c | 24 +++++------ drivers/sensors/pmw3320.c | 32 +++++++-------- drivers/usb2422.c | 10 ++--- .../onekey/keymaps/chibios_waiting_test/keymap.c | 12 +++--- platforms/avr/drivers/audio_pwm_hardware.c | 4 +- platforms/avr/drivers/backlight_pwm.c | 6 +-- platforms/avr/drivers/ps2/ps2_io.c | 20 ++++----- platforms/avr/drivers/serial.c | 10 ++--- platforms/avr/drivers/spi_master.c | 16 ++++---- platforms/chibios/drivers/serial.c | 12 +++--- platforms/chibios/drivers/spi_master.c | 14 +++---- platforms/chibios/drivers/ws2812_bitbang.c | 8 ++-- quantum/backlight/backlight_driver_common.c | 10 ++--- quantum/dip_switch.c | 4 +- quantum/encoder.c | 8 ++-- quantum/haptic.c | 8 ++-- quantum/haptic.h | 16 ++++---- quantum/joystick.c | 2 +- quantum/led.c | 30 +++++++------- quantum/matrix.c | 14 +++---- quantum/pointing_device/pointing_device.c | 8 ++-- quantum/split_common/split_util.c | 16 ++++---- tmk_core/protocol/arm_atsam/shift_register.c | 24 +++++------ tmk_core/protocol/arm_atsam/spi_master.c | 8 ++-- tmk_core/protocol/usb_util.c | 4 +- 61 files changed, 334 insertions(+), 334 deletions(-) (limited to 'quantum') diff --git a/drivers/bluetooth/bluefruit_le.cpp b/drivers/bluetooth/bluefruit_le.cpp index 39c14ddd13..218eca2195 100644 --- a/drivers/bluetooth/bluefruit_le.cpp +++ b/drivers/bluetooth/bluefruit_le.cpp @@ -188,7 +188,7 @@ static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) { bool ready = false; do { - ready = readPin(BLUEFRUIT_LE_IRQ_PIN); + ready = gpio_read_pin(BLUEFRUIT_LE_IRQ_PIN); if (ready) { break; } @@ -231,7 +231,7 @@ static void resp_buf_read_one(bool greedy) { return; } - if (readPin(BLUEFRUIT_LE_IRQ_PIN)) { + if (gpio_read_pin(BLUEFRUIT_LE_IRQ_PIN)) { struct sdep_msg msg; again: @@ -242,7 +242,7 @@ static void resp_buf_read_one(bool greedy) { dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send)); } - if (greedy && resp_buf.peek(last_send) && readPin(BLUEFRUIT_LE_IRQ_PIN)) { + if (greedy && resp_buf.peek(last_send) && gpio_read_pin(BLUEFRUIT_LE_IRQ_PIN)) { goto again; } } @@ -293,16 +293,16 @@ void bluefruit_le_init(void) { state.configured = false; state.is_connected = false; - setPinInput(BLUEFRUIT_LE_IRQ_PIN); + gpio_set_pin_input(BLUEFRUIT_LE_IRQ_PIN); spi_init(); // Perform a hardware reset - setPinOutput(BLUEFRUIT_LE_RST_PIN); - writePinHigh(BLUEFRUIT_LE_RST_PIN); - writePinLow(BLUEFRUIT_LE_RST_PIN); + gpio_set_pin_output(BLUEFRUIT_LE_RST_PIN); + gpio_write_pin_high(BLUEFRUIT_LE_RST_PIN); + gpio_write_pin_low(BLUEFRUIT_LE_RST_PIN); wait_ms(10); - writePinHigh(BLUEFRUIT_LE_RST_PIN); + gpio_write_pin_high(BLUEFRUIT_LE_RST_PIN); wait_ms(1000); // Give it a second to initialize @@ -508,7 +508,7 @@ void bluefruit_le_task(void) { resp_buf_read_one(true); send_buf_send_one(SdepShortTimeout); - if (resp_buf.empty() && (state.event_flags & UsingEvents) && readPin(BLUEFRUIT_LE_IRQ_PIN)) { + if (resp_buf.empty() && (state.event_flags & UsingEvents) && gpio_read_pin(BLUEFRUIT_LE_IRQ_PIN)) { // Must be an event update if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) { uint32_t mask = strtoul(resbuf, NULL, 16); diff --git a/drivers/eeprom/eeprom_i2c.c b/drivers/eeprom/eeprom_i2c.c index a74a010415..0d3d5ccbe5 100644 --- a/drivers/eeprom/eeprom_i2c.c +++ b/drivers/eeprom/eeprom_i2c.c @@ -57,8 +57,8 @@ void eeprom_driver_init(void) { i2c_init(); #if defined(EXTERNAL_EEPROM_WP_PIN) /* We are setting the WP pin to high in a way that requires at least two bit-flips to change back to 0 */ - writePin(EXTERNAL_EEPROM_WP_PIN, 1); - setPinInputHigh(EXTERNAL_EEPROM_WP_PIN); + gpio_write_pin(EXTERNAL_EEPROM_WP_PIN, 1); + gpio_set_pin_input_high(EXTERNAL_EEPROM_WP_PIN); #endif } @@ -100,8 +100,8 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) { uintptr_t target_addr = (uintptr_t)addr; #if defined(EXTERNAL_EEPROM_WP_PIN) - setPinOutput(EXTERNAL_EEPROM_WP_PIN); - writePin(EXTERNAL_EEPROM_WP_PIN, 0); + gpio_set_pin_output(EXTERNAL_EEPROM_WP_PIN); + gpio_write_pin(EXTERNAL_EEPROM_WP_PIN, 0); #endif while (len > 0) { @@ -134,7 +134,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) { #if defined(EXTERNAL_EEPROM_WP_PIN) /* We are setting the WP pin to high in a way that requires at least two bit-flips to change back to 0 */ - writePin(EXTERNAL_EEPROM_WP_PIN, 1); - setPinInputHigh(EXTERNAL_EEPROM_WP_PIN); + gpio_write_pin(EXTERNAL_EEPROM_WP_PIN, 1); + gpio_set_pin_input_high(EXTERNAL_EEPROM_WP_PIN); #endif } diff --git a/drivers/gpio/sn74x138.c b/drivers/gpio/sn74x138.c index 222e5db56c..1cf8e54f56 100644 --- a/drivers/gpio/sn74x138.c +++ b/drivers/gpio/sn74x138.c @@ -27,39 +27,39 @@ static const pin_t address_pins[ADDRESS_PIN_COUNT] = SN74X138_ADDRESS_PINS; void sn74x138_init(void) { for (int i = 0; i < ADDRESS_PIN_COUNT; i++) { - setPinOutput(address_pins[i]); - writePinLow(address_pins[i]); + gpio_set_pin_output(address_pins[i]); + gpio_write_pin_low(address_pins[i]); } #if defined(SN74X138_E1_PIN) - setPinOutput(SN74X138_E1_PIN); - writePinHigh(SN74X138_E1_PIN); + gpio_set_pin_output(SN74X138_E1_PIN); + gpio_write_pin_high(SN74X138_E1_PIN); #endif #if defined(SN74X138_E2_PIN) - setPinOutput(SN74X138_E2_PIN); - writePinHigh(SN74X138_E2_PIN); + gpio_set_pin_output(SN74X138_E2_PIN); + gpio_write_pin_high(SN74X138_E2_PIN); #endif #if defined(SN74X138_E3_PIN) - setPinOutput(SN74X138_E3_PIN); - writePinLow(SN74X138_E3_PIN); + gpio_set_pin_output(SN74X138_E3_PIN); + gpio_write_pin_low(SN74X138_E3_PIN); #endif } void sn74x138_set_enabled(bool enabled) { #if defined(SN74X138_E1_PIN) - writePin(SN74X138_E1_PIN, !enabled); + gpio_write_pin(SN74X138_E1_PIN, !enabled); #endif #if defined(SN74X138_E2_PIN) - writePin(SN74X138_E2_PIN, !enabled); + gpio_write_pin(SN74X138_E2_PIN, !enabled); #endif #if defined(SN74X138_E3_PIN) - writePin(SN74X138_E3_PIN, enabled); + gpio_write_pin(SN74X138_E3_PIN, enabled); #endif } void sn74x138_set_addr(uint8_t address) { for (int i = 0; i < ADDRESS_PIN_COUNT; i++) { - writePin(address_pins[i], address & (1 << i)); + gpio_write_pin(address_pins[i], address & (1 << i)); } } diff --git a/drivers/gpio/sn74x154.c b/drivers/gpio/sn74x154.c index 5f21f12b55..6226adf27e 100644 --- a/drivers/gpio/sn74x154.c +++ b/drivers/gpio/sn74x154.c @@ -27,32 +27,32 @@ static const pin_t address_pins[ADDRESS_PIN_COUNT] = SN74X154_ADDRESS_PINS; void sn74x154_init(void) { for (int i = 0; i < ADDRESS_PIN_COUNT; i++) { - setPinOutput(address_pins[i]); - writePinLow(address_pins[i]); + gpio_set_pin_output(address_pins[i]); + gpio_write_pin_low(address_pins[i]); } #if defined(SN74X154_E0_PIN) - setPinOutput(SN74X154_E0_PIN); - writePinHigh(SN74X154_E0_PIN); + gpio_set_pin_output(SN74X154_E0_PIN); + gpio_write_pin_high(SN74X154_E0_PIN); #endif #if defined(SN74X154_E1_PIN) - setPinOutput(SN74X154_E1_PIN); - writePinHigh(SN74X154_E1_PIN); + gpio_set_pin_output(SN74X154_E1_PIN); + gpio_write_pin_high(SN74X154_E1_PIN); #endif } void sn74x154_set_enabled(bool enabled) { #if defined(SN74X154_E0_PIN) - writePin(SN74X154_E0_PIN, !enabled); + gpio_write_pin(SN74X154_E0_PIN, !enabled); #endif #if defined(SN74X154_E1_PIN) - writePin(SN74X154_E1_PIN, !enabled); + gpio_write_pin(SN74X154_E1_PIN, !enabled); #endif } void sn74x154_set_addr(uint8_t address) { for (int i = 0; i < ADDRESS_PIN_COUNT; i++) { - writePin(address_pins[i], address & (1 << i)); + gpio_write_pin(address_pins[i], address & (1 << i)); } } diff --git a/drivers/haptic/solenoid.c b/drivers/haptic/solenoid.c index da4095cda4..346b88bbc4 100644 --- a/drivers/haptic/solenoid.c +++ b/drivers/haptic/solenoid.c @@ -61,7 +61,7 @@ void solenoid_set_dwell(uint8_t dwell) { * @param index select which solenoid to check/stop */ void solenoid_stop(uint8_t index) { - writePin(solenoid_pads[index], !solenoid_active_state[index]); + gpio_write_pin(solenoid_pads[index], !solenoid_active_state[index]); solenoid_on[index] = false; solenoid_buzzing[index] = false; } @@ -78,7 +78,7 @@ void solenoid_fire(uint8_t index) { solenoid_on[index] = true; solenoid_buzzing[index] = true; solenoid_start[index] = timer_read(); - writePin(solenoid_pads[index], solenoid_active_state[index]); + gpio_write_pin(solenoid_pads[index], solenoid_active_state[index]); } /** @@ -128,12 +128,12 @@ void solenoid_check(void) { if ((elapsed[i] % (SOLENOID_BUZZ_ACTUATED + SOLENOID_BUZZ_NONACTUATED)) < SOLENOID_BUZZ_ACTUATED) { if (!solenoid_buzzing[i]) { solenoid_buzzing[i] = true; - writePin(solenoid_pads[i], solenoid_active_state[i]); + gpio_write_pin(solenoid_pads[i], solenoid_active_state[i]); } } else { if (solenoid_buzzing[i]) { solenoid_buzzing[i] = false; - writePin(solenoid_pads[i], !solenoid_active_state[i]); + gpio_write_pin(solenoid_pads[i], !solenoid_active_state[i]); } } } @@ -156,8 +156,8 @@ void solenoid_setup(void) { #else solenoid_active_state[i] = high; #endif - writePin(solenoid_pads[i], !solenoid_active_state[i]); - setPinOutput(solenoid_pads[i]); + gpio_write_pin(solenoid_pads[i], !solenoid_active_state[i]); + gpio_set_pin_output(solenoid_pads[i]); if ((!HAPTIC_OFF_IN_LOW_POWER) || (usb_device_state == USB_DEVICE_STATE_CONFIGURED)) { solenoid_fire(i); } @@ -170,6 +170,6 @@ void solenoid_setup(void) { */ void solenoid_shutdown(void) { for (uint8_t i = 0; i < NUMBER_OF_SOLENOIDS; i++) { - writePin(solenoid_pads[i], !solenoid_active_state[i]); + gpio_write_pin(solenoid_pads[i], !solenoid_active_state[i]); } } diff --git a/drivers/lcd/hd44780.c b/drivers/lcd/hd44780.c index ccc50117ab..9b4e2f0226 100644 --- a/drivers/lcd/hd44780.c +++ b/drivers/lcd/hd44780.c @@ -57,67 +57,67 @@ static const pin_t data_pins[4] = HD44780_DATA_PINS; #define HD44780_ENABLE_DELAY_US 1 static void hd44780_latch(void) { - writePinHigh(HD44780_E_PIN); + gpio_write_pin_high(HD44780_E_PIN); wait_us(HD44780_ENABLE_DELAY_US); - writePinLow(HD44780_E_PIN); + gpio_write_pin_low(HD44780_E_PIN); } void hd44780_write(uint8_t data, bool isData) { - writePin(HD44780_RS_PIN, isData); - writePinLow(HD44780_RW_PIN); + gpio_write_pin(HD44780_RS_PIN, isData); + gpio_write_pin_low(HD44780_RW_PIN); for (int i = 0; i < 4; i++) { - setPinOutput(data_pins[i]); + gpio_set_pin_output(data_pins[i]); } // Write high nibble for (int i = 0; i < 4; i++) { - writePin(data_pins[i], (data >> 4) & (1 << i)); + gpio_write_pin(data_pins[i], (data >> 4) & (1 << i)); } hd44780_latch(); // Write low nibble for (int i = 0; i < 4; i++) { - writePin(data_pins[i], data & (1 << i)); + gpio_write_pin(data_pins[i], data & (1 << i)); } hd44780_latch(); for (int i = 0; i < 4; i++) { - writePinHigh(data_pins[i]); + gpio_write_pin_high(data_pins[i]); } } uint8_t hd44780_read(bool isData) { uint8_t data = 0; - writePin(HD44780_RS_PIN, isData); - writePinHigh(HD44780_RW_PIN); + gpio_write_pin(HD44780_RS_PIN, isData); + gpio_write_pin_high(HD44780_RW_PIN); for (int i = 0; i < 4; i++) { - setPinInput(data_pins[i]); + gpio_set_pin_input(data_pins[i]); } - writePinHigh(HD44780_E_PIN); + gpio_write_pin_high(HD44780_E_PIN); wait_us(HD44780_ENABLE_DELAY_US); // Read high nibble for (int i = 0; i < 4; i++) { - data |= (readPin(data_pins[i]) << i); + data |= (gpio_read_pin(data_pins[i]) << i); } data <<= 4; - writePinLow(HD44780_E_PIN); + gpio_write_pin_low(HD44780_E_PIN); wait_us(HD44780_ENABLE_DELAY_US); - writePinHigh(HD44780_E_PIN); + gpio_write_pin_high(HD44780_E_PIN); wait_us(HD44780_ENABLE_DELAY_US); // Read low nibble for (int i = 0; i < 4; i++) { - data |= (readPin(data_pins[i]) << i); + data |= (gpio_read_pin(data_pins[i]) << i); } - writePinLow(HD44780_E_PIN); + gpio_write_pin_low(HD44780_E_PIN); return data; } @@ -171,20 +171,20 @@ void hd44780_set_ddram_address(uint8_t address) { } void hd44780_init(bool cursor, bool blink) { - setPinOutput(HD44780_RS_PIN); - setPinOutput(HD44780_RW_PIN); - setPinOutput(HD44780_E_PIN); + gpio_set_pin_output(HD44780_RS_PIN); + gpio_set_pin_output(HD44780_RW_PIN); + gpio_set_pin_output(HD44780_E_PIN); for (int i = 0; i < 4; i++) { - setPinOutput(data_pins[i]); + gpio_set_pin_output(data_pins[i]); } wait_ms(HD44780_INIT_DELAY_MS); // Manually configure for 4-bit mode - can't use hd44780_command() yet // HD44780U datasheet, Fig. 24 (p46) - writePinHigh(data_pins[0]); // Function set - writePinHigh(data_pins[1]); // DL = 1 + gpio_write_pin_high(data_pins[0]); // Function set + gpio_write_pin_high(data_pins[1]); // DL = 1 hd44780_latch(); wait_ms(5); // Send again @@ -194,7 +194,7 @@ void hd44780_init(bool cursor, bool blink) { hd44780_latch(); wait_us(64); - writePinLow(data_pins[0]); // DL = 0 + gpio_write_pin_low(data_pins[0]); // DL = 0 hd44780_latch(); wait_us(64); diff --git a/drivers/lcd/st7565.c b/drivers/lcd/st7565.c index 47ee02804b..4fce40edbe 100644 --- a/drivers/lcd/st7565.c +++ b/drivers/lcd/st7565.c @@ -92,10 +92,10 @@ static void InvertCharacter(uint8_t *cursor) { } bool st7565_init(display_rotation_t rotation) { - setPinOutput(ST7565_A0_PIN); - writePinHigh(ST7565_A0_PIN); - setPinOutput(ST7565_RST_PIN); - writePinHigh(ST7565_RST_PIN); + gpio_set_pin_output(ST7565_A0_PIN); + gpio_write_pin_high(ST7565_A0_PIN); + gpio_set_pin_output(ST7565_RST_PIN); + gpio_write_pin_high(ST7565_RST_PIN); st7565_rotation = st7565_init_user(rotation); @@ -488,18 +488,18 @@ void st7565_task(void) { __attribute__((weak)) void st7565_task_user(void) {} void st7565_reset(void) { - writePinLow(ST7565_RST_PIN); + gpio_write_pin_low(ST7565_RST_PIN); wait_ms(20); - writePinHigh(ST7565_RST_PIN); + gpio_write_pin_high(ST7565_RST_PIN); wait_ms(20); } spi_status_t st7565_send_cmd(uint8_t cmd) { - writePinLow(ST7565_A0_PIN); + gpio_write_pin_low(ST7565_A0_PIN); return spi_write(cmd); } spi_status_t st7565_send_data(uint8_t *data, uint16_t length) { - writePinHigh(ST7565_A0_PIN); + gpio_write_pin_high(ST7565_A0_PIN); return spi_transmit(data, length); } diff --git a/drivers/led/apa102.c b/drivers/led/apa102.c index 548b8f094e..d6d4327495 100644 --- a/drivers/led/apa102.c +++ b/drivers/led/apa102.c @@ -43,14 +43,14 @@ } \ } while (0) -#define APA102_SEND_BIT(byte, bit) \ - do { \ - writePin(APA102_DI_PIN, (byte >> bit) & 1); \ - io_wait; \ - writePinHigh(APA102_CI_PIN); \ - io_wait; \ - writePinLow(APA102_CI_PIN); \ - io_wait; \ +#define APA102_SEND_BIT(byte, bit) \ + do { \ + gpio_write_pin(APA102_DI_PIN, (byte >> bit) & 1); \ + io_wait; \ + gpio_write_pin_high(APA102_CI_PIN); \ + io_wait; \ + gpio_write_pin_low(APA102_CI_PIN); \ + io_wait; \ } while (0) uint8_t apa102_led_brightness = APA102_DEFAULT_BRIGHTNESS; @@ -114,11 +114,11 @@ static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t } void apa102_init(void) { - setPinOutput(APA102_DI_PIN); - setPinOutput(APA102_CI_PIN); + gpio_set_pin_output(APA102_DI_PIN); + gpio_set_pin_output(APA102_CI_PIN); - writePinLow(APA102_DI_PIN); - writePinLow(APA102_CI_PIN); + gpio_write_pin_low(APA102_DI_PIN); + gpio_write_pin_low(APA102_CI_PIN); } void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) { diff --git a/drivers/led/aw20216s.c b/drivers/led/aw20216s.c index fa4454b6b1..704794f5b5 100644 --- a/drivers/led/aw20216s.c +++ b/drivers/led/aw20216s.c @@ -114,8 +114,8 @@ void aw20216s_init_drivers(void) { spi_init(); #if defined(AW20216S_EN_PIN) - setPinOutput(AW20216S_EN_PIN); - writePinHigh(AW20216S_EN_PIN); + gpio_set_pin_output(AW20216S_EN_PIN); + gpio_write_pin_high(AW20216S_EN_PIN); #endif aw20216s_init(AW20216S_CS_PIN_1); diff --git a/drivers/led/issi/is31fl3218-mono.c b/drivers/led/issi/is31fl3218-mono.c index cb5a069160..0174da7ab3 100644 --- a/drivers/led/issi/is31fl3218-mono.c +++ b/drivers/led/issi/is31fl3218-mono.c @@ -68,8 +68,8 @@ void is31fl3218_init(void) { i2c_init(); #if defined(IS31FL3218_SDB_PIN) - setPinOutput(IS31FL3218_SDB_PIN); - writePinHigh(IS31FL3218_SDB_PIN); + gpio_set_pin_output(IS31FL3218_SDB_PIN); + gpio_write_pin_high(IS31FL3218_SDB_PIN); #endif // In case we ever want to reinitialize (?) diff --git a/drivers/led/issi/is31fl3218.c b/drivers/led/issi/is31fl3218.c index c3a0946e83..dd97d236f7 100644 --- a/drivers/led/issi/is31fl3218.c +++ b/drivers/led/issi/is31fl3218.c @@ -68,8 +68,8 @@ void is31fl3218_init(void) { i2c_init(); #if defined(IS31FL3218_SDB_PIN) - setPinOutput(IS31FL3218_SDB_PIN); - writePinHigh(IS31FL3218_SDB_PIN); + gpio_set_pin_output(IS31FL3218_SDB_PIN); + gpio_write_pin_high(IS31FL3218_SDB_PIN); #endif // In case we ever want to reinitialize (?) diff --git a/drivers/led/issi/is31fl3731-mono.c b/drivers/led/issi/is31fl3731-mono.c index 5ff8f8b7c5..33a863b982 100644 --- a/drivers/led/issi/is31fl3731-mono.c +++ b/drivers/led/issi/is31fl3731-mono.c @@ -99,8 +99,8 @@ void is31fl3731_init_drivers(void) { i2c_init(); #if defined(IS31FL3731_SDB_PIN) - setPinOutput(IS31FL3731_SDB_PIN); - writePinHigh(IS31FL3731_SDB_PIN); + gpio_set_pin_output(IS31FL3731_SDB_PIN); + gpio_write_pin_high(IS31FL3731_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3731_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3731.c b/drivers/led/issi/is31fl3731.c index 380861d5b8..86d953ef25 100644 --- a/drivers/led/issi/is31fl3731.c +++ b/drivers/led/issi/is31fl3731.c @@ -98,8 +98,8 @@ void is31fl3731_init_drivers(void) { i2c_init(); #if defined(IS31FL3731_SDB_PIN) - setPinOutput(IS31FL3731_SDB_PIN); - writePinHigh(IS31FL3731_SDB_PIN); + gpio_set_pin_output(IS31FL3731_SDB_PIN); + gpio_write_pin_high(IS31FL3731_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3731_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3733-mono.c b/drivers/led/issi/is31fl3733-mono.c index 13f2d9b983..740fe06097 100644 --- a/drivers/led/issi/is31fl3733-mono.c +++ b/drivers/led/issi/is31fl3733-mono.c @@ -144,8 +144,8 @@ void is31fl3733_init_drivers(void) { i2c_init(); #if defined(IS31FL3733_SDB_PIN) - setPinOutput(IS31FL3733_SDB_PIN); - writePinHigh(IS31FL3733_SDB_PIN); + gpio_set_pin_output(IS31FL3733_SDB_PIN); + gpio_write_pin_high(IS31FL3733_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3733_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3733.c b/drivers/led/issi/is31fl3733.c index ac6f4b4c89..a1d6899114 100644 --- a/drivers/led/issi/is31fl3733.c +++ b/drivers/led/issi/is31fl3733.c @@ -143,8 +143,8 @@ void is31fl3733_init_drivers(void) { i2c_init(); #if defined(IS31FL3733_SDB_PIN) - setPinOutput(IS31FL3733_SDB_PIN); - writePinHigh(IS31FL3733_SDB_PIN); + gpio_set_pin_output(IS31FL3733_SDB_PIN); + gpio_write_pin_high(IS31FL3733_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3733_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3736-mono.c b/drivers/led/issi/is31fl3736-mono.c index 0d3b5db4e4..7a5415c725 100644 --- a/drivers/led/issi/is31fl3736-mono.c +++ b/drivers/led/issi/is31fl3736-mono.c @@ -115,8 +115,8 @@ void is31fl3736_init_drivers(void) { i2c_init(); #if defined(IS31FL3736_SDB_PIN) - setPinOutput(IS31FL3736_SDB_PIN); - writePinHigh(IS31FL3736_SDB_PIN); + gpio_set_pin_output(IS31FL3736_SDB_PIN); + gpio_write_pin_high(IS31FL3736_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3736_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3736.c b/drivers/led/issi/is31fl3736.c index 990e6c8905..3ab42e2f7c 100644 --- a/drivers/led/issi/is31fl3736.c +++ b/drivers/led/issi/is31fl3736.c @@ -115,8 +115,8 @@ void is31fl3736_init_drivers(void) { i2c_init(); #if defined(IS31FL3736_SDB_PIN) - setPinOutput(IS31FL3736_SDB_PIN); - writePinHigh(IS31FL3736_SDB_PIN); + gpio_set_pin_output(IS31FL3736_SDB_PIN); + gpio_write_pin_high(IS31FL3736_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3736_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3737-mono.c b/drivers/led/issi/is31fl3737-mono.c index 37d684cff0..7b2e5a3576 100644 --- a/drivers/led/issi/is31fl3737-mono.c +++ b/drivers/led/issi/is31fl3737-mono.c @@ -117,8 +117,8 @@ void is31fl3737_init_drivers(void) { i2c_init(); #if defined(IS31FL3737_SDB_PIN) - setPinOutput(IS31FL3737_SDB_PIN); - writePinHigh(IS31FL3737_SDB_PIN); + gpio_set_pin_output(IS31FL3737_SDB_PIN); + gpio_write_pin_high(IS31FL3737_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3737_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3737.c b/drivers/led/issi/is31fl3737.c index fb760cda5e..b27a4cbb0f 100644 --- a/drivers/led/issi/is31fl3737.c +++ b/drivers/led/issi/is31fl3737.c @@ -117,8 +117,8 @@ void is31fl3737_init_drivers(void) { i2c_init(); #if defined(IS31FL3737_SDB_PIN) - setPinOutput(IS31FL3737_SDB_PIN); - writePinHigh(IS31FL3737_SDB_PIN); + gpio_set_pin_output(IS31FL3737_SDB_PIN); + gpio_write_pin_high(IS31FL3737_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3737_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3741-mono.c b/drivers/led/issi/is31fl3741-mono.c index e4857b72d4..dbccba0fc8 100644 --- a/drivers/led/issi/is31fl3741-mono.c +++ b/drivers/led/issi/is31fl3741-mono.c @@ -143,8 +143,8 @@ void is31fl3741_init_drivers(void) { i2c_init(); #if defined(IS31FL3741_SDB_PIN) - setPinOutput(IS31FL3741_SDB_PIN); - writePinHigh(IS31FL3741_SDB_PIN); + gpio_set_pin_output(IS31FL3741_SDB_PIN); + gpio_write_pin_high(IS31FL3741_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3741_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3741.c b/drivers/led/issi/is31fl3741.c index a6cb661d91..3614d1c104 100644 --- a/drivers/led/issi/is31fl3741.c +++ b/drivers/led/issi/is31fl3741.c @@ -143,8 +143,8 @@ void is31fl3741_init_drivers(void) { i2c_init(); #if defined(IS31FL3741_SDB_PIN) - setPinOutput(IS31FL3741_SDB_PIN); - writePinHigh(IS31FL3741_SDB_PIN); + gpio_set_pin_output(IS31FL3741_SDB_PIN); + gpio_write_pin_high(IS31FL3741_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3741_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3742a-mono.c b/drivers/led/issi/is31fl3742a-mono.c index a33865260c..c63db1a7fc 100644 --- a/drivers/led/issi/is31fl3742a-mono.c +++ b/drivers/led/issi/is31fl3742a-mono.c @@ -116,8 +116,8 @@ void is31fl3742a_init_drivers(void) { i2c_init(); #if defined(IS31FL3742A_SDB_PIN) - setPinOutput(IS31FL3742A_SDB_PIN); - writePinHigh(IS31FL3742A_SDB_PIN); + gpio_set_pin_output(IS31FL3742A_SDB_PIN); + gpio_write_pin_high(IS31FL3742A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3742A_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3742a.c b/drivers/led/issi/is31fl3742a.c index 8900ae666f..b8e9a58759 100644 --- a/drivers/led/issi/is31fl3742a.c +++ b/drivers/led/issi/is31fl3742a.c @@ -116,8 +116,8 @@ void is31fl3742a_init_drivers(void) { i2c_init(); #if defined(IS31FL3742A_SDB_PIN) - setPinOutput(IS31FL3742A_SDB_PIN); - writePinHigh(IS31FL3742A_SDB_PIN); + gpio_set_pin_output(IS31FL3742A_SDB_PIN); + gpio_write_pin_high(IS31FL3742A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3742A_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3743a-mono.c b/drivers/led/issi/is31fl3743a-mono.c index 99b1af160e..6413dbef04 100644 --- a/drivers/led/issi/is31fl3743a-mono.c +++ b/drivers/led/issi/is31fl3743a-mono.c @@ -138,8 +138,8 @@ void is31fl3743a_init_drivers(void) { i2c_init(); #if defined(IS31FL3743A_SDB_PIN) - setPinOutput(IS31FL3743A_SDB_PIN); - writePinHigh(IS31FL3743A_SDB_PIN); + gpio_set_pin_output(IS31FL3743A_SDB_PIN); + gpio_write_pin_high(IS31FL3743A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3743A_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3743a.c b/drivers/led/issi/is31fl3743a.c index 135e20710d..6f13925f27 100644 --- a/drivers/led/issi/is31fl3743a.c +++ b/drivers/led/issi/is31fl3743a.c @@ -138,8 +138,8 @@ void is31fl3743a_init_drivers(void) { i2c_init(); #if defined(IS31FL3743A_SDB_PIN) - setPinOutput(IS31FL3743A_SDB_PIN); - writePinHigh(IS31FL3743A_SDB_PIN); + gpio_set_pin_output(IS31FL3743A_SDB_PIN); + gpio_write_pin_high(IS31FL3743A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3743A_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3745-mono.c b/drivers/led/issi/is31fl3745-mono.c index c5d083b272..a6ab699245 100644 --- a/drivers/led/issi/is31fl3745-mono.c +++ b/drivers/led/issi/is31fl3745-mono.c @@ -138,8 +138,8 @@ void is31fl3745_init_drivers(void) { i2c_init(); #if defined(IS31FL3745_SDB_PIN) - setPinOutput(IS31FL3745_SDB_PIN); - writePinHigh(IS31FL3745_SDB_PIN); + gpio_set_pin_output(IS31FL3745_SDB_PIN); + gpio_write_pin_high(IS31FL3745_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3745_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3745.c b/drivers/led/issi/is31fl3745.c index 273fddf1d4..1e3b437e02 100644 --- a/drivers/led/issi/is31fl3745.c +++ b/drivers/led/issi/is31fl3745.c @@ -138,8 +138,8 @@ void is31fl3745_init_drivers(void) { i2c_init(); #if defined(IS31FL3745_SDB_PIN) - setPinOutput(IS31FL3745_SDB_PIN); - writePinHigh(IS31FL3745_SDB_PIN); + gpio_set_pin_output(IS31FL3745_SDB_PIN); + gpio_write_pin_high(IS31FL3745_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3745_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3746a-mono.c b/drivers/led/issi/is31fl3746a-mono.c index 69d5079929..6bff10723f 100644 --- a/drivers/led/issi/is31fl3746a-mono.c +++ b/drivers/led/issi/is31fl3746a-mono.c @@ -116,8 +116,8 @@ void is31fl3746a_init_drivers(void) { i2c_init(); #if defined(IS31FL3746A_SDB_PIN) - setPinOutput(IS31FL3746A_SDB_PIN); - writePinHigh(IS31FL3746A_SDB_PIN); + gpio_set_pin_output(IS31FL3746A_SDB_PIN); + gpio_write_pin_high(IS31FL3746A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3746A_DRIVER_COUNT; i++) { diff --git a/drivers/led/issi/is31fl3746a.c b/drivers/led/issi/is31fl3746a.c index c9dfbc5c40..1ef0b2d632 100644 --- a/drivers/led/issi/is31fl3746a.c +++ b/drivers/led/issi/is31fl3746a.c @@ -116,8 +116,8 @@ void is31fl3746a_init_drivers(void) { i2c_init(); #if defined(IS31FL3746A_SDB_PIN) - setPinOutput(IS31FL3746A_SDB_PIN); - writePinHigh(IS31FL3746A_SDB_PIN); + gpio_set_pin_output(IS31FL3746A_SDB_PIN); + gpio_write_pin_high(IS31FL3746A_SDB_PIN); #endif for (uint8_t i = 0; i < IS31FL3746A_DRIVER_COUNT; i++) { diff --git a/drivers/led/snled27351-mono.c b/drivers/led/snled27351-mono.c index e13fd8a343..d87b856db6 100644 --- a/drivers/led/snled27351-mono.c +++ b/drivers/led/snled27351-mono.c @@ -105,8 +105,8 @@ void snled27351_init_drivers(void) { i2c_init(); #if defined(SNLED27351_SDB_PIN) - setPinOutput(SNLED27351_SDB_PIN); - writePinHigh(SNLED27351_SDB_PIN); + gpio_set_pin_output(SNLED27351_SDB_PIN); + gpio_write_pin_high(SNLED27351_SDB_PIN); #endif for (uint8_t i = 0; i < SNLED27351_DRIVER_COUNT; i++) { diff --git a/drivers/led/snled27351.c b/drivers/led/snled27351.c index 293685b01b..8ebf681bdb 100644 --- a/drivers/led/snled27351.c +++ b/drivers/led/snled27351.c @@ -105,8 +105,8 @@ void snled27351_init_drivers(void) { i2c_init(); #if defined(SNLED27351_SDB_PIN) - setPinOutput(SNLED27351_SDB_PIN); - writePinHigh(SNLED27351_SDB_PIN); + gpio_set_pin_output(SNLED27351_SDB_PIN); + gpio_write_pin_high(SNLED27351_SDB_PIN); #endif for (uint8_t i = 0; i < SNLED27351_DRIVER_COUNT; i++) { diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 8cca41394f..1d1c2a90c4 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c @@ -192,7 +192,7 @@ __attribute__((weak)) bool oled_send_cmd(const uint8_t *data, uint16_t size) { return false; } // Command Mode - writePinLow(OLED_DC_PIN); + gpio_write_pin_low(OLED_DC_PIN); // Send the commands if (spi_transmit(&data[1], size - 1) != SPI_STATUS_SUCCESS) { spi_stop(); @@ -215,7 +215,7 @@ __attribute__((weak)) bool oled_send_cmd_P(const uint8_t *data, uint16_t size) { } spi_status_t status = SPI_STATUS_SUCCESS; // Command Mode - writePinLow(OLED_DC_PIN); + gpio_write_pin_low(OLED_DC_PIN); // Send the commands for (uint16_t i = 1; i < size && status >= 0; i++) { status = spi_write(pgm_read_byte((const char *)&data[i])); @@ -239,7 +239,7 @@ __attribute__((weak)) bool oled_send_data(const uint8_t *data, uint16_t size) { return false; } // Data Mode - writePinHigh(OLED_DC_PIN); + gpio_write_pin_high(OLED_DC_PIN); // Send the commands if (spi_transmit(data, size) != SPI_STATUS_SUCCESS) { spi_stop(); @@ -256,17 +256,17 @@ __attribute__((weak)) bool oled_send_data(const uint8_t *data, uint16_t size) { __attribute__((weak)) void oled_driver_init(void) { #if defined(OLED_TRANSPORT_SPI) spi_init(); - setPinOutput(OLED_CS_PIN); - writePinHigh(OLED_CS_PIN); + gpio_set_pin_output(OLED_CS_PIN); + gpio_write_pin_high(OLED_CS_PIN); - setPinOutput(OLED_DC_PIN); - writePinLow(OLED_DC_PIN); + gpio_set_pin_output(OLED_DC_PIN); + gpio_write_pin_low(OLED_DC_PIN); # ifdef OLED_RST_PIN /* Reset device */ - setPinOutput(OLED_RST_PIN); - writePinLow(OLED_RST_PIN); + gpio_set_pin_output(OLED_RST_PIN); + gpio_write_pin_low(OLED_RST_PIN); wait_ms(20); - writePinHigh(OLED_RST_PIN); + gpio_write_pin_high(OLED_RST_PIN); wait_ms(20); # endif #elif defined(OLED_TRANSPORT_I2C) diff --git a/drivers/painter/comms/qp_comms_spi.c b/drivers/painter/comms/qp_comms_spi.c index 9f52bc7d1f..4e6067394b 100644 --- a/drivers/painter/comms/qp_comms_spi.c +++ b/drivers/painter/comms/qp_comms_spi.c @@ -17,8 +17,8 @@ bool qp_comms_spi_init(painter_device_t device) { spi_init(); // Set up CS as output high - setPinOutput(comms_config->chip_select_pin); - writePinHigh(comms_config->chip_select_pin); + gpio_set_pin_output(comms_config->chip_select_pin); + gpio_write_pin_high(comms_config->chip_select_pin); return true; } @@ -49,7 +49,7 @@ void qp_comms_spi_stop(painter_device_t device) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_config_t *comms_config = (qp_comms_spi_config_t *)driver->comms_config; spi_stop(); - writePinHigh(comms_config->chip_select_pin); + gpio_write_pin_high(comms_config->chip_select_pin); } const painter_comms_vtable_t spi_comms_vtable = { @@ -74,16 +74,16 @@ bool qp_comms_spi_dc_reset_init(painter_device_t device) { // Set up D/C as output low, if specified if (comms_config->dc_pin != NO_PIN) { - setPinOutput(comms_config->dc_pin); - writePinLow(comms_config->dc_pin); + gpio_set_pin_output(comms_config->dc_pin); + gpio_write_pin_low(comms_config->dc_pin); } // Set up RST as output, if specified, performing a reset in the process if (comms_config->reset_pin != NO_PIN) { - setPinOutput(comms_config->reset_pin); - writePinLow(comms_config->reset_pin); + gpio_set_pin_output(comms_config->reset_pin); + gpio_write_pin_low(comms_config->reset_pin); wait_ms(20); - writePinHigh(comms_config->reset_pin); + gpio_write_pin_high(comms_config->reset_pin); wait_ms(20); } @@ -93,14 +93,14 @@ bool qp_comms_spi_dc_reset_init(painter_device_t device) { uint32_t qp_comms_spi_dc_reset_send_data(painter_device_t device, const void *data, uint32_t byte_count) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; - writePinHigh(comms_config->dc_pin); + gpio_write_pin_high(comms_config->dc_pin); return qp_comms_spi_send_data(device, data, byte_count); } void qp_comms_spi_dc_reset_send_command(painter_device_t device, uint8_t cmd) { painter_driver_t * driver = (painter_driver_t *)device; qp_comms_spi_dc_reset_config_t *comms_config = (qp_comms_spi_dc_reset_config_t *)driver->comms_config; - writePinLow(comms_config->dc_pin); + gpio_write_pin_low(comms_config->dc_pin); spi_write(cmd); } diff --git a/drivers/sensors/adns5050.c b/drivers/sensors/adns5050.c index b76268fba2..97daa8db09 100644 --- a/drivers/sensors/adns5050.c +++ b/drivers/sensors/adns5050.c @@ -47,9 +47,9 @@ void adns5050_init(void) { // Initialize the ADNS serial pins. - setPinOutput(ADNS5050_SCLK_PIN); - setPinOutput(ADNS5050_SDIO_PIN); - setPinOutput(ADNS5050_CS_PIN); + gpio_set_pin_output(ADNS5050_SCLK_PIN); + gpio_set_pin_output(ADNS5050_SDIO_PIN); + gpio_set_pin_output(ADNS5050_CS_PIN); // reboot the adns. // if the adns hasn't initialized yet, this is harmless. @@ -69,30 +69,30 @@ void adns5050_init(void) { // Just as with the serial protocol, this is used by the slave to send a // synchronization signal to the master. void adns5050_sync(void) { - writePinLow(ADNS5050_CS_PIN); + gpio_write_pin_low(ADNS5050_CS_PIN); wait_us(1); - writePinHigh(ADNS5050_CS_PIN); + gpio_write_pin_high(ADNS5050_CS_PIN); } void adns5050_cs_select(void) { - writePinLow(ADNS5050_CS_PIN); + gpio_write_pin_low(ADNS5050_CS_PIN); } void adns5050_cs_deselect(void) { - writePinHigh(ADNS5050_CS_PIN); + gpio_write_pin_high(ADNS5050_CS_PIN); } uint8_t adns5050_serial_read(void) { - setPinInput(ADNS5050_SDIO_PIN); + gpio_set_pin_input(ADNS5050_SDIO_PIN); uint8_t byte = 0; for (uint8_t i = 0; i < 8; ++i) { - writePinLow(ADNS5050_SCLK_PIN); + gpio_write_pin_low(ADNS5050_SCLK_PIN); wait_us(1); - byte = (byte << 1) | readPin(ADNS5050_SDIO_PIN); + byte = (byte << 1) | gpio_read_pin(ADNS5050_SDIO_PIN); - writePinHigh(ADNS5050_SCLK_PIN); + gpio_write_pin_high(ADNS5050_SCLK_PIN); wait_us(1); } @@ -100,19 +100,19 @@ uint8_t adns5050_serial_read(void) { } void adns5050_serial_write(uint8_t data) { - setPinOutput(ADNS5050_SDIO_PIN); + gpio_set_pin_output(ADNS5050_SDIO_PIN); for (int8_t b = 7; b >= 0; b--) { - writePinLow(ADNS5050_SCLK_PIN); + gpio_write_pin_low(ADNS5050_SCLK_PIN); if (data & (1 << b)) - writePinHigh(ADNS5050_SDIO_PIN); + gpio_write_pin_high(ADNS5050_SDIO_PIN); else - writePinLow(ADNS5050_SDIO_PIN); + gpio_write_pin_low(ADNS5050_SDIO_PIN); wait_us(2); - writePinHigh(ADNS5050_SCLK_PIN); + gpio_write_pin_high(ADNS5050_SCLK_PIN); } // tSWR. See page 15 of the ADNS spec sheet. diff --git a/drivers/sensors/adns9800.c b/drivers/sensors/adns9800.c index 083ab34d9f..f34529ee90 100644 --- a/drivers/sensors/adns9800.c +++ b/drivers/sensors/adns9800.c @@ -100,7 +100,7 @@ uint8_t adns9800_read(uint8_t reg_addr) { } void adns9800_init(void) { - setPinOutput(ADNS9800_CS_PIN); + gpio_set_pin_output(ADNS9800_CS_PIN); spi_init(); diff --git a/drivers/sensors/analog_joystick.c b/drivers/sensors/analog_joystick.c index 221625075c..15b35a45f2 100644 --- a/drivers/sensors/analog_joystick.c +++ b/drivers/sensors/analog_joystick.c @@ -122,17 +122,17 @@ report_analog_joystick_t analog_joystick_read(void) { report.y = axisToMouseComponent(ANALOG_JOYSTICK_Y_AXIS_PIN, yOrigin, maxCursorSpeed, 1); } #ifdef ANALOG_JOYSTICK_CLICK_PIN - report.button = !readPin(ANALOG_JOYSTICK_CLICK_PIN); + report.button = !gpio_read_pin(ANALOG_JOYSTICK_CLICK_PIN); #endif return report; } void analog_joystick_init(void) { - setPinInputHigh(ANALOG_JOYSTICK_X_AXIS_PIN); - setPinInputHigh(ANALOG_JOYSTICK_Y_AXIS_PIN); + gpio_set_pin_input_high(ANALOG_JOYSTICK_X_AXIS_PIN); + gpio_set_pin_input_high(ANALOG_JOYSTICK_Y_AXIS_PIN); #ifdef ANALOG_JOYSTICK_CLICK_PIN - setPinInputHigh(ANALOG_JOYSTICK_CLICK_PIN); + gpio_set_pin_input_high(ANALOG_JOYSTICK_CLICK_PIN); #endif // Account for drift xOrigin = analogReadPin(ANALOG_JOYSTICK_X_AXIS_PIN); diff --git a/drivers/sensors/paw3204.c b/drivers/sensors/paw3204.c index a13753dd6f..28c47522ed 100644 --- a/drivers/sensors/paw3204.c +++ b/drivers/sensors/paw3204.c @@ -51,8 +51,8 @@ uint8_t paw3204_read_reg(uint8_t reg_addr); void paw3204_write_reg(uint8_t reg_addr, uint8_t data); void paw3204_init(void) { - setPinOutput(PAW3204_SCLK_PIN); // setclockpin to output - setPinInputHigh(PAW3204_SDIO_PIN); // set datapin input high + gpio_set_pin_output(PAW3204_SCLK_PIN); // setclockpin to output + gpio_set_pin_input_high(PAW3204_SDIO_PIN); // set datapin input high paw3204_write_reg(REG_SETUP, 0x86); // reset sensor and set 1600cpi wait_us(5); @@ -64,16 +64,16 @@ void paw3204_init(void) { } uint8_t paw3204_serial_read(void) { - setPinInput(PAW3204_SDIO_PIN); + gpio_set_pin_input(PAW3204_SDIO_PIN); uint8_t byte = 0; for (uint8_t i = 0; i < 8; ++i) { - writePinLow(PAW3204_SCLK_PIN); + gpio_write_pin_low(PAW3204_SCLK_PIN); wait_us(1); - byte = (byte << 1) | readPin(PAW3204_SDIO_PIN); + byte = (byte << 1) | gpio_read_pin(PAW3204_SDIO_PIN); - writePinHigh(PAW3204_SCLK_PIN); + gpio_write_pin_high(PAW3204_SCLK_PIN); wait_us(1); } @@ -81,17 +81,17 @@ uint8_t paw3204_serial_read(void) { } void paw3204_serial_write(uint8_t data) { - writePinLow(PAW3204_SDIO_PIN); - setPinOutput(PAW3204_SDIO_PIN); + gpio_write_pin_low(PAW3204_SDIO_PIN); + gpio_set_pin_output(PAW3204_SDIO_PIN); for (int8_t b = 7; b >= 0; b--) { - writePinLow(PAW3204_SCLK_PIN); + gpio_write_pin_low(PAW3204_SCLK_PIN); if (data & (1 << b)) { - writePinHigh(PAW3204_SDIO_PIN); + gpio_write_pin_high(PAW3204_SDIO_PIN); } else { - writePinLow(PAW3204_SDIO_PIN); + gpio_write_pin_low(PAW3204_SDIO_PIN); } - writePinHigh(PAW3204_SCLK_PIN); + gpio_write_pin_high(PAW3204_SCLK_PIN); } wait_us(4); diff --git a/drivers/sensors/pmw3320.c b/drivers/sensors/pmw3320.c index 69a584f4e1..f19fbfd1ab 100644 --- a/drivers/sensors/pmw3320.c +++ b/drivers/sensors/pmw3320.c @@ -24,9 +24,9 @@ void pmw3320_init(void) { // Initialize sensor serial pins. - setPinOutput(PMW3320_SCLK_PIN); - setPinOutput(PMW3320_SDIO_PIN); - setPinOutput(PMW3320_CS_PIN); + gpio_set_pin_output(PMW3320_SCLK_PIN); + gpio_set_pin_output(PMW3320_SDIO_PIN); + gpio_set_pin_output(PMW3320_CS_PIN); // reboot the sensor. pmw3320_write_reg(REG_Power_Up_Reset, 0x5a); @@ -54,30 +54,30 @@ void pmw3320_init(void) { // Just as with the serial protocol, this is used by the slave to send a // synchronization signal to the master. void pmw3320_sync(void) { - writePinLow(PMW3320_CS_PIN); + gpio_write_pin_low(PMW3320_CS_PIN); wait_us(1); - writePinHigh(PMW3320_CS_PIN); + gpio_write_pin_high(PMW3320_CS_PIN); } void pmw3320_cs_select(void) { - writePinLow(PMW3320_CS_PIN); + gpio_write_pin_low(PMW3320_CS_PIN); } void pmw3320_cs_deselect(void) { - writePinHigh(PMW3320_CS_PIN); + gpio_write_pin_high(PMW3320_CS_PIN); } uint8_t pmw3320_serial_read(void) { - setPinInput(PMW3320_SDIO_PIN); + gpio_set_pin_input(PMW3320_SDIO_PIN); uint8_t byte = 0; for (uint8_t i = 0; i < 8; ++i) { - writePinLow(PMW3320_SCLK_PIN); + gpio_write_pin_low(PMW3320_SCLK_PIN); wait_us(1); - byte = (byte << 1) | readPin(PMW3320_SDIO_PIN); + byte = (byte << 1) | gpio_read_pin(PMW3320_SDIO_PIN); - writePinHigh(PMW3320_SCLK_PIN); + gpio_write_pin_high(PMW3320_SCLK_PIN); wait_us(1); } @@ -85,19 +85,19 @@ uint8_t pmw3320_serial_read(void) { } void pmw3320_serial_write(uint8_t data) { - setPinOutput(PMW3320_SDIO_PIN); + gpio_set_pin_output(PMW3320_SDIO_PIN); for (int8_t b = 7; b >= 0; b--) { - writePinLow(PMW3320_SCLK_PIN); + gpio_write_pin_low(PMW3320_SCLK_PIN); if (data & (1 << b)) - writePinHigh(PMW3320_SDIO_PIN); + gpio_write_pin_high(PMW3320_SDIO_PIN); else - writePinLow(PMW3320_SDIO_PIN); + gpio_write_pin_low(PMW3320_SDIO_PIN); wait_us(2); - writePinHigh(PMW3320_SCLK_PIN); + gpio_write_pin_high(PMW3320_SCLK_PIN); } // This was taken from ADNS5050 driver. diff --git a/drivers/usb2422.c b/drivers/usb2422.c index 1d33b5acf8..de0e399f87 100644 --- a/drivers/usb2422.c +++ b/drivers/usb2422.c @@ -346,10 +346,10 @@ static void USB2422_write_block(void) { void USB2422_init(void) { #ifdef USB2422_RESET_PIN - setPinOutput(USB2422_RESET_PIN); + gpio_set_pin_output(USB2422_RESET_PIN); #endif #ifdef USB2422_ACTIVE_PIN - setPinInput(USB2422_ACTIVE_PIN); + gpio_set_pin_input(USB2422_ACTIVE_PIN); #endif i2c_init(); // IC2 clk must be high at USB2422 reset release time to signal SMB configuration @@ -387,15 +387,15 @@ void USB2422_configure(void) { void USB2422_reset(void) { #ifdef USB2422_RESET_PIN - writePinLow(USB2422_RESET_PIN); + gpio_write_pin_low(USB2422_RESET_PIN); wait_us(2); - writePinHigh(USB2422_RESET_PIN); + gpio_write_pin_high(USB2422_RESET_PIN); #endif } bool USB2422_active(void) { #ifdef USB2422_ACTIVE_PIN - return readPin(USB2422_ACTIVE_PIN); + return gpio_read_pin(USB2422_ACTIVE_PIN); #else return 1; #endif diff --git a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c index 65983c8dd8..361a08a760 100644 --- a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c +++ b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c @@ -13,20 +13,20 @@ static inline void chThdSleepMicroseconds(uint32_t us) { #endif void keyboard_post_init_user(void) { - setPinOutput(QMK_WAITING_TEST_BUSY_PIN); - setPinOutput(QMK_WAITING_TEST_YIELD_PIN); + gpio_set_pin_output(QMK_WAITING_TEST_BUSY_PIN); + gpio_set_pin_output(QMK_WAITING_TEST_YIELD_PIN); } static inline void wait_us_polling_with_strobe(uint32_t us) { - writePinHigh(QMK_WAITING_TEST_BUSY_PIN); + gpio_write_pin_high(QMK_WAITING_TEST_BUSY_PIN); wait_us(us); - writePinLow(QMK_WAITING_TEST_BUSY_PIN); + gpio_write_pin_low(QMK_WAITING_TEST_BUSY_PIN); } static inline void wait_us_yield_with_strobe(uint32_t us) { - writePinHigh(QMK_WAITING_TEST_YIELD_PIN); + gpio_write_pin_high(QMK_WAITING_TEST_YIELD_PIN); chThdSleepMicroseconds(us); - writePinLow(QMK_WAITING_TEST_YIELD_PIN); + gpio_write_pin_low(QMK_WAITING_TEST_YIELD_PIN); } static const uint32_t waiting_values[] = {0, 1, 5, 10, 25, 50, 100, 150, 200, 500, 1000}; diff --git a/platforms/avr/drivers/audio_pwm_hardware.c b/platforms/avr/drivers/audio_pwm_hardware.c index 6799cf2fdd..d484fba00f 100644 --- a/platforms/avr/drivers/audio_pwm_hardware.c +++ b/platforms/avr/drivers/audio_pwm_hardware.c @@ -216,12 +216,12 @@ void channel_2_stop(void) { void audio_driver_initialize(void) { #ifdef AUDIO1_PIN_SET channel_1_stop(); - setPinOutput(AUDIO1_PIN); + gpio_set_pin_output(AUDIO1_PIN); #endif #ifdef AUDIO2_PIN_SET channel_2_stop(); - setPinOutput(AUDIO2_PIN); + gpio_set_pin_output(AUDIO2_PIN); #endif // TCCR3A / TCCR3B: Timer/Counter #3 Control Registers TCCR3A/TCCR3B, TCCR1A/TCCR1B diff --git a/platforms/avr/drivers/backlight_pwm.c b/platforms/avr/drivers/backlight_pwm.c index 74d25753a4..f6ab9391e2 100644 --- a/platforms/avr/drivers/backlight_pwm.c +++ b/platforms/avr/drivers/backlight_pwm.c @@ -291,11 +291,11 @@ ISR(TIMERx_OVF_vect) { #endif // BACKLIGHT_BREATHING void backlight_init_ports(void) { - setPinOutput(BACKLIGHT_PIN); + gpio_set_pin_output(BACKLIGHT_PIN); #if BACKLIGHT_ON_STATE == 1 - writePinLow(BACKLIGHT_PIN); + gpio_write_pin_low(BACKLIGHT_PIN); #else - writePinHigh(BACKLIGHT_PIN); + gpio_write_pin_high(BACKLIGHT_PIN); #endif // I could write a wall of text here to explain... but TL;DW diff --git a/platforms/avr/drivers/ps2/ps2_io.c b/platforms/avr/drivers/ps2/ps2_io.c index b75a1ab0be..fb87474372 100644 --- a/platforms/avr/drivers/ps2/ps2_io.c +++ b/platforms/avr/drivers/ps2/ps2_io.c @@ -19,18 +19,18 @@ void clock_init(void) {} void clock_lo(void) { // Transition from input with pull-up to output low via Hi-Z instead of output high - writePinLow(PS2_CLOCK_PIN); - setPinOutput(PS2_CLOCK_PIN); + gpio_write_pin_low(PS2_CLOCK_PIN); + gpio_set_pin_output(PS2_CLOCK_PIN); } void clock_hi(void) { - setPinInputHigh(PS2_CLOCK_PIN); + gpio_set_pin_input_high(PS2_CLOCK_PIN); } bool clock_in(void) { - setPinInputHigh(PS2_CLOCK_PIN); + gpio_set_pin_input_high(PS2_CLOCK_PIN); wait_us(1); - return readPin(PS2_CLOCK_PIN); + return gpio_read_pin(PS2_CLOCK_PIN); } /* @@ -40,16 +40,16 @@ void data_init(void) {} void data_lo(void) { // Transition from input with pull-up to output low via Hi-Z instead of output high - writePinLow(PS2_DATA_PIN); - setPinOutput(PS2_DATA_PIN); + gpio_write_pin_low(PS2_DATA_PIN); + gpio_set_pin_output(PS2_DATA_PIN); } void data_hi(void) { - setPinInputHigh(PS2_DATA_PIN); + gpio_set_pin_input_high(PS2_DATA_PIN); } bool data_in(void) { - setPinInputHigh(PS2_DATA_PIN); + gpio_set_pin_input_high(PS2_DATA_PIN); wait_us(1); - return readPin(PS2_DATA_PIN); + return gpio_read_pin(PS2_DATA_PIN); } diff --git a/platforms/avr/drivers/serial.c b/platforms/avr/drivers/serial.c index 730d9b7a01..b529f9b45e 100644 --- a/platforms/avr/drivers/serial.c +++ b/platforms/avr/drivers/serial.c @@ -239,28 +239,28 @@ inline static void serial_delay_half2(void) { inline static void serial_output(void) ALWAYS_INLINE; inline static void serial_output(void) { - setPinOutput(SOFT_SERIAL_PIN); + gpio_set_pin_output(SOFT_SERIAL_PIN); } // make the serial pin an input with pull-up resistor inline static void serial_input_with_pullup(void) ALWAYS_INLINE; inline static void serial_input_with_pullup(void) { - setPinInputHigh(SOFT_SERIAL_PIN); + gpio_set_pin_input_high(SOFT_SERIAL_PIN); } inline static uint8_t serial_read_pin(void) ALWAYS_INLINE; inline static uint8_t serial_read_pin(void) { - return !!readPin(SOFT_SERIAL_PIN); + return !!gpio_read_pin(SOFT_SERIAL_PIN); } inline static void serial_low(void) ALWAYS_INLINE; inline static void serial_low(void) { - writePinLow(SOFT_SERIAL_PIN); + gpio_write_pin_low(SOFT_SERIAL_PIN); } inline static void serial_high(void) ALWAYS_INLINE; inline static void serial_high(void) { - writePinHigh(SOFT_SERIAL_PIN); + gpio_write_pin_high(SOFT_SERIAL_PIN); } void soft_serial_initiator_init(void) { diff --git a/platforms/avr/drivers/spi_master.c b/platforms/avr/drivers/spi_master.c index ae9df03c02..74b847c71a 100644 --- a/platforms/avr/drivers/spi_master.c +++ b/platforms/avr/drivers/spi_master.c @@ -41,10 +41,10 @@ static uint8_t currentSlaveConfig = 0; static bool currentSlave2X = false; void spi_init(void) { - writePinHigh(SPI_SS_PIN); - setPinOutput(SPI_SCK_PIN); - setPinOutput(SPI_MOSI_PIN); - setPinInput(SPI_MISO_PIN); + gpio_write_pin_high(SPI_SS_PIN); + gpio_set_pin_output(SPI_SCK_PIN); + gpio_set_pin_output(SPI_MOSI_PIN); + gpio_set_pin_input(SPI_MISO_PIN); SPCR = (_BV(SPE) | _BV(MSTR)); } @@ -105,8 +105,8 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { SPSR |= _BV(SPI2X); } currentSlavePin = slavePin; - setPinOutput(currentSlavePin); - writePinLow(currentSlavePin); + gpio_set_pin_output(currentSlavePin); + gpio_write_pin_low(currentSlavePin); return true; } @@ -169,8 +169,8 @@ spi_status_t spi_receive(uint8_t *data, uint16_t length) { void spi_stop(void) { if (currentSlavePin != NO_PIN) { - setPinOutput(currentSlavePin); - writePinHigh(currentSlavePin); + gpio_set_pin_output(currentSlavePin); + gpio_write_pin_high(currentSlavePin); currentSlavePin = NO_PIN; SPSR &= ~(_BV(SPI2X)); SPCR &= ~(currentSlaveConfig); diff --git a/platforms/chibios/drivers/serial.c b/platforms/chibios/drivers/serial.c index f199716a2b..fa8481d2dc 100644 --- a/platforms/chibios/drivers/serial.c +++ b/platforms/chibios/drivers/serial.c @@ -62,25 +62,25 @@ inline static void serial_delay_blip(void) { wait_us(1); } inline static void serial_output(void) { - setPinOutput(SOFT_SERIAL_PIN); + gpio_set_pin_output(SOFT_SERIAL_PIN); } inline static void serial_input(void) { - setPinInputHigh(SOFT_SERIAL_PIN); + gpio_set_pin_input_high(SOFT_SERIAL_PIN); } inline static bool serial_read_pin(void) { - return !!readPin(SOFT_SERIAL_PIN); + return !!gpio_read_pin(SOFT_SERIAL_PIN); } inline static void serial_low(void) { - writePinLow(SOFT_SERIAL_PIN); + gpio_write_pin_low(SOFT_SERIAL_PIN); } inline static void serial_high(void) { - writePinHigh(SOFT_SERIAL_PIN); + gpio_write_pin_high(SOFT_SERIAL_PIN); } void interrupt_handler(void *arg); // Use thread + palWaitLineTimeout instead of palSetLineCallback -// - Methods like setPinOutput and palEnableLineEvent/palDisableLineEvent +// - Methods like gpio_set_pin_output and palEnableLineEvent/palDisableLineEvent // cause the interrupt to lock up, which would limit to only receiving data... static THD_WORKING_AREA(waThread1, 128); static THD_FUNCTION(Thread1, arg) { diff --git a/platforms/chibios/drivers/spi_master.c b/platforms/chibios/drivers/spi_master.c index 481a2e422a..57fc53d49f 100644 --- a/platforms/chibios/drivers/spi_master.c +++ b/platforms/chibios/drivers/spi_master.c @@ -32,12 +32,12 @@ __attribute__((weak)) void spi_init(void) { is_initialised = true; // Try releasing special pins for a short time - setPinInput(SPI_SCK_PIN); + gpio_set_pin_input(SPI_SCK_PIN); if (SPI_MOSI_PIN != NO_PIN) { - setPinInput(SPI_MOSI_PIN); + gpio_set_pin_input(SPI_MOSI_PIN); } if (SPI_MISO_PIN != NO_PIN) { - setPinInput(SPI_MISO_PIN); + gpio_set_pin_input(SPI_MISO_PIN); } chThdSleepMilliseconds(10); @@ -271,10 +271,10 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { #if SPI_SELECT_MODE == SPI_SELECT_MODE_PAD spiConfig.ssport = PAL_PORT(slavePin); spiConfig.sspad = PAL_PAD(slavePin); - setPinOutput(slavePin); + gpio_set_pin_output(slavePin); #elif SPI_SELECT_MODE == SPI_SELECT_MODE_NONE if (slavePin != NO_PIN) { - setPinOutput(slavePin); + gpio_set_pin_output(slavePin); } #else # error "Unsupported SPI_SELECT_MODE" @@ -284,7 +284,7 @@ bool spi_start(pin_t slavePin, bool lsbFirst, uint8_t mode, uint16_t divisor) { spiSelect(&SPI_DRIVER); #if SPI_SELECT_MODE == SPI_SELECT_MODE_NONE if (slavePin != NO_PIN) { - writePinLow(slavePin); + gpio_write_pin_low(slavePin); } #endif @@ -319,7 +319,7 @@ void spi_stop(void) { if (spiStarted) { #if SPI_SELECT_MODE == SPI_SELECT_MODE_NONE if (currentSlavePin != NO_PIN) { - writePinHigh(currentSlavePin); + gpio_write_pin_high(currentSlavePin); } #endif spiUnselect(&SPI_DRIVER); diff --git a/platforms/chibios/drivers/ws2812_bitbang.c b/platforms/chibios/drivers/ws2812_bitbang.c index 883a845d88..593377068b 100644 --- a/platforms/chibios/drivers/ws2812_bitbang.c +++ b/platforms/chibios/drivers/ws2812_bitbang.c @@ -57,15 +57,15 @@ void sendByte(uint8_t byte) { // using something like wait_ns(is_one ? T1L : T0L) here throws off timings if (is_one) { // 1 - writePinHigh(WS2812_DI_PIN); + gpio_write_pin_high(WS2812_DI_PIN); wait_ns(WS2812_T1H); - writePinLow(WS2812_DI_PIN); + gpio_write_pin_low(WS2812_DI_PIN); wait_ns(WS2812_T1L); } else { // 0 - writePinHigh(WS2812_DI_PIN); + gpio_write_pin_high(WS2812_DI_PIN); wait_ns(WS2812_T0H); - writePinLow(WS2812_DI_PIN); + gpio_write_pin_low(WS2812_DI_PIN); wait_ns(WS2812_T0L); } } diff --git a/quantum/backlight/backlight_driver_common.c b/quantum/backlight/backlight_driver_common.c index 8c3fe461d7..fb2770ee3c 100644 --- a/quantum/backlight/backlight_driver_common.c +++ b/quantum/backlight/backlight_driver_common.c @@ -26,23 +26,23 @@ static const pin_t backlight_pin = BACKLIGHT_PIN; static inline void backlight_on(pin_t backlight_pin) { #if BACKLIGHT_ON_STATE == 0 - writePinLow(backlight_pin); + gpio_write_pin_low(backlight_pin); #else - writePinHigh(backlight_pin); + gpio_write_pin_high(backlight_pin); #endif } static inline void backlight_off(pin_t backlight_pin) { #if BACKLIGHT_ON_STATE == 0 - writePinHigh(backlight_pin); + gpio_write_pin_high(backlight_pin); #else - writePinLow(backlight_pin); + gpio_write_pin_low(backlight_pin); #endif } void backlight_pins_init(void) { // Setup backlight pin as output and output to off state. - FOR_EACH_LED(setPinOutput(backlight_pin); backlight_off(backlight_pin);) + FOR_EACH_LED(gpio_set_pin_output(backlight_pin); backlight_off(backlight_pin);) } void backlight_pins_on(void) { diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c index e901f3e0c4..69cf665291 100644 --- a/quantum/dip_switch.c +++ b/quantum/dip_switch.c @@ -94,7 +94,7 @@ void dip_switch_init(void) { } # endif for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { - setPinInputHigh(dip_switch_pad[i]); + gpio_set_pin_input_high(dip_switch_pad[i]); } dip_switch_read(true); #endif @@ -123,7 +123,7 @@ void dip_switch_read(bool forced) { for (uint8_t i = 0; i < NUM_DIP_SWITCHES; i++) { #ifdef DIP_SWITCH_PINS - dip_switch_state[i] = !readPin(dip_switch_pad[i]); + dip_switch_state[i] = !gpio_read_pin(dip_switch_pad[i]); #endif #ifdef DIP_SWITCH_MATRIX_GRID dip_switch_state[i] = peek_matrix(dip_switch_pad[i].row, dip_switch_pad[i].col, read_raw); diff --git a/quantum/encoder.c b/quantum/encoder.c index 7ab194ed52..efb780c474 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -162,12 +162,12 @@ void encoder_init(void) { #endif // defined(SPLIT_KEYBOARD) && defined(ENCODER_RESOLUTIONS) for (uint8_t i = 0; i < thisCount; i++) { - setPinInputHigh(encoders_pad_a[i]); - setPinInputHigh(encoders_pad_b[i]); + gpio_set_pin_input_high(encoders_pad_a[i]); + gpio_set_pin_input_high(encoders_pad_b[i]); } encoder_wait_pullup_charge(); for (uint8_t i = 0; i < thisCount; i++) { - encoder_state[i] = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); + encoder_state[i] = (gpio_read_pin(encoders_pad_a[i]) << 0) | (gpio_read_pin(encoders_pad_b[i]) << 1); } } @@ -247,7 +247,7 @@ static bool encoder_update(uint8_t index, uint8_t state) { bool encoder_read(void) { bool changed = false; for (uint8_t i = 0; i < thisCount; i++) { - uint8_t new_status = (readPin(encoders_pad_a[i]) << 0) | (readPin(encoders_pad_b[i]) << 1); + uint8_t new_status = (gpio_read_pin(encoders_pad_a[i]) << 0) | (gpio_read_pin(encoders_pad_b[i]) << 1); if ((encoder_state[i] & 0x3) != new_status) { encoder_state[i] <<= 2; encoder_state[i] |= new_status; diff --git a/quantum/haptic.c b/quantum/haptic.c index a1fea29625..6a466293a7 100644 --- a/quantum/haptic.c +++ b/quantum/haptic.c @@ -96,10 +96,10 @@ void haptic_init(void) { #endif eeconfig_debug_haptic(); #ifdef HAPTIC_ENABLE_PIN - setPinOutput(HAPTIC_ENABLE_PIN); + gpio_set_pin_output(HAPTIC_ENABLE_PIN); #endif #ifdef HAPTIC_ENABLE_STATUS_LED - setPinOutput(HAPTIC_ENABLE_STATUS_LED); + gpio_set_pin_output(HAPTIC_ENABLE_STATUS_LED); #endif } @@ -356,9 +356,9 @@ void haptic_shutdown(void) { void haptic_notify_usb_device_state_change(void) { update_haptic_enable_gpios(); #if defined(HAPTIC_ENABLE_PIN) - setPinOutput(HAPTIC_ENABLE_PIN); + gpio_set_pin_output(HAPTIC_ENABLE_PIN); #endif #if defined(HAPTIC_ENABLE_STATUS_LED) - setPinOutput(HAPTIC_ENABLE_STATUS_LED); + gpio_set_pin_output(HAPTIC_ENABLE_STATUS_LED); #endif } diff --git a/quantum/haptic.h b/quantum/haptic.h index 5bd1a71916..b283d5d268 100644 --- a/quantum/haptic.h +++ b/quantum/haptic.h @@ -84,22 +84,22 @@ void haptic_notify_usb_device_state_change(void); # ifndef HAPTIC_ENABLE_PIN # error HAPTIC_ENABLE_PIN not defined # endif -# define HAPTIC_ENABLE_PIN_WRITE_ACTIVE() writePinLow(HAPTIC_ENABLE_PIN) -# define HAPTIC_ENABLE_PIN_WRITE_INACTIVE() writePinHigh(HAPTIC_ENABLE_PIN) +# define HAPTIC_ENABLE_PIN_WRITE_ACTIVE() gpio_write_pin_low(HAPTIC_ENABLE_PIN) +# define HAPTIC_ENABLE_PIN_WRITE_INACTIVE() gpio_write_pin_high(HAPTIC_ENABLE_PIN) #else -# define HAPTIC_ENABLE_PIN_WRITE_ACTIVE() writePinHigh(HAPTIC_ENABLE_PIN) -# define HAPTIC_ENABLE_PIN_WRITE_INACTIVE() writePinLow(HAPTIC_ENABLE_PIN) +# define HAPTIC_ENABLE_PIN_WRITE_ACTIVE() gpio_write_pin_high(HAPTIC_ENABLE_PIN) +# define HAPTIC_ENABLE_PIN_WRITE_INACTIVE() gpio_write_pin_low(HAPTIC_ENABLE_PIN) #endif #ifdef HAPTIC_ENABLE_STATUS_LED_ACTIVE_LOW # ifndef HAPTIC_ENABLE_STATUS_LED # error HAPTIC_ENABLE_STATUS_LED not defined # endif -# define HAPTIC_ENABLE_STATUS_LED_WRITE_ACTIVE() writePinLow(HAPTIC_ENABLE_STATUS_LED) -# define HAPTIC_ENABLE_STATUS_LED_WRITE_INACTIVE() writePinHigh(HAPTIC_ENABLE_STATUS_LED) +# define HAPTIC_ENABLE_STATUS_LED_WRITE_ACTIVE() gpio_write_pin_low(HAPTIC_ENABLE_STATUS_LED) +# define HAPTIC_ENABLE_STATUS_LED_WRITE_INACTIVE() gpio_write_pin_high(HAPTIC_ENABLE_STATUS_LED) #else -# define HAPTIC_ENABLE_STATUS_LED_WRITE_ACTIVE() writePinHigh(HAPTIC_ENABLE_STATUS_LED) -# define HAPTIC_ENABLE_STATUS_LED_WRITE_INACTIVE() writePinLow(HAPTIC_ENABLE_STATUS_LED) +# define HAPTIC_ENABLE_STATUS_LED_WRITE_ACTIVE() gpio_write_pin_high(HAPTIC_ENABLE_STATUS_LED) +# define HAPTIC_ENABLE_STATUS_LED_WRITE_INACTIVE() gpio_write_pin_low(HAPTIC_ENABLE_STATUS_LED) #endif #ifndef HAPTIC_OFF_IN_LOW_POWER diff --git a/quantum/joystick.c b/quantum/joystick.c index 3e9edeb8e2..32f19b2cd9 100644 --- a/quantum/joystick.c +++ b/quantum/joystick.c @@ -43,7 +43,7 @@ __attribute__((weak)) void joystick_axis_init(uint8_t axis) { if (axis >= JOYSTICK_AXIS_COUNT) return; #if defined(JOYSTICK_ANALOG) - setPinInput(joystick_axes[axis].input_pin); + gpio_set_pin_input(joystick_axes[axis].input_pin); #endif } diff --git a/quantum/led.c b/quantum/led.c index 1e7ee9db76..e2b5985109 100644 --- a/quantum/led.c +++ b/quantum/led.c @@ -98,19 +98,19 @@ __attribute__((weak)) void led_update_ports(led_t led_state) { #endif #ifdef LED_NUM_LOCK_PIN - writePin(LED_NUM_LOCK_PIN, led_state.num_lock); + gpio_write_pin(LED_NUM_LOCK_PIN, led_state.num_lock); #endif #ifdef LED_CAPS_LOCK_PIN - writePin(LED_CAPS_LOCK_PIN, led_state.caps_lock); + gpio_write_pin(LED_CAPS_LOCK_PIN, led_state.caps_lock); #endif #ifdef LED_SCROLL_LOCK_PIN - writePin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock); + gpio_write_pin(LED_SCROLL_LOCK_PIN, led_state.scroll_lock); #endif #ifdef LED_COMPOSE_PIN - writePin(LED_COMPOSE_PIN, led_state.compose); + gpio_write_pin(LED_COMPOSE_PIN, led_state.compose); #endif #ifdef LED_KANA_PIN - writePin(LED_KANA_PIN, led_state.kana); + gpio_write_pin(LED_KANA_PIN, led_state.kana); #endif } @@ -118,24 +118,24 @@ __attribute__((weak)) void led_update_ports(led_t led_state) { */ __attribute__((weak)) void led_init_ports(void) { #ifdef LED_NUM_LOCK_PIN - setPinOutput(LED_NUM_LOCK_PIN); - writePin(LED_NUM_LOCK_PIN, !LED_PIN_ON_STATE); + gpio_set_pin_output(LED_NUM_LOCK_PIN); + gpio_write_pin(LED_NUM_LOCK_PIN, !LED_PIN_ON_STATE); #endif #ifdef LED_CAPS_LOCK_PIN - setPinOutput(LED_CAPS_LOCK_PIN); - writePin(LED_CAPS_LOCK_PIN, !LED_PIN_ON_STATE); + gpio_set_pin_output(LED_CAPS_LOCK_PIN); + gpio_write_pin(LED_CAPS_LOCK_PIN, !LED_PIN_ON_STATE); #endif #ifdef LED_SCROLL_LOCK_PIN - setPinOutput(LED_SCROLL_LOCK_PIN); - writePin(LED_SCROLL_LOCK_PIN, !LED_PIN_ON_STATE); + gpio_set_pin_output(LED_SCROLL_LOCK_PIN); + gpio_write_pin(LED_SCROLL_LOCK_PIN, !LED_PIN_ON_STATE); #endif #ifdef LED_COMPOSE_PIN - setPinOutput(LED_COMPOSE_PIN); - writePin(LED_COMPOSE_PIN, !LED_PIN_ON_STATE); + gpio_set_pin_output(LED_COMPOSE_PIN); + gpio_write_pin(LED_COMPOSE_PIN, !LED_PIN_ON_STATE); #endif #ifdef LED_KANA_PIN - setPinOutput(LED_KANA_PIN); - writePin(LED_KANA_PIN, !LED_PIN_ON_STATE); + gpio_set_pin_output(LED_KANA_PIN); + gpio_write_pin(LED_KANA_PIN, !LED_PIN_ON_STATE); #endif } diff --git a/quantum/matrix.c b/quantum/matrix.c index f087a215d4..d4586efac2 100644 --- a/quantum/matrix.c +++ b/quantum/matrix.c @@ -78,27 +78,27 @@ __attribute__((weak)) void matrix_read_rows_on_col(matrix_row_t current_matrix[] static inline void setPinOutput_writeLow(pin_t pin) { ATOMIC_BLOCK_FORCEON { - setPinOutput(pin); - writePinLow(pin); + gpio_set_pin_output(pin); + gpio_write_pin_low(pin); } } static inline void setPinOutput_writeHigh(pin_t pin) { ATOMIC_BLOCK_FORCEON { - setPinOutput(pin); - writePinHigh(pin); + gpio_set_pin_output(pin); + gpio_write_pin_high(pin); } } static inline void setPinInputHigh_atomic(pin_t pin) { ATOMIC_BLOCK_FORCEON { - setPinInputHigh(pin); + gpio_set_pin_input_high(pin); } } static inline uint8_t readMatrixPin(pin_t pin) { if (pin != NO_PIN) { - return (readPin(pin) == MATRIX_INPUT_PRESSED_STATE) ? 0 : 1; + return (gpio_read_pin(pin) == MATRIX_INPUT_PRESSED_STATE) ? 0 : 1; } else { return 1; } @@ -113,7 +113,7 @@ __attribute__((weak)) void matrix_init_pins(void) { for (int col = 0; col < MATRIX_COLS; col++) { pin_t pin = direct_pins[row][col]; if (pin != NO_PIN) { - setPinInputHigh(pin); + gpio_set_pin_input_high(pin); } } } diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c index 2fa49ade8e..bcced166c0 100644 --- a/quantum/pointing_device/pointing_device.c +++ b/quantum/pointing_device/pointing_device.c @@ -149,9 +149,9 @@ __attribute__((weak)) void pointing_device_init(void) { pointing_device_driver.init(); #ifdef POINTING_DEVICE_MOTION_PIN # ifdef POINTING_DEVICE_MOTION_PIN_ACTIVE_LOW - setPinInputHigh(POINTING_DEVICE_MOTION_PIN); + gpio_set_pin_input_high(POINTING_DEVICE_MOTION_PIN); # else - setPinInput(POINTING_DEVICE_MOTION_PIN); + gpio_set_pin_input(POINTING_DEVICE_MOTION_PIN); # endif #endif } @@ -247,9 +247,9 @@ __attribute__((weak)) bool pointing_device_task(void) { # error POINTING_DEVICE_MOTION_PIN not supported when sharing the pointing device report between sides. # endif # ifdef POINTING_DEVICE_MOTION_PIN_ACTIVE_LOW - if (!readPin(POINTING_DEVICE_MOTION_PIN)) + if (!gpio_read_pin(POINTING_DEVICE_MOTION_PIN)) # else - if (readPin(POINTING_DEVICE_MOTION_PIN)) + if (gpio_read_pin(POINTING_DEVICE_MOTION_PIN)) # endif { #endif diff --git a/quantum/split_common/split_util.c b/quantum/split_common/split_util.c index 2f592bd4cf..96f19bfd84 100644 --- a/quantum/split_common/split_util.c +++ b/quantum/split_common/split_util.c @@ -123,14 +123,14 @@ void split_watchdog_task(void) { void matrix_io_delay(void); static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) { - setPinInputHigh(in_pin); - setPinOutput(out_pin); - writePinLow(out_pin); + gpio_set_pin_input_high(in_pin); + gpio_set_pin_output(out_pin); + gpio_write_pin_low(out_pin); // It's almost unnecessary, but wait until it's down to low, just in case. wait_us(1); - uint8_t pin_state = readPin(in_pin); + uint8_t pin_state = gpio_read_pin(in_pin); // Set out_pin to a setting that is less susceptible to noise. - setPinInputHigh(out_pin); + gpio_set_pin_input_high(out_pin); matrix_io_delay(); // Wait for the pull-up to go HIGH. return pin_state; } @@ -138,13 +138,13 @@ static uint8_t peek_matrix_intersection(pin_t out_pin, pin_t in_pin) { __attribute__((weak)) bool is_keyboard_left_impl(void) { #if defined(SPLIT_HAND_PIN) - setPinInput(SPLIT_HAND_PIN); + gpio_set_pin_input(SPLIT_HAND_PIN); wait_us(100); // Test pin SPLIT_HAND_PIN for High/Low, if low it's right hand # ifdef SPLIT_HAND_PIN_LOW_IS_LEFT - return !readPin(SPLIT_HAND_PIN); + return !gpio_read_pin(SPLIT_HAND_PIN); # else - return readPin(SPLIT_HAND_PIN); + return gpio_read_pin(SPLIT_HAND_PIN); # endif #elif defined(SPLIT_HAND_MATRIX_GRID) # ifdef SPLIT_HAND_MATRIX_GRID_LOW_IS_LEFT diff --git a/tmk_core/protocol/arm_atsam/shift_register.c b/tmk_core/protocol/arm_atsam/shift_register.c index 3adb682aa8..e81db4a19d 100644 --- a/tmk_core/protocol/arm_atsam/shift_register.c +++ b/tmk_core/protocol/arm_atsam/shift_register.c @@ -28,27 +28,27 @@ along with this program. If not, see . # define CLOCK_DELAY 10 void shift_init_impl(void) { - setPinOutput(SR_EXP_RCLK_PIN); - setPinOutput(SPI_DATAOUT_PIN); - setPinOutput(SPI_SCLK_PIN); + gpio_set_pin_output(SR_EXP_RCLK_PIN); + gpio_set_pin_output(SPI_DATAOUT_PIN); + gpio_set_pin_output(SPI_SCLK_PIN); } void shift_out_impl(const uint8_t *data, uint16_t length) { - writePinLow(SR_EXP_RCLK_PIN); + gpio_write_pin_low(SR_EXP_RCLK_PIN); for (uint16_t i = 0; i < length; i++) { uint8_t val = data[i]; // shift out lsb first for (uint8_t bit = 0; bit < 8; bit++) { - writePin(SPI_DATAOUT_PIN, !!(val & (1 << bit))); - writePin(SPI_SCLK_PIN, true); + gpio_write_pin(SPI_DATAOUT_PIN, !!(val & (1 << bit))); + gpio_write_pin(SPI_SCLK_PIN, true); wait_us(CLOCK_DELAY); - writePin(SPI_SCLK_PIN, false); + gpio_write_pin(SPI_SCLK_PIN, false); wait_us(CLOCK_DELAY); } } - writePinHigh(SR_EXP_RCLK_PIN); + gpio_write_pin_high(SR_EXP_RCLK_PIN); return SPI_STATUS_SUCCESS; } @@ -74,13 +74,13 @@ void shift_out(const uint8_t *data, uint16_t length) { } void shift_enable(void) { - setPinOutput(SR_EXP_OE_PIN); - writePinLow(SR_EXP_OE_PIN); + gpio_set_pin_output(SR_EXP_OE_PIN); + gpio_write_pin_low(SR_EXP_OE_PIN); } void shift_disable(void) { - setPinOutput(SR_EXP_OE_PIN); - writePinHigh(SR_EXP_OE_PIN); + gpio_set_pin_output(SR_EXP_OE_PIN); + gpio_write_pin_high(SR_EXP_OE_PIN); } void shift_init(void) { diff --git a/tmk_core/protocol/arm_atsam/spi_master.c b/tmk_core/protocol/arm_atsam/spi_master.c index 3be82fac1d..fedb9654fd 100644 --- a/tmk_core/protocol/arm_atsam/spi_master.c +++ b/tmk_core/protocol/arm_atsam/spi_master.c @@ -60,8 +60,8 @@ bool spi_start(pin_t csPin, bool lsbFirst, uint8_t mode, uint16_t divisor) { } currentSelectPin = csPin; - setPinOutput(currentSelectPin); - writePinLow(currentSelectPin); + gpio_set_pin_output(currentSelectPin); + gpio_write_pin_low(currentSelectPin); SPI_SERCOM->SPI.CTRLA.bit.DORD = lsbFirst; // Data Order - LSB is transferred first SPI_SERCOM->SPI.CTRLA.bit.CPOL = 1; // Clock Polarity - SCK high when idle. Leading edge of cycle is falling. Trailing rising. @@ -94,8 +94,8 @@ spi_status_t spi_transmit(const uint8_t *data, uint16_t length) { void spi_stop(void) { if (currentSelectPin != NO_PIN) { - setPinOutput(currentSelectPin); - writePinHigh(currentSelectPin); + gpio_set_pin_output(currentSelectPin); + gpio_write_pin_high(currentSelectPin); currentSelectPin = NO_PIN; } } diff --git a/tmk_core/protocol/usb_util.c b/tmk_core/protocol/usb_util.c index 3b3be4a767..a130e8b5e3 100644 --- a/tmk_core/protocol/usb_util.c +++ b/tmk_core/protocol/usb_util.c @@ -26,9 +26,9 @@ __attribute__((weak)) bool usb_connected_state(void) { __attribute__((weak)) bool usb_vbus_state(void) { #ifdef USB_VBUS_PIN - setPinInput(USB_VBUS_PIN); + gpio_set_pin_input(USB_VBUS_PIN); wait_us(5); - return readPin(USB_VBUS_PIN); + return gpio_read_pin(USB_VBUS_PIN); #else return true; #endif -- cgit v1.2.3 From 9d9cdaaa2d035787b0b50c26f2975695fdbc16f4 Mon Sep 17 00:00:00 2001 From: Nick Brassel Date: Sun, 18 Feb 2024 21:17:15 +1100 Subject: Add encoder abstraction. (#21548) --- builddefs/common_features.mk | 15 + data/mappings/info_rules.hjson | 1 + data/schemas/keyboard.jsonschema | 4 + drivers/encoder/encoder_quadrature.c | 213 +++++++++++++ keyboards/mechwild/sugarglider/matrix.c | 6 +- keyboards/pica40/rev2/post_rules.mk | 8 - keyboards/pica40/rev2/rev2.c | 98 ++---- keyboards/planck/rev7/info.json | 9 +- keyboards/planck/rev7/matrix.c | 86 +----- keyboards/ploopyco/mouse/config.h | 3 + keyboards/ploopyco/mouse/info.json | 6 + keyboards/ploopyco/mouse/mouse.c | 20 +- keyboards/ploopyco/mouse/rules.mk | 3 - keyboards/ploopyco/trackball/config.h | 3 + keyboards/ploopyco/trackball/info.json | 6 + keyboards/ploopyco/trackball/rules.mk | 3 - keyboards/ploopyco/trackball/trackball.c | 20 +- keyboards/ploopyco/trackball_mini/config.h | 3 + keyboards/ploopyco/trackball_mini/info.json | 6 + keyboards/ploopyco/trackball_mini/rules.mk | 3 - keyboards/ploopyco/trackball_mini/trackball_mini.c | 20 +- keyboards/ploopyco/trackball_thumb/config.h | 3 + keyboards/ploopyco/trackball_thumb/info.json | 5 +- keyboards/ploopyco/trackball_thumb/post_rules.mk | 4 - .../ploopyco/trackball_thumb/trackball_thumb.c | 20 +- .../ploopyco/trackball_thumb/trackball_thumb.h | 3 - quantum/encoder.c | 336 ++++++--------------- quantum/encoder.h | 99 ++++-- quantum/encoder/tests/config_encoder_common.h | 6 + quantum/encoder/tests/config_mock.h | 3 +- .../tests/config_mock_split_left_eq_right.h | 3 +- .../tests/config_mock_split_left_gt_right.h | 3 +- .../tests/config_mock_split_left_lt_right.h | 3 +- quantum/encoder/tests/config_mock_split_no_left.h | 3 +- quantum/encoder/tests/config_mock_split_no_right.h | 3 +- quantum/encoder/tests/config_mock_split_role.h | 3 +- quantum/encoder/tests/encoder_tests.cpp | 2 +- .../tests/encoder_tests_split_left_eq_right.cpp | 91 ++++-- .../tests/encoder_tests_split_left_gt_right.cpp | 89 ++++-- .../tests/encoder_tests_split_left_lt_right.cpp | 89 ++++-- .../encoder/tests/encoder_tests_split_no_left.cpp | 69 +++-- .../encoder/tests/encoder_tests_split_no_right.cpp | 66 ++-- quantum/encoder/tests/encoder_tests_split_role.cpp | 8 +- quantum/encoder/tests/mock_split.c | 4 - quantum/encoder/tests/mock_split.h | 3 - quantum/encoder/tests/rules.mk | 7 + quantum/keyboard.c | 2 +- quantum/split_common/transaction_id_define.h | 1 + quantum/split_common/transactions.c | 26 +- quantum/split_common/transport.h | 4 +- 50 files changed, 852 insertions(+), 642 deletions(-) create mode 100644 drivers/encoder/encoder_quadrature.c delete mode 100644 keyboards/pica40/rev2/post_rules.mk delete mode 100644 keyboards/ploopyco/trackball_thumb/post_rules.mk create mode 100644 quantum/encoder/tests/config_encoder_common.h (limited to 'quantum') diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk index 90e0ff827d..58e41f5230 100644 --- a/builddefs/common_features.mk +++ b/builddefs/common_features.mk @@ -886,9 +886,24 @@ ifeq ($(strip $(BLUETOOTH_ENABLE)), yes) endif endif +ENCODER_ENABLE ?= no +ENCODER_DRIVER ?= quadrature +VALID_ENCODER_DRIVER_TYPES := quadrature custom ifeq ($(strip $(ENCODER_ENABLE)), yes) + ifeq ($(filter $(ENCODER_DRIVER),$(VALID_ENCODER_DRIVER_TYPES)),) + $(call CATASTROPHIC_ERROR,Invalid ENCODER_DRIVER,ENCODER_DRIVER="$(ENCODER_DRIVER)" is not a valid encoder driver) + endif SRC += $(QUANTUM_DIR)/encoder.c OPT_DEFS += -DENCODER_ENABLE + OPT_DEFS += -DENCODER_DRIVER_$(strip $(shell echo $(ENCODER_DRIVER) | tr '[:lower:]' '[:upper:]')) + + COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/encoder + COMMON_VPATH += $(DRIVER_PATH)/encoder + + ifneq ($(strip $(ENCODER_DRIVER)), custom) + SRC += encoder_$(strip $(ENCODER_DRIVER)).c + endif + ifeq ($(strip $(ENCODER_MAP_ENABLE)), yes) OPT_DEFS += -DENCODER_MAP_ENABLE endif diff --git a/data/mappings/info_rules.hjson b/data/mappings/info_rules.hjson index 02fc2bee9d..fc25eb3328 100644 --- a/data/mappings/info_rules.hjson +++ b/data/mappings/info_rules.hjson @@ -21,6 +21,7 @@ "DEBOUNCE_TYPE": {"info_key": "build.debounce_type"}, "EEPROM_DRIVER": {"info_key": "eeprom.driver"}, "ENCODER_ENABLE": {"info_key": "encoder.enabled", "value_type": "bool"}, + "ENCODER_DRIVER": {"info_key": "encoder.driver"}, "FIRMWARE_FORMAT": {"info_key": "build.firmware_format"}, "KEYBOARD_SHARED_EP": {"info_key": "usb.shared_endpoint.keyboard", "value_type": "bool"}, "LAYOUTS": {"info_key": "community_layouts", "value_type": "list"}, diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index d953079659..79668fe386 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -6,6 +6,10 @@ "encoder_config": { "type": "object", "properties": { + "driver": { + "type": "string", + "enum": ["quadrature", "custom"] + }, "rotary": { "type": "array", "items": { diff --git a/drivers/encoder/encoder_quadrature.c b/drivers/encoder/encoder_quadrature.c new file mode 100644 index 0000000000..cd589bf1e2 --- /dev/null +++ b/drivers/encoder/encoder_quadrature.c @@ -0,0 +1,213 @@ +// Copyright 2018 Jack Humbert +// Copyright 2018-2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include +#include "encoder.h" +#include "gpio.h" +#include "keyboard.h" +#include "action.h" +#include "keycodes.h" +#include "wait.h" + +#ifdef SPLIT_KEYBOARD +# include "split_util.h" +#endif + +// for memcpy +#include + +#if !defined(ENCODER_RESOLUTIONS) && !defined(ENCODER_RESOLUTION) +# define ENCODER_RESOLUTION 4 +#endif + +#undef ENCODER_DEFAULT_PIN_API_IMPL +#if defined(ENCODERS_PAD_A) && defined(ENCODERS_PAD_B) +// Inform the quadrature driver that it needs to implement pin init/read functions +# define ENCODER_DEFAULT_PIN_API_IMPL +#endif + +extern volatile bool isLeftHand; + +__attribute__((weak)) void encoder_quadrature_init_pin(uint8_t index, bool pad_b); +__attribute__((weak)) uint8_t encoder_quadrature_read_pin(uint8_t index, bool pad_b); + +#ifdef ENCODER_DEFAULT_PIN_API_IMPL + +static pin_t encoders_pad_a[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_A; +static pin_t encoders_pad_b[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_B; + +__attribute__((weak)) void encoder_wait_pullup_charge(void) { + wait_us(100); +} + +__attribute__((weak)) void encoder_quadrature_init_pin(uint8_t index, bool pad_b) { + pin_t pin = pad_b ? encoders_pad_b[index] : encoders_pad_a[index]; + if (pin != NO_PIN) { + gpio_set_pin_input_high(pin); + } +} + +__attribute__((weak)) uint8_t encoder_quadrature_read_pin(uint8_t index, bool pad_b) { + pin_t pin = pad_b ? encoders_pad_b[index] : encoders_pad_a[index]; + if (pin != NO_PIN) { + return gpio_read_pin(pin) ? 1 : 0; + } + return 0; +} + +#endif // ENCODER_DEFAULT_PIN_API_IMPL + +#ifdef ENCODER_RESOLUTIONS +static uint8_t encoder_resolutions[NUM_ENCODERS] = ENCODER_RESOLUTIONS; +#endif + +#ifndef ENCODER_DIRECTION_FLIP +# define ENCODER_CLOCKWISE true +# define ENCODER_COUNTER_CLOCKWISE false +#else +# define ENCODER_CLOCKWISE false +# define ENCODER_COUNTER_CLOCKWISE true +#endif +static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; + +static uint8_t encoder_state[NUM_ENCODERS] = {0}; +static int8_t encoder_pulses[NUM_ENCODERS] = {0}; + +// encoder counts +static uint8_t thisCount; +#ifdef SPLIT_KEYBOARD +// encoder offsets for each hand +static uint8_t thisHand, thatHand; +// encoder counts for each hand +static uint8_t thatCount; +#endif + +__attribute__((weak)) void encoder_quadrature_post_init_kb(void) { + extern void encoder_quadrature_handle_read(uint8_t index, uint8_t pin_a_state, uint8_t pin_b_state); + // Unused normally, but can be used for things like setting up pin-change interrupts in keyboard code. + // During the interrupt, read the pins then call `encoder_handle_read()` with the pin states and it'll queue up an encoder event if needed. +} + +void encoder_quadrature_post_init(void) { +#ifdef ENCODER_DEFAULT_PIN_API_IMPL + for (uint8_t i = 0; i < thisCount; i++) { + encoder_quadrature_init_pin(i, false); + encoder_quadrature_init_pin(i, true); + } + encoder_wait_pullup_charge(); + for (uint8_t i = 0; i < thisCount; i++) { + encoder_state[i] = (encoder_quadrature_read_pin(i, false) << 0) | (encoder_quadrature_read_pin(i, true) << 1); + } +#else + memset(encoder_state, 0, sizeof(encoder_state)); +#endif + + encoder_quadrature_post_init_kb(); +} + +void encoder_driver_init(void) { +#ifdef SPLIT_KEYBOARD + thisHand = isLeftHand ? 0 : NUM_ENCODERS_LEFT; + thatHand = NUM_ENCODERS_LEFT - thisHand; + thisCount = isLeftHand ? NUM_ENCODERS_LEFT : NUM_ENCODERS_RIGHT; + thatCount = isLeftHand ? NUM_ENCODERS_RIGHT : NUM_ENCODERS_LEFT; +#else // SPLIT_KEYBOARD + thisCount = NUM_ENCODERS; +#endif + +#ifdef ENCODER_TESTS + // Annoying that we have to clear out values during initialisation here, but + // because all the arrays are static locals, rerunning tests in the same + // executable doesn't reset any of these. Kinda crappy having test-only code + // here, but it's the simplest solution. + memset(encoder_state, 0, sizeof(encoder_state)); + memset(encoder_pulses, 0, sizeof(encoder_pulses)); + const pin_t encoders_pad_a_left[] = ENCODERS_PAD_A; + const pin_t encoders_pad_b_left[] = ENCODERS_PAD_B; + for (uint8_t i = 0; i < thisCount; i++) { + encoders_pad_a[i] = encoders_pad_a_left[i]; + encoders_pad_b[i] = encoders_pad_b_left[i]; + } +#endif + +#if defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT) + // Re-initialise the pads if it's the right-hand side + if (!isLeftHand) { + const pin_t encoders_pad_a_right[] = ENCODERS_PAD_A_RIGHT; + const pin_t encoders_pad_b_right[] = ENCODERS_PAD_B_RIGHT; + for (uint8_t i = 0; i < thisCount; i++) { + encoders_pad_a[i] = encoders_pad_a_right[i]; + encoders_pad_b[i] = encoders_pad_b_right[i]; + } + } +#endif // defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT) + + // Encoder resolutions is defined differently in config.h, so concatenate +#if defined(SPLIT_KEYBOARD) && defined(ENCODER_RESOLUTIONS) +# if defined(ENCODER_RESOLUTIONS_RIGHT) + static const uint8_t encoder_resolutions_right[NUM_ENCODERS_RIGHT] = ENCODER_RESOLUTIONS_RIGHT; +# else // defined(ENCODER_RESOLUTIONS_RIGHT) + static const uint8_t encoder_resolutions_right[NUM_ENCODERS_RIGHT] = ENCODER_RESOLUTIONS; +# endif // defined(ENCODER_RESOLUTIONS_RIGHT) + for (uint8_t i = 0; i < NUM_ENCODERS_RIGHT; i++) { + encoder_resolutions[NUM_ENCODERS_LEFT + i] = encoder_resolutions_right[i]; + } +#endif // defined(SPLIT_KEYBOARD) && defined(ENCODER_RESOLUTIONS) + + encoder_quadrature_post_init(); +} + +static void encoder_handle_state_change(uint8_t index, uint8_t state) { + uint8_t i = index; + +#ifdef SPLIT_KEYBOARD + index += thisHand; +#endif + +#ifdef ENCODER_RESOLUTIONS + const uint8_t resolution = encoder_resolutions[index]; +#else + const uint8_t resolution = ENCODER_RESOLUTION; +#endif + + encoder_pulses[i] += encoder_LUT[state & 0xF]; + +#ifdef ENCODER_DEFAULT_POS + if ((encoder_pulses[i] >= resolution) || (encoder_pulses[i] <= -resolution) || ((state & 0x3) == ENCODER_DEFAULT_POS)) { + if (encoder_pulses[i] >= 1) { +#else + if (encoder_pulses[i] >= resolution) { +#endif + + encoder_queue_event(index, ENCODER_COUNTER_CLOCKWISE); + } + +#ifdef ENCODER_DEFAULT_POS + if (encoder_pulses[i] <= -1) { +#else + if (encoder_pulses[i] <= -resolution) { // direction is arbitrary here, but this clockwise +#endif + encoder_queue_event(index, ENCODER_CLOCKWISE); + } + encoder_pulses[i] %= resolution; +#ifdef ENCODER_DEFAULT_POS + encoder_pulses[i] = 0; + } +#endif +} + +void encoder_quadrature_handle_read(uint8_t index, uint8_t pin_a_state, uint8_t pin_b_state) { + uint8_t state = pin_a_state | (pin_b_state << 1); + if ((encoder_state[index] & 0x3) != state) { + encoder_state[index] <<= 2; + encoder_state[index] |= state; + encoder_handle_state_change(index, encoder_state[index]); + } +} + +__attribute__((weak)) void encoder_driver_task(void) { + for (uint8_t i = 0; i < thisCount; i++) { + encoder_quadrature_handle_read(i, encoder_quadrature_read_pin(i, false), encoder_quadrature_read_pin(i, true)); + } +} diff --git a/keyboards/mechwild/sugarglider/matrix.c b/keyboards/mechwild/sugarglider/matrix.c index 96a16df542..c76a8345d3 100644 --- a/keyboards/mechwild/sugarglider/matrix.c +++ b/keyboards/mechwild/sugarglider/matrix.c @@ -50,7 +50,7 @@ static void select_row(uint8_t row) { //wait_us(100); return; } - + if (row > 1) { mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTB, ALL_INPUT); mcp23018_errors += !mcp23018_set_config(I2C_ADDR, mcp23018_PORTA, ~(row_pos[row])); @@ -87,8 +87,10 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) { bool changed = false; for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { changed |= read_cols_on_row(current_matrix, current_row); + #ifdef ENCODER_ENABLE - encoder_read(); + // Need to frequently read the encoder pins while scanning because the I/O expander takes a long time in comparison. + encoder_driver_task(); #endif } return changed; diff --git a/keyboards/pica40/rev2/post_rules.mk b/keyboards/pica40/rev2/post_rules.mk deleted file mode 100644 index e4dda1925b..0000000000 --- a/keyboards/pica40/rev2/post_rules.mk +++ /dev/null @@ -1,8 +0,0 @@ -# if ENCODER_ENABLE is set, add defines but avoid adding encoder.c as it's replaced by custom code in rev2.c -ifeq ($(strip $(ENCODER_ENABLE)), yes) - ENCODER_ENABLE := no - OPT_DEFS += -DENCODER_ENABLE - ifeq ($(strip $(ENCODER_MAP_ENABLE)), yes) - OPT_DEFS += -DENCODER_MAP_ENABLE - endif -endif diff --git a/keyboards/pica40/rev2/rev2.c b/keyboards/pica40/rev2/rev2.c index c585ec56d6..2ee73dcc6b 100644 --- a/keyboards/pica40/rev2/rev2.c +++ b/keyboards/pica40/rev2/rev2.c @@ -2,99 +2,29 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "rev2.h" +#include "gpio.h" #ifdef ENCODER_ENABLE // code based on encoder.c -static const pin_t encoders_pad_a[] = ENCODERS_PAD_A; -static const pin_t encoders_pad_b[] = ENCODERS_PAD_B; - -static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; -static uint8_t encoder_state = 3; -static int8_t encoder_pulses = 0; -static uint8_t encoder_value = 0; - -typedef struct encoder_sync_data { - int value; -} encoder_sync_data; +#define ENCODER_PIN_A (((pin_t[])ENCODERS_PAD_A)[0]) +#define ENCODER_PIN_B (((pin_t[])ENCODERS_PAD_B)[0]) // custom handler that returns encoder B pin status from slave side void encoder_sync_slave_handler(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) { - encoder_sync_data *data = (encoder_sync_data *)out_data; - data->value = readPin(encoders_pad_b[0]); -} - -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { - return true; + *(uint8_t *)out_data = readPin(ENCODER_PIN_B) ? 1 : 0; } -bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!encoder_update_user(index, clockwise)) return false; - - tap_code(clockwise ? KC_VOLU : KC_VOLD); +void encoder_quadrature_init_pin(uint8_t index, bool pad_b) {} - return false; -} - -#ifdef ENCODER_MAP_ENABLE -static void encoder_exec_mapping(uint8_t index, bool clockwise) { - action_exec(clockwise ? ENCODER_CW_EVENT(index, true) : ENCODER_CCW_EVENT(index, true)); - wait_ms(ENCODER_MAP_KEY_DELAY); - action_exec(clockwise ? ENCODER_CW_EVENT(index, false) : ENCODER_CCW_EVENT(index, false)); - wait_ms(ENCODER_MAP_KEY_DELAY); -} -#endif // ENCODER_MAP_ENABLE - -void encoder_init(void) { - setPinInputHigh(encoders_pad_a[0]); - setPinInputHigh(encoders_pad_b[0]); - wait_us(100); - transaction_register_rpc(ENCODER_SYNC, encoder_sync_slave_handler); -} - -bool encoder_read(void) { - // ignore if running on slave side - if (!is_keyboard_master()) return false; - - bool changed = false; - encoder_sync_data data = {0}; - // request pin B status from slave side - if (transaction_rpc_recv(ENCODER_SYNC, sizeof(data), &data)) { - uint8_t new_status = (readPin(encoders_pad_a[0]) << 0) | (data.value << 1); - if ((encoder_state & 0x3) != new_status) { - encoder_state <<= 2; - encoder_state |= new_status; - encoder_pulses += encoder_LUT[encoder_state & 0xF]; - - if (encoder_pulses >= ENCODER_RESOLUTION) { - encoder_value++; - changed = true; -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(0, false); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(0, false); -#endif // ENCODER_MAP_ENABLE - } - - if (encoder_pulses <= -ENCODER_RESOLUTION) { - encoder_value--; - changed = true; -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(0, true); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(0, true); -#endif // ENCODER_MAP_ENABLE - } - - encoder_pulses %= ENCODER_RESOLUTION; - } +uint8_t encoder_quadrature_read_pin(uint8_t index, bool pad_b) { + if(pad_b) { + uint8_t data = 0; + transaction_rpc_recv(ENCODER_SYNC, sizeof(data), &data); + return data; } - return changed; + return readPin(ENCODER_PIN_A) ? 1 : 0; } -// do not use standard split encoder transactions -void encoder_state_raw(uint8_t *slave_state) {} -void encoder_update_raw(uint8_t *slave_state) {} - #endif // ENCODER_ENABLE #ifdef PICA40_RGBLIGHT_TIMEOUT @@ -125,6 +55,12 @@ bool should_set_rgblight = false; void keyboard_post_init_kb(void) { setPinOutput(PICA40_RGB_POWER_PIN); +#ifdef ENCODER_ENABLE + setPinInputHigh(ENCODER_PIN_A); + setPinInputHigh(ENCODER_PIN_B); + transaction_register_rpc(ENCODER_SYNC, encoder_sync_slave_handler); +#endif // ENCODER_ENABLE + #ifdef PICA40_RGBLIGHT_TIMEOUT idle_timer = timer_read(); check_rgblight_timer = timer_read(); diff --git a/keyboards/planck/rev7/info.json b/keyboards/planck/rev7/info.json index 2275965ebd..d674af98d1 100644 --- a/keyboards/planck/rev7/info.json +++ b/keyboards/planck/rev7/info.json @@ -26,7 +26,14 @@ }, "encoder": { "rotary": [ - {"pin_a": "B12", "pin_b": "B13"} + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"}, + {"pin_a": "B12", "pin_b": "B13"} ] }, "features": { diff --git a/keyboards/planck/rev7/matrix.c b/keyboards/planck/rev7/matrix.c index c89c399a40..350ce93ce0 100644 --- a/keyboards/planck/rev7/matrix.c +++ b/keyboards/planck/rev7/matrix.c @@ -32,31 +32,16 @@ #define STM32_IWDG_RL_MS(s) STM32_IWDG_RL_US(s * 1000.0) #define STM32_IWDG_RL_S(s) STM32_IWDG_RL_US(s * 1000000.0) -#if !defined(PLANCK_ENCODER_RESOLUTION) -# define PLANCK_ENCODER_RESOLUTION 4 -#endif - #if !defined(PLANCK_WATCHDOG_TIMEOUT) # define PLANCK_WATCHDOG_TIMEOUT 1.0 #endif -#ifdef ENCODER_MAP_ENABLE -#error "The encoder map feature is not currently supported by the Planck's encoder matrix" -#endif - /* matrix state(1:on, 0:off) */ static pin_t matrix_row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS; static pin_t matrix_col_pins[MATRIX_COLS] = MATRIX_COL_PINS; static matrix_row_t matrix_inverted[MATRIX_COLS]; -#ifdef ENCODER_ENABLE -int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; -uint8_t encoder_state[8] = {0}; -int8_t encoder_pulses[8] = {0}; -uint8_t encoder_value[8] = {0}; -#endif - void matrix_init_custom(void) { // actual matrix setup - cols for (int i = 0; i < MATRIX_COLS; i++) { @@ -84,31 +69,6 @@ void matrix_init_custom(void) { #endif } -#ifdef ENCODER_ENABLE -bool encoder_update(uint8_t index, uint8_t state) { - bool changed = false; - uint8_t i = index; - - encoder_pulses[i] += encoder_LUT[state & 0xF]; - - if (encoder_pulses[i] >= PLANCK_ENCODER_RESOLUTION) { - encoder_value[index]++; - changed = true; - encoder_update_kb(index, false); - } - if (encoder_pulses[i] <= -PLANCK_ENCODER_RESOLUTION) { - encoder_value[index]--; - changed = true; - encoder_update_kb(index, true); - } - encoder_pulses[i] %= PLANCK_ENCODER_RESOLUTION; -#ifdef ENCODER_DEFAULT_POS - encoder_pulses[i] = 0; -#endif - return changed; -} -#endif - bool matrix_scan_custom(matrix_row_t current_matrix[]) { #ifndef PLANCK_WATCHDOG_DISABLE // reset watchdog @@ -149,40 +109,16 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) { changed |= old != current_matrix[row]; } -#ifdef ENCODER_ENABLE - // encoder-matrix functionality - - // set up C/rows for encoder read - for (int i = 0; i < MATRIX_ROWS; i++) { - setPinOutput(matrix_row_pins[i]); - writePinHigh(matrix_row_pins[i]); - } - - // set up A & B for reading - setPinInputHigh(B12); - setPinInputHigh(B13); - - for (int i = 0; i < MATRIX_ROWS; i++) { - writePinLow(matrix_row_pins[i]); - wait_us(10); - uint8_t new_status = (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1); - if ((encoder_state[i] & 0x3) != new_status) { - encoder_state[i] <<= 2; - encoder_state[i] |= new_status; - encoder_update(i, encoder_state[i]); - } - writePinHigh(matrix_row_pins[i]); - } - - // revert A & B to matrix state - setPinInputLow(B12); - setPinInputLow(B13); - - // revert C/rows to matrix state - for (int i = 0; i < MATRIX_ROWS; i++) { - setPinInputLow(matrix_row_pins[i]); - } -#endif - return changed; } + +uint8_t encoder_quadrature_read_pin(uint8_t index, bool pad_b) { + pin_t pin = pad_b ? B13: B12; + setPinInputHigh(pin); + writePinLow(matrix_row_pins[index]); + wait_us(10); + uint8_t ret = readPin(pin) ? 1 : 0; + setPinInputLow(matrix_row_pins[index]); + setPinInputLow(pin); + return ret; +} diff --git a/keyboards/ploopyco/mouse/config.h b/keyboards/ploopyco/mouse/config.h index 94bd6ef6af..86af11fc94 100644 --- a/keyboards/ploopyco/mouse/config.h +++ b/keyboards/ploopyco/mouse/config.h @@ -32,3 +32,6 @@ /* PMW33XX Settings */ #define PMW33XX_CS_PIN B0 + +/* Custom encoder needs to specify just how many encoders we have */ +#define NUM_ENCODERS 1 diff --git a/keyboards/ploopyco/mouse/info.json b/keyboards/ploopyco/mouse/info.json index 5dc53392ff..1f110aad71 100644 --- a/keyboards/ploopyco/mouse/info.json +++ b/keyboards/ploopyco/mouse/info.json @@ -31,6 +31,12 @@ ["D4", "D2", "E6", "B6", "D7", "C6", "C7", "B7"] ] }, + "features": { + "encoder": true + }, + "encoder": { + "driver": "custom" + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/ploopyco/mouse/mouse.c b/keyboards/ploopyco/mouse/mouse.c index e2dada4a15..5f4a82e474 100644 --- a/keyboards/ploopyco/mouse/mouse.c +++ b/keyboards/ploopyco/mouse/mouse.c @@ -66,8 +66,6 @@ uint8_t OptLowPin = OPT_ENC1; bool debug_encoder = false; bool is_drag_scroll = false; -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; @@ -83,7 +81,14 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void process_wheel(void) { +void encoder_driver_init(void) { + setPinInput(OPT_ENC1); + setPinInput(OPT_ENC2); + + opt_encoder_init(); +} + +void encoder_driver_task(void) { // Lovingly ripped from the Ploopy Source // If the mouse wheel was just released, do not scroll. @@ -111,12 +116,10 @@ void process_wheel(void) { int dir = opt_encoder_handler(p1, p2); if (dir == 0) return; - encoder_update_kb(0, dir > 0); + encoder_queue_event(0, dir == 1); } report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { - process_wheel(); - if (is_drag_scroll) { mouse_report.h = mouse_report.x; #ifdef PLOOPY_DRAGSCROLL_INVERT @@ -177,9 +180,6 @@ void keyboard_pre_init_kb(void) { // debug_mouse = true; // debug_encoder = true; - setPinInput(OPT_ENC1); - setPinInput(OPT_ENC2); - /* Ground all output pins connected to ground. This provides additional * pathways to ground. If you're messing with this, know this: driving ANY * of these pins high will cause a short. On the MCU. Ka-blooey. @@ -204,8 +204,6 @@ void keyboard_pre_init_kb(void) { void pointing_device_init_kb(void) { pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); - // initialize the scroll wheel's optical encoder - opt_encoder_init(); } void eeconfig_init_kb(void) { diff --git a/keyboards/ploopyco/mouse/rules.mk b/keyboards/ploopyco/mouse/rules.mk index 17df9cc3c9..6356950780 100644 --- a/keyboards/ploopyco/mouse/rules.mk +++ b/keyboards/ploopyco/mouse/rules.mk @@ -16,9 +16,6 @@ POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_DRIVER = pmw3360 MOUSEKEY_ENABLE = yes # Mouse keys -ENCODER_ENABLE := no -OPTS_DEF += -DENCODER_ENABLE - ANALOG_DRIVER_REQUIRED = yes SRC += opt_encoder.c diff --git a/keyboards/ploopyco/trackball/config.h b/keyboards/ploopyco/trackball/config.h index de0ed1ebec..a1f3695d81 100644 --- a/keyboards/ploopyco/trackball/config.h +++ b/keyboards/ploopyco/trackball/config.h @@ -31,3 +31,6 @@ /* PMW33XX Settings */ #define PMW33XX_CS_PIN B0 #define POINTING_DEVICE_INVERT_Y + +/* Custom encoder needs to specify just how many encoders we have */ +#define NUM_ENCODERS 1 diff --git a/keyboards/ploopyco/trackball/info.json b/keyboards/ploopyco/trackball/info.json index 2c30755aa1..110264ef1c 100644 --- a/keyboards/ploopyco/trackball/info.json +++ b/keyboards/ploopyco/trackball/info.json @@ -12,6 +12,12 @@ "bootmagic": { "matrix": [0, 3] }, + "features": { + "encoder": true + }, + "encoder": { + "driver": "custom" + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/ploopyco/trackball/rules.mk b/keyboards/ploopyco/trackball/rules.mk index ce7c4f29c8..ca1a8fd17a 100644 --- a/keyboards/ploopyco/trackball/rules.mk +++ b/keyboards/ploopyco/trackball/rules.mk @@ -16,9 +16,6 @@ POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_DRIVER = pmw3360 MOUSEKEY_ENABLE = yes # Mouse keys -ENCODER_ENABLE := no -OPTS_DEF += -DENCODER_ENABLE - ANALOG_DRIVER_REQUIRED = yes SRC += opt_encoder.c diff --git a/keyboards/ploopyco/trackball/trackball.c b/keyboards/ploopyco/trackball/trackball.c index 8fd5b8650d..0c606bab07 100644 --- a/keyboards/ploopyco/trackball/trackball.c +++ b/keyboards/ploopyco/trackball/trackball.c @@ -66,8 +66,6 @@ uint8_t OptLowPin = OPT_ENC1; bool debug_encoder = false; bool is_drag_scroll = false; -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; @@ -83,7 +81,15 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void process_wheel(void) { + +void encoder_driver_init(void) { + setPinInput(OPT_ENC1); + setPinInput(OPT_ENC2); + + opt_encoder_init(); +} + +void encoder_driver_task(void) { // TODO: Replace this with interrupt driven code, polling is S L O W // Lovingly ripped from the Ploopy Source @@ -112,11 +118,10 @@ void process_wheel(void) { int dir = opt_encoder_handler(p1, p2); if (dir == 0) return; - encoder_update_kb(0, dir > 0); + encoder_queue_event(0, dir == 1); } report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { - process_wheel(); if (is_drag_scroll) { #ifdef PLOOPY_DRAGSCROLL_H_INVERT @@ -189,9 +194,6 @@ void keyboard_pre_init_kb(void) { // debug_mouse = true; // debug_encoder = true; - setPinInput(OPT_ENC1); - setPinInput(OPT_ENC2); - /* Ground all output pins connected to ground. This provides additional * pathways to ground. If you're messing with this, know this: driving ANY * of these pins high will cause a short. On the MCU. Ka-blooey. @@ -216,8 +218,6 @@ void keyboard_pre_init_kb(void) { void pointing_device_init_kb(void) { pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); - // initialize the scroll wheel's optical encoder - opt_encoder_init(); } void eeconfig_init_kb(void) { diff --git a/keyboards/ploopyco/trackball_mini/config.h b/keyboards/ploopyco/trackball_mini/config.h index 789deb5a5f..6b92563fa9 100644 --- a/keyboards/ploopyco/trackball_mini/config.h +++ b/keyboards/ploopyco/trackball_mini/config.h @@ -32,3 +32,6 @@ #define ADNS5050_CS_PIN B4 #define POINTING_DEVICE_ROTATION_270 + +/* Custom encoder needs to specify just how many encoders we have */ +#define NUM_ENCODERS 1 diff --git a/keyboards/ploopyco/trackball_mini/info.json b/keyboards/ploopyco/trackball_mini/info.json index 301c8d18ec..0e7b12d20d 100644 --- a/keyboards/ploopyco/trackball_mini/info.json +++ b/keyboards/ploopyco/trackball_mini/info.json @@ -14,6 +14,12 @@ }, "processor": "atmega32u4", "bootloader": "atmel-dfu", + "features": { + "encoder": true + }, + "encoder": { + "driver": "custom" + }, "layouts": { "LAYOUT": { "layout": [ diff --git a/keyboards/ploopyco/trackball_mini/rules.mk b/keyboards/ploopyco/trackball_mini/rules.mk index bcede0676c..d2bacc3974 100644 --- a/keyboards/ploopyco/trackball_mini/rules.mk +++ b/keyboards/ploopyco/trackball_mini/rules.mk @@ -13,9 +13,6 @@ POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_DRIVER = adns5050 MOUSEKEY_ENABLE = yes # Mouse keys -ENCODER_ENABLE := no -OPTS_DEF += -DENCODER_ENABLE - ANALOG_DRIVER_REQUIRED = yes SRC += opt_encoder.c diff --git a/keyboards/ploopyco/trackball_mini/trackball_mini.c b/keyboards/ploopyco/trackball_mini/trackball_mini.c index 8bc0ab99c2..8517a54e70 100644 --- a/keyboards/ploopyco/trackball_mini/trackball_mini.c +++ b/keyboards/ploopyco/trackball_mini/trackball_mini.c @@ -74,8 +74,6 @@ uint8_t OptLowPin = OPT_ENC1; bool debug_encoder = false; bool is_drag_scroll = false; -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; @@ -91,7 +89,14 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void process_wheel(void) { +void encoder_driver_init(void) { + setPinInput(OPT_ENC1); + setPinInput(OPT_ENC2); + + opt_encoder_init(); +} + +void encoder_driver_task(void) { uint16_t p1 = adc_read(OPT_ENC1_MUX); uint16_t p2 = adc_read(OPT_ENC2_MUX); @@ -113,21 +118,17 @@ void process_wheel(void) { } if (dir == 0) return; - encoder_update_kb(0, dir > 0); + encoder_queue_event(0, dir == 1); lastScroll = timer_read(); } void pointing_device_init_kb(void) { - opt_encoder_init(); - // set the DPI. pointing_device_set_cpi(dpi_array[keyboard_config.dpi_config]); } report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { - process_wheel(); - if (is_drag_scroll) { mouse_report.h = mouse_report.x; #ifdef PLOOPY_DRAGSCROLL_INVERT @@ -180,9 +181,6 @@ void keyboard_pre_init_kb(void) { // debug_mouse = true; // debug_encoder = true; - setPinInput(OPT_ENC1); - setPinInput(OPT_ENC2); - /* Ground all output pins connected to ground. This provides additional * pathways to ground. If you're messing with this, know this: driving ANY * of these pins high will cause a short. On the MCU. Ka-blooey. diff --git a/keyboards/ploopyco/trackball_thumb/config.h b/keyboards/ploopyco/trackball_thumb/config.h index 8fc084c38c..316755f686 100644 --- a/keyboards/ploopyco/trackball_thumb/config.h +++ b/keyboards/ploopyco/trackball_thumb/config.h @@ -31,3 +31,6 @@ /* PMW3360 Settings */ #define POINTING_DEVICE_CS_PIN B0 + +/* Custom encoder needs to specify just how many encoders we have */ +#define NUM_ENCODERS 1 diff --git a/keyboards/ploopyco/trackball_thumb/info.json b/keyboards/ploopyco/trackball_thumb/info.json index 72e236a5bb..e27bf47252 100644 --- a/keyboards/ploopyco/trackball_thumb/info.json +++ b/keyboards/ploopyco/trackball_thumb/info.json @@ -18,7 +18,10 @@ "mousekey": true, "nkro": true, "pointing_device": true, - "encoder": false + "encoder": true + }, + "encoder": { + "driver": "custom" }, "layouts": { "LAYOUT": { diff --git a/keyboards/ploopyco/trackball_thumb/post_rules.mk b/keyboards/ploopyco/trackball_thumb/post_rules.mk deleted file mode 100644 index d922afd9cd..0000000000 --- a/keyboards/ploopyco/trackball_thumb/post_rules.mk +++ /dev/null @@ -1,4 +0,0 @@ -# Force encoder to be disabled -# But enable the defines for it -ENCODER_ENABLE := no -OPT_DEFS += -DENCODER_ENABLE diff --git a/keyboards/ploopyco/trackball_thumb/trackball_thumb.c b/keyboards/ploopyco/trackball_thumb/trackball_thumb.c index bbc782da45..326410cf13 100644 --- a/keyboards/ploopyco/trackball_thumb/trackball_thumb.c +++ b/keyboards/ploopyco/trackball_thumb/trackball_thumb.c @@ -17,6 +17,7 @@ */ #include "trackball_thumb.h" +#include "encoder.h" #ifndef OPT_DEBOUNCE # define OPT_DEBOUNCE 5 // (ms) Time between scroll events @@ -57,9 +58,6 @@ uint16_t last_mid_click = 0; // Stops scrollwheel from being read if it was bool debug_encoder = false; bool is_drag_scroll = false; -// require, since core encoder.c (where is is normally defined isn't present -__attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; } - bool encoder_update_kb(uint8_t index, bool clockwise) { if (!encoder_update_user(index, clockwise)) { return false; @@ -75,25 +73,25 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { return true; } -void encoder_init(void) { opt_encoder_init(); } +void encoder_driver_init(void) { opt_encoder_init(); } -bool encoder_read(void) { +void encoder_driver_task(void) { // Lovingly ripped from the Ploopy Source // If the mouse wheel was just released, do not scroll. if (timer_elapsed(last_mid_click) < SCROLL_BUTT_DEBOUNCE) { - return false; + return; } // Limit the number of scrolls per unit time. if (timer_elapsed(last_scroll) < OPT_DEBOUNCE) { - return false; + return; } // Don't scroll if the middle button is depressed. if (is_scroll_clicked) { #ifndef IGNORE_SCROLL_CLICK - return false; + return; #endif } @@ -104,10 +102,8 @@ bool encoder_read(void) { int dir = opt_encoder_handler(p1, p2); - if (dir == 0) return false; - ; - encoder_update_kb(0, dir == 1); - return true; + if (dir == 0) return; + encoder_queue_event(0, dir == 1); } report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { diff --git a/keyboards/ploopyco/trackball_thumb/trackball_thumb.h b/keyboards/ploopyco/trackball_thumb/trackball_thumb.h index 8ee17634f1..50a71601cf 100644 --- a/keyboards/ploopyco/trackball_thumb/trackball_thumb.h +++ b/keyboards/ploopyco/trackball_thumb/trackball_thumb.h @@ -28,9 +28,6 @@ #define OPT_ENC1_MUX 4 #define OPT_ENC2_MUX 0 -bool encoder_update_kb(uint8_t index, bool clockwise); -bool encoder_update_user(uint8_t index, bool clockwise); - typedef union { uint32_t raw; struct { diff --git a/quantum/encoder.c b/quantum/encoder.c index efb780c474..735eb1cd71 100644 --- a/quantum/encoder.c +++ b/quantum/encoder.c @@ -1,81 +1,110 @@ -/* - * Copyright 2018 Jack Humbert - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// Copyright 2022-2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later -#include "encoder.h" -#include "keyboard.h" +#include #include "action.h" -#include "keycodes.h" +#include "encoder.h" #include "wait.h" -#ifdef SPLIT_KEYBOARD -# include "split_util.h" -#endif - -// for memcpy -#include - #ifndef ENCODER_MAP_KEY_DELAY -# include "action.h" # define ENCODER_MAP_KEY_DELAY TAP_CODE_DELAY #endif -#if !defined(ENCODER_RESOLUTIONS) && !defined(ENCODER_RESOLUTION) -# define ENCODER_RESOLUTION 4 -#endif +__attribute__((weak)) bool should_process_encoder(void) { + return is_keyboard_master(); +} -#if !defined(ENCODERS_PAD_A) || !defined(ENCODERS_PAD_B) -# error "No encoder pads defined by ENCODERS_PAD_A and ENCODERS_PAD_B" -#endif +static encoder_events_t encoder_events; + +void encoder_init(void) { + memset(&encoder_events, 0, sizeof(encoder_events)); + encoder_driver_init(); +} -extern volatile bool isLeftHand; +static bool encoder_handle_queue(void) { + bool changed = false; + while (encoder_events.tail != encoder_events.head) { + encoder_event_t event = encoder_events.queue[encoder_events.tail]; + encoder_events.tail = (encoder_events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; -static pin_t encoders_pad_a[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_A; -static pin_t encoders_pad_b[NUM_ENCODERS_MAX_PER_SIDE] = ENCODERS_PAD_B; +#ifdef ENCODER_MAP_ENABLE -#ifdef ENCODER_RESOLUTIONS -static uint8_t encoder_resolutions[NUM_ENCODERS] = ENCODER_RESOLUTIONS; -#endif + // The delays below cater for Windows and its wonderful requirements. + action_exec(event.clockwise ? MAKE_ENCODER_CW_EVENT(event.index, true) : MAKE_ENCODER_CCW_EVENT(event.index, true)); +# if ENCODER_MAP_KEY_DELAY > 0 + wait_ms(ENCODER_MAP_KEY_DELAY); +# endif // ENCODER_MAP_KEY_DELAY > 0 -#ifndef ENCODER_DIRECTION_FLIP -# define ENCODER_CLOCKWISE true -# define ENCODER_COUNTER_CLOCKWISE false -#else -# define ENCODER_CLOCKWISE false -# define ENCODER_COUNTER_CLOCKWISE true -#endif -static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; + action_exec(event.clockwise ? MAKE_ENCODER_CW_EVENT(event.index, false) : MAKE_ENCODER_CCW_EVENT(event.index, false)); +# if ENCODER_MAP_KEY_DELAY > 0 + wait_ms(ENCODER_MAP_KEY_DELAY); +# endif // ENCODER_MAP_KEY_DELAY > 0 + +#else // ENCODER_MAP_ENABLE + + encoder_update_kb(event.index, event.clockwise ? true : false); + +#endif // ENCODER_MAP_ENABLE + + changed = true; + } + return changed; +} -static uint8_t encoder_state[NUM_ENCODERS] = {0}; -static int8_t encoder_pulses[NUM_ENCODERS] = {0}; +bool encoder_task(void) { + bool changed = false; -// encoder counts -static uint8_t thisCount; #ifdef SPLIT_KEYBOARD -// encoder offsets for each hand -static uint8_t thisHand, thatHand; -// encoder counts for each hand -static uint8_t thatCount; -#endif + // Attempt to process existing encoder events in case split handling has already enqueued events + if (should_process_encoder()) { + changed |= encoder_handle_queue(); + } +#endif // SPLIT_KEYBOARD + + // Let the encoder driver produce events + encoder_driver_task(); + + // Process any events that were enqueued + if (should_process_encoder()) { + changed |= encoder_handle_queue(); + } + + return changed; +} + +bool encoder_queue_event(uint8_t index, bool clockwise) { + // Drop out if we're full + if ((encoder_events.head + 1) % MAX_QUEUED_ENCODER_EVENTS == encoder_events.tail) { + return false; + } + + // Append the event + encoder_event_t new_event = {.index = index, .clockwise = clockwise ? 1 : 0}; + encoder_events.queue[encoder_events.head] = new_event; + + // Increment the head index + encoder_events.head = (encoder_events.head + 1) % MAX_QUEUED_ENCODER_EVENTS; + + return true; +} + +void encoder_retrieve_events(encoder_events_t *events) { + memcpy(events, &encoder_events, sizeof(encoder_events)); +} -static uint8_t encoder_value[NUM_ENCODERS] = {0}; +#ifdef SPLIT_KEYBOARD +void encoder_set_tail_index(uint8_t tail_index) { + encoder_events.tail = tail_index; +} -__attribute__((weak)) void encoder_wait_pullup_charge(void) { - wait_us(100); +void encoder_handle_slave_events(encoder_events_t *events) { + while (events->tail != events->head) { + encoder_event_t event = events->queue[events->tail]; + events->tail = (events->tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + encoder_queue_event(event.index, event.clockwise ? true : false); + } } +#endif // SPLIT_KEYBOARD __attribute__((weak)) bool encoder_update_user(uint8_t index, bool clockwise) { return true; @@ -106,192 +135,3 @@ __attribute__((weak)) bool encoder_update_kb(uint8_t index, bool clockwise) { #endif // ENCODER_TESTS return res; } - -__attribute__((weak)) bool should_process_encoder(void) { - return is_keyboard_master(); -} - -void encoder_init(void) { -#ifdef SPLIT_KEYBOARD - thisHand = isLeftHand ? 0 : NUM_ENCODERS_LEFT; - thatHand = NUM_ENCODERS_LEFT - thisHand; - thisCount = isLeftHand ? NUM_ENCODERS_LEFT : NUM_ENCODERS_RIGHT; - thatCount = isLeftHand ? NUM_ENCODERS_RIGHT : NUM_ENCODERS_LEFT; -#else // SPLIT_KEYBOARD - thisCount = NUM_ENCODERS; -#endif - -#ifdef ENCODER_TESTS - // Annoying that we have to clear out values during initialisation here, but - // because all the arrays are static locals, rerunning tests in the same - // executable doesn't reset any of these. Kinda crappy having test-only code - // here, but it's the simplest solution. - memset(encoder_value, 0, sizeof(encoder_value)); - memset(encoder_state, 0, sizeof(encoder_state)); - memset(encoder_pulses, 0, sizeof(encoder_pulses)); - static const pin_t encoders_pad_a_left[] = ENCODERS_PAD_A; - static const pin_t encoders_pad_b_left[] = ENCODERS_PAD_B; - for (uint8_t i = 0; i < thisCount; i++) { - encoders_pad_a[i] = encoders_pad_a_left[i]; - encoders_pad_b[i] = encoders_pad_b_left[i]; - } -#endif - -#if defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT) - // Re-initialise the pads if it's the right-hand side - if (!isLeftHand) { - static const pin_t encoders_pad_a_right[] = ENCODERS_PAD_A_RIGHT; - static const pin_t encoders_pad_b_right[] = ENCODERS_PAD_B_RIGHT; - for (uint8_t i = 0; i < thisCount; i++) { - encoders_pad_a[i] = encoders_pad_a_right[i]; - encoders_pad_b[i] = encoders_pad_b_right[i]; - } - } -#endif // defined(SPLIT_KEYBOARD) && defined(ENCODERS_PAD_A_RIGHT) && defined(ENCODERS_PAD_B_RIGHT) - - // Encoder resolutions is handled purely master-side, so concatenate the two arrays -#if defined(SPLIT_KEYBOARD) && defined(ENCODER_RESOLUTIONS) -# if defined(ENCODER_RESOLUTIONS_RIGHT) - static const uint8_t encoder_resolutions_right[NUM_ENCODERS_RIGHT] = ENCODER_RESOLUTIONS_RIGHT; -# else // defined(ENCODER_RESOLUTIONS_RIGHT) - static const uint8_t encoder_resolutions_right[NUM_ENCODERS_RIGHT] = ENCODER_RESOLUTIONS; -# endif // defined(ENCODER_RESOLUTIONS_RIGHT) - for (uint8_t i = 0; i < NUM_ENCODERS_RIGHT; i++) { - encoder_resolutions[NUM_ENCODERS_LEFT + i] = encoder_resolutions_right[i]; - } -#endif // defined(SPLIT_KEYBOARD) && defined(ENCODER_RESOLUTIONS) - - for (uint8_t i = 0; i < thisCount; i++) { - gpio_set_pin_input_high(encoders_pad_a[i]); - gpio_set_pin_input_high(encoders_pad_b[i]); - } - encoder_wait_pullup_charge(); - for (uint8_t i = 0; i < thisCount; i++) { - encoder_state[i] = (gpio_read_pin(encoders_pad_a[i]) << 0) | (gpio_read_pin(encoders_pad_b[i]) << 1); - } -} - -#ifdef ENCODER_MAP_ENABLE -static void encoder_exec_mapping(uint8_t index, bool clockwise) { - // The delays below cater for Windows and its wonderful requirements. - action_exec(clockwise ? MAKE_ENCODER_CW_EVENT(index, true) : MAKE_ENCODER_CCW_EVENT(index, true)); -# if ENCODER_MAP_KEY_DELAY > 0 - wait_ms(ENCODER_MAP_KEY_DELAY); -# endif // ENCODER_MAP_KEY_DELAY > 0 - - action_exec(clockwise ? MAKE_ENCODER_CW_EVENT(index, false) : MAKE_ENCODER_CCW_EVENT(index, false)); -# if ENCODER_MAP_KEY_DELAY > 0 - wait_ms(ENCODER_MAP_KEY_DELAY); -# endif // ENCODER_MAP_KEY_DELAY > 0 -} -#endif // ENCODER_MAP_ENABLE - -static bool encoder_update(uint8_t index, uint8_t state) { - bool changed = false; - uint8_t i = index; - -#ifdef ENCODER_RESOLUTIONS - const uint8_t resolution = encoder_resolutions[i]; -#else - const uint8_t resolution = ENCODER_RESOLUTION; -#endif - -#ifdef SPLIT_KEYBOARD - index += thisHand; -#endif - encoder_pulses[i] += encoder_LUT[state & 0xF]; - -#ifdef ENCODER_DEFAULT_POS - if ((encoder_pulses[i] >= resolution) || (encoder_pulses[i] <= -resolution) || ((state & 0x3) == ENCODER_DEFAULT_POS)) { - if (encoder_pulses[i] >= 1) { -#else - if (encoder_pulses[i] >= resolution) { -#endif - - encoder_value[index]++; - changed = true; -#ifdef SPLIT_KEYBOARD - if (should_process_encoder()) -#endif // SPLIT_KEYBOARD -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_COUNTER_CLOCKWISE); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE); -#endif // ENCODER_MAP_ENABLE - } - -#ifdef ENCODER_DEFAULT_POS - if (encoder_pulses[i] <= -1) { -#else - if (encoder_pulses[i] <= -resolution) { // direction is arbitrary here, but this clockwise -#endif - encoder_value[index]--; - changed = true; -#ifdef SPLIT_KEYBOARD - if (should_process_encoder()) -#endif // SPLIT_KEYBOARD -#ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_CLOCKWISE); -#else // ENCODER_MAP_ENABLE - encoder_update_kb(index, ENCODER_CLOCKWISE); -#endif // ENCODER_MAP_ENABLE - } - encoder_pulses[i] %= resolution; -#ifdef ENCODER_DEFAULT_POS - encoder_pulses[i] = 0; - } -#endif - return changed; -} - -bool encoder_read(void) { - bool changed = false; - for (uint8_t i = 0; i < thisCount; i++) { - uint8_t new_status = (gpio_read_pin(encoders_pad_a[i]) << 0) | (gpio_read_pin(encoders_pad_b[i]) << 1); - if ((encoder_state[i] & 0x3) != new_status) { - encoder_state[i] <<= 2; - encoder_state[i] |= new_status; - changed |= encoder_update(i, encoder_state[i]); - } - } - return changed; -} - -#ifdef SPLIT_KEYBOARD -void last_encoder_activity_trigger(void); - -void encoder_state_raw(uint8_t *slave_state) { - memcpy(slave_state, &encoder_value[thisHand], sizeof(uint8_t) * thisCount); -} - -void encoder_update_raw(uint8_t *slave_state) { - bool changed = false; - for (uint8_t i = 0; i < thatCount; i++) { // Note inverted logic -- we want the opposite side - const uint8_t index = i + thatHand; - int8_t delta = slave_state[i] - encoder_value[index]; - while (delta > 0) { - delta--; - encoder_value[index]++; - changed = true; -# ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_COUNTER_CLOCKWISE); -# else // ENCODER_MAP_ENABLE - encoder_update_kb(index, ENCODER_COUNTER_CLOCKWISE); -# endif // ENCODER_MAP_ENABLE - } - while (delta < 0) { - delta++; - encoder_value[index]--; - changed = true; -# ifdef ENCODER_MAP_ENABLE - encoder_exec_mapping(index, ENCODER_CLOCKWISE); -# else // ENCODER_MAP_ENABLE - encoder_update_kb(index, ENCODER_CLOCKWISE); -# endif // ENCODER_MAP_ENABLE - } - } - - // Update the last encoder input time -- handled external to encoder_read() when we're running a split - if (changed) last_encoder_activity_trigger(); -} -#endif diff --git a/quantum/encoder.h b/quantum/encoder.h index 1cbac98cb5..90414a43a0 100644 --- a/quantum/encoder.h +++ b/quantum/encoder.h @@ -22,45 +22,88 @@ #include "gpio.h" #include "util.h" +#ifdef ENCODER_ENABLE + +__attribute__((weak)) bool should_process_encoder(void); + void encoder_init(void); -bool encoder_read(void); +bool encoder_task(void); +bool encoder_queue_event(uint8_t index, bool clockwise); bool encoder_update_kb(uint8_t index, bool clockwise); bool encoder_update_user(uint8_t index, bool clockwise); -#ifdef SPLIT_KEYBOARD +# ifdef SPLIT_KEYBOARD + +# if defined(ENCODERS_PAD_A_RIGHT) +# ifndef NUM_ENCODERS_LEFT +# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) +# endif +# ifndef NUM_ENCODERS_RIGHT +# define NUM_ENCODERS_RIGHT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A_RIGHT)) +# endif +# else +# ifndef NUM_ENCODERS_LEFT +# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) +# endif +# ifndef NUM_ENCODERS_RIGHT +# define NUM_ENCODERS_RIGHT NUM_ENCODERS_LEFT +# endif +# endif +# ifndef NUM_ENCODERS +# define NUM_ENCODERS (NUM_ENCODERS_LEFT + NUM_ENCODERS_RIGHT) +# endif + +# else // SPLIT_KEYBOARD -void encoder_state_raw(uint8_t* slave_state); -void encoder_update_raw(uint8_t* slave_state); +# ifndef NUM_ENCODERS +# define NUM_ENCODERS ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) +# endif +# define NUM_ENCODERS_LEFT NUM_ENCODERS +# define NUM_ENCODERS_RIGHT 0 -# if defined(ENCODERS_PAD_A_RIGHT) -# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) -# define NUM_ENCODERS_RIGHT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A_RIGHT)) -# else -# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) -# define NUM_ENCODERS_RIGHT NUM_ENCODERS_LEFT -# endif -# define NUM_ENCODERS (NUM_ENCODERS_LEFT + NUM_ENCODERS_RIGHT) +# endif // SPLIT_KEYBOARD -#else // SPLIT_KEYBOARD +# ifndef NUM_ENCODERS +# define NUM_ENCODERS 0 +# define NUM_ENCODERS_LEFT 0 +# define NUM_ENCODERS_RIGHT 0 +# endif // NUM_ENCODERS -# define NUM_ENCODERS ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A)) -# define NUM_ENCODERS_LEFT NUM_ENCODERS -# define NUM_ENCODERS_RIGHT 0 +# define NUM_ENCODERS_MAX_PER_SIDE MAX(NUM_ENCODERS_LEFT, NUM_ENCODERS_RIGHT) -#endif // SPLIT_KEYBOARD +# ifndef MAX_QUEUED_ENCODER_EVENTS +# define MAX_QUEUED_ENCODER_EVENTS MAX(4, ((NUM_ENCODERS_MAX_PER_SIDE) + 1)) +# endif // MAX_QUEUED_ENCODER_EVENTS -#ifndef NUM_ENCODERS -# define NUM_ENCODERS 0 -# define NUM_ENCODERS_LEFT 0 -# define NUM_ENCODERS_RIGHT 0 -#endif // NUM_ENCODERS +typedef struct encoder_event_t { + uint8_t index : 7; + uint8_t clockwise : 1; +} encoder_event_t; -#define NUM_ENCODERS_MAX_PER_SIDE MAX(NUM_ENCODERS_LEFT, NUM_ENCODERS_RIGHT) +typedef struct encoder_events_t { + uint8_t head; + uint8_t tail; + encoder_event_t queue[MAX_QUEUED_ENCODER_EVENTS]; +} encoder_events_t; -#ifdef ENCODER_MAP_ENABLE -# define NUM_DIRECTIONS 2 -# define ENCODER_CCW_CW(ccw, cw) \ - { (cw), (ccw) } +// Get the current queued events +void encoder_retrieve_events(encoder_events_t *events); + +# ifdef SPLIT_KEYBOARD +void encoder_set_tail_index(uint8_t tail_index); +void encoder_handle_slave_events(encoder_events_t *events); +# endif // SPLIT_KEYBOARD + +# ifdef ENCODER_MAP_ENABLE +# define NUM_DIRECTIONS 2 +# define ENCODER_CCW_CW(ccw, cw) \ + { (cw), (ccw) } extern const uint16_t encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS]; -#endif // ENCODER_MAP_ENABLE +# endif // ENCODER_MAP_ENABLE + +// "Custom encoder lite" support +void encoder_driver_init(void); +void encoder_driver_task(void); + +#endif // ENCODER_ENABLE diff --git a/quantum/encoder/tests/config_encoder_common.h b/quantum/encoder/tests/config_encoder_common.h new file mode 100644 index 0000000000..6b3b20182b --- /dev/null +++ b/quantum/encoder/tests/config_encoder_common.h @@ -0,0 +1,6 @@ +// Copyright 2023 Nick Brassel (@tzarc) +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +// Override the one in quantum/util because it doesn't like working on x64 builds. +#define ARRAY_SIZE(array) (sizeof((array)) / sizeof((array)[0])) diff --git a/quantum/encoder/tests/config_mock.h b/quantum/encoder/tests/config_mock.h index 703dcaf103..9eb59ddc88 100644 --- a/quantum/encoder/tests/config_mock.h +++ b/quantum/encoder/tests/config_mock.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_left_eq_right.h b/quantum/encoder/tests/config_mock_split_left_eq_right.h index c80ac4d519..ea795657ef 100644 --- a/quantum/encoder/tests/config_mock_split_left_eq_right.h +++ b/quantum/encoder/tests/config_mock_split_left_eq_right.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_left_gt_right.h b/quantum/encoder/tests/config_mock_split_left_gt_right.h index 91d5f3d605..abcfe03918 100644 --- a/quantum/encoder/tests/config_mock_split_left_gt_right.h +++ b/quantum/encoder/tests/config_mock_split_left_gt_right.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_left_lt_right.h b/quantum/encoder/tests/config_mock_split_left_lt_right.h index 4108a184a6..075c774b0d 100644 --- a/quantum/encoder/tests/config_mock_split_left_lt_right.h +++ b/quantum/encoder/tests/config_mock_split_left_lt_right.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_no_left.h b/quantum/encoder/tests/config_mock_split_no_left.h index 9db7fa7e41..dfd8358929 100644 --- a/quantum/encoder/tests/config_mock_split_no_left.h +++ b/quantum/encoder/tests/config_mock_split_no_left.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_no_right.h b/quantum/encoder/tests/config_mock_split_no_right.h index 14f18015e6..5683eade8c 100644 --- a/quantum/encoder/tests/config_mock_split_no_right.h +++ b/quantum/encoder/tests/config_mock_split_no_right.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/config_mock_split_role.h b/quantum/encoder/tests/config_mock_split_role.h index c80ac4d519..ea795657ef 100644 --- a/quantum/encoder/tests/config_mock_split_role.h +++ b/quantum/encoder/tests/config_mock_split_role.h @@ -1,6 +1,7 @@ -// Copyright 2022 Nick Brassel (@tzarc) +// Copyright 2022-2023 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once +#include "config_encoder_common.h" #define MATRIX_ROWS 1 #define MATRIX_COLS 1 diff --git a/quantum/encoder/tests/encoder_tests.cpp b/quantum/encoder/tests/encoder_tests.cpp index b7c18aeec0..499e413aed 100644 --- a/quantum/encoder/tests/encoder_tests.cpp +++ b/quantum/encoder/tests/encoder_tests.cpp @@ -41,7 +41,7 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderTest : public ::testing::Test {}; diff --git a/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp index 916e47b185..7d6b3e30e6 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_eq_right.cpp @@ -33,22 +33,29 @@ struct update { uint8_t updates_array_idx = 0; update updates[32]; +bool isMaster; bool isLeftHand; +extern "C" { +bool is_keyboard_master(void) { + return isMaster; +} + bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!isLeftHand) { + if (!is_keyboard_master()) { // this method has no effect on slave half - printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC"); + printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC"); return true; } updates[updates_array_idx % 32] = {index, clockwise}; updates_array_idx++; return true; } +}; bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestLeftEqRight : public ::testing::Test { @@ -63,6 +70,7 @@ class EncoderSplitTestLeftEqRight : public ::testing::Test { }; TEST_F(EncoderSplitTestLeftEqRight, TestInitLeft) { + isMaster = true; isLeftHand = true; encoder_init(); EXPECT_EQ(pinIsInputHigh[0], true); @@ -77,6 +85,7 @@ TEST_F(EncoderSplitTestLeftEqRight, TestInitLeft) { } TEST_F(EncoderSplitTestLeftEqRight, TestInitRight) { + isMaster = true; isLeftHand = false; encoder_init(); EXPECT_EQ(pinIsInputHigh[0], false); @@ -90,7 +99,8 @@ TEST_F(EncoderSplitTestLeftEqRight, TestInitRight) { EXPECT_EQ(updates_array_idx, 0); // no updates received } -TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseLeft) { +TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseLeftMaster) { + isMaster = true; isLeftHand = true; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -102,9 +112,19 @@ TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseLeft) { EXPECT_EQ(updates_array_idx, 1); // one update received EXPECT_EQ(updates[0].index, 0); EXPECT_EQ(updates[0].clockwise, true); + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseRightSent) { +TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseRightMaster) { + isMaster = true; isLeftHand = false; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -113,23 +133,60 @@ TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseRightSent) { setAndRead(6, true); setAndRead(7, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); + EXPECT_EQ(updates_array_idx, 1); // one update received + EXPECT_EQ(updates[0].index, 3); + EXPECT_EQ(updates[0].clockwise, true); - EXPECT_EQ(slave_state[0], 0); - EXPECT_EQ(slave_state[1], 0xFF); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftEqRight, TestMultipleEncodersRightReceived) { +TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseLeftSlave) { + isMaster = false; isLeftHand = true; encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(0, false); + setAndRead(1, false); + setAndRead(0, true); + setAndRead(1, true); - uint8_t slave_state[32] = {1, 0xFF}; // First right encoder is CCW, Second right encoder CW - encoder_update_raw(slave_state); + EXPECT_EQ(updates_array_idx, 0); // no updates received - EXPECT_EQ(updates_array_idx, 2); // two updates received, one for each changed item on the right side - EXPECT_EQ(updates[0].index, 2); - EXPECT_EQ(updates[0].clockwise, false); - EXPECT_EQ(updates[1].index, 3); - EXPECT_EQ(updates[1].clockwise, true); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave +} + +TEST_F(EncoderSplitTestLeftEqRight, TestOneClockwiseRightSlave) { + isMaster = false; + isLeftHand = false; + encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(6, false); + setAndRead(7, false); + setAndRead(6, true); + setAndRead(7, true); + + EXPECT_EQ(updates_array_idx, 0); // no updates received + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave } diff --git a/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp index 7b64bb2981..2beb4e3972 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_gt_right.cpp @@ -33,22 +33,29 @@ struct update { uint8_t updates_array_idx = 0; update updates[32]; +bool isMaster; bool isLeftHand; +extern "C" { +bool is_keyboard_master(void) { + return isMaster; +} + bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!isLeftHand) { + if (!is_keyboard_master()) { // this method has no effect on slave half - printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC"); + printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC"); return true; } updates[updates_array_idx % 32] = {index, clockwise}; updates_array_idx++; return true; } +}; bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestLeftGreaterThanRight : public ::testing::Test { @@ -94,7 +101,8 @@ TEST_F(EncoderSplitTestLeftGreaterThanRight, TestInitRight) { EXPECT_EQ(updates_array_idx, 0); // no updates received } -TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseLeft) { +TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseLeftMaster) { + isMaster = true; isLeftHand = true; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -106,9 +114,19 @@ TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseLeft) { EXPECT_EQ(updates_array_idx, 1); // one update received EXPECT_EQ(updates[0].index, 0); EXPECT_EQ(updates[0].clockwise, true); + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseRightSent) { +TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseRightMaster) { + isMaster = true; isLeftHand = false; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -117,23 +135,60 @@ TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseRightSent) { setAndRead(6, true); setAndRead(7, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); + EXPECT_EQ(updates_array_idx, 1); // one update received + EXPECT_EQ(updates[0].index, 3); + EXPECT_EQ(updates[0].clockwise, true); - EXPECT_EQ(slave_state[0], 0xFF); - EXPECT_EQ(slave_state[1], 0); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftGreaterThanRight, TestMultipleEncodersRightReceived) { +TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseLeftSlave) { + isMaster = false; isLeftHand = true; encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(0, false); + setAndRead(1, false); + setAndRead(0, true); + setAndRead(1, true); - uint8_t slave_state[32] = {1, 0xFF}; // First right encoder is CCW, Second right encoder no change, third right encoder CW - encoder_update_raw(slave_state); + EXPECT_EQ(updates_array_idx, 0); // no updates received - EXPECT_EQ(updates_array_idx, 2); // two updates received, one for each changed item on the right side - EXPECT_EQ(updates[0].index, 3); - EXPECT_EQ(updates[0].clockwise, false); - EXPECT_EQ(updates[1].index, 4); - EXPECT_EQ(updates[1].clockwise, true); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave +} + +TEST_F(EncoderSplitTestLeftGreaterThanRight, TestOneClockwiseRightSlave) { + isMaster = false; + isLeftHand = false; + encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(6, false); + setAndRead(7, false); + setAndRead(6, true); + setAndRead(7, true); + + EXPECT_EQ(updates_array_idx, 0); // no updates received + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave } diff --git a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp index a6519c5762..5612f8b658 100644 --- a/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_left_lt_right.cpp @@ -33,22 +33,29 @@ struct update { uint8_t updates_array_idx = 0; update updates[32]; +bool isMaster; bool isLeftHand; +extern "C" { +bool is_keyboard_master(void) { + return isMaster; +} + bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!isLeftHand) { + if (!is_keyboard_master()) { // this method has no effect on slave half - printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC"); + printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC"); return true; } updates[updates_array_idx % 32] = {index, clockwise}; updates_array_idx++; return true; } +}; bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestLeftLessThanRight : public ::testing::Test { @@ -94,7 +101,8 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestInitRight) { EXPECT_EQ(updates_array_idx, 0); // no updates received } -TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeft) { +TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeftMaster) { + isMaster = true; isLeftHand = true; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -106,9 +114,19 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeft) { EXPECT_EQ(updates_array_idx, 1); // one update received EXPECT_EQ(updates[0].index, 0); EXPECT_EQ(updates[0].clockwise, true); + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSent) { +TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightMaster) { + isMaster = true; isLeftHand = false; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -117,23 +135,60 @@ TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSent) { setAndRead(6, true); setAndRead(7, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); + EXPECT_EQ(updates_array_idx, 1); // one update received + EXPECT_EQ(updates[0].index, 3); + EXPECT_EQ(updates[0].clockwise, true); - EXPECT_EQ(slave_state[0], 0); - EXPECT_EQ(slave_state[1], 0xFF); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestLeftLessThanRight, TestMultipleEncodersRightReceived) { +TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseLeftSlave) { + isMaster = false; isLeftHand = true; encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(0, false); + setAndRead(1, false); + setAndRead(0, true); + setAndRead(1, true); - uint8_t slave_state[32] = {1, 0, 0xFF}; // First right encoder is CCW, Second right encoder no change, third right encoder CW - encoder_update_raw(slave_state); + EXPECT_EQ(updates_array_idx, 0); // no updates received - EXPECT_EQ(updates_array_idx, 2); // two updates received, one for each changed item on the right side - EXPECT_EQ(updates[0].index, 2); - EXPECT_EQ(updates[0].clockwise, false); - EXPECT_EQ(updates[1].index, 4); - EXPECT_EQ(updates[1].clockwise, true); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave +} + +TEST_F(EncoderSplitTestLeftLessThanRight, TestOneClockwiseRightSlave) { + isMaster = false; + isLeftHand = false; + encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(6, false); + setAndRead(7, false); + setAndRead(6, true); + setAndRead(7, true); + + EXPECT_EQ(updates_array_idx, 0); // no updates received + + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave } diff --git a/quantum/encoder/tests/encoder_tests_split_no_left.cpp b/quantum/encoder/tests/encoder_tests_split_no_left.cpp index b6b2d7e2d1..980e4074ff 100644 --- a/quantum/encoder/tests/encoder_tests_split_no_left.cpp +++ b/quantum/encoder/tests/encoder_tests_split_no_left.cpp @@ -33,22 +33,29 @@ struct update { uint8_t updates_array_idx = 0; update updates[32]; +bool isMaster; bool isLeftHand; +extern "C" { +bool is_keyboard_master(void) { + return isMaster; +} + bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!isLeftHand) { + if (!is_keyboard_master()) { // this method has no effect on slave half - printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC"); + printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC"); return true; } updates[updates_array_idx % 32] = {index, clockwise}; updates_array_idx++; return true; } +}; bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestNoLeft : public ::testing::Test { @@ -82,19 +89,8 @@ TEST_F(EncoderSplitTestNoLeft, TestInitRight) { EXPECT_EQ(updates_array_idx, 0); // no updates received } -TEST_F(EncoderSplitTestNoLeft, TestOneClockwiseLeft) { - isLeftHand = true; - encoder_init(); - // send 4 pulses. with resolution 4, that's one step and we should get 1 update. - setAndRead(0, false); - setAndRead(1, false); - setAndRead(0, true); - setAndRead(1, true); - - EXPECT_EQ(updates_array_idx, 0); // no updates received -} - -TEST_F(EncoderSplitTestNoLeft, TestOneClockwiseRightSent) { +TEST_F(EncoderSplitTestNoLeft, TestOneClockwiseLeftMaster) { + isMaster = true; isLeftHand = false; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. @@ -103,23 +99,38 @@ TEST_F(EncoderSplitTestNoLeft, TestOneClockwiseRightSent) { setAndRead(2, true); setAndRead(3, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); + EXPECT_EQ(updates_array_idx, 1); // one update received + EXPECT_EQ(updates[0].index, 1); + EXPECT_EQ(updates[0].clockwise, true); - EXPECT_EQ(slave_state[0], 0); - EXPECT_EQ(slave_state[1], 0xFF); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestNoLeft, TestMultipleEncodersRightReceived) { - isLeftHand = true; +TEST_F(EncoderSplitTestNoLeft, TestOneClockwiseRightSlave) { + isMaster = false; + isLeftHand = false; encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(2, false); + setAndRead(3, false); + setAndRead(2, true); + setAndRead(3, true); - uint8_t slave_state[32] = {1, 0xFF}; // First right encoder is CCW, Second right encoder no change, third right encoder CW - encoder_update_raw(slave_state); + EXPECT_EQ(updates_array_idx, 0); // no updates received - EXPECT_EQ(updates_array_idx, 2); // two updates received, one for each changed item on the right side - EXPECT_EQ(updates[0].index, 0); - EXPECT_EQ(updates[0].clockwise, false); - EXPECT_EQ(updates[1].index, 1); - EXPECT_EQ(updates[1].clockwise, true); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave } diff --git a/quantum/encoder/tests/encoder_tests_split_no_right.cpp b/quantum/encoder/tests/encoder_tests_split_no_right.cpp index fa0a7c18a8..d39659853b 100644 --- a/quantum/encoder/tests/encoder_tests_split_no_right.cpp +++ b/quantum/encoder/tests/encoder_tests_split_no_right.cpp @@ -33,22 +33,29 @@ struct update { uint8_t updates_array_idx = 0; update updates[32]; +bool isMaster; bool isLeftHand; +extern "C" { +bool is_keyboard_master(void) { + return isMaster; +} + bool encoder_update_kb(uint8_t index, bool clockwise) { - if (!isLeftHand) { + if (!is_keyboard_master()) { // this method has no effect on slave half - printf("ignoring update on right hand (%d,%s)\n", index, clockwise ? "CW" : "CC"); + printf("ignoring update on slave (%d,%s)\n", index, clockwise ? "CW" : "CC"); return true; } updates[updates_array_idx % 32] = {index, clockwise}; updates_array_idx++; return true; } +}; bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestNoRight : public ::testing::Test { @@ -82,37 +89,48 @@ TEST_F(EncoderSplitTestNoRight, TestInitRight) { EXPECT_EQ(updates_array_idx, 0); // no updates received } -TEST_F(EncoderSplitTestNoRight, TestOneClockwiseLeft) { +TEST_F(EncoderSplitTestNoRight, TestOneClockwiseLeftMaster) { + isMaster = true; isLeftHand = true; encoder_init(); // send 4 pulses. with resolution 4, that's one step and we should get 1 update. - setAndRead(0, false); - setAndRead(1, false); - setAndRead(0, true); - setAndRead(1, true); + setAndRead(2, false); + setAndRead(3, false); + setAndRead(2, true); + setAndRead(3, true); - EXPECT_EQ(updates_array_idx, 1); // one updates received - EXPECT_EQ(updates[0].index, 0); + EXPECT_EQ(updates_array_idx, 1); // one update received + EXPECT_EQ(updates[0].index, 1); EXPECT_EQ(updates[0].clockwise, true); -} -TEST_F(EncoderSplitTestNoRight, TestOneClockwiseRightSent) { - isLeftHand = false; - encoder_init(); - - uint8_t slave_state[32] = {0xAA, 0xAA}; - encoder_state_raw(slave_state); - - EXPECT_EQ(slave_state[0], 0xAA); - EXPECT_EQ(slave_state[1], 0xAA); + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 0); // No events should be queued on master } -TEST_F(EncoderSplitTestNoRight, TestMultipleEncodersRightReceived) { +TEST_F(EncoderSplitTestNoRight, TestOneClockwiseRightSlave) { + isMaster = false; isLeftHand = true; encoder_init(); + // send 4 pulses. with resolution 4, that's one step and we should get 1 update. + setAndRead(2, false); + setAndRead(3, false); + setAndRead(2, true); + setAndRead(3, true); - uint8_t slave_state[32] = {1, 0xFF}; // These values would trigger updates if there were encoders on the other side - encoder_update_raw(slave_state); + EXPECT_EQ(updates_array_idx, 0); // no updates received - EXPECT_EQ(updates_array_idx, 0); // no updates received -- no right-hand encoders + int events_queued = 0; + encoder_events_t events; + encoder_retrieve_events(&events); + while (events.tail != events.head) { + events.tail = (events.tail + 1) % MAX_QUEUED_ENCODER_EVENTS; + ++events_queued; + } + EXPECT_EQ(events_queued, 1); // One event should be queued on slave } diff --git a/quantum/encoder/tests/encoder_tests_split_role.cpp b/quantum/encoder/tests/encoder_tests_split_role.cpp index 0ab7bfc2a7..b588af8c70 100644 --- a/quantum/encoder/tests/encoder_tests_split_role.cpp +++ b/quantum/encoder/tests/encoder_tests_split_role.cpp @@ -50,7 +50,7 @@ bool encoder_update_kb(uint8_t index, bool clockwise) { bool setAndRead(pin_t pin, bool val) { setPin(pin, val); - return encoder_read(); + return encoder_task(); } class EncoderSplitTestRole : public ::testing::Test { @@ -87,9 +87,6 @@ TEST_F(EncoderSplitTestRole, TestPrimaryRight) { setAndRead(6, true); setAndRead(7, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); - EXPECT_EQ(num_updates, 1); // one update received } @@ -116,8 +113,5 @@ TEST_F(EncoderSplitTestRole, TestNotPrimaryRight) { setAndRead(6, true); setAndRead(7, true); - uint8_t slave_state[32] = {0}; - encoder_state_raw(slave_state); - EXPECT_EQ(num_updates, 0); // zero updates received } diff --git a/quantum/encoder/tests/mock_split.c b/quantum/encoder/tests/mock_split.c index f024c2058d..fb5f074fbb 100644 --- a/quantum/encoder/tests/mock_split.c +++ b/quantum/encoder/tests/mock_split.c @@ -36,7 +36,3 @@ bool setPin(pin_t pin, bool val) { } void last_encoder_activity_trigger(void) {} - -__attribute__((weak)) bool is_keyboard_master(void) { - return true; -} diff --git a/quantum/encoder/tests/mock_split.h b/quantum/encoder/tests/mock_split.h index 8b4a141078..0d108afa6e 100644 --- a/quantum/encoder/tests/mock_split.h +++ b/quantum/encoder/tests/mock_split.h @@ -22,9 +22,6 @@ #define SPLIT_KEYBOARD typedef uint8_t pin_t; -void encoder_state_raw(uint8_t* slave_state); -void encoder_update_raw(uint8_t* slave_state); - extern bool pins[]; extern bool pinIsInputHigh[]; diff --git a/quantum/encoder/tests/rules.mk b/quantum/encoder/tests/rules.mk index d01c1c66ee..eb6106039e 100644 --- a/quantum/encoder/tests/rules.mk +++ b/quantum/encoder/tests/rules.mk @@ -3,6 +3,7 @@ encoder_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock.h encoder_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests.cpp \ $(QUANTUM_PATH)/encoder.c @@ -13,6 +14,7 @@ encoder_split_left_eq_right_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_ encoder_split_left_eq_right_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_left_eq_right.cpp \ $(QUANTUM_PATH)/encoder.c @@ -23,6 +25,7 @@ encoder_split_left_gt_right_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_ encoder_split_left_gt_right_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_left_gt_right.cpp \ $(QUANTUM_PATH)/encoder.c @@ -33,6 +36,7 @@ encoder_split_left_lt_right_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_ encoder_split_left_lt_right_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_left_lt_right.cpp \ $(QUANTUM_PATH)/encoder.c @@ -43,6 +47,7 @@ encoder_split_no_left_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_split_ encoder_split_no_left_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_no_left.cpp \ $(QUANTUM_PATH)/encoder.c @@ -53,6 +58,7 @@ encoder_split_no_right_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_split encoder_split_no_right_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_no_right.cpp \ $(QUANTUM_PATH)/encoder.c @@ -63,6 +69,7 @@ encoder_split_role_CONFIG := $(QUANTUM_PATH)/encoder/tests/config_mock_split_rol encoder_split_role_SRC := \ platforms/test/timer.c \ + drivers/encoder/encoder_quadrature.c \ $(QUANTUM_PATH)/encoder/tests/mock_split.c \ $(QUANTUM_PATH)/encoder/tests/encoder_tests_split_role.cpp \ $(QUANTUM_PATH)/encoder.c diff --git a/quantum/keyboard.c b/quantum/keyboard.c index 1d6657c230..5aaa4b452f 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -689,7 +689,7 @@ void keyboard_task(void) { #endif #ifdef ENCODER_ENABLE - if (encoder_read()) { + if (encoder_task()) { last_encoder_activity_trigger(); activity_has_occurred = true; } diff --git a/quantum/split_common/transaction_id_define.h b/quantum/split_common/transaction_id_define.h index 4d4d2b9570..05b3bf7b62 100644 --- a/quantum/split_common/transaction_id_define.h +++ b/quantum/split_common/transaction_id_define.h @@ -31,6 +31,7 @@ enum serial_transaction_id { #ifdef ENCODER_ENABLE GET_ENCODERS_CHECKSUM, GET_ENCODERS_DATA, + PUT_ENCODER_TAIL, #endif // ENCODER_ENABLE #ifndef DISABLE_SYNC_TIMER diff --git a/quantum/split_common/transactions.c b/quantum/split_common/transactions.c index 2b9423cd63..2cfa83e7a3 100644 --- a/quantum/split_common/transactions.c +++ b/quantum/split_common/transactions.c @@ -234,21 +234,28 @@ static void master_matrix_handlers_slave(matrix_row_t master_matrix[], matrix_ro #ifdef ENCODER_ENABLE static bool encoder_handlers_master(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { - static uint32_t last_update = 0; - uint8_t temp_state[NUM_ENCODERS_MAX_PER_SIDE]; + static uint32_t last_update = 0; + encoder_events_t temp_events; - bool okay = read_if_checksum_mismatch(GET_ENCODERS_CHECKSUM, GET_ENCODERS_DATA, &last_update, temp_state, split_shmem->encoders.state, sizeof(temp_state)); - if (okay) encoder_update_raw(temp_state); + bool okay = read_if_checksum_mismatch(GET_ENCODERS_CHECKSUM, GET_ENCODERS_DATA, &last_update, &temp_events, &split_shmem->encoders.events, sizeof(temp_events)); + if (okay) { + encoder_handle_slave_events(&split_shmem->encoders.events); + transport_write(PUT_ENCODER_TAIL, &split_shmem->encoders.events.tail, sizeof(split_shmem->encoders.events.tail)); + split_shmem->encoders.checksum = crc8(&split_shmem->encoders.events, sizeof(split_shmem->encoders.events)); + } return okay; } static void encoder_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave_matrix[]) { - uint8_t encoder_state[NUM_ENCODERS_MAX_PER_SIDE]; - encoder_state_raw(encoder_state); // Always prepare the encoder state for read. - memcpy(split_shmem->encoders.state, encoder_state, sizeof(encoder_state)); + encoder_retrieve_events(&split_shmem->encoders.events); // Now update the checksum given that the encoders has been written to - split_shmem->encoders.checksum = crc8(encoder_state, sizeof(encoder_state)); + split_shmem->encoders.checksum = crc8(&split_shmem->encoders.events, sizeof(split_shmem->encoders.events)); +} + +static void encoder_handlers_slave_reset(uint8_t initiator2target_buffer_size, const void *initiator2target_buffer, uint8_t target2initiator_buffer_size, void *target2initiator_buffer) { + uint8_t tail_index = *(uint8_t *)initiator2target_buffer; + encoder_set_tail_index(tail_index); } // clang-format off @@ -256,7 +263,8 @@ static void encoder_handlers_slave(matrix_row_t master_matrix[], matrix_row_t sl # define TRANSACTIONS_ENCODERS_SLAVE() TRANSACTION_HANDLER_SLAVE_AUTOLOCK(encoder) # define TRANSACTIONS_ENCODERS_REGISTRATIONS \ [GET_ENCODERS_CHECKSUM] = trans_target2initiator_initializer(encoders.checksum), \ - [GET_ENCODERS_DATA] = trans_target2initiator_initializer(encoders.state), + [GET_ENCODERS_DATA] = trans_target2initiator_initializer(encoders.events), \ + [PUT_ENCODER_TAIL] = trans_initiator2target_initializer_cb(encoders.events.tail, encoder_handlers_slave_reset), // clang-format on #else // ENCODER_ENABLE diff --git a/quantum/split_common/transport.h b/quantum/split_common/transport.h index 2e2b918d45..4f6b968fa8 100644 --- a/quantum/split_common/transport.h +++ b/quantum/split_common/transport.h @@ -65,8 +65,8 @@ typedef struct _split_master_matrix_sync_t { #ifdef ENCODER_ENABLE typedef struct _split_slave_encoder_sync_t { - uint8_t checksum; - uint8_t state[NUM_ENCODERS_MAX_PER_SIDE]; + uint8_t checksum; + encoder_events_t events; } split_slave_encoder_sync_t; #endif // ENCODER_ENABLE -- cgit v1.2.3 From 9f95577ef2bfff55bf4f5d19c3dc58ea0f09e014 Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 19 Feb 2024 15:37:51 +0000 Subject: OS Detection - Entire file should not be wrapped with ifdef (#23108) --- quantum/os_detection.c | 70 +++++++++++++++++++++++--------------------------- quantum/os_detection.h | 18 +++++-------- 2 files changed, 39 insertions(+), 49 deletions(-) (limited to 'quantum') diff --git a/quantum/os_detection.c b/quantum/os_detection.c index b674f05b35..96b026e247 100644 --- a/quantum/os_detection.c +++ b/quantum/os_detection.c @@ -16,24 +16,32 @@ #include "os_detection.h" -#ifdef OS_DETECTION_ENABLE - -# include -# include "timer.h" -# ifdef OS_DETECTION_KEYBOARD_RESET -# include "quantum.h" -# endif +#include +#include "timer.h" +#ifdef OS_DETECTION_KEYBOARD_RESET +# include "quantum.h" +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE -# include "eeconfig.h" -# include "eeprom.h" -# include "print.h" +#ifdef OS_DETECTION_DEBUG_ENABLE +# include "eeconfig.h" +# include "eeprom.h" +# include "print.h" -# define STORED_USB_SETUPS 50 -# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE +# define STORED_USB_SETUPS 50 +# define EEPROM_USER_OFFSET (uint8_t*)EECONFIG_SIZE static uint16_t usb_setups[STORED_USB_SETUPS]; -# endif +#endif + +#ifndef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 200 +#endif + +// 2s should always be more than enough (otherwise, you may have other issues) +#if OS_DETECTION_DEBOUNCE > 2000 +# undef OS_DETECTION_DEBOUNCE +# define OS_DETECTION_DEBOUNCE 2000 +#endif struct setups_data_t { uint8_t count; @@ -50,18 +58,6 @@ struct setups_data_t setups_data = { .cnt_ff = 0, }; -# ifndef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 200 -# endif - -// 2s should always be more than enough (otherwise, you may have other issues) -# if OS_DETECTION_DEBOUNCE > 2000 -# undef OS_DETECTION_DEBOUNCE -# define OS_DETECTION_DEBOUNCE 2000 -# endif - -typedef uint16_t debouncing_t; - static volatile os_variant_t detected_os = OS_UNSURE; static os_variant_t reported_os = OS_UNSURE; @@ -89,13 +85,13 @@ void os_detection_task(void) { } } } -# ifdef OS_DETECTION_KEYBOARD_RESET +#ifdef OS_DETECTION_KEYBOARD_RESET // resetting the keyboard on the USB device state change callback results in instability, so delegate that to this task // only take action if it's been stable at least once, to avoid issues with some KVMs else if (current_usb_device_state == USB_DEVICE_STATE_INIT && reported_usb_device_state != USB_DEVICE_STATE_INIT) { soft_reset_keyboard(); } -# endif +#endif } __attribute__((weak)) bool process_detected_host_os_kb(os_variant_t detected_os) { @@ -108,9 +104,9 @@ __attribute__((weak)) bool process_detected_host_os_user(os_variant_t detected_o // Some collected sequences of wLength can be found in tests. void process_wlength(const uint16_t w_length) { -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE usb_setups[setups_data.count] = w_length; -# endif +#endif setups_data.count++; setups_data.last_wlength = w_length; if (w_length == 0x2) { @@ -174,23 +170,23 @@ void os_detection_notify_usb_device_state_change(enum usb_device_state usb_devic debouncing = true; } -# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os) { detected_os = os; last_time = timer_read_fast(); debouncing = true; } -# endif +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void) { -# ifdef CONSOLE_ENABLE +# ifdef CONSOLE_ENABLE uint8_t cnt = eeprom_read_byte(EEPROM_USER_OFFSET); for (uint16_t i = 0; i < cnt; ++i) { uint16_t* addr = (uint16_t*)EEPROM_USER_OFFSET + i * sizeof(uint16_t) + sizeof(uint8_t); xprintf("i: %d, wLength: 0x%02X\n", i, eeprom_read_word(addr)); } -# endif +# endif } void store_setups_in_eeprom(void) { @@ -201,6 +197,4 @@ void store_setups_in_eeprom(void) { } } -# endif // OS_DETECTION_DEBUG_ENABLE - -#endif +#endif // OS_DETECTION_DEBUG_ENABLE diff --git a/quantum/os_detection.h b/quantum/os_detection.h index 470f30943a..b8cd898335 100644 --- a/quantum/os_detection.h +++ b/quantum/os_detection.h @@ -16,11 +16,9 @@ #pragma once -#ifdef OS_DETECTION_ENABLE - -# include -# include -# include "usb_device_state.h" +#include +#include +#include "usb_device_state.h" typedef enum { OS_UNSURE, @@ -40,13 +38,11 @@ void os_detection_task(void); bool process_detected_host_os_kb(os_variant_t os); bool process_detected_host_os_user(os_variant_t os); -# if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) +#if defined(SPLIT_KEYBOARD) && defined(SPLIT_DETECTED_OS_ENABLE) void slave_update_detected_host_os(os_variant_t os); -# endif +#endif -# ifdef OS_DETECTION_DEBUG_ENABLE +#ifdef OS_DETECTION_DEBUG_ENABLE void print_stored_setups(void); void store_setups_in_eeprom(void); -# endif - -#endif // OS_DETECTION_ENABLE +#endif -- cgit v1.2.3 From 2f3383a11e0b459a1e89fea04914bce983eed2fe Mon Sep 17 00:00:00 2001 From: Joel Challis Date: Mon, 19 Feb 2024 19:48:59 +0000 Subject: Fix make clean test:os_detection (#23112) --- quantum/os_detection/tests/os_detection.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'quantum') diff --git a/quantum/os_detection/tests/os_detection.cpp b/quantum/os_detection/tests/os_detection.cpp index 11e93fdea8..a9f671156b 100644 --- a/quantum/os_detection/tests/os_detection.cpp +++ b/quantum/os_detection/tests/os_detection.cpp @@ -45,6 +45,8 @@ os_variant_t check_sequence(const std::vector &w_lengths) { bool process_detected_host_os_kb(os_variant_t os) { reported_count = reported_count + 1; reported_os = os; + + return true; } void assert_not_reported(void) { -- cgit v1.2.3