From 1d337299451480b03b849ad2d2f16f462a11f77d Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Sun, 23 May 2021 02:30:32 -0700 Subject: [PATCH 01/21] Enable SPI1 for GMMK pro --- keyboards/gmmk/pro/config.h | 6 ++++++ keyboards/gmmk/pro/halconf.h | 7 +++++++ keyboards/gmmk/pro/mcuconf.h | 6 ++++++ 3 files changed, 19 insertions(+) create mode 100644 keyboards/gmmk/pro/halconf.h create mode 100644 keyboards/gmmk/pro/mcuconf.h diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index ab3c7a7a2119..48c215ce8d34 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -46,3 +46,9 @@ #define LOCKING_SUPPORT_ENABLE /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE + +/* SPI Config for LED Driver */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_MOSI_PIN A6 +#define SPI_MISO_PIN A7 diff --git a/keyboards/gmmk/pro/halconf.h b/keyboards/gmmk/pro/halconf.h new file mode 100644 index 000000000000..23ecb202a1d1 --- /dev/null +++ b/keyboards/gmmk/pro/halconf.h @@ -0,0 +1,7 @@ +#pragma once + +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/gmmk/pro/mcuconf.h b/keyboards/gmmk/pro/mcuconf.h new file mode 100644 index 000000000000..bb1c0acde23d --- /dev/null +++ b/keyboards/gmmk/pro/mcuconf.h @@ -0,0 +1,6 @@ +#pragma once + +#include_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE From 8d82ba585f0ed18774d58b31d227eb3e135de0bf Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Sun, 23 May 2021 04:11:43 -0700 Subject: [PATCH 02/21] Setup initial boilerplate for new LED driver --- common_features.mk | 9 +++++++- drivers/awinic/aw20216.c | 43 ++++++++++++++++++++++++++++++++++++ drivers/awinic/aw20216.h | 26 ++++++++++++++++++++++ keyboards/gmmk/pro/config.h | 2 ++ keyboards/gmmk/pro/pro.c | 20 +++++++++++++++++ keyboards/gmmk/pro/rules.mk | 2 ++ quantum/rgb_matrix.h | 2 ++ quantum/rgb_matrix_drivers.c | 16 ++++++++++++++ 8 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 drivers/awinic/aw20216.c create mode 100644 drivers/awinic/aw20216.h diff --git a/common_features.mk b/common_features.mk index 1a9fd46b5590..37ce928e2a76 100644 --- a/common_features.mk +++ b/common_features.mk @@ -244,7 +244,7 @@ endif endif RGB_MATRIX_ENABLE ?= no -VALID_RGB_MATRIX_TYPES := IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 WS2812 custom +VALID_RGB_MATRIX_TYPES := AW20216 IS31FL3731 IS31FL3733 IS31FL3737 IS31FL3741 WS2812 custom ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) ifeq ($(filter $(RGB_MATRIX_DRIVER),$(VALID_RGB_MATRIX_TYPES)),) @@ -261,6 +261,13 @@ endif CIE1931_CURVE := yes RGB_KEYCODES_ENABLE := yes + ifeq ($(strip $(RGB_MATRIX_DRIVER)), AW20216) + OPT_DEFS += -DAW20216 -DSTM32_SPI -DHAL_USE_SPI=TRUE + COMMON_VPATH += $(DRIVER_PATH)/awinic + SRC += aw20216.c + QUANTUM_LIB_SRC += spi_master.c + endif + ifeq ($(strip $(RGB_MATRIX_DRIVER)), IS31FL3731) OPT_DEFS += -DIS31FL3731 -DSTM32_I2C -DHAL_USE_I2C=TRUE COMMON_VPATH += $(DRIVER_PATH)/issi diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c new file mode 100644 index 000000000000..a671c3346259 --- /dev/null +++ b/drivers/awinic/aw20216.c @@ -0,0 +1,43 @@ +/* Copyright 2021 Jasper Chan + * + * 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 "aw20216.h" +#include "spi_master.h" + +#define AWINIC_ID 0b1010 + +#define AW_PAGE_FUNCTION 0x00 // PG0 +#define AW_PAGE_PWM 0x01 // PG1 +#define AW_PAGE_SCALING 0x02 // PG2 +#define AW_PAGE_PATCHOICE 0x03 // PG3 +#define AW_PAGE_PWMSCALING 0x04 // PG4 + +#define AW_REG_CONFIGURATION 0x00 // PG0 +#define AW_REG_GLOBALCURRENT 0x01 // PG0 + + +void AW20216_init(void) { + return; +} +void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + return; +} +void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + return; +} +void AW20216_update_pwm_buffers(void) { + return; +} diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h new file mode 100644 index 000000000000..82b9e2fbad38 --- /dev/null +++ b/drivers/awinic/aw20216.h @@ -0,0 +1,26 @@ +/* Copyright 2021 Jasper Chan (Gigahawk) + * + * 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 + + +void AW20216_init(void); +void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); +void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue); +void AW20216_update_pwm_buffers(void); diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 48c215ce8d34..4740458aeaa4 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -52,3 +52,5 @@ #define SPI_SCK_PIN A5 #define SPI_MOSI_PIN A6 #define SPI_MISO_PIN A7 + +#define DRIVER_LED_TOTAL 4 diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index 816d089a585d..654fcdc32fa6 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -14,3 +14,23 @@ * along with this program. If not, see . */ #include "pro.h" + +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + { 0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 1, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 2, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 3, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} +}, { + { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 } +}, { + 4, 4, 4, 4 +} }; +#endif diff --git a/keyboards/gmmk/pro/rules.mk b/keyboards/gmmk/pro/rules.mk index b12d055a3d90..6221d6408272 100644 --- a/keyboards/gmmk/pro/rules.mk +++ b/keyboards/gmmk/pro/rules.mk @@ -21,3 +21,5 @@ RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow BLUETOOTH_ENABLE = no # Enable Bluetooth AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = AW20216 diff --git a/quantum/rgb_matrix.h b/quantum/rgb_matrix.h index a615b8422c0a..741a2fe446c8 100644 --- a/quantum/rgb_matrix.h +++ b/quantum/rgb_matrix.h @@ -33,6 +33,8 @@ # include "is31fl3737.h" #elif defined(IS31FL3741) # include "is31fl3741.h" +#elif defined(AW20216) +# include "aw20216.h" #elif defined(WS2812) # include "ws2812.h" #endif diff --git a/quantum/rgb_matrix_drivers.c b/quantum/rgb_matrix_drivers.c index 896fa6d0efd5..75df648e271f 100644 --- a/quantum/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix_drivers.c @@ -171,6 +171,22 @@ const rgb_matrix_driver_t rgb_matrix_driver = { }; # endif +#elif defined(AW20216) +# include "spi_master.h" +static void init(void) { + spi_init(); + AW20216_init(); +} + +static void flush(void) { AW20216_update_pwm_buffers(); } + +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = init, + .flush = flush, + .set_color = AW20216_set_color, + .set_color_all = AW20216_set_color_all, +}; + #elif defined(WS2812) # if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_CUSTOM_DRIVER) # pragma message "Cannot use RGBLIGHT and RGB Matrix using WS2812 at the same time." From 9187b78f3d884342d36dab623660cd9e9a1e00bb Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Sun, 23 May 2021 23:19:35 -0700 Subject: [PATCH 03/21] RGB matrix minimally functional --- drivers/awinic/aw20216.c | 132 +++++++++++++++++++- drivers/awinic/aw20216.h | 12 ++ keyboards/gmmk/pro/config.h | 17 ++- keyboards/gmmk/pro/keymaps/default/keymap.c | 11 +- keyboards/gmmk/pro/pro.c | 33 ++++- keyboards/gmmk/pro/rules.mk | 3 +- 6 files changed, 195 insertions(+), 13 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index a671c3346259..03652a19f4b6 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -16,28 +16,148 @@ #include "aw20216.h" #include "spi_master.h" +#include "print.h" -#define AWINIC_ID 0b1010 +// Data is sent MSB first, leading edge rising, sample on leading edge +// Prescaler 8? +//#define AW_SPI_START(p) spi_start(p, false, 0, 8) -#define AW_PAGE_FUNCTION 0x00 // PG0 -#define AW_PAGE_PWM 0x01 // PG1 -#define AW_PAGE_SCALING 0x02 // PG2 -#define AW_PAGE_PATCHOICE 0x03 // PG3 -#define AW_PAGE_PWMSCALING 0x04 // PG4 +/* The AW20216 appears to be somewhat similar to the IS31FL743, although quite + * a few things are different, such as the command byte format and page ordering. + * The LED addresses start from 0x00 instead of 0x01. + */ +#define AWINIC_ID 0b1010 << 4 + +#define AW_PAGE_FUNCTION 0x00 << 1 // PG0, Function registers +#define AW_PAGE_PWM 0x01 << 1 // PG1, LED PWM control +#define AW_PAGE_SCALING 0x02 << 1 // PG2, LED current scaling control +#define AW_PAGE_PATCHOICE 0x03 << 1 // PG3, Pattern choice? +#define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control? + +#define AW_WRITE 0 +#define AW_READ 1 #define AW_REG_CONFIGURATION 0x00 // PG0 #define AW_REG_GLOBALCURRENT 0x01 // PG0 +// Default value of AW_REG_CONFIGURATION +// D7:D4 = 1011, SWSEL (SW1~SW12 active) +// D3 = 0?, reserved (apparently this should be 1 but it doesn't seem to matter) +// D2:D1 = 00, OSDE (open/short detection enable) +// D0 = 0, CHIPEN (write 1 to enable LEDs when hardware enable pulled high) +#define AW_CONFIG_DEFAULT 0b10110000 +#define AW_CHIPEN 1 + + +// The range for these values are supposedly 0-215, I don't know what happens if you exceed this range +#define AW_SCALING_MAX 215 +#define AW_GLOBAL_CURRENT_MAX 215 // Unconfirmed that this is the max + +uint8_t g_spi_transfer_buffer[20] = { 0 }; +aw_led g_pwm_buffer[DRIVER_LED_TOTAL]; +bool g_pwm_buffer_update_required[DRIVER_LED_TOTAL]; + +bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t data) { + // Do we need to call spi_stop() if this fails? + if (!spi_start(slave_pin, false, 0, 16)) { + return false; + } + + g_spi_transfer_buffer[0] = (AWINIC_ID | page | AW_WRITE); + g_spi_transfer_buffer[1] = reg; + g_spi_transfer_buffer[2] = data; + uprintf( + "%x %x %x\n", + g_spi_transfer_buffer[0], + g_spi_transfer_buffer[1], + g_spi_transfer_buffer[2] + ); + + if (spi_transmit(g_spi_transfer_buffer, 3) != SPI_STATUS_SUCCESS) { + spi_stop(); + return false; + } + spi_stop(); + return true; +} + +bool AW20216_init_scaling(void) { + // Set constant current to the max, control brightness with PWM + for(uint8_t i = 0; i < DRIVER_1_LED_TOTAL; i++) { + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].r, AW_SCALING_MAX); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].g, AW_SCALING_MAX); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].b, AW_SCALING_MAX); + } + +#ifdef DRIVER_2_CS + for(uint8_t i = 0; i < DRIVER_2_LED_TOTAL; i++) { + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].r, AW_SCALING_MAX); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].g, AW_SCALING_MAX); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].b, AW_SCALING_MAX); + } +#endif + return true; +} + +bool AW20216_soft_enable(void) { + AW20216_write_register(DRIVER_1_CS, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN); +#ifdef DRIVER_2_CS + AW20216_write_register(DRIVER_2_CS, AW_PAGE_FUNCTION, AW_REG_CONFIGURATION, AW_CONFIG_DEFAULT | AW_CHIPEN); +#endif + return true; +} + +void AW20216_update_pwm(int index, uint8_t red, uint8_t green, uint8_t blue) { + pin_t cs = DRIVER_1_CS; + uint8_t driver = 0; +#ifdef DRIVER_2_CS + if (index >= DRIVER_1_LED_TOTAL) { + index -= DRIVER_1_LED_TOTAL; + cs = DRIVER_2_CS; + driver = 1; + } +#endif + AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].r, red); + AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].g, green); + AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].b, blue); + return; +} void AW20216_init(void) { + // All LEDs should start with all scaling and PWM registers as off + setPinOutput(DRIVER_1_EN); + writePinHigh(DRIVER_1_EN); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX); +#ifdef DRIVER_2_EN + setPinOutput(DRIVER_2_EN); + writePinHigh(DRIVER_2_EN); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_FUNCTION, AW_REG_GLOBALCURRENT, AW_GLOBAL_CURRENT_MAX); +#endif + AW20216_init_scaling(); + AW20216_soft_enable(); + //AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, 1, 200); return; } + void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { + g_pwm_buffer[index].r = red; + g_pwm_buffer[index].g = green; + g_pwm_buffer[index].b = blue; + g_pwm_buffer_update_required[index] = true; return; } void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { + for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { + AW20216_set_color(i, red, green, blue); + } return; } void AW20216_update_pwm_buffers(void) { + for(uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { + if(g_pwm_buffer_update_required[i]) { + AW20216_update_pwm(i, g_pwm_buffer[i].r, g_pwm_buffer[i].g, g_pwm_buffer[i].b); + g_pwm_buffer_update_required[i] = false; + } + } return; } diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index 82b9e2fbad38..b187a2fdc180 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -19,6 +19,18 @@ #include #include +typedef struct aw_led { + uint8_t r; + uint8_t g; + uint8_t b; +} aw_led; + +extern const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL]; +#ifdef DRIVER_2_LED_TOTAL +extern const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL]; +#endif +extern const aw_led *g_aw_leds[DRIVER_COUNT]; + void AW20216_init(void); void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 4740458aeaa4..45adf325993f 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -53,4 +53,19 @@ #define SPI_MOSI_PIN A6 #define SPI_MISO_PIN A7 -#define DRIVER_LED_TOTAL 4 +//#define DRIVER_1_CS B13 +//#define DRIVER_2_CS B14 +//#define DRIVER_1_EN C13 +//#define DRIVER_2_EN C13 +// +//#define DRIVER_COUNT 2 +//#define DRIVER_1_LED_TOTAL 3 +//#define DRIVER_2_LED_TOTAL 3 +//#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) + +#define DRIVER_1_CS B13 +#define DRIVER_1_EN C13 + +#define DRIVER_COUNT 1 +#define DRIVER_1_LED_TOTAL 6 +#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL diff --git a/keyboards/gmmk/pro/keymaps/default/keymap.c b/keyboards/gmmk/pro/keymaps/default/keymap.c index b08400cd8dc3..1620a0431ff4 100644 --- a/keyboards/gmmk/pro/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and // it'll be back to normal when you plug it back in. [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_ESC, RGB_TOG, RGB_MODE_RAINBOW, RGB_MODE_PLAIN, RGB_VAI, RGB_SAI, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, @@ -63,3 +63,12 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } return true; } + +void keyboard_post_init_user(void) { + debug_enable = true; +#ifdef RGB_MATRIX_ENABLE + rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); + rgb_matrix_set_color_all(200, 200, 200); + rgb_matrix_enable(); +#endif +} diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index 654fcdc32fa6..412d7ce8e363 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -21,16 +21,41 @@ led_config_t g_led_config = { { { 1, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { 2, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { 3, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 4, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 5, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} }, { - { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 } + { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 } }, { - 4, 4, 4, 4 + 4, 4, 4, 4, 4, 4 } }; + +//const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { +// {0, 1, 2}, +// {3, 4, 5}, +// {6, 7, 8} +//}; +// +//const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { +// {0, 1, 2}, +// {3, 4, 5}, +// {6, 7, 8} +//}; + +const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { + {0, 1, 2}, + {3, 4, 5}, + {6, 7, 8}, + {9, 10, 11}, + {12, 13, 14}, + {15, 16, 17}, +}; + +const aw_led *g_aw_leds[DRIVER_COUNT] = { + g_aw_leds_1 +}; #endif diff --git a/keyboards/gmmk/pro/rules.mk b/keyboards/gmmk/pro/rules.mk index 6221d6408272..4404cf5aa830 100644 --- a/keyboards/gmmk/pro/rules.mk +++ b/keyboards/gmmk/pro/rules.mk @@ -10,7 +10,7 @@ BOOTLOADER = stm32-dfu BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = no # Console for debug +CONSOLE_ENABLE = yes # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -23,3 +23,4 @@ AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = AW20216 +ALLOW_WARNINGS = yes From 8d7d1836f5e9a50d9bb0a32cae19e2f025c60fed Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Tue, 25 May 2021 00:07:53 -0700 Subject: [PATCH 04/21] Map full LED matrix --- drivers/awinic/aw20216.c | 7 - keyboards/gmmk/pro/config.h | 20 +-- keyboards/gmmk/pro/pro.c | 248 +++++++++++++++++++++++++++++++----- 3 files changed, 223 insertions(+), 52 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index 03652a19f4b6..3e22045b3eba 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -16,7 +16,6 @@ #include "aw20216.h" #include "spi_master.h" -#include "print.h" // Data is sent MSB first, leading edge rising, sample on leading edge // Prescaler 8? @@ -66,12 +65,6 @@ bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t g_spi_transfer_buffer[0] = (AWINIC_ID | page | AW_WRITE); g_spi_transfer_buffer[1] = reg; g_spi_transfer_buffer[2] = data; - uprintf( - "%x %x %x\n", - g_spi_transfer_buffer[0], - g_spi_transfer_buffer[1], - g_spi_transfer_buffer[2] - ); if (spi_transmit(g_spi_transfer_buffer, 3) != SPI_STATUS_SUCCESS) { spi_stop(); diff --git a/keyboards/gmmk/pro/config.h b/keyboards/gmmk/pro/config.h index 45adf325993f..64062beceaff 100644 --- a/keyboards/gmmk/pro/config.h +++ b/keyboards/gmmk/pro/config.h @@ -53,19 +53,13 @@ #define SPI_MOSI_PIN A6 #define SPI_MISO_PIN A7 -//#define DRIVER_1_CS B13 -//#define DRIVER_2_CS B14 -//#define DRIVER_1_EN C13 -//#define DRIVER_2_EN C13 -// -//#define DRIVER_COUNT 2 -//#define DRIVER_1_LED_TOTAL 3 -//#define DRIVER_2_LED_TOTAL 3 -//#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) - #define DRIVER_1_CS B13 +#define DRIVER_2_CS B14 #define DRIVER_1_EN C13 +#define DRIVER_2_EN C13 + +#define DRIVER_COUNT 2 +#define DRIVER_1_LED_TOTAL 66 +#define DRIVER_2_LED_TOTAL 32 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) -#define DRIVER_COUNT 1 -#define DRIVER_1_LED_TOTAL 6 -#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index 412d7ce8e363..ee658bd1cbe5 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -17,45 +17,229 @@ #ifdef RGB_MATRIX_ENABLE led_config_t g_led_config = { { - { 0, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { 1, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { 2, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { 3, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { 4, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { 5, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, - { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} + { 4, NO_LED, NO_LED, 97, 65, 79, 5, 28 }, + { 8, 2, 9, 0, 10, 75, 1, 7 }, + { 14, 3, 15, NO_LED, 16, 86, 6, 13 }, + { 20, 18, 21, 23, 22, 94, 12, 19 }, + { 25, 30, 26, 31, 27, 32, 29, 24 }, + { 41, 36, 42, 37, 43, 38, 35, 40 }, + { 46, 89, 47, 34, 48, 72, 78, 45 }, + { 52, 39, 53, 101, 54, 82, 44, 51 }, + { 58, 63, 59, 64, NO_LED, 60, 62, 57 }, + { 11, 90, 55, 17, 33, 49, NO_LED, 69 }, + { NO_LED, 85, 93, 61, 100, 66, 50, 56 } }, { - { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }, { 0, 4 }, { 0, 5 } + { 0, 0 }, // 0, ESC, k13 + { 0, 15 }, // 1, ~, k16 + { 4, 26 }, // 2, Tab, k11 + { 5, 38 }, // 3, Caps, k21 + { 9, 49 }, // 4, Sh_L, k00 + { 2, 61 }, // 5, Ct_L, k06 + { 18, 0 }, // 6, F1, k26 + { 14, 15 }, // 7, 1, k17 + { 22, 26 }, // 8, Q, k10 + { 25, 38 }, // 9, A, k12 + { 33, 49 }, // 10, Z, k14 + { 20, 61 }, // 11, Win_L, k90 + { 33, 0 }, // 12, F2, k36 + { 29, 15 }, // 13, 2, k27 + { 36, 26 }, // 14, W, k20 + { 40, 38 }, // 15, S, k22 + { 47, 49 }, // 16, X, k24 + { 38, 61 }, // 17, Alt_L, k93 + { 47, 0 }, // 18, F3, k31 + { 43, 15 }, // 19, 3, k37 + { 51, 26 }, // 20, E, k30 + { 54, 38 }, // 21, D, k32 + { 61, 49 }, // 22, C, k34 + { 61, 0 }, // 23, F4, k33 + { 58, 15 }, // 24, 4, k47 + { 65, 26 }, // 25, R, k40 + { 69, 38 }, // 26, F, k42 + { 76, 49 }, // 27, V, k44 + { 79, 0 }, // 28, F5, k07 + { 72, 15 }, // 29, 5, k46 + { 79, 26 }, // 30, T, k41 + { 83, 38 }, // 31, G, k43 + { 90, 49 }, // 32, B, k45 + { 92, 61 }, // 33, SPACE, k94 + { 94, 0 }, // 34, F6, k63 + { 87, 15 }, // 35, 6, k56 + { 94, 26 }, // 36, Y, k51 + { 98, 38 }, // 37, H, k53 + { 105, 49 }, // 38, N, k55 + { 108, 0 }, // 39, F7, k71 + { 101, 15 }, // 40, 7, k57 + { 108, 26 }, // 41, U, k50 + { 112, 38 }, // 42, J, k52 + { 119, 49 }, // 43, M, k54 + { 123, 0 }, // 44, F8, k76 + { 116, 15 }, // 45, 8, k67 + { 123, 26 }, // 46, I, k60 + { 126, 38 }, // 47, K, k62 + { 134, 49 }, // 48, ,, k64 + { 145, 61 }, // 49, Alt_R, k95 + { 141, 0 }, // 50, F9, ka6 + { 130, 15 }, // 51, 9, k77 + { 137, 26 }, // 52, O, k70 + { 141, 38 }, // 53, L, k72 + { 148, 49 }, // 54, ., k74 + { 159, 61 }, // 55, FN, k92 + { 155, 0 }, // 56, F10, ka7 + { 145, 15 }, // 57, 0, k87 + { 152, 26 }, // 58, P, k80 + { 155, 38 }, // 59, ;, k82 + { 163, 49 }, // 60, ?, k85 + { 170, 0 }, // 61, F11, ka3 + { 159, 15 }, // 62, -, k86 + { 166, 26 }, // 63, [, k81 + { 170, 38 }, // 64, ", k83 + { 173, 61 }, // 65, Ct_R, k04 + { 184, 0 }, // 66, F12, ka5 + { 0, 8 }, // 67, LED, l01 + { 224, 8 }, // 68, LED, l11 + { 202, 0 }, // 69, Prt, k97 + { 0, 15 }, // 70, LED, l02 + { 224, 15 }, // 71, LED, l12 + { 224, 15 }, // 72, Del, k65 + { 0, 21 }, // 73, LED, l03 + { 224, 21 }, // 74, LED, l13 + { 224, 26 }, // 75, PgUp, k15 + { 0, 28 }, // 76, LED, l04 + { 224, 28 }, // 77, LED, l14 + { 173, 15 }, // 78, =, k66 + { 220, 64 }, // 79, Right, k05 + { 0, 35 }, // 80, LED, l05 + { 224, 35 }, // 81, LED, l15 + { 224, 49 }, // 82, End, k75 + { 0, 42 }, // 83, LED, l06 + { 224, 42 }, // 84, LED, l16 + { 195, 15 }, // 85, BSpc, ka1 + { 224, 38 }, // 86, PgDn, k25 + { 0, 48 }, // 87, LED, l07 + { 224, 48 }, // 88, LED, l17 + { 181, 26 }, // 89, ], k61 + { 182, 49 }, // 90, Sh_R, k91 + { 0, 55 }, // 91, LED, l08 + { 224, 55 }, // 92, LED, l18 + { 199, 26 }, // 93, \, ka2 + { 206, 52 }, // 94, Up, k35 + { 191, 64 }, // 95, Left, k03 + { 193, 38 }, // 96, Enter, ka4 + { 206, 64 } // 97, Down, k73 }, { - 4, 4, 4, 4, 4, 4 + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 4, 2, 2, 4, 2, 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 aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { -// {0, 1, 2}, -// {3, 4, 5}, -// {6, 7, 8} -//}; -// -//const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { -// {0, 1, 2}, -// {3, 4, 5}, -// {6, 7, 8} -//}; - const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { - {0, 1, 2}, - {3, 4, 5}, - {6, 7, 8}, - {9, 10, 11}, - {12, 13, 14}, - {15, 16, 17}, + { 0, 1, 2 }, // 0, ESC, k13 + { 3, 4, 5 }, // 1, ~, k16 + { 6, 7, 8 }, // 2, Tab, k11 + { 9, 10, 11 }, // 3, Caps, k21 + { 12, 13, 14 }, // 4, Sh_L, k00 + { 15, 16, 17 }, // 5, Ct_L, k06 + { 18, 19, 20 }, // 6, F1, k26 + { 21, 22, 23 }, // 7, 1, k17 + { 24, 25, 26 }, // 8, Q, k10 + { 27, 28, 29 }, // 9, A, k12 + { 30, 31, 32 }, // 10, Z, k14 + { 33, 34, 35 }, // 11, Win_L, k90 + { 36, 37, 38 }, // 12, F2, k36 + { 39, 40, 41 }, // 13, 2, k27 + { 42, 43, 44 }, // 14, W, k20 + { 45, 46, 47 }, // 15, S, k22 + { 48, 49, 50 }, // 16, X, k24 + { 51, 52, 53 }, // 17, Alt_L, k93 + { 54, 55, 56 }, // 18, F3, k31 + { 57, 58, 59 }, // 19, 3, k37 + { 60, 61, 62 }, // 20, E, k30 + { 63, 64, 65 }, // 21, D, k32 + { 66, 67, 68 }, // 22, C, k34 + { 72, 73, 74 }, // 23, F4, k33 + { 75, 76, 77 }, // 24, 4, k47 + { 78, 79, 80 }, // 25, R, k40 + { 81, 82, 83 }, // 26, F, k42 + { 84, 85, 86 }, // 27, V, k44 + { 90, 91, 92 }, // 28, F5, k07 + { 93, 94, 95 }, // 29, 5, k46 + { 96, 97, 98 }, // 30, T, k41 + { 99, 100, 101 }, // 31, G, k43 + { 102, 103, 104 }, // 32, B, k45 + { 105, 106, 107 }, // 33, SPACE, k94 + { 108, 109, 110 }, // 34, F6, k63 + { 111, 112, 113 }, // 35, 6, k56 + { 114, 115, 116 }, // 36, Y, k51 + { 117, 118, 119 }, // 37, H, k53 + { 120, 121, 122 }, // 38, N, k55 + { 126, 127, 128 }, // 39, F7, k71 + { 129, 130, 131 }, // 40, 7, k57 + { 132, 133, 134 }, // 41, U, k50 + { 135, 136, 137 }, // 42, J, k52 + { 138, 139, 140 }, // 43, M, k54 + { 144, 145, 146 }, // 44, F8, k76 + { 147, 148, 149 }, // 45, 8, k67 + { 150, 151, 152 }, // 46, I, k60 + { 153, 154, 155 }, // 47, K, k62 + { 156, 157, 158 }, // 48, ,, k64 + { 159, 160, 161 }, // 49, Alt_R, k95 + { 162, 163, 164 }, // 50, F9, ka6 + { 165, 166, 167 }, // 51, 9, k77 + { 168, 169, 170 }, // 52, O, k70 + { 171, 172, 173 }, // 53, L, k72 + { 174, 175, 176 }, // 54, ., k74 + { 177, 178, 179 }, // 55, FN, k92 + { 180, 181, 182 }, // 56, F10, ka7 + { 183, 184, 185 }, // 57, 0, k87 + { 186, 187, 188 }, // 58, P, k80 + { 189, 190, 191 }, // 59, ;, k82 + { 192, 193, 194 }, // 60, ?, k85 + { 198, 199, 200 }, // 61, F11, ka3 + { 201, 202, 203 }, // 62, -, k86 + { 204, 205, 206 }, // 63, [, k81 + { 207, 208, 209 }, // 64, ", k83 + { 213, 214, 215 }, // 65, Ct_R, k04 +}; + +const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { + { 0, 1, 2 }, // 66, F12, ka5 + { 12, 13, 14 }, // 67, LED, l01 + { 15, 16, 17 }, // 68, LED, l11 + { 18, 19, 20 }, // 69, Prt, k97 + { 30, 31, 32 }, // 70, LED, l02 + { 33, 34, 35 }, // 71, LED, l12 + { 39, 40, 41 }, // 72, Del, k65 + { 48, 49, 50 }, // 73, LED, l03 + { 51, 52, 53 }, // 74, LED, l13 + { 57, 58, 59 }, // 75, PgUp, k15 + { 66, 67, 68 }, // 76, LED, l04 + { 69, 70, 71 }, // 77, LED, l14 + { 72, 73, 74 }, // 78, =, k66 + { 81, 82, 83 }, // 79, Right, k05 + { 84, 85, 86 }, // 80, LED, l05 + { 87, 88, 89 }, // 81, LED, l15 + { 93, 94, 95 }, // 82, End, k75 + { 102, 103, 104 }, // 83, LED, l06 + { 105, 106, 107 }, // 84, LED, l16 + { 108, 109, 110 }, // 85, BSpc, ka1 + { 111, 112, 113 }, // 86, PgDn, k25 + { 120, 121, 122 }, // 87, LED, l07 + { 123, 124, 125 }, // 88, LED, l17 + { 126, 127, 128 }, // 89, ], k61 + { 129, 130, 131 }, // 90, Sh_R, k91 + { 138, 139, 140 }, // 91, LED, l08 + { 141, 142, 143 }, // 92, LED, l18 + { 144, 145, 146 }, // 93, \, ka2 + { 147, 148, 149 }, // 94, Up, k35 + { 165, 166, 167 }, // 95, Left, k03 + { 180, 181, 182 }, // 96, Enter, ka4 + { 183, 184, 185 }, // 97, Down, k73 }; const aw_led *g_aw_leds[DRIVER_COUNT] = { - g_aw_leds_1 + g_aw_leds_1, + g_aw_leds_2 }; #endif From 4edf9a76a007e0a8e92346e9fbe5ca5e6d0aa180 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Fri, 28 May 2021 00:19:17 -0700 Subject: [PATCH 05/21] Return keymap to default --- keyboards/gmmk/pro/keymaps/default/keymap.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/keyboards/gmmk/pro/keymaps/default/keymap.c b/keyboards/gmmk/pro/keymaps/default/keymap.c index 1620a0431ff4..b08400cd8dc3 100644 --- a/keyboards/gmmk/pro/keymaps/default/keymap.c +++ b/keyboards/gmmk/pro/keymaps/default/keymap.c @@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // To put the keyboard in bootloader mode, use FN+backslash. If you accidentally put it into bootloader, you can just unplug the USB cable and // it'll be back to normal when you plug it back in. [0] = LAYOUT( - KC_ESC, RGB_TOG, RGB_MODE_RAINBOW, RGB_MODE_PLAIN, RGB_VAI, RGB_SAI, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_MUTE, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, @@ -63,12 +63,3 @@ bool encoder_update_user(uint8_t index, bool clockwise) { } return true; } - -void keyboard_post_init_user(void) { - debug_enable = true; -#ifdef RGB_MATRIX_ENABLE - rgb_matrix_mode(RGB_MATRIX_SOLID_COLOR); - rgb_matrix_set_color_all(200, 200, 200); - rgb_matrix_enable(); -#endif -} From 1ee0f385b9ac52b69b4d538c9e354a737cdef2b6 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Fri, 28 May 2021 00:24:16 -0700 Subject: [PATCH 06/21] Fix printscreen LED mapping --- keyboards/gmmk/pro/pro.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index ee658bd1cbe5..061ca55ebb53 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -207,7 +207,7 @@ const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { { 0, 1, 2 }, // 66, F12, ka5 { 12, 13, 14 }, // 67, LED, l01 { 15, 16, 17 }, // 68, LED, l11 - { 18, 19, 20 }, // 69, Prt, k97 + { 21, 22, 23 }, // 69, Prt, k97 { 30, 31, 32 }, // 70, LED, l02 { 33, 34, 35 }, // 71, LED, l12 { 39, 40, 41 }, // 72, Del, k65 From ef12fd75ae638933e7486e14ddf417ba51444557 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Sat, 29 May 2021 23:47:36 -0700 Subject: [PATCH 07/21] Reduce max brightness --- drivers/awinic/aw20216.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index 3e22045b3eba..fa50e5c84c6b 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -48,9 +48,8 @@ #define AW_CHIPEN 1 -// The range for these values are supposedly 0-215, I don't know what happens if you exceed this range -#define AW_SCALING_MAX 215 -#define AW_GLOBAL_CURRENT_MAX 215 // Unconfirmed that this is the max +#define AW_SCALING_MAX 150 +#define AW_GLOBAL_CURRENT_MAX 150 uint8_t g_spi_transfer_buffer[20] = { 0 }; aw_led g_pwm_buffer[DRIVER_LED_TOTAL]; From cbf36599345002c0c99608913ccbbdf1c69f5a2e Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Tue, 8 Jun 2021 20:56:56 -0700 Subject: [PATCH 08/21] Default values for AW20216 --- drivers/awinic/aw20216.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index fa50e5c84c6b..4b353ac49473 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -17,10 +17,6 @@ #include "aw20216.h" #include "spi_master.h" -// Data is sent MSB first, leading edge rising, sample on leading edge -// Prescaler 8? -//#define AW_SPI_START(p) spi_start(p, false, 0, 8) - /* The AW20216 appears to be somewhat similar to the IS31FL743, although quite * a few things are different, such as the command byte format and page ordering. * The LED addresses start from 0x00 instead of 0x01. @@ -47,9 +43,21 @@ #define AW_CONFIG_DEFAULT 0b10110000 #define AW_CHIPEN 1 +#ifndef AW_SCALING_MAX +# define AW_SCALING_MAX 150 +#endif + +#ifndef AW_GLOBAL_CURRENT_MAX +# define AW_GLOBAL_CURRENT_MAX 150 +#endif -#define AW_SCALING_MAX 150 -#define AW_GLOBAL_CURRENT_MAX 150 +#ifndef DRIVER_1_CS +# define DRIVER_1_CS B13 +#endif + +#ifndef DRIVER_1_EN +# define DRIVER_1_EN C13 +#endif uint8_t g_spi_transfer_buffer[20] = { 0 }; aw_led g_pwm_buffer[DRIVER_LED_TOTAL]; From e8dbe197fe10534ab5a8be67ea8deeeefd473c00 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Tue, 8 Jun 2021 20:57:50 -0700 Subject: [PATCH 09/21] Add documentation for AW20216 --- docs/feature_rgb_matrix.md | 73 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 169443fb85a5..9f3049905b31 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -227,6 +227,79 @@ Configure the hardware via your `config.h`: #define DRIVER_LED_TOTAL 70 ``` +--- +### AW20216 :id=aw20216 +There is basic support for addressable RGB matrix lighting with the SPI AW20216 RGB controller. To enable it, add this to your `rules.mk`: + +```makefile +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = AW20216 +``` + +You can use up to 2 AW20216 IC's. Do not specify `DRIVER__xxx` defines for IC's that are not present on your keyboard. You can define the following items in `config.h`: + +| Variable | Description | Default | +|----------|-------------|---------| +| `DRIVER_1_CS` | (Required) MCU pin connected to first RGB driver chip select line | B13 | +| `DRIVER_2_CS` | (Optional) MCU pin connected to second RGB driver chip select line | | +| `DRIVER_1_EN` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 | +| `DRIVER_2_EN` | (Optional) MCU pin connected to second RGB driver hardware enable line | | +| `DRIVER_1_LED_TOTAL` | (Required) How many RGB lights are connected to first RGB driver | | +| `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to first second driver | | +| `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | | +| `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | | + +Here is an example using 2 drivers. + +```c +#define DRIVER_1_CS B13 +#define DRIVER_2_CS B14 +// Hardware enable lines may be connected to the same pin +#define DRIVER_1_EN C13 +#define DRIVER_2_EN C13 + +#define DRIVER_COUNT 2 +#define DRIVER_1_LED_TOTAL 66 +#define DRIVER_2_LED_TOTAL 32 +#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) +``` + +!> Note the parentheses, this is so when `DRIVER_LED_TOTAL` is used in code and expanded, the values are added together before any additional math is applied to them. As an example, `rand() % (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)` will give very different results than `rand() % DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL`. + +Define these arrays listing all the LEDs in your `.c`: + +```c +const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { +/* Each AW20216 channel is controlled by a register at + * some offset between 0 and 215 inclusive + * R location + * | G location + * | | B location + * | | | */ + { 0, 1, 2 }, // QMK RGB LED 0 is connected to AW20216 channels 0, 1, 3 + { 3, 4, 5 }, // QMK RGB LED 1 is connected to AW20216 channels 3, 4, 5 + { 6, 7, 8 } // QMK RGB LED 2 is connected to AW20216 channels 6, 7, 8 + ... +}; + +// Don't define this if only using one driver IC +#ifdef DRIVER_2_LED_TOTAL +const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { + { 0, 1, 2 }, + { 12, 13, 14 }, + { 15, 16, 17 } + ... +}; +#endif + +const aw_led *g_aw_leds[DRIVER_COUNT] = { + g_aw_leds_1, +#ifdef DRIVER_2_LED_TOTAL + g_aw_leds_2 +#endif +}; +``` + --- From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example: From 2f91099cd3d019002b9f7dd28012344bd91abc92 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Tue, 8 Jun 2021 21:03:24 -0700 Subject: [PATCH 10/21] Disable console and warnings --- keyboards/gmmk/pro/rules.mk | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/keyboards/gmmk/pro/rules.mk b/keyboards/gmmk/pro/rules.mk index 4404cf5aa830..6221d6408272 100644 --- a/keyboards/gmmk/pro/rules.mk +++ b/keyboards/gmmk/pro/rules.mk @@ -10,7 +10,7 @@ BOOTLOADER = stm32-dfu BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration MOUSEKEY_ENABLE = yes # Mouse keys EXTRAKEY_ENABLE = yes # Audio control and System control -CONSOLE_ENABLE = yes # Console for debug +CONSOLE_ENABLE = no # Console for debug COMMAND_ENABLE = no # Commands for debug and configuration # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend @@ -23,4 +23,3 @@ AUDIO_ENABLE = no # Audio output ENCODER_ENABLE = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = AW20216 -ALLOW_WARNINGS = yes From cef8925511ed155e51c621ae1f7c046510f1b383 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Tue, 8 Jun 2021 21:15:58 -0700 Subject: [PATCH 11/21] Run cformat --- drivers/awinic/aw20216.c | 40 ++++++++++++++++++------------------ drivers/awinic/aw20216.h | 1 - quantum/rgb_matrix_drivers.c | 6 +++--- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index 4b353ac49473..80ccc1d19681 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -30,10 +30,10 @@ #define AW_PAGE_PWMSCALING 0x04 << 1 // PG4, LED PWM + Scaling control? #define AW_WRITE 0 -#define AW_READ 1 +#define AW_READ 1 -#define AW_REG_CONFIGURATION 0x00 // PG0 -#define AW_REG_GLOBALCURRENT 0x01 // PG0 +#define AW_REG_CONFIGURATION 0x00 // PG0 +#define AW_REG_GLOBALCURRENT 0x01 // PG0 // Default value of AW_REG_CONFIGURATION // D7:D4 = 1011, SWSEL (SW1~SW12 active) @@ -44,24 +44,24 @@ #define AW_CHIPEN 1 #ifndef AW_SCALING_MAX -# define AW_SCALING_MAX 150 +# define AW_SCALING_MAX 150 #endif #ifndef AW_GLOBAL_CURRENT_MAX -# define AW_GLOBAL_CURRENT_MAX 150 +# define AW_GLOBAL_CURRENT_MAX 150 #endif #ifndef DRIVER_1_CS -# define DRIVER_1_CS B13 +# define DRIVER_1_CS B13 #endif #ifndef DRIVER_1_EN -# define DRIVER_1_EN C13 +# define DRIVER_1_EN C13 #endif -uint8_t g_spi_transfer_buffer[20] = { 0 }; -aw_led g_pwm_buffer[DRIVER_LED_TOTAL]; -bool g_pwm_buffer_update_required[DRIVER_LED_TOTAL]; +uint8_t g_spi_transfer_buffer[20] = {0}; +aw_led g_pwm_buffer[DRIVER_LED_TOTAL]; +bool g_pwm_buffer_update_required[DRIVER_LED_TOTAL]; bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t data) { // Do we need to call spi_stop() if this fails? @@ -83,14 +83,14 @@ bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t bool AW20216_init_scaling(void) { // Set constant current to the max, control brightness with PWM - for(uint8_t i = 0; i < DRIVER_1_LED_TOTAL; i++) { + for (uint8_t i = 0; i < DRIVER_1_LED_TOTAL; i++) { AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].r, AW_SCALING_MAX); AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].g, AW_SCALING_MAX); AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].b, AW_SCALING_MAX); } #ifdef DRIVER_2_CS - for(uint8_t i = 0; i < DRIVER_2_LED_TOTAL; i++) { + for (uint8_t i = 0; i < DRIVER_2_LED_TOTAL; i++) { AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].r, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].g, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].b, AW_SCALING_MAX); @@ -108,12 +108,12 @@ bool AW20216_soft_enable(void) { } void AW20216_update_pwm(int index, uint8_t red, uint8_t green, uint8_t blue) { - pin_t cs = DRIVER_1_CS; + pin_t cs = DRIVER_1_CS; uint8_t driver = 0; #ifdef DRIVER_2_CS if (index >= DRIVER_1_LED_TOTAL) { index -= DRIVER_1_LED_TOTAL; - cs = DRIVER_2_CS; + cs = DRIVER_2_CS; driver = 1; } #endif @@ -135,14 +135,14 @@ void AW20216_init(void) { #endif AW20216_init_scaling(); AW20216_soft_enable(); - //AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, 1, 200); + // AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, 1, 200); return; } void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) { - g_pwm_buffer[index].r = red; - g_pwm_buffer[index].g = green; - g_pwm_buffer[index].b = blue; + g_pwm_buffer[index].r = red; + g_pwm_buffer[index].g = green; + g_pwm_buffer[index].b = blue; g_pwm_buffer_update_required[index] = true; return; } @@ -153,8 +153,8 @@ void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { return; } void AW20216_update_pwm_buffers(void) { - for(uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { - if(g_pwm_buffer_update_required[i]) { + for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { + if (g_pwm_buffer_update_required[i]) { AW20216_update_pwm(i, g_pwm_buffer[i].r, g_pwm_buffer[i].g, g_pwm_buffer[i].b); g_pwm_buffer_update_required[i] = false; } diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index b187a2fdc180..ee41823fadd7 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -31,7 +31,6 @@ extern const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL]; #endif extern const aw_led *g_aw_leds[DRIVER_COUNT]; - void AW20216_init(void); void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue); diff --git a/quantum/rgb_matrix_drivers.c b/quantum/rgb_matrix_drivers.c index 75df648e271f..6a11d4791e5f 100644 --- a/quantum/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix_drivers.c @@ -181,9 +181,9 @@ static void init(void) { static void flush(void) { AW20216_update_pwm_buffers(); } const rgb_matrix_driver_t rgb_matrix_driver = { - .init = init, - .flush = flush, - .set_color = AW20216_set_color, + .init = init, + .flush = flush, + .set_color = AW20216_set_color, .set_color_all = AW20216_set_color_all, }; From f76cca44d8221bf5f4a6d69ef330ecbc2cdb2674 Mon Sep 17 00:00:00 2001 From: Gigahawk Date: Wed, 9 Jun 2021 00:23:12 -0700 Subject: [PATCH 12/21] Update drivers/awinic/aw20216.h Co-authored-by: Drashna Jaelre --- drivers/awinic/aw20216.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index ee41823fadd7..cda6937bab1f 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -26,10 +26,6 @@ typedef struct aw_led { } aw_led; extern const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL]; -#ifdef DRIVER_2_LED_TOTAL -extern const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL]; -#endif -extern const aw_led *g_aw_leds[DRIVER_COUNT]; void AW20216_init(void); void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); From 9c76df1f933daa498977d65dba04fa83c795b42c Mon Sep 17 00:00:00 2001 From: Gigahawk Date: Wed, 9 Jun 2021 00:23:42 -0700 Subject: [PATCH 13/21] make aw struct match issi struct Co-authored-by: Drashna Jaelre --- drivers/awinic/aw20216.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index cda6937bab1f..ac4923341cc9 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -20,6 +20,7 @@ #include typedef struct aw_led { + uint8_t driver : 2; uint8_t r; uint8_t g; uint8_t b; From 1fd7e8005267d5896ada5731c2b7c1dddbf1da26 Mon Sep 17 00:00:00 2001 From: Gigahawk Date: Wed, 9 Jun 2021 00:24:05 -0700 Subject: [PATCH 14/21] add led location defines Co-authored-by: Drashna Jaelre --- drivers/awinic/aw20216.h | 217 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index ac4923341cc9..2cce4ad2301c 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -32,3 +32,220 @@ void AW20216_init(void); void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); void AW20216_set_color_all(uint8_t red, uint8_t green, uint8_t blue); void AW20216_update_pwm_buffers(void); + +#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 +#define CS1_SW12 0xC6 +#define CS2_SW12 0xC7 +#define CS3_SW12 0xC8 +#define CS4_SW12 0xC9 +#define CS5_SW12 0xCA +#define CS6_SW12 0xCB +#define CS7_SW12 0xCC +#define CS8_SW12 0xCD +#define CS9_SW12 0xCE +#define CS10_SW12 0xCF +#define CS11_SW12 0xD0 +#define CS12_SW12 0xD1 +#define CS13_SW12 0xD2 +#define CS14_SW12 0xD3 +#define CS15_SW12 0xD4 +#define CS16_SW12 0xD5 +#define CS17_SW12 0xD6 +#define CS18_SW12 0xD7 From 7d0482ac33f60e9b93dc468c9f7aa0f9d32fd6b4 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:19:34 -0700 Subject: [PATCH 15/21] Use led pin definitions in keyboard.c --- drivers/awinic/aw20216.c | 45 +++++---- drivers/awinic/aw20216.h | 2 +- keyboards/gmmk/pro/pro.c | 205 +++++++++++++++++++-------------------- 3 files changed, 124 insertions(+), 128 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index 80ccc1d19681..d538b1d9cee4 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -83,19 +83,22 @@ bool AW20216_write_register(pin_t slave_pin, uint8_t page, uint8_t reg, uint8_t bool AW20216_init_scaling(void) { // Set constant current to the max, control brightness with PWM - for (uint8_t i = 0; i < DRIVER_1_LED_TOTAL; i++) { - AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].r, AW_SCALING_MAX); - AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].g, AW_SCALING_MAX); - AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, g_aw_leds_1[i].b, AW_SCALING_MAX); - } - + aw_led led; + for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { + led = g_aw_leds[i]; + if(led.driver == 0) { + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.r, AW_SCALING_MAX); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.g, AW_SCALING_MAX); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); + } #ifdef DRIVER_2_CS - for (uint8_t i = 0; i < DRIVER_2_LED_TOTAL; i++) { - AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].r, AW_SCALING_MAX); - AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].g, AW_SCALING_MAX); - AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, g_aw_leds_2[i].b, AW_SCALING_MAX); - } + elif(led.driver == 1) { + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.r, AW_SCALING_MAX); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.g, AW_SCALING_MAX); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); + } #endif + } return true; } @@ -108,18 +111,19 @@ bool AW20216_soft_enable(void) { } void AW20216_update_pwm(int index, uint8_t red, uint8_t green, uint8_t blue) { - pin_t cs = DRIVER_1_CS; - uint8_t driver = 0; + aw_led led = g_aw_leds[index]; + if(led.driver == 0) { + AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.r, red); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.g, green); + AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.b, blue); + } #ifdef DRIVER_2_CS - if (index >= DRIVER_1_LED_TOTAL) { - index -= DRIVER_1_LED_TOTAL; - cs = DRIVER_2_CS; - driver = 1; + elif(led.driver == 1) { + AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.r, red); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.g, green); + AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.b, blue); } #endif - AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].r, red); - AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].g, green); - AW20216_write_register(cs, AW_PAGE_PWM, g_aw_leds[driver][index].b, blue); return; } @@ -135,7 +139,6 @@ void AW20216_init(void) { #endif AW20216_init_scaling(); AW20216_soft_enable(); - // AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, 1, 200); return; } diff --git a/drivers/awinic/aw20216.h b/drivers/awinic/aw20216.h index 2cce4ad2301c..9c6865cc8248 100644 --- a/drivers/awinic/aw20216.h +++ b/drivers/awinic/aw20216.h @@ -26,7 +26,7 @@ typedef struct aw_led { uint8_t b; } aw_led; -extern const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL]; +extern const aw_led g_aw_leds[DRIVER_LED_TOTAL]; void AW20216_init(void); void AW20216_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index 061ca55ebb53..e7068380d89e 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -134,112 +134,105 @@ 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 aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { - { 0, 1, 2 }, // 0, ESC, k13 - { 3, 4, 5 }, // 1, ~, k16 - { 6, 7, 8 }, // 2, Tab, k11 - { 9, 10, 11 }, // 3, Caps, k21 - { 12, 13, 14 }, // 4, Sh_L, k00 - { 15, 16, 17 }, // 5, Ct_L, k06 - { 18, 19, 20 }, // 6, F1, k26 - { 21, 22, 23 }, // 7, 1, k17 - { 24, 25, 26 }, // 8, Q, k10 - { 27, 28, 29 }, // 9, A, k12 - { 30, 31, 32 }, // 10, Z, k14 - { 33, 34, 35 }, // 11, Win_L, k90 - { 36, 37, 38 }, // 12, F2, k36 - { 39, 40, 41 }, // 13, 2, k27 - { 42, 43, 44 }, // 14, W, k20 - { 45, 46, 47 }, // 15, S, k22 - { 48, 49, 50 }, // 16, X, k24 - { 51, 52, 53 }, // 17, Alt_L, k93 - { 54, 55, 56 }, // 18, F3, k31 - { 57, 58, 59 }, // 19, 3, k37 - { 60, 61, 62 }, // 20, E, k30 - { 63, 64, 65 }, // 21, D, k32 - { 66, 67, 68 }, // 22, C, k34 - { 72, 73, 74 }, // 23, F4, k33 - { 75, 76, 77 }, // 24, 4, k47 - { 78, 79, 80 }, // 25, R, k40 - { 81, 82, 83 }, // 26, F, k42 - { 84, 85, 86 }, // 27, V, k44 - { 90, 91, 92 }, // 28, F5, k07 - { 93, 94, 95 }, // 29, 5, k46 - { 96, 97, 98 }, // 30, T, k41 - { 99, 100, 101 }, // 31, G, k43 - { 102, 103, 104 }, // 32, B, k45 - { 105, 106, 107 }, // 33, SPACE, k94 - { 108, 109, 110 }, // 34, F6, k63 - { 111, 112, 113 }, // 35, 6, k56 - { 114, 115, 116 }, // 36, Y, k51 - { 117, 118, 119 }, // 37, H, k53 - { 120, 121, 122 }, // 38, N, k55 - { 126, 127, 128 }, // 39, F7, k71 - { 129, 130, 131 }, // 40, 7, k57 - { 132, 133, 134 }, // 41, U, k50 - { 135, 136, 137 }, // 42, J, k52 - { 138, 139, 140 }, // 43, M, k54 - { 144, 145, 146 }, // 44, F8, k76 - { 147, 148, 149 }, // 45, 8, k67 - { 150, 151, 152 }, // 46, I, k60 - { 153, 154, 155 }, // 47, K, k62 - { 156, 157, 158 }, // 48, ,, k64 - { 159, 160, 161 }, // 49, Alt_R, k95 - { 162, 163, 164 }, // 50, F9, ka6 - { 165, 166, 167 }, // 51, 9, k77 - { 168, 169, 170 }, // 52, O, k70 - { 171, 172, 173 }, // 53, L, k72 - { 174, 175, 176 }, // 54, ., k74 - { 177, 178, 179 }, // 55, FN, k92 - { 180, 181, 182 }, // 56, F10, ka7 - { 183, 184, 185 }, // 57, 0, k87 - { 186, 187, 188 }, // 58, P, k80 - { 189, 190, 191 }, // 59, ;, k82 - { 192, 193, 194 }, // 60, ?, k85 - { 198, 199, 200 }, // 61, F11, ka3 - { 201, 202, 203 }, // 62, -, k86 - { 204, 205, 206 }, // 63, [, k81 - { 207, 208, 209 }, // 64, ", k83 - { 213, 214, 215 }, // 65, Ct_R, k04 -}; - -const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { - { 0, 1, 2 }, // 66, F12, ka5 - { 12, 13, 14 }, // 67, LED, l01 - { 15, 16, 17 }, // 68, LED, l11 - { 21, 22, 23 }, // 69, Prt, k97 - { 30, 31, 32 }, // 70, LED, l02 - { 33, 34, 35 }, // 71, LED, l12 - { 39, 40, 41 }, // 72, Del, k65 - { 48, 49, 50 }, // 73, LED, l03 - { 51, 52, 53 }, // 74, LED, l13 - { 57, 58, 59 }, // 75, PgUp, k15 - { 66, 67, 68 }, // 76, LED, l04 - { 69, 70, 71 }, // 77, LED, l14 - { 72, 73, 74 }, // 78, =, k66 - { 81, 82, 83 }, // 79, Right, k05 - { 84, 85, 86 }, // 80, LED, l05 - { 87, 88, 89 }, // 81, LED, l15 - { 93, 94, 95 }, // 82, End, k75 - { 102, 103, 104 }, // 83, LED, l06 - { 105, 106, 107 }, // 84, LED, l16 - { 108, 109, 110 }, // 85, BSpc, ka1 - { 111, 112, 113 }, // 86, PgDn, k25 - { 120, 121, 122 }, // 87, LED, l07 - { 123, 124, 125 }, // 88, LED, l17 - { 126, 127, 128 }, // 89, ], k61 - { 129, 130, 131 }, // 90, Sh_R, k91 - { 138, 139, 140 }, // 91, LED, l08 - { 141, 142, 143 }, // 92, LED, l18 - { 144, 145, 146 }, // 93, \, ka2 - { 147, 148, 149 }, // 94, Up, k35 - { 165, 166, 167 }, // 95, Left, k03 - { 180, 181, 182 }, // 96, Enter, ka4 - { 183, 184, 185 }, // 97, Down, k73 -}; +const aw_led g_aw_leds[DRIVER_LED_TOTAL] = { + { CS1_SW1, CS2_SW1, CS3_SW1 }, // 0, ESC, k13 + { CS4_SW1, CS5_SW1, CS6_SW1 }, // 1, ~, k16 + { CS7_SW1, CS8_SW1, CS9_SW1 }, // 2, Tab, k11 + { CS10_SW1, CS11_SW1, CS12_SW1 }, // 3, Caps, k21 + { CS13_SW1, CS14_SW1, CS15_SW1 }, // 4, Sh_L, k00 + { CS16_SW1, CS17_SW1, CS18_SW1 }, // 5, Ct_L, k06 + { CS1_SW2, CS2_SW2, CS3_SW2 }, // 6, F1, k26 + { CS4_SW2, CS5_SW2, CS6_SW2 }, // 7, 1, k17 + { CS7_SW2, CS8_SW2, CS9_SW2 }, // 8, Q, k10 + { CS10_SW2, CS11_SW2, CS12_SW2 }, // 9, A, k12 + { CS13_SW2, CS14_SW2, CS15_SW2 }, // 10, Z, k14 + { CS16_SW2, CS17_SW2, CS18_SW2 }, // 11, Win_L, k90 + { CS1_SW3, CS2_SW3, CS3_SW3 }, // 12, F2, k36 + { CS4_SW3, CS5_SW3, CS6_SW3 }, // 13, 2, k27 + { CS7_SW3, CS8_SW3, CS9_SW3 }, // 14, W, k20 + { CS10_SW3, CS11_SW3, CS12_SW3 }, // 15, S, k22 + { CS13_SW3, CS14_SW3, CS15_SW3 }, // 16, X, k24 + { CS16_SW3, CS17_SW3, CS18_SW3 }, // 17, Alt_L, k93 + { CS1_SW4, CS2_SW4, CS3_SW4 }, // 18, F3, k31 + { CS4_SW4, CS5_SW4, CS6_SW4 }, // 19, 3, k37 + { CS7_SW4, CS8_SW4, CS9_SW4 }, // 20, E, k30 + { CS10_SW4, CS11_SW4, CS12_SW4 }, // 21, D, k32 + { CS13_SW4, CS14_SW4, CS15_SW4 }, // 22, C, k34 + { CS1_SW5, CS2_SW5, CS3_SW5 }, // 23, F4, k33 + { CS4_SW5, CS5_SW5, CS6_SW5 }, // 24, 4, k47 + { CS7_SW5, CS8_SW5, CS9_SW5 }, // 25, R, k40 + { CS10_SW5, CS11_SW5, CS12_SW5 }, // 26, F, k42 + { CS13_SW5, CS14_SW5, CS15_SW5 }, // 27, V, k44 + { CS1_SW6, CS2_SW6, CS3_SW6 }, // 28, F5, k07 + { CS4_SW6, CS5_SW6, CS6_SW6 }, // 29, 5, k46 + { CS7_SW6, CS8_SW6, CS9_SW6 }, // 30, T, k41 + { CS10_SW6, CS11_SW6, CS12_SW6 }, // 31, G, k43 + { CS13_SW6, CS14_SW6, CS15_SW6 }, // 32, B, k45 + { CS16_SW6, CS17_SW6, CS18_SW6 }, // 33, SPACE, k94 + { CS1_SW7, CS2_SW7, CS3_SW7 }, // 34, F6, k63 + { CS4_SW7, CS5_SW7, CS6_SW7 }, // 35, 6, k56 + { CS7_SW7, CS8_SW7, CS9_SW7 }, // 36, Y, k51 + { CS10_SW7, CS11_SW7, CS12_SW7 }, // 37, H, k53 + { CS13_SW7, CS14_SW7, CS15_SW7 }, // 38, N, k55 + { CS1_SW8, CS2_SW8, CS3_SW8 }, // 39, F7, k71 + { CS4_SW8, CS5_SW8, CS6_SW8 }, // 40, 7, k57 + { CS7_SW8, CS8_SW8, CS9_SW8 }, // 41, U, k50 + { CS10_SW8, CS11_SW8, CS12_SW8 }, // 42, J, k52 + { CS13_SW8, CS14_SW8, CS15_SW8 }, // 43, M, k54 + { CS1_SW9, CS2_SW9, CS3_SW9 }, // 44, F8, k76 + { CS4_SW9, CS5_SW9, CS6_SW9 }, // 45, 8, k67 + { CS7_SW9, CS8_SW9, CS9_SW9 }, // 46, I, k60 + { CS10_SW9, CS11_SW9, CS12_SW9 }, // 47, K, k62 + { CS13_SW9, CS14_SW9, CS15_SW9 }, // 48, ,, k64 + { CS16_SW9, CS17_SW9, CS18_SW9 }, // 49, Alt_R, k95 + { CS1_SW10, CS2_SW10, CS3_SW10 }, // 50, F9, ka6 + { CS4_SW10, CS5_SW10, CS6_SW10 }, // 51, 9, k77 + { CS7_SW10, CS8_SW10, CS9_SW10 }, // 52, O, k70 + { CS10_SW10, CS11_SW10, CS12_SW10 }, // 53, L, k72 + { CS13_SW10, CS14_SW10, CS15_SW10 }, // 54, ., k74 + { CS16_SW10, CS17_SW10, CS18_SW10 }, // 55, FN, k92 + { CS1_SW11, CS2_SW11, CS3_SW11 }, // 56, F10, ka7 + { CS4_SW11, CS5_SW11, CS6_SW11 }, // 57, 0, k87 + { CS7_SW11, CS8_SW11, CS9_SW11 }, // 58, P, k80 + { CS10_SW11, CS11_SW11, CS12_SW11 }, // 59, ;, k82 + { CS13_SW11, CS14_SW11, CS15_SW11 }, // 60, ?, k85 + { CS1_SW12, CS2_SW12, CS3_SW12 }, // 61, F11, ka3 + { CS4_SW12, CS5_SW12, CS6_SW12 }, // 62, -, k86 + { CS7_SW12, CS8_SW12, CS9_SW12 }, // 63, [, k81 + { CS10_SW12, CS11_SW12, CS12_SW12 }, // 64, ", k83 + { CS16_SW12, CS17_SW12, CS18_SW12 }, // 65, Ct_R, k04 -const aw_led *g_aw_leds[DRIVER_COUNT] = { - g_aw_leds_1, - g_aw_leds_2 + { CS1_SW1, CS2_SW1, CS3_SW1 }, // 66, F12, ka5 + { CS13_SW1, CS14_SW1, CS15_SW1 }, // 67, LED, l01 + { CS16_SW1, CS17_SW1, CS18_SW1 }, // 68, LED, l11 + { CS4_SW2, CS5_SW2, CS6_SW2 }, // 69, Prt, k97 + { CS13_SW2, CS14_SW2, CS15_SW2 }, // 70, LED, l02 + { CS16_SW2, CS17_SW2, CS18_SW2 }, // 71, LED, l12 + { CS4_SW3, CS5_SW3, CS6_SW3 }, // 72, Del, k65 + { CS13_SW3, CS14_SW3, CS15_SW3 }, // 73, LED, l03 + { CS16_SW3, CS17_SW3, CS18_SW3 }, // 74, LED, l13 + { CS4_SW4, CS5_SW4, CS6_SW4 }, // 75, PgUp, k15 + { CS13_SW4, CS14_SW4, CS15_SW4 }, // 76, LED, l04 + { CS16_SW4, CS17_SW4, CS18_SW4 }, // 77, LED, l14 + { CS1_SW5, CS2_SW5, CS3_SW5 }, // 78, =, k66 + { CS10_SW5, CS11_SW5, CS12_SW5 }, // 79, Right, k05 + { CS13_SW5, CS14_SW5, CS15_SW5 }, // 80, LED, l05 + { CS16_SW5, CS17_SW5, CS18_SW5 }, // 81, LED, l15 + { CS4_SW6, CS5_SW6, CS6_SW6 }, // 82, End, k75 + { CS13_SW6, CS14_SW6, CS15_SW6 }, // 83, LED, l06 + { CS16_SW6, CS17_SW6, CS18_SW6 }, // 84, LED, l16 + { CS1_SW7, CS2_SW7, CS3_SW7 }, // 85, BSpc, ka1 + { CS4_SW7, CS5_SW7, CS6_SW7 }, // 86, PgDn, k25 + { CS13_SW7, CS14_SW7, CS15_SW7 }, // 87, LED, l07 + { CS16_SW7, CS17_SW7, CS18_SW7 }, // 88, LED, l17 + { CS1_SW8, CS2_SW8, CS3_SW8 }, // 89, ], k61 + { CS4_SW8, CS5_SW8, CS6_SW8 }, // 90, Sh_R, k91 + { CS13_SW8, CS14_SW8, CS15_SW8 }, // 91, LED, l08 + { CS16_SW8, CS17_SW8, CS18_SW8 }, // 92, LED, l18 + { CS1_SW9, CS2_SW9, CS3_SW9 }, // 93, \, ka2 + { CS4_SW9, CS5_SW9, CS6_SW9 }, // 94, Up, k35 + { CS4_SW10, CS5_SW10, CS6_SW10 }, // 95, Left, k03 + { CS1_SW11, CS2_SW11, CS3_SW11 }, // 96, Enter, ka4 + { CS4_SW11, CS5_SW11, CS6_SW11 }, // 97, Down, k73 }; #endif From e05f75c6d827099c417553b2f1d07a2a9a1b3d49 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:24:39 -0700 Subject: [PATCH 16/21] Add driver indices to led map --- keyboards/gmmk/pro/pro.c | 196 +++++++++++++++++++-------------------- 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/keyboards/gmmk/pro/pro.c b/keyboards/gmmk/pro/pro.c index e7068380d89e..3a343f223796 100644 --- a/keyboards/gmmk/pro/pro.c +++ b/keyboards/gmmk/pro/pro.c @@ -135,104 +135,104 @@ led_config_t g_led_config = { { } }; const aw_led g_aw_leds[DRIVER_LED_TOTAL] = { - { CS1_SW1, CS2_SW1, CS3_SW1 }, // 0, ESC, k13 - { CS4_SW1, CS5_SW1, CS6_SW1 }, // 1, ~, k16 - { CS7_SW1, CS8_SW1, CS9_SW1 }, // 2, Tab, k11 - { CS10_SW1, CS11_SW1, CS12_SW1 }, // 3, Caps, k21 - { CS13_SW1, CS14_SW1, CS15_SW1 }, // 4, Sh_L, k00 - { CS16_SW1, CS17_SW1, CS18_SW1 }, // 5, Ct_L, k06 - { CS1_SW2, CS2_SW2, CS3_SW2 }, // 6, F1, k26 - { CS4_SW2, CS5_SW2, CS6_SW2 }, // 7, 1, k17 - { CS7_SW2, CS8_SW2, CS9_SW2 }, // 8, Q, k10 - { CS10_SW2, CS11_SW2, CS12_SW2 }, // 9, A, k12 - { CS13_SW2, CS14_SW2, CS15_SW2 }, // 10, Z, k14 - { CS16_SW2, CS17_SW2, CS18_SW2 }, // 11, Win_L, k90 - { CS1_SW3, CS2_SW3, CS3_SW3 }, // 12, F2, k36 - { CS4_SW3, CS5_SW3, CS6_SW3 }, // 13, 2, k27 - { CS7_SW3, CS8_SW3, CS9_SW3 }, // 14, W, k20 - { CS10_SW3, CS11_SW3, CS12_SW3 }, // 15, S, k22 - { CS13_SW3, CS14_SW3, CS15_SW3 }, // 16, X, k24 - { CS16_SW3, CS17_SW3, CS18_SW3 }, // 17, Alt_L, k93 - { CS1_SW4, CS2_SW4, CS3_SW4 }, // 18, F3, k31 - { CS4_SW4, CS5_SW4, CS6_SW4 }, // 19, 3, k37 - { CS7_SW4, CS8_SW4, CS9_SW4 }, // 20, E, k30 - { CS10_SW4, CS11_SW4, CS12_SW4 }, // 21, D, k32 - { CS13_SW4, CS14_SW4, CS15_SW4 }, // 22, C, k34 - { CS1_SW5, CS2_SW5, CS3_SW5 }, // 23, F4, k33 - { CS4_SW5, CS5_SW5, CS6_SW5 }, // 24, 4, k47 - { CS7_SW5, CS8_SW5, CS9_SW5 }, // 25, R, k40 - { CS10_SW5, CS11_SW5, CS12_SW5 }, // 26, F, k42 - { CS13_SW5, CS14_SW5, CS15_SW5 }, // 27, V, k44 - { CS1_SW6, CS2_SW6, CS3_SW6 }, // 28, F5, k07 - { CS4_SW6, CS5_SW6, CS6_SW6 }, // 29, 5, k46 - { CS7_SW6, CS8_SW6, CS9_SW6 }, // 30, T, k41 - { CS10_SW6, CS11_SW6, CS12_SW6 }, // 31, G, k43 - { CS13_SW6, CS14_SW6, CS15_SW6 }, // 32, B, k45 - { CS16_SW6, CS17_SW6, CS18_SW6 }, // 33, SPACE, k94 - { CS1_SW7, CS2_SW7, CS3_SW7 }, // 34, F6, k63 - { CS4_SW7, CS5_SW7, CS6_SW7 }, // 35, 6, k56 - { CS7_SW7, CS8_SW7, CS9_SW7 }, // 36, Y, k51 - { CS10_SW7, CS11_SW7, CS12_SW7 }, // 37, H, k53 - { CS13_SW7, CS14_SW7, CS15_SW7 }, // 38, N, k55 - { CS1_SW8, CS2_SW8, CS3_SW8 }, // 39, F7, k71 - { CS4_SW8, CS5_SW8, CS6_SW8 }, // 40, 7, k57 - { CS7_SW8, CS8_SW8, CS9_SW8 }, // 41, U, k50 - { CS10_SW8, CS11_SW8, CS12_SW8 }, // 42, J, k52 - { CS13_SW8, CS14_SW8, CS15_SW8 }, // 43, M, k54 - { CS1_SW9, CS2_SW9, CS3_SW9 }, // 44, F8, k76 - { CS4_SW9, CS5_SW9, CS6_SW9 }, // 45, 8, k67 - { CS7_SW9, CS8_SW9, CS9_SW9 }, // 46, I, k60 - { CS10_SW9, CS11_SW9, CS12_SW9 }, // 47, K, k62 - { CS13_SW9, CS14_SW9, CS15_SW9 }, // 48, ,, k64 - { CS16_SW9, CS17_SW9, CS18_SW9 }, // 49, Alt_R, k95 - { CS1_SW10, CS2_SW10, CS3_SW10 }, // 50, F9, ka6 - { CS4_SW10, CS5_SW10, CS6_SW10 }, // 51, 9, k77 - { CS7_SW10, CS8_SW10, CS9_SW10 }, // 52, O, k70 - { CS10_SW10, CS11_SW10, CS12_SW10 }, // 53, L, k72 - { CS13_SW10, CS14_SW10, CS15_SW10 }, // 54, ., k74 - { CS16_SW10, CS17_SW10, CS18_SW10 }, // 55, FN, k92 - { CS1_SW11, CS2_SW11, CS3_SW11 }, // 56, F10, ka7 - { CS4_SW11, CS5_SW11, CS6_SW11 }, // 57, 0, k87 - { CS7_SW11, CS8_SW11, CS9_SW11 }, // 58, P, k80 - { CS10_SW11, CS11_SW11, CS12_SW11 }, // 59, ;, k82 - { CS13_SW11, CS14_SW11, CS15_SW11 }, // 60, ?, k85 - { CS1_SW12, CS2_SW12, CS3_SW12 }, // 61, F11, ka3 - { CS4_SW12, CS5_SW12, CS6_SW12 }, // 62, -, k86 - { CS7_SW12, CS8_SW12, CS9_SW12 }, // 63, [, k81 - { CS10_SW12, CS11_SW12, CS12_SW12 }, // 64, ", k83 - { CS16_SW12, CS17_SW12, CS18_SW12 }, // 65, Ct_R, k04 + { 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 + { 0, CS10_SW1, CS11_SW1, CS12_SW1 }, // 3, Caps, k21 + { 0, CS13_SW1, CS14_SW1, CS15_SW1 }, // 4, Sh_L, k00 + { 0, CS16_SW1, CS17_SW1, CS18_SW1 }, // 5, Ct_L, k06 + { 0, CS1_SW2, CS2_SW2, CS3_SW2 }, // 6, F1, k26 + { 0, CS4_SW2, CS5_SW2, CS6_SW2 }, // 7, 1, k17 + { 0, CS7_SW2, CS8_SW2, CS9_SW2 }, // 8, Q, k10 + { 0, CS10_SW2, CS11_SW2, CS12_SW2 }, // 9, A, k12 + { 0, CS13_SW2, CS14_SW2, CS15_SW2 }, // 10, Z, k14 + { 0, CS16_SW2, CS17_SW2, CS18_SW2 }, // 11, Win_L, k90 + { 0, CS1_SW3, CS2_SW3, CS3_SW3 }, // 12, F2, k36 + { 0, CS4_SW3, CS5_SW3, CS6_SW3 }, // 13, 2, k27 + { 0, CS7_SW3, CS8_SW3, CS9_SW3 }, // 14, W, k20 + { 0, CS10_SW3, CS11_SW3, CS12_SW3 }, // 15, S, k22 + { 0, CS13_SW3, CS14_SW3, CS15_SW3 }, // 16, X, k24 + { 0, CS16_SW3, CS17_SW3, CS18_SW3 }, // 17, Alt_L, k93 + { 0, CS1_SW4, CS2_SW4, CS3_SW4 }, // 18, F3, k31 + { 0, CS4_SW4, CS5_SW4, CS6_SW4 }, // 19, 3, k37 + { 0, CS7_SW4, CS8_SW4, CS9_SW4 }, // 20, E, k30 + { 0, CS10_SW4, CS11_SW4, CS12_SW4 }, // 21, D, k32 + { 0, CS13_SW4, CS14_SW4, CS15_SW4 }, // 22, C, k34 + { 0, CS1_SW5, CS2_SW5, CS3_SW5 }, // 23, F4, k33 + { 0, CS4_SW5, CS5_SW5, CS6_SW5 }, // 24, 4, k47 + { 0, CS7_SW5, CS8_SW5, CS9_SW5 }, // 25, R, k40 + { 0, CS10_SW5, CS11_SW5, CS12_SW5 }, // 26, F, k42 + { 0, CS13_SW5, CS14_SW5, CS15_SW5 }, // 27, V, k44 + { 0, CS1_SW6, CS2_SW6, CS3_SW6 }, // 28, F5, k07 + { 0, CS4_SW6, CS5_SW6, CS6_SW6 }, // 29, 5, k46 + { 0, CS7_SW6, CS8_SW6, CS9_SW6 }, // 30, T, k41 + { 0, CS10_SW6, CS11_SW6, CS12_SW6 }, // 31, G, k43 + { 0, CS13_SW6, CS14_SW6, CS15_SW6 }, // 32, B, k45 + { 0, CS16_SW6, CS17_SW6, CS18_SW6 }, // 33, SPACE, k94 + { 0, CS1_SW7, CS2_SW7, CS3_SW7 }, // 34, F6, k63 + { 0, CS4_SW7, CS5_SW7, CS6_SW7 }, // 35, 6, k56 + { 0, CS7_SW7, CS8_SW7, CS9_SW7 }, // 36, Y, k51 + { 0, CS10_SW7, CS11_SW7, CS12_SW7 }, // 37, H, k53 + { 0, CS13_SW7, CS14_SW7, CS15_SW7 }, // 38, N, k55 + { 0, CS1_SW8, CS2_SW8, CS3_SW8 }, // 39, F7, k71 + { 0, CS4_SW8, CS5_SW8, CS6_SW8 }, // 40, 7, k57 + { 0, CS7_SW8, CS8_SW8, CS9_SW8 }, // 41, U, k50 + { 0, CS10_SW8, CS11_SW8, CS12_SW8 }, // 42, J, k52 + { 0, CS13_SW8, CS14_SW8, CS15_SW8 }, // 43, M, k54 + { 0, CS1_SW9, CS2_SW9, CS3_SW9 }, // 44, F8, k76 + { 0, CS4_SW9, CS5_SW9, CS6_SW9 }, // 45, 8, k67 + { 0, CS7_SW9, CS8_SW9, CS9_SW9 }, // 46, I, k60 + { 0, CS10_SW9, CS11_SW9, CS12_SW9 }, // 47, K, k62 + { 0, CS13_SW9, CS14_SW9, CS15_SW9 }, // 48, ,, k64 + { 0, CS16_SW9, CS17_SW9, CS18_SW9 }, // 49, Alt_R, k95 + { 0, CS1_SW10, CS2_SW10, CS3_SW10 }, // 50, F9, ka6 + { 0, CS4_SW10, CS5_SW10, CS6_SW10 }, // 51, 9, k77 + { 0, CS7_SW10, CS8_SW10, CS9_SW10 }, // 52, O, k70 + { 0, CS10_SW10, CS11_SW10, CS12_SW10 }, // 53, L, k72 + { 0, CS13_SW10, CS14_SW10, CS15_SW10 }, // 54, ., k74 + { 0, CS16_SW10, CS17_SW10, CS18_SW10 }, // 55, FN, k92 + { 0, CS1_SW11, CS2_SW11, CS3_SW11 }, // 56, F10, ka7 + { 0, CS4_SW11, CS5_SW11, CS6_SW11 }, // 57, 0, k87 + { 0, CS7_SW11, CS8_SW11, CS9_SW11 }, // 58, P, k80 + { 0, CS10_SW11, CS11_SW11, CS12_SW11 }, // 59, ;, k82 + { 0, CS13_SW11, CS14_SW11, CS15_SW11 }, // 60, ?, k85 + { 0, CS1_SW12, CS2_SW12, CS3_SW12 }, // 61, F11, ka3 + { 0, CS4_SW12, CS5_SW12, CS6_SW12 }, // 62, -, k86 + { 0, CS7_SW12, CS8_SW12, CS9_SW12 }, // 63, [, k81 + { 0, CS10_SW12, CS11_SW12, CS12_SW12 }, // 64, ", k83 + { 0, CS16_SW12, CS17_SW12, CS18_SW12 }, // 65, Ct_R, k04 - { CS1_SW1, CS2_SW1, CS3_SW1 }, // 66, F12, ka5 - { CS13_SW1, CS14_SW1, CS15_SW1 }, // 67, LED, l01 - { CS16_SW1, CS17_SW1, CS18_SW1 }, // 68, LED, l11 - { CS4_SW2, CS5_SW2, CS6_SW2 }, // 69, Prt, k97 - { CS13_SW2, CS14_SW2, CS15_SW2 }, // 70, LED, l02 - { CS16_SW2, CS17_SW2, CS18_SW2 }, // 71, LED, l12 - { CS4_SW3, CS5_SW3, CS6_SW3 }, // 72, Del, k65 - { CS13_SW3, CS14_SW3, CS15_SW3 }, // 73, LED, l03 - { CS16_SW3, CS17_SW3, CS18_SW3 }, // 74, LED, l13 - { CS4_SW4, CS5_SW4, CS6_SW4 }, // 75, PgUp, k15 - { CS13_SW4, CS14_SW4, CS15_SW4 }, // 76, LED, l04 - { CS16_SW4, CS17_SW4, CS18_SW4 }, // 77, LED, l14 - { CS1_SW5, CS2_SW5, CS3_SW5 }, // 78, =, k66 - { CS10_SW5, CS11_SW5, CS12_SW5 }, // 79, Right, k05 - { CS13_SW5, CS14_SW5, CS15_SW5 }, // 80, LED, l05 - { CS16_SW5, CS17_SW5, CS18_SW5 }, // 81, LED, l15 - { CS4_SW6, CS5_SW6, CS6_SW6 }, // 82, End, k75 - { CS13_SW6, CS14_SW6, CS15_SW6 }, // 83, LED, l06 - { CS16_SW6, CS17_SW6, CS18_SW6 }, // 84, LED, l16 - { CS1_SW7, CS2_SW7, CS3_SW7 }, // 85, BSpc, ka1 - { CS4_SW7, CS5_SW7, CS6_SW7 }, // 86, PgDn, k25 - { CS13_SW7, CS14_SW7, CS15_SW7 }, // 87, LED, l07 - { CS16_SW7, CS17_SW7, CS18_SW7 }, // 88, LED, l17 - { CS1_SW8, CS2_SW8, CS3_SW8 }, // 89, ], k61 - { CS4_SW8, CS5_SW8, CS6_SW8 }, // 90, Sh_R, k91 - { CS13_SW8, CS14_SW8, CS15_SW8 }, // 91, LED, l08 - { CS16_SW8, CS17_SW8, CS18_SW8 }, // 92, LED, l18 - { CS1_SW9, CS2_SW9, CS3_SW9 }, // 93, \, ka2 - { CS4_SW9, CS5_SW9, CS6_SW9 }, // 94, Up, k35 - { CS4_SW10, CS5_SW10, CS6_SW10 }, // 95, Left, k03 - { CS1_SW11, CS2_SW11, CS3_SW11 }, // 96, Enter, ka4 - { CS4_SW11, CS5_SW11, CS6_SW11 }, // 97, Down, k73 + { 1, CS1_SW1, CS2_SW1, CS3_SW1 }, // 66, F12, ka5 + { 1, CS13_SW1, CS14_SW1, CS15_SW1 }, // 67, LED, l01 + { 1, CS16_SW1, CS17_SW1, CS18_SW1 }, // 68, LED, l11 + { 1, CS4_SW2, CS5_SW2, CS6_SW2 }, // 69, Prt, k97 + { 1, CS13_SW2, CS14_SW2, CS15_SW2 }, // 70, LED, l02 + { 1, CS16_SW2, CS17_SW2, CS18_SW2 }, // 71, LED, l12 + { 1, CS4_SW3, CS5_SW3, CS6_SW3 }, // 72, Del, k65 + { 1, CS13_SW3, CS14_SW3, CS15_SW3 }, // 73, LED, l03 + { 1, CS16_SW3, CS17_SW3, CS18_SW3 }, // 74, LED, l13 + { 1, CS4_SW4, CS5_SW4, CS6_SW4 }, // 75, PgUp, k15 + { 1, CS13_SW4, CS14_SW4, CS15_SW4 }, // 76, LED, l04 + { 1, CS16_SW4, CS17_SW4, CS18_SW4 }, // 77, LED, l14 + { 1, CS1_SW5, CS2_SW5, CS3_SW5 }, // 78, =, k66 + { 1, CS10_SW5, CS11_SW5, CS12_SW5 }, // 79, Right, k05 + { 1, CS13_SW5, CS14_SW5, CS15_SW5 }, // 80, LED, l05 + { 1, CS16_SW5, CS17_SW5, CS18_SW5 }, // 81, LED, l15 + { 1, CS4_SW6, CS5_SW6, CS6_SW6 }, // 82, End, k75 + { 1, CS13_SW6, CS14_SW6, CS15_SW6 }, // 83, LED, l06 + { 1, CS16_SW6, CS17_SW6, CS18_SW6 }, // 84, LED, l16 + { 1, CS1_SW7, CS2_SW7, CS3_SW7 }, // 85, BSpc, ka1 + { 1, CS4_SW7, CS5_SW7, CS6_SW7 }, // 86, PgDn, k25 + { 1, CS13_SW7, CS14_SW7, CS15_SW7 }, // 87, LED, l07 + { 1, CS16_SW7, CS17_SW7, CS18_SW7 }, // 88, LED, l17 + { 1, CS1_SW8, CS2_SW8, CS3_SW8 }, // 89, ], k61 + { 1, CS4_SW8, CS5_SW8, CS6_SW8 }, // 90, Sh_R, k91 + { 1, CS13_SW8, CS14_SW8, CS15_SW8 }, // 91, LED, l08 + { 1, CS16_SW8, CS17_SW8, CS18_SW8 }, // 92, LED, l18 + { 1, CS1_SW9, CS2_SW9, CS3_SW9 }, // 93, \, ka2 + { 1, CS4_SW9, CS5_SW9, CS6_SW9 }, // 94, Up, k35 + { 1, CS4_SW10, CS5_SW10, CS6_SW10 }, // 95, Left, k03 + { 1, CS1_SW11, CS2_SW11, CS3_SW11 }, // 96, Enter, ka4 + { 1, CS4_SW11, CS5_SW11, CS6_SW11 }, // 97, Down, k73 }; #endif From 3f3ad0adf2c3f9b82642a0af5a8d330eb7fa3777 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:29:43 -0700 Subject: [PATCH 17/21] Fix elif typo --- drivers/awinic/aw20216.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index d538b1d9cee4..73ad7cb21cce 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -92,7 +92,7 @@ bool AW20216_init_scaling(void) { AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); } #ifdef DRIVER_2_CS - elif(led.driver == 1) { + else if(led.driver == 1) { AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.r, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.g, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); @@ -118,7 +118,7 @@ void AW20216_update_pwm(int index, uint8_t red, uint8_t green, uint8_t blue) { AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.b, blue); } #ifdef DRIVER_2_CS - elif(led.driver == 1) { + else if(led.driver == 1) { AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.r, red); AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.g, green); AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.b, blue); From 9992ab7a002377c7ad0798b33bd70f45d846e96d Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:31:07 -0700 Subject: [PATCH 18/21] Run cformat --- drivers/awinic/aw20216.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/awinic/aw20216.c b/drivers/awinic/aw20216.c index 73ad7cb21cce..236c42a3cd60 100644 --- a/drivers/awinic/aw20216.c +++ b/drivers/awinic/aw20216.c @@ -86,13 +86,13 @@ bool AW20216_init_scaling(void) { aw_led led; for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) { led = g_aw_leds[i]; - if(led.driver == 0) { + if (led.driver == 0) { AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.r, AW_SCALING_MAX); AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.g, AW_SCALING_MAX); AW20216_write_register(DRIVER_1_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); } #ifdef DRIVER_2_CS - else if(led.driver == 1) { + else if (led.driver == 1) { AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.r, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.g, AW_SCALING_MAX); AW20216_write_register(DRIVER_2_CS, AW_PAGE_SCALING, led.b, AW_SCALING_MAX); @@ -112,13 +112,13 @@ bool AW20216_soft_enable(void) { void AW20216_update_pwm(int index, uint8_t red, uint8_t green, uint8_t blue) { aw_led led = g_aw_leds[index]; - if(led.driver == 0) { + if (led.driver == 0) { AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.r, red); AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.g, green); AW20216_write_register(DRIVER_1_CS, AW_PAGE_PWM, led.b, blue); } #ifdef DRIVER_2_CS - else if(led.driver == 1) { + else if (led.driver == 1) { AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.r, red); AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.g, green); AW20216_write_register(DRIVER_2_CS, AW_PAGE_PWM, led.b, blue); From fc1fefef81c708b251ad8feb776c8fc2beff91b3 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:38:13 -0700 Subject: [PATCH 19/21] Update docs --- docs/feature_rgb_matrix.md | 45 ++++++++++++++++---------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 9f3049905b31..739816668102 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -269,35 +269,28 @@ Here is an example using 2 drivers. Define these arrays listing all the LEDs in your `.c`: ```c -const aw_led g_aw_leds_1[DRIVER_1_LED_TOTAL] = { -/* Each AW20216 channel is controlled by a register at - * some offset between 0 and 215 inclusive - * R location - * | G location - * | | B location - * | | | */ - { 0, 1, 2 }, // QMK RGB LED 0 is connected to AW20216 channels 0, 1, 3 - { 3, 4, 5 }, // QMK RGB LED 1 is connected to AW20216 channels 3, 4, 5 - { 6, 7, 8 } // QMK RGB LED 2 is connected to AW20216 channels 6, 7, 8 +const aw_led g_aw_leds[DRIVER_LED_TOTAL] = { +/* Each AW20216 channel is controlled by a register at some offset between 0x00 + * and 0xD7 inclusive. + * See drivers/awinic/aw20216.h for the mapping between register offsets and + * driver pin locations. + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + { 0, CS1_SW1, CS2_SW1, CS3_SW1 }, + { 0, CS4_SW1, CS5_SW1, CS6_SW1 }, + { 0, CS7_SW1, CS8_SW1, CS9_SW1 }, + { 0, CS10_SW1, CS11_SW1, CS12_SW1 }, + { 0, CS13_SW1, CS14_SW1, CS15_SW1 }, ... -}; - -// Don't define this if only using one driver IC -#ifdef DRIVER_2_LED_TOTAL -const aw_led g_aw_leds_2[DRIVER_2_LED_TOTAL] = { - { 0, 1, 2 }, - { 12, 13, 14 }, - { 15, 16, 17 } + { 1, CS1_SW1, CS2_SW1, CS3_SW1 }, + { 1, CS13_SW1, CS14_SW1, CS15_SW1 }, + { 1, CS16_SW1, CS17_SW1, CS18_SW1 }, + { 1, CS4_SW2, CS5_SW2, CS6_SW2 }, ... }; -#endif - -const aw_led *g_aw_leds[DRIVER_COUNT] = { - g_aw_leds_1, -#ifdef DRIVER_2_LED_TOTAL - g_aw_leds_2 -#endif -}; ``` --- From f74885735a3a746e21dd9c422fc7f78fa9ddf381 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 01:47:44 -0700 Subject: [PATCH 20/21] Fix typo in docs --- docs/feature_rgb_matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 739816668102..0acf4cf3643b 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -245,7 +245,7 @@ You can use up to 2 AW20216 IC's. Do not specify `DRIVER__xxx` defines for IC | `DRIVER_1_EN` | (Required) MCU pin connected to first RGB driver hardware enable line | C13 | | `DRIVER_2_EN` | (Optional) MCU pin connected to second RGB driver hardware enable line | | | `DRIVER_1_LED_TOTAL` | (Required) How many RGB lights are connected to first RGB driver | | -| `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to first second driver | | +| `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to second RGB driver | | | `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | | | `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | | From 7b79a21f40b524dd247877d430bbe6f32a8ad401 Mon Sep 17 00:00:00 2001 From: Jasper Chan Date: Wed, 9 Jun 2021 12:58:04 -0700 Subject: [PATCH 21/21] Document global brightness limits --- docs/feature_rgb_matrix.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 0acf4cf3643b..afd72fecff14 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -248,6 +248,8 @@ You can use up to 2 AW20216 IC's. Do not specify `DRIVER__xxx` defines for IC | `DRIVER_2_LED_TOTAL` | (Optional) How many RGB lights are connected to second RGB driver | | | `DRIVER_COUNT` | (Required) How many RGB driver IC's are present | | | `DRIVER_LED_TOTAL` | (Required) How many RGB lights are present across all drivers | | +| `AW_SCALING_MAX` | (Optional) LED current scaling value (0-255, higher values mean LED is brighter at full PWM) | 150 | +| `AW_GLOBAL_CURRENT_MAX` | (Optional) Driver global current limit (0-255, higher values means the driver may consume more power) | 150 | Here is an example using 2 drivers.