Przeglądaj źródła

working on arm and avr

Jack Humbert 7 lat temu
rodzic
commit
e8bbcaa671

+ 59 - 9
common_features.mk

@@ -61,8 +61,8 @@ endif
 
 ifeq ($(strip $(STENO_ENABLE)), yes)
     OPT_DEFS += -DSTENO_ENABLE
-	VIRTSER_ENABLE := yes
-	SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
+    VIRTSER_ENABLE := yes
+    SRC += $(QUANTUM_DIR)/process_keycode/process_steno.c
 endif
 
 ifeq ($(strip $(VIRTSER_ENABLE)), yes)
@@ -75,9 +75,9 @@ ifeq ($(strip $(FAUXCLICKY_ENABLE)), yes)
 endif
 
 ifeq ($(strip $(POINTING_DEVICE_ENABLE)), yes)
-	OPT_DEFS += -DPOINTING_DEVICE_ENABLE
-	OPT_DEFS += -DMOUSE_ENABLE
-	SRC += $(QUANTUM_DIR)/pointing_device.c
+    OPT_DEFS += -DPOINTING_DEVICE_ENABLE
+    OPT_DEFS += -DMOUSE_ENABLE
+    SRC += $(QUANTUM_DIR)/pointing_device.c
 endif
 
 ifeq ($(strip $(UCIS_ENABLE)), yes)
@@ -110,12 +110,14 @@ ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
     ifeq ($(strip $(RGBLIGHT_CUSTOM_DRIVER)), yes)
         OPT_DEFS += -DRGBLIGHT_CUSTOM_DRIVER
     else
-	    SRC += ws2812.c
+        SRC += ws2812.c
     endif
 endif
 
 ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
     OPT_DEFS += -DRGB_MATRIX_ENABLE
+    OPT_DEFS += -DIS31FL3731
+    COMMON_VPATH += $(DRIVER_PATH)/issi
     SRC += is31fl3731.c
     SRC += i2c_master.c
     SRC += $(QUANTUM_DIR)/color.c
@@ -123,6 +125,37 @@ ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes)
     CIE1931_CURVE = yes
 endif
 
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3731)
+    OPT_DEFS += -DRGB_MATRIX_ENABLE
+    OPT_DEFS += -DIS31FL3731
+    COMMON_VPATH += $(DRIVER_PATH)/issi
+    SRC += is31fl3731.c
+    SRC += i2c_master.c
+    SRC += $(QUANTUM_DIR)/color.c
+    SRC += $(QUANTUM_DIR)/rgb_matrix.c
+    CIE1931_CURVE = yes
+endif
+
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), IS31FL3733)
+    OPT_DEFS += -DRGB_MATRIX_ENABLE
+    OPT_DEFS += -DIS31FL3733
+    COMMON_VPATH += $(DRIVER_PATH)/issi
+    SRC += is31fl3733.c
+    SRC += i2c_master.c
+    SRC += $(QUANTUM_DIR)/color.c
+    SRC += $(QUANTUM_DIR)/rgb_matrix.c
+    CIE1931_CURVE = yes
+endif
+
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), WS2812)
+    OPT_DEFS += -DRGB_MATRIX_ENABLE
+    OPT_DEFS += -DWS2812
+    SRC += ws2812.c
+    SRC += $(QUANTUM_DIR)/color.c
+    SRC += $(QUANTUM_DIR)/rgb_matrix.c
+    CIE1931_CURVE = yes
+endif
+
 ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
     OPT_DEFS += -DTAP_DANCE_ENABLE
     SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
@@ -169,7 +202,7 @@ ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
     ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
         CIE1931_CURVE = yes
     endif
-		ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
+        ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
         OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
     endif
 endif
@@ -200,7 +233,12 @@ endif
 
 ifeq ($(strip $(HD44780_ENABLE)), yes)
     SRC += drivers/avr/hd44780.c
-	OPT_DEFS += -DHD44780_ENABLE
+    OPT_DEFS += -DHD44780_ENABLE
+endif
+
+ifeq ($(strip $(DYNAMIC_KEYMAP_ENABLE)), yes)
+    OPT_DEFS += -DDYNAMIC_KEYMAP_ENABLE
+    SRC += $(QUANTUM_DIR)/dynamic_keymap.c
 endif
 
 QUANTUM_SRC:= \
@@ -210,5 +248,17 @@ QUANTUM_SRC:= \
     $(QUANTUM_DIR)/process_keycode/process_leader.c
 
 ifndef CUSTOM_MATRIX
-    QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
+    ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
+        QUANTUM_SRC += $(QUANTUM_DIR)/split_common/matrix.c
+    else
+        QUANTUM_SRC += $(QUANTUM_DIR)/matrix.c
+    endif
+endif
+
+ifeq ($(strip $(SPLIT_KEYBOARD)), yes)
+    OPT_DEFS += -DSPLIT_KEYBOARD
+    QUANTUM_SRC += $(QUANTUM_DIR)/split_common/split_flags.c \
+                $(QUANTUM_DIR)/split_common/split_util.c \
+                $(QUANTUM_DIR)/split_common/i2c.c \
+                $(QUANTUM_DIR)/split_common/serial.c
 endif

+ 33 - 0
drivers/arm/ws2812.c

@@ -13,6 +13,7 @@ static int sLeds;
 static stm32_gpio_t *sPort;
 static uint32_t sMask;
 uint8_t* dma_source;
+static LED_TYPE led_array[RGBLED_NUM];
 
 void setColor(uint8_t color, uint8_t *buf,uint32_t mask){
   int i;
@@ -43,6 +44,14 @@ void setColorRGB(Color c, uint8_t *buf, uint32_t mask) {
  * @param[out] o_fb     initialized frame buffer
  *
  */
+
+void WS2812_init(void) {
+  static uint8_t * p;
+  //uint32_t port = RGBLED_PORT;
+  //ledDriverInit(RGBLED_NUM, (stm32_gpio_t *)(port & 0xFFF0), 1 << (port & 0xF), &p);
+  ledDriverInit(RGBLED_NUM, GPIOA, 0b00000010, &p);
+}
+
 void ledDriverInit(int leds, stm32_gpio_t *port, uint32_t mask, uint8_t **o_fb) {
   sLeds=leds;
   sPort=port;
@@ -167,3 +176,27 @@ void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
 void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds) {
 
 }
+
+void WS2812_send_color( uint8_t index ) {
+  setColor(led_array[index].g, (fb+24*index), sMask);
+  setColor(led_array[index].r, (fb+24*index)+8, sMask);
+  setColor(led_array[index].b, (fb+24*index)+16, sMask);
+}
+
+void WS2812_set_color( uint8_t index, uint8_t red, uint8_t green, uint8_t blue ) {
+  led_array[index].r = red;
+  led_array[index].g = green;
+  led_array[index].b = blue;
+}
+
+void WS2812_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) {
+  for (int i = 0; i < RGBLED_NUM; i++) {
+    WS2812_set_color( i, red, green, blue );
+  }
+}
+
+void WS2812_send_colors(void) {
+  for (int i = 0; i < RGBLED_NUM; i++) {
+    WS2812_send_color( i );
+  }
+}

+ 6 - 0
drivers/arm/ws2812.h

@@ -28,4 +28,10 @@ void ledDriverWaitCycle(void);
 void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
 void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
 
+
+void WS2812_init(void);
+void WS2812_set_color( uint8_t index, uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_send_colors(void);
+
 #endif /* LEDDRIVER_H_ */

+ 26 - 2
drivers/avr/ws2812.c

@@ -27,6 +27,8 @@
 #include <util/delay.h>
 #include "debug.h"
 
+static LED_TYPE led_array[RGBLED_NUM];
+
 #ifdef RGBW_BB_TWI
 
 // Port for the I2C
@@ -128,11 +130,11 @@ unsigned char I2C_Write(unsigned char c)
         c <<= 1;
     }
 
-    
+
     I2C_WriteBit(0);
     _delay_us(I2C_DELAY);
     _delay_us(I2C_DELAY);
-  
+
     // _delay_us(I2C_DELAY);
     //return I2C_ReadBit();
     return 0;
@@ -141,6 +143,28 @@ unsigned char I2C_Write(unsigned char c)
 
 #endif
 
+// for RGB matrix
+
+void WS2812_init(void) {
+
+}
+
+void WS2812_set_color( uint8_t index, uint8_t red, uint8_t green, uint8_t blue ) {
+  led_array[index].r = red;
+  led_array[index].g = green;
+  led_array[index].b = blue;
+}
+
+void WS2812_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) {
+  for (int i = 0; i < RGBLED_NUM; i++) {
+    WS2812_set_color( i, red, green, blue );
+  }
+}
+
+void inline WS2812_send_colors(void) {
+  ws2812_setleds_pin(led_array, RGBLED_NUM, _BV(RGB_DI_PIN & 0xF));
+}
+
 // Setleds for standard RGB
 void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds)
 {

+ 4 - 0
drivers/avr/ws2812.h

@@ -30,6 +30,10 @@
 
 #include "rgblight_types.h"
 
+void WS2812_init(void);
+void WS2812_set_color( uint8_t index, uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_set_color_all( uint8_t red, uint8_t green, uint8_t blue );
+void WS2812_send_colors(void);
 
 /* User Interface
  *

+ 12 - 0
keyboards/clueboard/card/card.c

@@ -3,6 +3,18 @@
 #define BL_GREEN OCR1A
 #define BL_BLUE OCR1C
 
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+
+    /*{row | col << 4}
+      |             {x=0..224, y=0..64}
+      |              |                 modifier
+      |              |                 | */
+    {{0|(0<<4)},   {0, 32}, 0},
+    {{0|(1<<4)},   {75, 32}, 0},
+    {{0|(2<<4)},   {150, 32}, 0},
+    {{0|(2<<4)},   {224, 23},  0},
+};
+
 void matrix_init_kb(void) {
 	// put your keyboard start-up code here
 	// runs once when the firmware starts up

+ 6 - 1
keyboards/clueboard/card/config.h

@@ -48,7 +48,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 /* COL2ROW or ROW2COL */
 #define DIODE_DIRECTION ROW2COL
- 
+
 /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
 #define DEBOUNCING_DELAY 20
 
@@ -146,6 +146,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define RGBLIGHT_SAT_STEP 17
 #define RGBLIGHT_VAL_STEP 17
 
+#define WS2812_LED_N RGBLED_NUM
+#define DRIVER_LED_TOTAL RGBLED_NUM
+
+#define RGB_MATRIX_KEYPRESSES
+
 /*
  * Feature disable options
  *  These options are also useful to firmware size reduction.

+ 0 - 21
keyboards/clueboard/card/keymaps/default/rules.mk

@@ -1,21 +0,0 @@
-# Build Options
-#   change to "no" to disable the options, or define them in the Makefile in
-#   the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no       # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
-CONSOLE_ENABLE = yes         # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
-NKRO_ENABLE = yes           # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality
-MIDI_ENABLE = no            # MIDI controls
-AUDIO_ENABLE = yes           # Audio output on port C6
-UNICODE_ENABLE = no         # Unicode
-BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes        # Enable WS2812 RGB underlight.
-SLEEP_LED_ENABLE = no       # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
-	include ../../../../Makefile
-endif

+ 7 - 6
keyboards/clueboard/card/rules.mk

@@ -54,16 +54,17 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
 #   change yes to no to disable
 #
 BOOTMAGIC_ENABLE = no      # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes       # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes       # Audio control and System control(+450)
-CONSOLE_ENABLE = yes        # Console for debug(+400)
-COMMAND_ENABLE = yes        # Commands for debug and configuration
+MOUSEKEY_ENABLE = no       # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no       # Audio control and System control(+450)
+CONSOLE_ENABLE = no        # Console for debug(+400)
+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
 # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
 NKRO_ENABLE = no            # USB Nkey Rollover
-RGBLIGHT_ENABLE = yes       # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE = yes       # Enable keyboard backlight functionality by default
+RGBLIGHT_ENABLE = no       # Enable keyboard underlight functionality (+4870)
+RGB_MATRIX_ENABLE = WS2812
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality by default
 MIDI_ENABLE = no            # MIDI controls
 UNICODE_ENABLE = no         # Unicode
 BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID

+ 6 - 0
keyboards/planck/rev6/config.h

@@ -128,7 +128,13 @@
 #define RGBLIGHT_ANIMATIONS
 
 #define WS2812_LED_N 9
+
 #define RGBLED_NUM WS2812_LED_N
+#define RGBLED_PORT ((uint32_t)GPIOA | 1)
+#define DRIVER_LED_TOTAL RGBLED_NUM
+
+#define RGB_MATRIX_KEYPRESSES
+
 #define WS2812_TIM_N 2
 #define WS2812_TIM_CH 2
 #define PORT_WS2812     GPIOA

+ 20 - 2
keyboards/planck/rev6/rev6.c

@@ -16,6 +16,24 @@
 #include "rev6.h"
 #include "rgblight.h"
 
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+
+    /*{row | col << 4}
+      |             {x=0..224, y=0..64}
+      |              |                 modifier
+      |              |                 | */
+    {{0|(0<<4)},   {112, 39}, 0},
+    {{0|(1<<4)},   {148, 60}, 0},
+    {{0|(2<<4)},   {206, 53}, 0},
+    {{0|(3<<4)},   {206, 3},  0},
+    {{0|(4<<4)},   {150, 3},  0},
+    {{0|(5<<4)},   {74,  3},  0},
+    {{0|(6<<4)},   {18,  3},  0},
+    {{0|(7<<4)},   {18,  54}, 0},
+    {{0|(8<<4)},   {77,  60}, 0}
+};
+
+
   uint8_t *o_fb;
 
 uint16_t counterst = 0;
@@ -25,7 +43,7 @@ void matrix_init_kb(void) {
   // rgblight_mode(1);
   // rgblight_setrgb(0xFF, 0xFF, 0xFF);
 
-  ledDriverInit(9, GPIOA, 0b00000010, &o_fb);
+  //ledDriverInit(9, GPIOA, 0b00000010, &o_fb);
   //testPatternFB(o_fb);
 
 	matrix_init_user();
@@ -37,5 +55,5 @@ void matrix_scan_kb(void) {
     //testPatternFB(o_fb);
   }
   counterst = (counterst + 1) % 1024;
-  rgblight_task();
+  //rgblight_task();
 }

+ 2 - 1
keyboards/planck/rev6/rules.mk

@@ -52,5 +52,6 @@ COMMAND_ENABLE = yes    # Commands for debug and configuration
 NKRO_ENABLE = yes	    # USB Nkey Rollover
 CUSTOM_MATRIX = yes # Custom matrix file
 AUDIO_ENABLE = yes
-RGBLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = WS2812
 # SERIAL_LINK_ENABLE = yes

+ 61 - 8
quantum/rgb_matrix.c

@@ -1,5 +1,6 @@
 /* Copyright 2017 Jason Williams
  * Copyright 2017 Jack Humbert
+ * Copyright 2018 Yiancar
  *
  * 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
@@ -17,18 +18,21 @@
 
 
 #include "rgb_matrix.h"
-#include <avr/io.h>
-#include "i2c_master.h"
-#include <util/delay.h>
-#include <avr/interrupt.h>
 #include "progmem.h"
 #include "config.h"
 #include "eeprom.h"
-#include "lufa.h"
 #include <math.h>
 
 rgb_config_t rgb_matrix_config;
 
+#ifndef MAX
+    #define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+#endif
+
+#ifndef MIN
+    #define MIN(a,b) ((a) < (b)? (a): (b))
+#endif
+
 #ifndef RGB_DISABLE_AFTER_TIMEOUT
     #define RGB_DISABLE_AFTER_TIMEOUT 0
 #endif
@@ -73,7 +77,7 @@ void eeconfig_update_rgb_matrix_default(void) {
   rgb_matrix_config.hue = 0;
   rgb_matrix_config.sat = 255;
   rgb_matrix_config.val = RGB_MATRIX_MAXIMUM_BRIGHTNESS;
-  rgb_matrix_config.speed = 0;
+  rgb_matrix_config.speed = 1;
   eeconfig_update_rgb_matrix(rgb_matrix_config.raw);
 }
 void eeconfig_debug_rgb_matrix(void) {
@@ -106,16 +110,35 @@ void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i, uint8_t
 }
 
 void rgb_matrix_update_pwm_buffers(void) {
+#ifdef IS31FL3731
     IS31FL3731_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
     IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
+#elif defined(IS31FL3733)
+    IS31FL3733_update_pwm_buffers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
+    IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
+#elif defined(WS2812)
+    WS2812_send_colors();
+#endif
 }
 
 void rgb_matrix_set_color( int index, uint8_t red, uint8_t green, uint8_t blue ) {
+#ifdef IS31FL3731
     IS31FL3731_set_color( index, red, green, blue );
+#elif defined(IS31FL3733)
+    IS31FL3733_set_color( index, red, green, blue );
+#elif defined(WS2812)
+    WS2812_set_color( index, red, green, blue );
+#endif
 }
 
 void rgb_matrix_set_color_all( uint8_t red, uint8_t green, uint8_t blue ) {
+#ifdef IS31FL3731
     IS31FL3731_set_color_all( red, green, blue );
+#elif defined(IS31FL3733)
+    IS31FL3733_set_color_all( red, green, blue );
+#elif defined(WS2812)
+    WS2812_set_color_all( red, green, blue );
+#endif
 }
 
 bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
@@ -460,7 +483,7 @@ void rgb_matrix_rainbow_moving_chevron(void) {
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
         led = g_rgb_leds[i];
         // uint8_t r = g_tick;
-        uint8_t r = 32;
+        uint8_t r = 128;
         hsv.h = (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * abs(led.point.y - 32.0)* sin(r * PI / 128) + (1.5 * (rgb_matrix_config.speed == 0 ? 1 : rgb_matrix_config.speed)) * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + rgb_matrix_config.hue;
         rgb = hsv_to_rgb( hsv );
         rgb_matrix_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -579,6 +602,9 @@ void rgb_matrix_custom(void) {
 //     }
 }
 
+static uint8_t tick_slower = 5;
+static uint8_t tick_counter = 0;
+
 void rgb_matrix_task(void) {
     static uint8_t toggle_enable_last = 255;
 	if (!rgb_matrix_config.enable) {
@@ -593,7 +619,10 @@ void rgb_matrix_task(void) {
         return;
     }
 
-    g_tick++;
+    if (tick_counter == 0) {
+      g_tick++;
+    }
+    tick_counter = ( tick_counter + 1) % tick_slower;
 
     if ( g_any_key_hit < 0xFFFFFFFF ) {
         g_any_key_hit++;
@@ -751,17 +780,33 @@ void rgb_matrix_init(void) {
 
 void rgb_matrix_setup_drivers(void) {
   // Initialize TWI
+#ifdef IS31FL3731
   i2c_init();
   IS31FL3731_init( DRIVER_ADDR_1 );
   IS31FL3731_init( DRIVER_ADDR_2 );
+#elif defined (IS31FL3733)
+  i2c_init();
+  IS31FL3733_init( DRIVER_ADDR_1 );
+#elif defined(WS2812)
+  WS2812_init();
+#endif
 
   for ( int index = 0; index < DRIVER_LED_TOTAL; index++ ) {
+    __attribute__((unused))
     bool enabled = true;
     // This only caches it for later
+#ifdef IS31FL3731
     IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
+#elif defined (IS31FL3733)
+    IS31FL3733_set_led_control_register( index, enabled, enabled, enabled );
+#endif
   }
   // This actually updates the LED drivers
+#ifdef IS31FL3731
   IS31FL3731_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
+#elif defined (IS31FL3733)
+  IS31FL3733_update_led_control_registers( DRIVER_ADDR_1, DRIVER_ADDR_2 );
+#endif
 }
 
 // Deals with the messy details of incrementing an integer
@@ -811,11 +856,19 @@ void rgb_matrix_test_led( uint8_t index, bool red, bool green, bool blue ) {
     {
         if ( i == index )
         {
+#ifdef IS31FL3731
             IS31FL3731_set_led_control_register( i, red, green, blue );
+#elif defined (IS31FL3733)
+            IS31FL3733_set_led_control_register( i, red, green, blue );
+#endif
         }
         else
         {
+#ifdef IS31FL3731
             IS31FL3731_set_led_control_register( i, false, false, false );
+#elif defined (IS31FL3733)
+            IS31FL3733_set_led_control_register( i, false, false, false );
+#endif
         }
     }
 }

+ 11 - 1
quantum/rgb_matrix.h

@@ -1,5 +1,6 @@
 /* Copyright 2017 Jason Williams
  * Copyright 2017 Jack Humbert
+ * Copyright 2018 Yiancar
  *
  * 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
@@ -21,9 +22,18 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include "color.h"
-#include "is31fl3731.h"
 #include "quantum.h"
 
+#ifdef IS31FL3731
+    #include "i2c_master.h"
+    #include "is31fl3731.h"
+#elif defined (IS31FL3733)
+    #include "i2c_master.h"
+    #include "is31fl3733.h"
+#elif defined (WS2812)
+    #include "ws2812.h"
+#endif
+
 typedef struct Point {
 	uint8_t x;
 	uint8_t y;