2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / keyboards / matrix / noah / noah.c
CommitLineData
265c415f 1/**
2 * noah.c
3 */
4
5#include "noah.h"
6
7#ifdef RGBLIGHT_ENABLE
8#include <string.h>
9#include "rgblight.h"
26eef35f 10#include "ws2812.h"
265c415f 11extern rgblight_config_t rgblight_config;
12
13// led 0 for caps lock, led 1 for scroll lock, led 3 for num lock
14// led 4 for layer 1, led 5 for layer 2, led 6 for layer 3, led 7 for layer 4
15#if RGBLED_NUM < 7
16#error "MUST set the RGBLED_NUM bigger than 7"
17#endif
18LED_TYPE noah_leds[RGBLED_NUM];
19static bool noah_led_mode = false;
20void rgblight_set(void) {
21 memset(&noah_leds[0], 0, sizeof(noah_leds));
22 if (!rgblight_config.enable) {
23 for (uint8_t i = 0; i < RGBLED_NUM; i++) {
24 led[i].r = 0;
25 led[i].g = 0;
26 led[i].b = 0;
27 }
28 }
29 if (noah_led_mode) {
30 uint8_t ind_led = host_keyboard_leds();
31 if (IS_LED_ON(ind_led, USB_LED_CAPS_LOCK)) {
32 noah_leds[0] = led[0];
33 }
34 if (IS_LED_ON(ind_led, USB_LED_SCROLL_LOCK)) {
35 noah_leds[1] = led[1];
36 }
37 if (IS_LED_ON(ind_led, USB_LED_NUM_LOCK)) {
38 noah_leds[2] = led[2];
39 }
40 for (int32_t i = 0; i < 4; i++) {
41 if(layer_state_is(i+1)) {
42 noah_leds[i + 3] = led[i + 3];
43 }
44 }
45 } else {
46 memcpy(&noah_leds[0], &led[0], sizeof(noah_leds));
47 }
48
49 ws2812_setleds(noah_leds, RGBLED_NUM);
50}
51#endif
52
53void matrix_scan_kb(void) { matrix_scan_user(); }
54
55void matrix_init_kb(void) {
56 matrix_init_user();
57}
58__attribute__((weak))
59void matrix_init_user(void) {
60#ifdef RGBLIGHT_ENABLE
265c415f 61 rgblight_enable();
62#endif
63
64#ifdef RGB_MATRIX_ENABLE
65 rgb_matrix_disable();
66#endif
67}
68
69__attribute__((weak))
70void matrix_scan_user(void) {
71#ifdef RGBLIGHT_ENABLE
72 rgblight_task();
73#endif
74}
75
76
77#ifdef RGB_MATRIX_ENABLE
78const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
79/* Refer to IS31 manual for these locations
80 * driver
81 * | R location
82 * | | G location
83 * | | | B location
84 * | | | | */
85
86// left CB
87 {0, C1_9, C3_10, C4_10},
88 {0, C1_10, C2_10, C4_11},
89 {0, C1_11, C2_11, C3_11},
90 {0, C1_12, C2_12, C3_12},
91 {0, C1_13, C2_13, C3_13},
92 {0, C1_14, C2_14, C3_14},
93 {0, C1_15, C2_15, C3_15},
94 {0, C1_16, C2_16, C3_16},
95
96 {0, C5_9, C4_9, C6_9},
97 {0, C5_16, C4_16, C6_16},
98
99 {0, C9_9, C8_9, C7_9},
100 {0, C9_10, C8_10, C7_10},
101 {0, C9_11, C8_11, C7_11},
102 {0, C9_12, C8_12, C7_12},
103 {0, C9_13, C8_13, C7_13},
104 {0, C9_14, C8_14, C7_14},
105 {0, C9_15, C8_15, C6_14},
106 {0, C9_16, C7_15, C6_15},
107
108// left CA
109 {0, C1_1, C3_2, C4_2},
110 {0, C1_2, C2_2, C4_3},
111 {0, C1_3, C2_3, C3_3},
112 {0, C1_4, C2_4, C3_4},
113 {0, C1_5, C2_5, C3_5},
114 {0, C1_6, C2_6, C3_6},
115 {0, C1_7, C2_7, C3_7},
116 {0, C1_8, C2_8, C3_8},
117
118 {0, C5_1, C4_1, C6_1},
119 {0, C5_8, C4_8, C6_8},
120
121 {0, C9_1, C8_1, C7_1},
122 {0, C9_2, C8_2, C7_2},
123 {0, C9_3, C8_3, C7_3},
124 {0, C9_4, C8_4, C7_4},
125 {0, C9_5, C8_5, C7_5},
126 {0, C9_6, C8_6, C7_6},
127 {0, C9_7, C8_7, C6_6},
128 {0, C9_8, C7_7, C6_7},
129
130// right CA
131 {1, C1_1, C3_2, C4_2},
132 {1, C1_2, C2_2, C4_3},
133 {1, C1_3, C2_3, C3_3},
134 {1, C1_4, C2_4, C3_4},
135 {1, C1_5, C2_5, C3_5},
136 {1, C1_6, C2_6, C3_6},
137 {1, C1_7, C2_7, C3_7},
138 {1, C1_8, C2_8, C3_8},
139
140 {1, C5_1, C4_1, C6_1},
141 {1, C5_8, C4_8, C6_8},
142
143 {1, C9_1, C8_1, C7_1},
144 {1, C9_2, C8_2, C7_2},
145 {1, C9_3, C8_3, C7_3},
146 {1, C9_4, C8_4, C7_4},
147 {1, C9_5, C8_5, C7_5},
148 {1, C9_6, C8_6, C7_6},
149 {1, C9_7, C8_7, C6_6},
150 {1, C9_8, C7_7, C6_7},
151// right CB
152 {1, C1_9, C3_10, C4_10},
153 {1, C1_10, C2_10, C4_11},
154 {1, C1_11, C2_11, C3_11},
155 {1, C1_12, C2_12, C3_12},
156 {1, C1_13, C2_13, C3_13},
157 {1, C1_14, C2_14, C3_14},
158 {1, C1_15, C2_15, C3_15},
159 {1, C1_16, C2_16, C3_16},
160
161 {1, C5_9, C4_9, C6_9},
162 {1, C5_16, C4_16, C6_16},
163
164 {1, C9_9, C8_9, C7_9},
165 {1, C9_10, C8_10, C7_10},
166 {1, C9_11, C8_11, C7_11},
167 {1, C9_12, C8_12, C7_12},
168 {1, C9_13, C8_13, C7_13},
169 {1, C9_14, C8_14, C7_14},
170 {1, C9_15, C8_15, C6_14},
171 {1, C9_16, C7_15, C6_15},
172};
173
174led_config_t g_led_config = {
175 {
176 { 1, 2, 3, 4, 5, 6, 7, 36, 37, 38, 39, 40, NO_LED, 41},
177 { 0, 8, 10, 11, 12, 13, 14, 44, 46, 47, 48, 49, 50, 51},
178 { 30, 18, 26, 9, 19, 15, 16, 17, 55, 56, 57, 58, 59, 60},
179 { 29, 31, 32, 33, 20, 21, 23, 22, 54, 62, 64, 65, 66, 63},
180 { 34, 35, 27, 25, 67, 68, 69, 70, 71, 61, 53, 45, 42, 43},
181 },
182 {
183 { 0, 16},{ 0, 0},{ 15, 0},{ 30, 0},{ 45, 0},{ 60, 0},{ 75, 0},{ 90, 0},
184 { 20, 16},{ 42, 32},
185 { 45, 16},{ 50, 16},{ 65, 16},{ 80, 16},{ 95, 16},{ 70, 32},{ 84, 32},{ 98, 32},
186
187 { 14, 32},{ 56, 32},{ 50, 48},{ 80, 48},{110, 48},{ 95, 48},{100, 64},{112, 64},
188 { 42, 32},{ 38, 64},
189 { 0, 32},{ 10, 48},{ 0, 48},{ 20, 48},{ 35, 48},{ 65, 48},{ 0, 64},{ 19, 64},
190
191 {105, 0},{120, 0},{135, 0},{150, 0},{165, 0},{180, 0},{202, 0},{224, 0},
192 {110, 16},{224, 16},
193 {125, 16},{140, 16},{155, 16},{172, 16},{187, 16},{202, 16},{210, 32},{224, 32},
194
195 {125, 48},{112, 32},{126, 32},{140, 32},{154, 32},{168, 32},{182, 32},{224, 48},
196 {140, 48},{200, 48},
197 {155, 48},{170, 48},{185, 48},{150, 64},{173, 64},{195, 64},{210, 64},{224, 64}
198 },
199 {
200 1, 1, 4, 4, 4, 4, 4, 4,
201 4, 4,
202 4, 4, 4, 4, 4, 4, 4, 4,
203
204 4, 4, 4, 4, 4, 4, 4, 4,
205 4, 4,
206 1, 1, 1, 4, 4, 4, 1, 1,
207
208 4, 4, 4, 4, 4, 4, 1, 1,
209 4, 1,
210 4, 4, 4, 4, 4, 4, 4, 1,
211
212 4, 4, 4, 4, 4, 4, 4, 1,
213 4, 4,
214 4, 4, 4, 1, 1, 1, 1, 1,
215 }
216};
217
218#endif
219
220bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
221 if (record->event.pressed) {
222 switch(keycode) {
223 #ifdef RGBLIGHT_ENABLE
224 case KC_F24: // switch the led mode on or off
225 noah_led_mode = !noah_led_mode;
226 return false;
227
228 #ifdef RGB_MATRIX_ENABLE
229 case KC_F13: // toggle rgb matrix
230 rgb_matrix_toggle();
231 return false;
232 case KC_F14:
233 rgb_matrix_step();
234 return false;
235 #endif
236 #endif
237 default:
238 break;
239 }
240 }
241 return true;
242}