]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/planck/light/light.c
rgb_led struct conversion (aka: Per led (key) type rgb matrix effects - part 2) ...
[qmk_firmware.git] / keyboards / planck / light / light.c
1 /* Copyright 2017 Jack Humbert
2  *
3  * This program is free software: you can redistribute it and/or modify
4  * it under the terms of the GNU General Public License as published by
5  * the Free Software Foundation, either version 2 of the License, or
6  * (at your option) any later version.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15  */
16
17 #include "light.h"
18
19 const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
20 /* Refer to IS31 manual for these locations
21  *   driver
22  *   |  R location
23  *   |  |      G location
24  *   |  |      |      B location
25  *   |  |      |      | */
26     {0, C1_3,  C2_3,  C3_3},
27     {0, C1_4,  C2_4,  C3_4},
28     {0, C1_5,  C2_5,  C3_5},
29     {0, C1_11, C2_11, C3_11},
30     {0, C1_12, C2_12, C3_12},
31     {0, C1_13, C2_13, C3_13},
32     {1, C1_3,  C2_3,  C3_3},
33     {1, C1_4,  C2_4,  C3_4},
34     {1, C1_5,  C2_5,  C3_5},
35     {1, C1_11, C2_11, C3_11},
36     {1, C1_12, C2_12, C3_12},
37     {1, C1_13, C2_13, C3_13},
38
39     {0, C1_6,  C2_6,  C3_6},
40     {0, C1_7,  C2_7,  C3_7},
41     {0, C1_8,  C2_8,  C3_8},
42     {0, C1_14, C2_14, C3_14},
43     {0, C1_15, C2_15, C3_15},
44     {0, C1_16, C2_16, C3_16},
45     {1, C1_6,  C2_6,  C3_6},
46     {1, C1_7,  C2_7,  C3_7},
47     {1, C1_8,  C2_8,  C3_8},
48     {1, C1_14, C2_14, C3_14},
49     {1, C1_15, C2_15, C3_15},
50     {1, C1_16, C2_16, C3_16},
51
52     {0, C9_1,  C8_1,  C7_1},
53     {0, C9_2,  C8_2,  C7_2},
54     {0, C9_3,  C8_3,  C7_3},
55     {0, C9_9,  C8_9,  C7_9},
56     {0, C9_10, C8_10, C7_10},
57     {0, C9_11, C8_11, C7_11},
58     {1, C9_1,  C8_1,  C7_1},
59     {1, C9_2,  C8_2,  C7_2},
60     {1, C9_3,  C8_3,  C7_3},
61     {1, C9_9,  C8_9,  C7_9},
62     {1, C9_10, C8_10, C7_10},
63     {1, C9_11, C8_11, C7_11},
64
65     {0, C9_4,  C8_4,  C7_4},
66     {0, C9_5,  C8_5,  C7_5},
67     {0, C9_6,  C8_6,  C7_6},
68     {0, C9_12, C8_12, C7_12},
69     {0, C9_13, C8_13, C7_13},
70     {0, C9_14, C8_14, C7_14},
71     {0, C9_15, C8_15, C6_14}, // middle 2u switch
72     {1, C9_4,  C8_4,  C7_4},
73     {1, C9_5,  C8_5,  C7_5},
74     {1, C9_6,  C8_6,  C7_6},
75     {1, C9_12, C8_12, C7_12},
76     {1, C9_13, C8_13, C7_13},
77     {1, C9_14, C8_14, C7_14}
78 };
79
80 led_config_t g_led_config = { {
81     {   0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11 },
82     {  12,  13,  14,  15,  16,  17,  18,  19,  20,  21,  22,  23 },
83     {  24,  25,  26,  27,  28,  29,  30,  31,  32,  33,  34,  35 },
84     {  36,  37,  38,  39,  40,  41,  43,  44,  45,  46,  47,  48 }
85 }, {
86     {   0,   0 }, {  20,   0 }, {  40,   0 }, {  61,   0 }, {  81,   0 }, { 101,   0 }, { 122,   0 }, { 142,   0 }, { 162,   0 }, { 183,   0 }, { 203,   0 }, { 223,   0 },
87     {   0,  21 }, {  20,  21 }, {  40,  21 }, {  61,  21 }, {  81,  21 }, { 101,  21 }, { 122,  21 }, { 142,  21 }, { 162,  21 }, { 183,  21 }, { 203,  21 }, { 223,  21 },
88     {   0,  42 }, {  20,  42 }, {  40,  42 }, {  61,  42 }, {  81,  42 }, { 101,  42 }, { 122,  42 }, { 142,  42 }, { 162,  42 }, { 183,  42 }, { 203,  42 }, { 223,  42 },
89     {   0,  63 }, {  20,  63 }, {  40,  63 }, {  61,  63 }, {  81,  63 }, { 101,  63 }, { 111,  63 }, { 122,  63 }, { 142,  63 }, { 162,  63 }, { 183,  63 }, { 203,  63 },
90     { 223,  63 }
91 }, {
92     1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
93     1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
94     1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
95     1, 1, 1, 1, 1, 4, 4, 4, 1, 1, 1, 1,
96     1
97 } };
98
99 void matrix_init_kb(void) {
100
101     // Turn status LED on
102     DDRD |= (1<<6);
103     PORTD |= (1<<6);
104
105     matrix_init_user();
106 }
107
108 bool process_record_kb(uint16_t keycode, keyrecord_t *record)
109 {
110     return process_record_user(keycode, record);
111 }
112
113 uint8_t rgb_matrix_map_row_column_to_led_kb(uint8_t row, uint8_t column, uint8_t *led_i) {
114     // Spacebar has 2 leds 41 & 42, so add 42 to the array here, and 41 will be added
115     // by the default lookup code that runs after this
116     if (row == 3 && column == 5) {
117         led_i[0] = 42;
118         return 1;
119     }
120     return 0;
121 }
122
123 void matrix_scan_kb(void)
124 {
125     matrix_scan_user();
126 }
127
128 void suspend_power_down_kb(void)
129 {
130     rgb_matrix_set_suspend_state(true);
131     suspend_power_down_user();
132 }
133
134 void suspend_wakeup_init_kb(void)
135 {
136     rgb_matrix_set_suspend_state(false);
137     suspend_wakeup_init_user();
138 }
139