split led config into 2 arrays

rgb_matrix
Jack Humbert 7 years ago
parent b3e36c734a
commit ced0c52eac

@ -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];

@ -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.

@ -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);

@ -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;

Loading…
Cancel
Save