Browse Source

[Keyboard] Dawn60 Keyboard (#7832)

* dawn60_proper

* change default

* changes

* master merge and via keymap

* rgb underglow better

* rename of folder

* rename folder complete

* rename

* dawn60/underglow specifics

* dawn60 specific

* simplify

* requested changes

* small errors

* layouts remove

* remove parentheses and update rules.mk

* fix error message
Xelus22 5 năm trước cách đây
mục cha
commit
2ce3025be2

+ 209 - 6
keyboards/wilba_tech/wt_rgb_backlight.c

@@ -14,9 +14,9 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#if defined(RGB_BACKLIGHT_ZEAL60) || defined(RGB_BACKLIGHT_ZEAL65) || defined(RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_KOYU) || defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_U80_A)
+#if defined(RGB_BACKLIGHT_ZEAL60) || defined(RGB_BACKLIGHT_ZEAL65) || defined(RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_KOYU) || defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65) || defined(RGB_BACKLIGHT_U80_A) || defined(RGB_BACKLIGHT_DAWN60)
 #else
-#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B, RGB_BACKLIGHT_KOYU, RGB_BACKLIGHT_HS60, RGB_BACKLIGHT_NK65, RGB_BACKLIGHT_U80_A
+#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B, RGB_BACKLIGHT_KOYU, RGB_BACKLIGHT_HS60, RGB_BACKLIGHT_NK65, RGB_BACKLIGHT_U80_A, RGB_BACKLIGHT_DAWN60
 #endif
 
 #ifndef MAX
@@ -41,6 +41,11 @@
 #include "drivers/arm/i2c_master.h"
 #endif
 
+#if defined(RGB_BACKLIGHT_DAWN60)
+#include "drivers/avr/ws2812.h"
+LED_TYPE g_ws2812_leds[WS2812_LED_TOTAL];
+#endif
+
 #include "progmem.h"
 #include "quantum/color.h"
 #include "tmk_core/common/eeprom.h"
@@ -61,6 +66,8 @@
 #include "drivers/issi/is31fl3731.h"
 #if defined(RGB_BACKLIGHT_U80_A)
 #define BACKLIGHT_LED_COUNT 108
+#elif defined(RGB_BACKLIGHT_DAWN60)
+#define BACKLIGHT_LED_COUNT 84  //64 + 20
 #else
 #define BACKLIGHT_LED_COUNT 72
 #endif
@@ -463,6 +470,87 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
     {2, C9_16, C7_15, C6_15}, // LF16
     {2, C8_16, C7_16, C6_16}, // LF17
 };
+#elif defined(RGB_BACKLIGHT_DAWN60)
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+#define ISSI_ADDR_1 0x74
+#define ISSI_ADDR_2 0x76
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ *   driver
+ *   |  R location
+ *   |  |      G location
+ *   |  |      |      B location
+ *   |  |      |      | */
+	{0, C1_1,   C3_2,   C4_2}, //A1
+    {0, C1_2,   C2_2,   C4_3}, //A2
+    {0, C1_3,   C2_3,   C3_3}, //A3
+    {0, C1_4,   C2_4,   C3_4}, //A4
+    {0, C1_5,   C2_5,   C3_5}, //A5
+    {0, C1_6,   C2_6,   C3_6}, //A6
+    {0, C1_7,   C2_7,   C3_7}, //A7
+    {0, C1_8,   C2_8,   C3_8}, //A8
+    {0, C9_1,   C8_1,   C7_1}, //A9
+    {0, C9_2,   C8_2,   C7_2}, //A10
+    {0, C9_3,   C8_3,   C7_3}, //A11
+    {0, C9_4,   C8_4,   C7_4}, //A12
+    {0, C9_5,   C8_5,   C7_5}, //A13
+    {0, C9_6,   C8_6,   C7_6}, //A14
+    {0, C9_7,   C8_7,   C6_6}, //A15
+    {0, C9_8,   C7_7,   C6_7}, //A16
+
+    {0, C1_9,   C3_10,  C4_10}, //B1
+    {0, C1_10,  C2_10,  C4_11}, //B2
+    {0, C1_11,  C2_11,  C3_11}, //B3
+    {0, C1_12,  C2_12,  C3_12}, //B4
+    {0, C1_13,  C2_13,  C3_13}, //B5
+    {0, C1_14,  C2_14,  C3_14}, //B6
+    {0, C1_15,  C2_15,  C3_15}, //B7
+    {0, C1_16,  C2_16,  C3_16}, //B8
+    {0, C9_9,   C8_9,   C7_9},  //B9
+    {0, C9_10,  C8_10,  C7_10}, //B10
+    {0, C9_11,  C8_11,  C7_11}, //B11
+    {0, C9_12,  C8_12,  C7_12}, //B12
+    {0, C9_13,  C8_13,  C7_13}, //B13
+    {0, C9_14,  C8_14,  C7_14}, //B14
+    {0, C9_15,  C8_15,  C6_14}, //B15
+    {0, C9_16,  C7_15,  C6_15}, //B16
+
+    {1, C1_1,   C3_2,   C4_2}, //C1
+    {1, C1_2,   C2_2,   C4_3}, //C2
+    {1, C1_3,   C2_3,   C3_3}, //C3
+    {1, C1_4,   C2_4,   C3_4}, //C4
+    {1, C1_5,   C2_5,   C3_5}, //C5
+    {1, C1_6,   C2_6,   C3_6}, //C6
+    {1, C1_7,   C2_7,   C3_7}, //C7
+    {1, C1_8,   C2_8,   C3_8}, //C8
+    {1, C9_1,   C8_1,   C7_1}, //C9
+    {1, C9_2,   C8_2,   C7_2}, //C10
+    {1, C9_3,   C8_3,   C7_3}, //C11
+    {1, C9_4,   C8_4,   C7_4}, //C12
+    {1, C9_5,   C8_5,   C7_5}, //C13
+    {1, C9_6,   C8_6,   C7_6}, //C14
+    {1, C9_7,   C8_7,   C6_6}, //C15
+    {1, C9_8,   C7_7,   C6_7}, //C16
+
+    {1, C1_9,   C3_10,  C4_10}, //D1
+    {1, C1_10,  C2_10,  C4_11}, //D2
+    {1, C1_11,  C2_11,  C3_11}, //D3
+    {1, C1_12,  C2_12,  C3_12}, //D4
+    {1, C1_13,  C2_13,  C3_13}, //D5
+    {1, C1_14,  C2_14,  C3_14}, //D6
+    {1, C1_15,  C2_15,  C3_15}, //D7
+    {1, C1_16,  C2_16,  C3_16}, //D8
+    {1, C9_9,    C8_9,   C7_9},  //D9
+    {1, C9_10,  C8_10,  C7_10}, //D10
+    {1, C9_11,  C8_11,  C7_11}, //D11
+    {1, C9_12,  C8_12,  C7_12}, //D12
+    {1, C9_13,  C8_13,  C7_13}, //D13
+    {1, C9_14,  C8_14,  C7_14}, //D14
+    {1, C9_15,  C8_15,  C6_14}, //D15
+    {1, C9_16,  C7_15,  C6_15}  //D16	
+};
 #elif !defined(RGB_BACKLIGHT_M6_B)
 // This is a 7-bit address, that gets left-shifted and bit 0
 // set to 0 for write, 1 for read (as per I2C protocol)
@@ -805,6 +893,50 @@ const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
 const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
     {160,255}, {96,255}, {77,255}, {179,255}, {51,255}, {205,255}
 };
+#elif defined(RGB_BACKLIGHT_DAWN60)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+    // LA1..LA16
+	{104, 16}, {88 , 16}, {72 , 16}, {56 , 16}, {40 , 16}, {24 , 16}, {4  , 16}, {6  , 32}, 
+    {112,  0}, {96 ,  0}, {80 ,  0}, {64 ,  0}, {48 ,  0}, {32 ,  0}, {16 ,  0}, {0  ,  0}, 
+
+    // LB1..LB16
+	{128,  0}, {144,  0}, {160,  0}, {176,  0}, {192,  0}, {208,  0}, {224,  0}, {214, 32},
+    {120, 16}, {136, 16}, {152, 16}, {168, 16}, {184, 16}, {200, 16}, {220, 16}, {224, 48},
+
+    // LC1..LC16
+	{100, 48}, {84 , 48}, {68 , 48}, {52 , 48}, {36 , 48}, {102, 64}, {42 , 64}, {22 , 64}, 
+    {108, 32}, {92 , 32}, {76 , 32}, {60 , 32}, {44 , 32}, {28 , 32}, {10 , 48}, {2  , 64}, 
+
+    // LD1..LD16
+	{124, 32}, {140, 32}, {156, 32}, {172, 32}, {188, 32}, {180, 48}, {202, 48}, {224, 64}, 
+    {116, 48}, {132, 48}, {148, 48}, {164, 48}, {160, 64},  {176, 64}, {192, 64}, {208, 64},
+
+	//RGB UNDERGLOW
+	{27 , 3}, {64 , 3}, {100, 3}, {137, 3},	{173, 3}, {209, 3}, {242, 4}, {255, 8}, {255,32}, {255,64},
+	{241,64}, {212,64},	{173,64}, {137,64}, {100,64}, {63 ,64},	{28 ,64}, {0  ,64},	{0  ,32}, {0  , 8},	//20
+};
+
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+	//LA1..LA16
+	{70,129}, {80,139}, {89,157}, {96,181}, {101,208}, {105,238}, {109,255}, {128,247}, 
+	{64,255}, {70,255}, {75,255}, {80,255}, {85,255},  {89,255},  {93,255},  {96,255},
+	//LB1..LB16
+	{58,255}, {53,255}, {48,255}, {43,255}, {39,255},  {34,255}, {32,255}, {255,233},
+	{58,129}, {48,139}, {39,157}, {32,181}, {27,208}, {23,238}, {19,255}, {237,255},
+	//LC1..LC16
+	{183,131}, {173,143}, {165,163}, {159,188}, {154,216}, {188,255}, {170,255}, {165,255}, 
+	{128,9}, {128,46}, {128,82}, {128,119}, {128,155}, {128,192}, {147,255}, {161,255},
+	//LD1..LD16
+	{0,27}, {0,64}, {0,101}, {0,137}, {0,174}, {228,201}, {235,255}, {224,255},
+	{195,128}, {206,136}, {215,152}, {222,175}, {208,255}, {213,255}, {217, 255}, {222,225},
+
+	//UNDERGLOW, {A,D}
+	//1 - 10
+	{91,255}, {84,255}, {74,255}, {60,255}, {48,255}, {39,255}, {32,255}, {27,255}, {0,255}, {236,255}, 
+	//11 - 20
+	{234,255}, {222,255}, {213,255}, {197,255}, {180,255}, {167,255}, {152,255}, {147,255}, {128,255}, {101,255}
+};
+
 #endif
 
 // This may seem counter-intuitive, but it's quite flexible.
@@ -824,10 +956,12 @@ void map_led_to_point( uint8_t index, Point *point )
 
     switch (index)
     {
+#if !defined(RGB_BACKLIGHT_DAWN60)
         case 18+4: // LB4A
             if ( g_config.use_split_backspace )
                 point->x -= 8;
             break;
+#endif
 #if defined(RGB_BACKLIGHT_ZEAL60)
         case 18+14: // LB14A
             if ( g_config.use_iso_enter )
@@ -855,6 +989,28 @@ void map_led_to_point( uint8_t index, Point *point )
             if ( !g_config.use_split_right_shift )
                 point->x -= 8;
             break;
+#endif
+#if defined(RGB_BACKLIGHT_DAWN60)
+        case 15+6: // LB6A
+            if ( !g_config.use_split_backspace )
+                point->x += 8;
+            break;
+        case 31+6: // LC6A
+            if ( g_config.use_7u_spacebar )
+                point->x = 112;
+            break;
+        case 47+16: // LD16A
+            if ( g_config.use_7u_spacebar )
+                point->x -= 8;
+            break;
+        case 47+6: // LD6A
+            if ( g_config.use_split_right_shift )
+                point->x += 6;
+            break;
+        case 47+7: // LD7A
+            if ( g_config.use_split_right_shift )
+                point->x += 6;
+            break;
 #endif
     }
 }
@@ -994,6 +1150,20 @@ const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
 const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
     {     0,     3,     5,     1,     2,     4 }
 };
+#elif defined(RGB_BACKLIGHT_DAWN60)
+//Dawn60
+// A16, A15, A14, A13, A12, A11, A10,  A9,  B1,  B2,  B3,  B4,  B5,  B6,
+//  A7,  A6,  A5,  A4,  A3,  A2,  A1,  B9, B10, B11, B12, B13, B14, B15,
+//  A8, C14, C13, C12, C11, C10,  C9,  D1,  D2,  D3,  D4,  D5,  B8,  B7,
+// C15,  C5,  C4,  C3,  C2,  C1,  D9, D10, D11, D12, ---,  D6,  D7, B16, 
+// C16,  C8,  C7, ---, ---,  C6, ---, ---, ---, D13, D14, D15, D16,  D8,	
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+	{ -1+16, -1+15, -1+14, -1+13, -1+12, -1+11, -1+10, -1+9 , 15+1 , 15+2 , 15+3 , 15+4 , 15+5 , 15+6 },
+	{ -1+7 , -1+6 , -1+5 , -1+4 , -1+3 , -1+2 , -1 +1, 15+9 , 15+10, 15+11, 15+12, 15+13, 15+14, 15+15},
+	{ -1+8 , 31+14, 31+13, 31+12, 31+11, 31+10, 31+9 , 47+1 , 47+2 , 47+3 , 47+4 , 47+5 , 15+8 , 15+7 },
+	{ 31+15, 31+5 , 31+4 , 31+3 , 31+2 , 31+1 , 47+9 , 47+10, 47+11, 47+12, 255  ,47+6 , 47+7 , 15+16},
+	{ 31+16, 31+8 , 31+7 , 255  , 255  , 31+6 , 255  , 255  , 255  , 47+13, 47+14, 47+15, 47+16, 47+8 }
+};	
 #endif
 
 void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led )
@@ -1049,6 +1219,15 @@ void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
     IS31FL3218_set_color( index, red, green, blue );
 #elif defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65)
     IS31FL3733_set_color( index, red, green, blue );
+#elif defined(RGB_BACKLIGHT_DAWN60)
+    if( index < DRIVER_LED_TOTAL ) {
+        IS31FL3731_set_color( index, red, green, blue );
+    } else {
+        g_ws2812_leds[index - DRIVER_LED_TOTAL].r = red;
+        g_ws2812_leds[index - DRIVER_LED_TOTAL].g = green;
+        g_ws2812_leds[index - DRIVER_LED_TOTAL].b = blue;
+        ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);    
+    }
 #else
     IS31FL3731_set_color( index, red, green, blue );
 #endif
@@ -1060,6 +1239,14 @@ void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
     IS31FL3218_set_color_all( red, green, blue );
 #elif defined(RGB_BACKLIGHT_HS60) || defined(RGB_BACKLIGHT_NK65)
     IS31FL3733_set_color_all( red, green, blue );
+#elif defined(RGB_BACKLIGHT_DAWN60)
+    IS31FL3731_set_color_all( red, green, blue );
+    for (uint8_t i = 0; i < WS2812_LED_TOTAL; i++) {
+        g_ws2812_leds[i].r = red;
+        g_ws2812_leds[i].g = green;
+        g_ws2812_leds[i].b = blue;
+    }
+    ws2812_setleds(g_ws2812_leds, WS2812_LED_TOTAL);    
 #else
     IS31FL3731_set_color_all( red, green, blue );
 #endif
@@ -1266,6 +1453,16 @@ void backlight_effect_alphas_mods(void)
             }
         }
     }
+#if defined(RGB_BACKLIGHT_DAWN60) 
+	for (int i = 0; i < WS2812_LED_TOTAL; i++) {
+		if ((RGB_UNDERGLOW_ALPHA_TOP_START <= i && i <= RGB_UNDERGLOW_ALPHA_TOP_END) || 
+            (RGB_UNDERGLOW_ALPHA_BOT_START <= i && i <= RGB_UNDERGLOW_ALPHA_BOT_END)) {
+            backlight_set_color(i + DRIVER_LED_TOTAL, rgb1.r, rgb1.g, rgb1.b);
+		} else {    
+            backlight_set_color(i + DRIVER_LED_TOTAL, rgb2.r, rgb2.g, rgb2.b);
+		}
+	}
+#endif
 }
 
 void backlight_effect_gradient_up_down(void)
@@ -1302,6 +1499,7 @@ void backlight_effect_gradient_up_down(void)
         hsv.h = g_config.color_1.h + ( deltaH * y );
         hsv.s = g_config.color_1.s + ( deltaS * y );
         rgb = hsv_to_rgb( hsv );
+
         backlight_set_color( i, rgb.r, rgb.g, rgb.b );
     }
 }
@@ -1342,7 +1540,7 @@ void backlight_effect_raindrops(bool initialize)
             hsv.h = h1 + ( deltaH * ( rand() & 0x03 ) );
             hsv.s = s1 + ( deltaS * ( rand() & 0x03 ) );
             // Override brightness with global brightness control
-            hsv.v = g_config.brightness;;
+            hsv.v = g_config.brightness;
 
             rgb = hsv_to_rgb( hsv );
             backlight_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -1358,7 +1556,7 @@ void backlight_effect_cycle_all(void)
     for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
     {
         uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
         // stabilizer LEDs use spacebar hits
         if ( i == 36+6 || i == 54+13 || // LC6, LD13
                 ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -1383,7 +1581,7 @@ void backlight_effect_cycle_left_right(void)
     for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
     {
         uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
         // stabilizer LEDs use spacebar hits
         if ( i == 36+6 || i == 54+13 || // LC6, LD13
                 ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -1410,7 +1608,7 @@ void backlight_effect_cycle_up_down(void)
     for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
     {
         uint16_t offset2 = g_key_hit[i]<<2;
-#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65)
+#if !defined(RGB_BACKLIGHT_HS60) && !defined(RGB_BACKLIGHT_NK65) && !defined(RGB_BACKLIGHT_DAWN60)
         // stabilizer LEDs use spacebar hits
         if ( i == 36+6 || i == 54+13 || // LC6, LD13
                 ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
@@ -2152,6 +2350,10 @@ void backlight_init_drivers(void)
                           ( index == 54+13 ) ||  // LD13
                           ( index >= 72+0 && index <= 72+8 ) ||  // LE0-LE8
                           ( index == 90+13 ) ); // LF13
+#elif defined(RGB_BACKLIGHT_DAWN60)
+        bool enabled = !( ( index == 15+7 && !g_config.use_split_backspace ) || //other backspace
+                          ( index == 47+13 && g_config.use_7u_spacebar ) ||     //LD13
+                          ( index == 47+15 && g_config.use_7u_spacebar ) );       //LD15
 #endif
         // This only caches it for later
         IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
@@ -2420,3 +2622,4 @@ void backlight_debug_led( bool state )
 }
 #endif // defined(RGB_DEBUGGING_ONLY)
 
+

+ 0 - 1
keyboards/wilba_tech/wt_rgb_backlight.h

@@ -107,4 +107,3 @@ void backlight_color_2_sat_decrease(void);
 
 void backlight_test_led( uint8_t index, bool red, bool green, bool blue );
 void backlight_debug_led(bool state);
-

+ 145 - 0
keyboards/xelus/dawn60/config.h

@@ -0,0 +1,145 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "config_common.h"
+
+// USB Device descriptor parameter
+#define VENDOR_ID       0x5845 // XE
+#define PRODUCT_ID      0x0060 // Dawn60
+#define DEVICE_VER      0x0001
+#define MANUFACTURER    Xelus
+#define PRODUCT         Dawn60
+#define DESCRIPTION     Dawn60
+
+// key matrix size
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+//no underglow - prototype
+//#define MATRIX_ROW_PINS { B1, B3, B7, F6, F7 }
+//#define MATRIX_COL_PINS { B0, D5, B2, F5, D2, D3, D4, D6, D7, B4, B5, B6, C6, C7 }
+//#define UNUSED_PINS
+
+//underglow
+#define MATRIX_ROW_PINS { B1, B3, F1, F6, F7 }
+#define MATRIX_COL_PINS { B0, D5, B2, F5, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+// IS31FL3731 driver
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 64
+
+// COL2ROW or ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Set 0 if debouncing isn't needed
+#define DEBOUNCE 5
+
+// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
+#define LOCKING_SUPPORT_ENABLE
+// Locking resynchronize hack
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Feature disable options
+ *  These options are also useful to firmware size reduction.
+ */
+
+// disable debug print
+//#define NO_DEBUG
+
+// disable print
+//#define NO_PRINT
+
+// disable action features
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#define RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for Dawn60 specifics
+#define RGB_BACKLIGHT_DAWN60
+
+// enable/disable LEDs based on layout
+// switch between split backspace (1) or normal backspace(0)
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------.           .-------------------.
+// | ? |  Shift  | Fn |    vs     |  Shift  | Up | Fn |
+// `------------------'           `-------------------'
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+
+//not used
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default brightness
+#define RGB_BACKLIGHT_BRIGHTNESS 255
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// the default effect speed (0-3)
+#define RGB_BACKLIGHT_EFFECT_SPEED 0
+
+// the default color1 and color2
+#define RGB_BACKLIGHT_COLOR_1 { .h = 0, .s = 255 }
+#define RGB_BACKLIGHT_COLOR_2 { .h = 127, .s = 255 }
+
+//RGB Underglow defines
+#define RGB_DI_PIN F0
+#define WS2812_LED_TOTAL 20
+
+#define RGB_UNDERGLOW_ALPHA_TOP_START 0
+#define RGB_UNDERGLOW_ALPHA_TOP_END   6   
+#define RGB_UNDERGLOW_ALPHA_BOT_START 12
+#define RGB_UNDERGLOW_ALPHA_BOT_END   15
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011111000011111
+
+#define RGB_BACKLIGHT_CAPS_LOCK_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_1_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_2_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+#define RGB_BACKLIGHT_LAYER_3_INDICATOR { .color = { .h = 0, .s = 0 }, .index = 255 }
+
+//RGB reactive only on keypress (put 1 to enable)
+#define RGB_REACTIVE_LEFT_RIGHT 0
+#define RGB_REACTIVE_CYCLE_ALL 0
+#define RGB_REACTIVE_VERTICAL 0
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4

+ 18 - 0
keyboards/xelus/dawn60/dawn60.c

@@ -0,0 +1,18 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef RGB_BACKLIGHT_DAWN60
+#error RGB_BACKLIGHT_DAWN60 not defined, you done goofed somehao, brah
+#endif

+ 36 - 0
keyboards/xelus/dawn60/dawn60.h

@@ -0,0 +1,36 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#include "keyboards/wilba_tech/wt_rgb_backlight_keycodes.h"
+#include "via.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_60_all( \
+    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+    K30, K31, K32, K33, K34, K35, K36, K37, K38, K39,      K3B, K3C, K3D, \
+    K40, K41, K42,           K45,                K49, K4A, K4B, K4C, K4D  \
+) { \
+    { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+    { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+    { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+    { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, XXX, K3B, K3C, K3D }, \
+    { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, K4C, K4D }  \
+}

+ 17 - 0
keyboards/xelus/dawn60/keymaps/default/config.h

@@ -0,0 +1,17 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+// switch between split backspace (1) or normal backspace(0)
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------.           .-------------------.
+// | ? |  Shift  | Fn |    vs     |  Shift  | Up | Fn |
+// `------------------'           `-------------------'
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0

+ 46 - 0
keyboards/xelus/dawn60/keymaps/default/keymap.c

@@ -0,0 +1,46 @@
+// Default layout for Dawn60
+#include QMK_KEYBOARD_H
+
+//  RGB-specific keys:
+//  EF_INC, EF_DEC,   // next/previous backlight effect
+//  H1_INC, H1_DEC,   // Color 1 hue increase/decrease
+//  S1_INC, S1_DEC,   // Color 1 saturation increase/decrease
+//  H2_INC, H2_DEC,   // Color 2 hue increase/decrease
+//  S2_INC, S2_DEC,   // Color 2 saturation increase/decrease
+//  BR_INC, BR_DEC,   // backlight brightness increase/decrease
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Default layer: Pressing caps-lock momentarily switches to Layer 1.
+// This is the default layer. Pressing an empty keycode on another layer will take you here.
+    [0] = LAYOUT_60_all(
+        KC_ESC,  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_BSLS,
+        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_BSPC,
+        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_DEL ,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,           KC_SLSH, KC_UP,   MO(2),
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_60_all(
+        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_CAPS, KC_TRNS, KC_UP  , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,
+        KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_RSFT, KC_PGUP, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END 
+    ),     
+
+    [2] = LAYOUT_60_all(
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+
+    [3] = LAYOUT_60_all(
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};

+ 17 - 0
keyboards/xelus/dawn60/keymaps/via/config.h

@@ -0,0 +1,17 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+// switch between split backspace (1) or normal backspace(0)
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+
+// switch between Tsangan (1) or Arrows Bottom Row (0)
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+// switch between standard split rshift (0) or arrows r shift (1)
+// .------------------.           .-------------------.
+// | ? |  Shift  | Fn |    vs     |  Shift  | Up | Fn |
+// `------------------'           `-------------------'
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0

+ 46 - 0
keyboards/xelus/dawn60/keymaps/via/keymap.c

@@ -0,0 +1,46 @@
+// Default layout for Dawn60
+#include QMK_KEYBOARD_H
+
+//  RGB-specific keys:
+//  EF_INC, EF_DEC,   // next/previous backlight effect
+//  H1_INC, H1_DEC,   // Color 1 hue increase/decrease
+//  S1_INC, S1_DEC,   // Color 1 saturation increase/decrease
+//  H2_INC, H2_DEC,   // Color 2 hue increase/decrease
+//  S2_INC, S2_DEC,   // Color 2 saturation increase/decrease
+//  BR_INC, BR_DEC,   // backlight brightness increase/decrease
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Default layer: Pressing caps-lock momentarily switches to Layer 1.
+// This is the default layer. Pressing an empty keycode on another layer will take you here.
+    [0] = LAYOUT_60_all(
+        KC_ESC,  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_BSLS,
+        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_BSPC,
+        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_DEL ,
+        KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,           KC_SLSH, KC_UP,   MO(2),
+        KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC,                             KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+    ),
+
+    [1] = LAYOUT_60_all(
+        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_CAPS, KC_TRNS, KC_UP  , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE,
+        KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_RSFT, KC_PGUP, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END 
+    ),     
+
+    [2] = LAYOUT_60_all(
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+    ),
+
+    [3] = LAYOUT_60_all(
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,          KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS,                   KC_TRNS,                            KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+    )
+};

+ 1 - 0
keyboards/xelus/dawn60/keymaps/via/rules.mk

@@ -0,0 +1 @@
+VIA_ENABLE = yes

+ 13 - 0
keyboards/xelus/dawn60/readme.md

@@ -0,0 +1,13 @@
+# Dawn60
+
+An in-switch RGB LED keyboard with RGB underglow.
+
+* Keyboard Maintainer: [Xelus22](https://github.com/Xelus22)
+* Hardware Supported: Dawn60
+* Hardware Availability: [Keyboard Treehouse](https://keyboardtreehouse.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+    make xelus/dawn60:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

+ 49 - 0
keyboards/xelus/dawn60/rules.mk

@@ -0,0 +1,49 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+#   Teensy       halfkay
+#   Pro Micro    caterina
+#   Atmel DFU    atmel-dfu
+#   LUFA DFU     lufa-dfu
+#   QMK DFU      qmk-dfu
+#   ATmega32A    bootloadHID
+#   ATmega328P   USBasp
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+#   change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite     # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no        # Mouse keys
+EXTRAKEY_ENABLE = yes       # Audio control and System control
+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
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes           # USB Nkey Rollover
+BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no            # MIDI support
+UNICODE_ENABLE = no         # Unicode
+BLUETOOTH_ENABLE = no       # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no           # Audio output on port C6
+FAUXCLICKY_ENABLE = no      # Use buzzer to emulate clicky switches
+RGBLIGHT_ENABLE = no        # Enable WS2812 RGB underlight. - We have custom RGB underglow
+
+CIE1931_CURVE = yes
+
+
+# project specific files
+SRC +=	keyboards/wilba_tech/wt_main.c \
+		keyboards/wilba_tech/wt_rgb_backlight.c \
+		quantum/color.c \
+		drivers/issi/is31fl3731.c \
+		ws2812.c
+
+QUANTUM_LIB_SRC += i2c_master.c