Переглянути джерело

split led config into 2 arrays

Jack Humbert 8 роки тому
батько
коміт
ced0c52eac
4 змінених файлів з 175 додано та 102 видалено
  1. 0 14
      drivers/avr/is31fl3731.h
  2. 126 59
      keyboards/planck/light/light.c
  3. 29 29
      quantum/rgb_matrix.c
  4. 20 0
      quantum/rgb_matrix.h

+ 0 - 14
drivers/avr/is31fl3731.h

@@ -21,24 +21,10 @@
 #include <stdint.h>
 #include <stdbool.h>
 
-typedef struct Point {
-	uint8_t x;
-	uint8_t y;
-} __attribute__((packed)) Point;
-
 typedef struct is31_led {
 	uint8_t driver:2;
 	uint8_t matrix:1;
-	uint8_t modifier:1;
 	uint8_t control_index;
-	union {
-		uint8_t raw;
-		struct {
-			uint8_t row:4; // 16 max
-			uint8_t col:4; // 16 max
-		};
-	} matrix_co;
-	Point point;
 } __attribute__((packed)) is31_led;
 
 extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];

+ 126 - 59
keyboards/planck/light/light.c

@@ -20,71 +20,138 @@
 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
 /*   driver
  *   |  matrix
- *   |  |  modifier
- *   |  |  |  control_index
- *   |  |  |  |  {row | col << 4}
- *   |  |  |  |  |             {x=0..224, y=0..64} */
-    {0, 0, 1, 3, {0|(0<<4)},   {20.36*0, 21.33*0}},
-    {0, 0, 0, 4, {0|(1<<4)},   {20.36*1, 21.33*0}},  
-    {0, 0, 0, 5, {0|(2<<4)},   {20.36*2, 21.33*0}},  
-    {0, 1, 0, 3, {0|(3<<4)},   {20.36*3, 21.33*0}},  
-    {0, 1, 0, 4, {0|(4<<4)},   {20.36*4, 21.33*0}},
-    {0, 1, 0, 5, {0|(5<<4)},   {20.36*5, 21.33*0}}, 
-    {1, 0, 0, 3, {0|(6<<4)},   {20.36*6, 21.33*0}},  
-    {1, 0, 0, 4, {0|(7<<4)},   {20.36*7, 21.33*0}},  
-    {1, 0, 0, 5, {0|(8<<4)},   {20.36*8, 21.33*0}},  
-    {1, 1, 0, 3, {0|(9<<4)},   {20.36*9, 21.33*0}},  
-    {1, 1, 0, 4, {0|(10<<4)},  {20.36*10,21.33*0}},  
-    {1, 1, 1, 5, {0|(11<<4)},  {20.36*11,21.33*0}},
-
-    {0, 0, 1, 6, {1|(0<<4)},   {20.36*0, 21.33*1}},  
-    {0, 0, 0, 7, {1|(1<<4)},   {20.36*1, 21.33*1}},  
-    {0, 0, 0, 8, {1|(2<<4)},   {20.36*2, 21.33*1}},  
-    {0, 1, 0, 6, {1|(3<<4)},   {20.36*3, 21.33*1}},  
-    {0, 1, 0, 7, {1|(4<<4)},   {20.36*4, 21.33*1}}, 
-    {0, 1, 0, 8, {1|(5<<4)},   {20.36*5, 21.33*1}}, 
-    {1, 0, 0, 6, {1|(6<<4)},   {20.36*6, 21.33*1}},  
-    {1, 0, 0, 7, {1|(7<<4)},   {20.36*7, 21.33*1}},  
-    {1, 0, 0, 8, {1|(8<<4)},   {20.36*8, 21.33*1}},  
-    {1, 1, 0, 6, {1|(9<<4)},   {20.36*9, 21.33*1}},  
-    {1, 1, 0, 7, {1|(10<<4)},  {20.36*10,21.33*1}},  
-    {1, 1, 1, 8, {1|(11<<4)},  {20.36*11,21.33*1}},
-
-    {0, 0, 1, 9,  {2|(0<<4)},  {20.36*0, 21.33*2}},  
-    {0, 0, 0, 10, {2|(1<<4)},  {20.36*1, 21.33*2}}, 
-    {0, 0, 0, 11, {2|(2<<4)},  {20.36*2, 21.33*2}}, 
-    {0, 1, 0, 9,  {2|(3<<4)},  {20.36*3, 21.33*2}},  
-    {0, 1, 0, 10, {2|(4<<4)},  {20.36*4, 21.33*2}}, 
-    {0, 1, 0, 11, {2|(5<<4)},  {20.36*5, 21.33*2}}, 
-    {1, 0, 0, 9,  {2|(6<<4)},  {20.36*6, 21.33*2}},  
-    {1, 0, 0, 10, {2|(7<<4)},  {20.36*7, 21.33*2}}, 
-    {1, 0, 0, 11, {2|(8<<4)},  {20.36*8, 21.33*2}}, 
-    {1, 1, 0, 9,  {2|(9<<4)},  {20.36*9, 21.33*2}},  
-    {1, 1, 0, 10, {2|(10<<4)}, {20.36*10,21.33*2}}, 
-    {1, 1, 1, 11, {2|(11<<4)}, {20.36*11,21.33*2}},
-
-    {0, 0, 1, 12, {3|(0<<4)},  {20.36*0, 21.33*3}}, 
-    {0, 0, 1, 13, {3|(1<<4)},  {20.36*1, 21.33*3}}, 
-    {0, 0, 1, 14, {3|(2<<4)},  {20.36*2, 21.33*3}}, 
-    {0, 1, 1, 12, {3|(3<<4)},  {20.36*3, 21.33*3}}, 
-    {0, 1, 1, 13, {3|(4<<4)},  {20.36*4, 21.33*3}}, 
+ *   |  |  control_index
+ *   |  |  |  
+ *   |  |  |  */
+    {0, 0, 3},
+    {0, 0, 4},
+    {0, 0, 5},
+    {0, 1, 3},
+    {0, 1, 4},
+    {0, 1, 5},
+    {1, 0, 3},
+    {1, 0, 4},
+    {1, 0, 5},
+    {1, 1, 3},
+    {1, 1, 4},
+    {1, 1, 5},
+
+    {0, 0, 6},
+    {0, 0, 7},
+    {0, 0, 8},
+    {0, 1, 6},
+    {0, 1, 7},
+    {0, 1, 8},
+    {1, 0, 6},
+    {1, 0, 7},
+    {1, 0, 8},
+    {1, 1, 6},
+    {1, 1, 7},
+    {1, 1, 8},
+
+    {0, 0, 9},
+    {0, 0, 10},
+    {0, 0, 11},
+    {0, 1, 9},
+    {0, 1, 10},
+    {0, 1, 11},
+    {1, 0, 9},
+    {1, 0, 10},
+    {1, 0, 11},
+    {1, 1, 9},
+    {1, 1, 10},
+    {1, 1, 11},
+
+    {0, 0, 12},
+    {0, 0, 13},
+    {0, 0, 14},
+    {0, 1, 12},
+    {0, 1, 13},
 #ifdef PLANCK_MIT_LAYOUT
-    {0, 1, 0, 14, {3|(5<<4)},  {20.36*5, 21.33*3}}, 
-    {0, 1, 0, 15, {3|(5<<4)},  {20.36*5.5, 21.33*3}}, 
-    {1, 0, 0, 12, {3|(5<<4)},  {20.36*6, 21.33*3}}, 
+    {0, 1, 14},
+    {0, 1, 15},
+    {1, 0, 12},
 #else
-    {0, 1, 0, 14, {3|(5<<4)},  {20.36*5, 21.33*3}}, 
-    {0, 1, 0, 15, {0xFF},      {20.36*5.5, 21.33*3}}, 
-    {1, 0, 0, 12, {3|(6<<4)},  {20.36*6, 21.33*3}}, 
+    {0, 1, 14},
+    {0, 1, 15},
+    {1, 0, 12},
 #endif
-    {1, 0, 1, 13, {3|(7<<4)},  {20.36*7, 21.33*3}}, 
-    {1, 0, 1, 14, {3|(8<<4)},  {20.36*8, 21.33*3}}, 
-    {1, 1, 1, 12, {3|(9<<4)},  {20.36*9, 21.33*3}}, 
-    {1, 1, 1, 13, {3|(10<<4)}, {20.36*10,21.33*3}}, 
-    {1, 1, 1, 14, {3|(11<<4)}, {20.36*11,21.33*3}}
+    {1, 0, 13},
+    {1, 0, 14},
+    {1, 1, 12},
+    {1, 1, 13},
+    {1, 1, 14},
 };
 
 
+
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+
+    /*{row | col << 4}
+      |             {x=0..224, y=0..64} 
+      |              |                    modifier
+      |              |                    | */
+    {{0|(0<<4)},   {20.36*0, 21.33*0}, 1},
+    {{0|(1<<4)},   {20.36*1, 21.33*0}, 0},  
+    {{0|(2<<4)},   {20.36*2, 21.33*0}, 0},  
+    {{0|(3<<4)},   {20.36*3, 21.33*0}, 0},  
+    {{0|(4<<4)},   {20.36*4, 21.33*0}, 0},
+    {{0|(5<<4)},   {20.36*5, 21.33*0}, 0}, 
+    {{0|(6<<4)},   {20.36*6, 21.33*0}, 0},  
+    {{0|(7<<4)},   {20.36*7, 21.33*0}, 0},  
+    {{0|(8<<4)},   {20.36*8, 21.33*0}, 0},  
+    {{0|(9<<4)},   {20.36*9, 21.33*0}, 0},  
+    {{0|(10<<4)},  {20.36*10,21.33*0}, 0},  
+    {{0|(11<<4)},  {20.36*11,21.33*0}, 1},
+
+    {{1|(0<<4)},   {20.36*0, 21.33*1}, 1},  
+    {{1|(1<<4)},   {20.36*1, 21.33*1}, 0},  
+    {{1|(2<<4)},   {20.36*2, 21.33*1}, 0},  
+    {{1|(3<<4)},   {20.36*3, 21.33*1}, 0},  
+    {{1|(4<<4)},   {20.36*4, 21.33*1}, 0}, 
+    {{1|(5<<4)},   {20.36*5, 21.33*1}, 0}, 
+    {{1|(6<<4)},   {20.36*6, 21.33*1}, 0},  
+    {{1|(7<<4)},   {20.36*7, 21.33*1}, 0},  
+    {{1|(8<<4)},   {20.36*8, 21.33*1}, 0},  
+    {{1|(9<<4)},   {20.36*9, 21.33*1}, 0},  
+    {{1|(10<<4)},  {20.36*10,21.33*1}, 0},  
+    {{1|(11<<4)},  {20.36*11,21.33*1}, 1},
+
+    {{2|(0<<4)},  {20.36*0, 21.33*2}, 1},  
+    {{2|(1<<4)},  {20.36*1, 21.33*2}, 0}, 
+    {{2|(2<<4)},  {20.36*2, 21.33*2}, 0}, 
+    {{2|(3<<4)},  {20.36*3, 21.33*2}, 0},  
+    {{2|(4<<4)},  {20.36*4, 21.33*2}, 0}, 
+    {{2|(5<<4)},  {20.36*5, 21.33*2}, 0}, 
+    {{2|(6<<4)},  {20.36*6, 21.33*2}, 0},  
+    {{2|(7<<4)},  {20.36*7, 21.33*2}, 0}, 
+    {{2|(8<<4)},  {20.36*8, 21.33*2}, 0}, 
+    {{2|(9<<4)},  {20.36*9, 21.33*2}, 0},  
+    {{2|(10<<4)}, {20.36*10,21.33*2}, 0}, 
+    {{2|(11<<4)}, {20.36*11,21.33*2}, 1},
+
+    {{3|(0<<4)},  {20.36*0, 21.33*3}, 1}, 
+    {{3|(1<<4)},  {20.36*1, 21.33*3}, 1}, 
+    {{3|(2<<4)},  {20.36*2, 21.33*3}, 1}, 
+    {{3|(3<<4)},  {20.36*3, 21.33*3}, 1}, 
+    {{3|(4<<4)},  {20.36*4, 21.33*3}, 1}, 
+#ifdef PLANCK_MIT_LAYOUT
+    {{3|(5<<4)},  {20.36*5, 21.33*3}, 0}, 
+    {{3|(5<<4)},  {20.36*5.5, 21.33*3}, 0}, 
+    {{3|(5<<4)},  {20.36*6, 21.33*3}, 0}, 
+#else
+    {{3|(5<<4)},  {20.36*5, 21.33*3}, 0}, 
+    {{0xFF},      {20.36*5.5, 21.33*3}, 0}, 
+    {{3|(6<<4)},  {20.36*6, 21.33*3}, 0}, 
+#endif
+    {{3|(7<<4)},  {20.36*7, 21.33*3}, 1}, 
+    {{3|(8<<4)},  {20.36*8, 21.33*3}, 1}, 
+    {{3|(9<<4)},  {20.36*9, 21.33*3}, 1}, 
+    {{3|(10<<4)}, {20.36*10,21.33*3}, 1}, 
+    {{3|(11<<4)}, {20.36*11,21.33*3}, 1}
+};
+
 void matrix_init_kb(void) {
 
     // Initialize LED drivers for backlight.

+ 29 - 29
quantum/rgb_matrix.c

@@ -65,12 +65,12 @@ uint8_t g_last_led_count = 0;
 
 void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led_i, uint8_t *led_count)
 {
-    is31_led led;
+    rgb_led led;
     *led_count = 0;
 
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
         // map_index_to_led(i, &led);
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         if (row == led.matrix_co.row && column == led.matrix_co.col) {
             led_i[*led_count] = i;
             (*led_count)++;
@@ -274,9 +274,9 @@ void backlight_effect_alphas_mods(void)
     RGB rgb1 = hsv_to_rgb( (HSV){ .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness } );
     RGB rgb2 = hsv_to_rgb( (HSV){ .h = g_config.color_2.h, .s = g_config.color_2.s, .v = g_config.brightness } );
     
-    is31_led led;
+    rgb_led led;
     for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         if ( led.matrix_co.raw < 0xFF ) {
             if ( led.modifier )
             {
@@ -318,7 +318,7 @@ void backlight_effect_gradient_up_down(void)
     for ( int i=0; i<DRIVER_LED_TOTAL; i++ )
     {
         // map_led_to_point( i, &point );
-        point = g_is31_leds[i].point;
+        point = g_rgb_leds[i].point;
         // The y range will be 0..64, map this to 0..4
         uint8_t y = (point.y>>4);
         // Relies on hue being 8-bit and wrapping
@@ -377,13 +377,13 @@ void backlight_effect_cycle_all(void)
 {
     uint8_t offset = g_tick & 0xFF;
 
-    is31_led led;
+    rgb_led led;
 
     // Relies on hue being 8-bit and wrapping
     for ( int i=0; i<DRIVER_LED_TOTAL; i++ )
     {
         // map_index_to_led(i, &led);
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         if (led.matrix_co.raw < 0xFF) {
             uint16_t offset2 = g_key_hit[i]<<2;
             offset2 = (offset2<=63) ? (63-offset2) : 0;
@@ -401,17 +401,17 @@ void backlight_effect_cycle_left_right(void)
     HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
     RGB rgb;
     Point point;
-    is31_led led;
+    rgb_led led;
     for ( int i=0; i<DRIVER_LED_TOTAL; i++ )
     {
         // map_index_to_led(i, &led);
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         if (led.matrix_co.raw < 0xFF) {
             uint16_t offset2 = g_key_hit[i]<<2;
             offset2 = (offset2<=63) ? (63-offset2) : 0;
 
             // map_led_to_point( i, &point );
-            point = g_is31_leds[i].point;
+            point = g_rgb_leds[i].point;
             // Relies on hue being 8-bit and wrapping
             hsv.h = point.x + offset + offset2;
             rgb = hsv_to_rgb( hsv );
@@ -426,17 +426,17 @@ void backlight_effect_cycle_up_down(void)
     HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
     RGB rgb;
     Point point;
-    is31_led led;
+    rgb_led led;
     for ( int i=0; i<DRIVER_LED_TOTAL; i++ )
     {
         // map_index_to_led(i, &led);
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         if (led.matrix_co.raw < 0xFF) {
             uint16_t offset2 = g_key_hit[i]<<2;
             offset2 = (offset2<=63) ? (63-offset2) : 0;
 
             // map_led_to_point( i, &point );
-            point = g_is31_leds[i].point;
+            point = g_rgb_leds[i].point;
             // Relies on hue being 8-bit and wrapping
             hsv.h = point.y + offset + offset2;
             rgb = hsv_to_rgb( hsv );
@@ -449,9 +449,9 @@ void backlight_effect_cycle_up_down(void)
 void backlight_effect_dual_beacon(void) {
     HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
     RGB rgb;
-    is31_led led;
+    rgb_led led;
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         hsv.h = ((led.point.y - 32.0)* cos(g_tick * PI / 128) / 32 + (led.point.x - 112.0) * sin(g_tick * PI / 128) / (112)) * (g_config.color_2.h - g_config.color_1.h) + g_config.color_1.h;
         rgb = hsv_to_rgb( hsv );
         backlight_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -461,9 +461,9 @@ void backlight_effect_dual_beacon(void) {
 void backlight_effect_rainbow_beacon(void) {
     HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
     RGB rgb;
-    is31_led led;
+    rgb_led led;
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         hsv.h = 1.5 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 1.5 * (led.point.x - 112.0) * sin(g_tick * PI / 128) + g_config.color_1.h;
         rgb = hsv_to_rgb( hsv );
         backlight_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -473,9 +473,9 @@ void backlight_effect_rainbow_beacon(void) {
 void backlight_effect_rainbow_pinwheels(void) {
     HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
     RGB rgb;
-    is31_led led;
+    rgb_led led;
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         hsv.h = 2 * (led.point.y - 32.0)* cos(g_tick * PI / 128) + 2 * (66 - abs(led.point.x - 112.0)) * sin(g_tick * PI / 128) + g_config.color_1.h;
         rgb = hsv_to_rgb( hsv );
         backlight_set_color( i, rgb.r, rgb.g, rgb.b );
@@ -485,9 +485,9 @@ void backlight_effect_rainbow_pinwheels(void) {
 void backlight_effect_rainbow_moving_chevron(void) {
     HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
     RGB rgb;
-    is31_led led;
+    rgb_led led;
     for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-        led = g_is31_leds[i];
+        led = g_rgb_leds[i];
         // uint8_t r = g_tick;
         uint8_t r = 32;
         hsv.h = 1.5 * abs(led.point.y - 32.0)* sin(r * PI / 128) + 1.5 * (led.point.x - (g_tick / 256.0 * 224)) * cos(r * PI / 128) + g_config.color_1.h;
@@ -526,14 +526,14 @@ void backlight_effect_multisplash(void) {
     // if (g_any_key_hit < 0xFF) {    
         HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
         RGB rgb;
-        is31_led led;
+        rgb_led led;
         for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-            led = g_is31_leds[i];
+            led = g_rgb_leds[i];
             uint16_t c = 0, d = 0;
-            is31_led last_led;
+            rgb_led last_led;
             // if (g_last_led_count) {
                 for (uint8_t last_i = 0; last_i < g_last_led_count; last_i++) {
-                    last_led = g_is31_leds[g_last_led_hit[last_i]];
+                    last_led = g_rgb_leds[g_last_led_hit[last_i]];
                     uint16_t dist = (uint16_t)sqrt(pow(led.point.x - last_led.point.x, 2) + pow(led.point.y - last_led.point.y, 2));
                     uint16_t effect = (g_key_hit[g_last_led_hit[last_i]] << 2) - dist;
                     c += MIN(MAX(effect, 0), 255);
@@ -563,14 +563,14 @@ void backlight_effect_solid_multisplash(void) {
     // if (g_any_key_hit < 0xFF) {    
         HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
         RGB rgb;
-        is31_led led;
+        rgb_led led;
         for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
-            led = g_is31_leds[i];
+            led = g_rgb_leds[i];
             uint16_t d = 0;
-            is31_led last_led;
+            rgb_led last_led;
             // if (g_last_led_count) {
                 for (uint8_t last_i = 0; last_i < g_last_led_count; last_i++) {
-                    last_led = g_is31_leds[g_last_led_hit[last_i]];
+                    last_led = g_rgb_leds[g_last_led_hit[last_i]];
                     uint16_t dist = (uint16_t)sqrt(pow(led.point.x - last_led.point.x, 2) + pow(led.point.y - last_led.point.y, 2));
                     uint16_t effect = (g_key_hit[g_last_led_hit[last_i]] << 2) - dist;
                     d += 255 - MIN(MAX(effect, 0), 255);

+ 20 - 0
quantum/rgb_matrix.h

@@ -24,6 +24,26 @@
 #include "is31fl3731.h"
 #include "quantum.h"
 
+typedef struct Point {
+	uint8_t x;
+	uint8_t y;
+} __attribute__((packed)) Point;
+
+typedef struct rgb_led {
+	union {
+		uint8_t raw;
+		struct {
+			uint8_t row:4; // 16 max
+			uint8_t col:4; // 16 max
+		};
+	} matrix_co;
+	Point point;
+	uint8_t modifier:1;
+} __attribute__((packed)) rgb_led;
+
+
+extern const rgb_led g_rgb_leds[DRIVER_LED_TOTAL];
+
 typedef struct
 {
 	HSV color;