aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/feature_rgblight.md47
-rw-r--r--quantum/rgblight.c18
2 files changed, 63 insertions, 2 deletions
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index 23b6f1c94..800e59738 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -188,6 +188,53 @@ If you need to change your RGB lighting in code, for example in a macro to chang
188 188
189Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list! 189Additionally, [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h) defines several predefined shortcuts for various colors. Feel free to add to this list!
190 190
191## Changing the order of the LEDs
192
193If you want to make the logical order of LEDs different from the electrical connection order, you can do this by defining the `RGBLIGHT_LED_MAP` macro in your `config.h`.
194
195By defining `RGBLIGHT_LED_MAP` as in the example below, you can specify the LED with addressing in reverse order of the electrical connection order.
196
197```c
198// config.h
199
200#define RGBLED_NUM 10
201#define RGBLIGHT_LED_MAP { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }
202
203```
204
205For keyboards that use the RGB LEDs as a backlight for each key, you can also define it as in the example below.
206
207```c
208// config.h
209
210#define RGBLED_NUM 30
211
212/* RGB LED Conversion macro from physical array to electric array */
213#define LED_LAYOUT( \
214 L00, L01, L02, L03, L04, L05, \
215 L10, L11, L12, L13, L14, L15, \
216 L20, L21, L22, L23, L24, L25, \
217 L30, L31, L32, L33, L34, L35, \
218 L40, L41, L42, L43, L44, L45 ) \
219 { \
220 L05, L04, L03, L02, L01, L00, \
221 L10, L11, L12, L13, L14, L15, \
222 L25, L24, L23, L22, L21, L20, \
223 L30, L31, L32, L33, L34, L35, \
224 L46, L45, L44, L43, L42, L41 \
225 }
226
227/* RGB LED logical order map */
228/* Top->Bottom, Right->Left */
229#define RGBLIGHT_LED_MAP LED_LAYOUT( \
230 25, 20, 15, 10, 5, 0, \
231 26, 21, 16, 11, 6, 1, \
232 27, 22, 17, 12, 7, 2, \
233 28, 23, 18, 13, 8, 3, \
234 29, 24, 19, 14, 9, 4 )
235
236```
237
191## Hardware Modification 238## Hardware Modification
192 239
193If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins. 240If your keyboard lacks onboard underglow LEDs, you may often be able to solder on an RGB LED strip yourself. You will need to find an unused pin to wire to the data pin of your LED strip. Some keyboards may break out unused pins from the MCU to make soldering easier. The other two pins, VCC and GND, must also be connected to the appropriate power pins.
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index 119ca1b9e..3042ff11e 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -51,6 +51,10 @@ static inline int is_static_effect(uint8_t mode) {
51#define MIN(a,b) (((a)<(b))?(a):(b)) 51#define MIN(a,b) (((a)<(b))?(a):(b))
52#define MAX(a,b) (((a)>(b))?(a):(b)) 52#define MAX(a,b) (((a)>(b))?(a):(b))
53 53
54#ifdef RGBLIGHT_LED_MAP
55const uint8_t led_map[] PROGMEM = RGBLIGHT_LED_MAP;
56#endif
57
54#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT 58#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
55__attribute__ ((weak)) 59__attribute__ ((weak))
56const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90}; 60const uint16_t RGBLED_GRADIENT_RANGES[] PROGMEM = {360, 240, 180, 120, 90};
@@ -665,10 +669,20 @@ void rgblight_sethsv_slave(uint16_t hue, uint8_t sat, uint8_t val) {
665#ifndef RGBLIGHT_CUSTOM_DRIVER 669#ifndef RGBLIGHT_CUSTOM_DRIVER
666void rgblight_set(void) { 670void rgblight_set(void) {
667 if (rgblight_config.enable) { 671 if (rgblight_config.enable) {
672 LED_TYPE *ledp;
673 #ifdef RGBLIGHT_LED_MAP
674 LED_TYPE led0[RGBLED_NUM];
675 for(uint8_t i = 0; i < RGBLED_NUM; i++) {
676 led0[i] = led[pgm_read_byte(&led_map[i])];
677 }
678 ledp = led0;
679 #else
680 ledp = led;
681 #endif
668 #ifdef RGBW 682 #ifdef RGBW
669 ws2812_setleds_rgbw(led, RGBLED_NUM); 683 ws2812_setleds_rgbw(ledp, RGBLED_NUM);
670 #else 684 #else
671 ws2812_setleds(led, RGBLED_NUM); 685 ws2812_setleds(ledp, RGBLED_NUM);
672 #endif 686 #endif
673 } else { 687 } else {
674 for (uint8_t i = 0; i < RGBLED_NUM; i++) { 688 for (uint8_t i = 0; i < RGBLED_NUM; i++) {