aboutsummaryrefslogtreecommitdiff
path: root/users/drashna
diff options
context:
space:
mode:
authorDrashna Jaelre <drashna@live.com>2020-03-31 16:26:43 -0700
committerGitHub <noreply@github.com>2020-03-31 16:26:43 -0700
commitc67e30459390982f4f1b47f46c62322f1fe9ba87 (patch)
treed3504649cb692e58823bc7589d1a032256d9b0c1 /users/drashna
parent8c80475fcc568e04f637ae973086b65a31b5254d (diff)
downloadqmk_firmware-c67e30459390982f4f1b47f46c62322f1fe9ba87.tar.gz
qmk_firmware-c67e30459390982f4f1b47f46c62322f1fe9ba87.zip
[Keymap] Drashna's Cleanup and RGB Divide (#8506)
* Enable External EEPROM on Planck Rev6 * Update KC_MAKE macro to use qmk cli util * Disable additional gradients for rgb matrix * Update analog code for newer methods * Update ergodox layout * Disable Grave Escape * Cleanup OLED code a bit * Remove old unicode code * Seperate RGB Matrix code from RGB Light code in userspace * Massive overhaul an generalization of personal OLED code Now lets hope I NEVER get a keyboard using a 128x32 in a normal orientation. * Super tiny cleanup * Enable Diablo layer on kyria * clang format pass * Additional OLED cleanup
Diffstat (limited to 'users/drashna')
-rw-r--r--users/drashna/config.h3
-rw-r--r--users/drashna/drashna.c35
-rw-r--r--users/drashna/drashna.h9
-rw-r--r--users/drashna/oled_stuff.c278
-rw-r--r--users/drashna/oled_stuff.h91
-rw-r--r--users/drashna/process_records.c359
-rw-r--r--users/drashna/process_records.h18
-rw-r--r--users/drashna/rgb_matrix_stuff.c86
-rw-r--r--users/drashna/rgb_matrix_stuff.h9
-rw-r--r--users/drashna/rgb_stuff.c404
-rw-r--r--users/drashna/rgb_stuff.h26
-rw-r--r--users/drashna/rules.mk13
12 files changed, 854 insertions, 477 deletions
diff --git a/users/drashna/config.h b/users/drashna/config.h
index 106ae19c1..64b4b64ab 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -1,7 +1,7 @@
1#pragma once 1#pragma once
2 2
3// Use custom magic number so that when switching branches, EEPROM always gets reset 3// Use custom magic number so that when switching branches, EEPROM always gets reset
4#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1337 4#define EECONFIG_MAGIC_NUMBER (uint16_t)0x1338
5 5
6/* Set Polling rate to 1000Hz */ 6/* Set Polling rate to 1000Hz */
7#define USB_POLLING_INTERVAL_MS 1 7#define USB_POLLING_INTERVAL_MS 1
@@ -52,6 +52,7 @@
52# if defined(__AVR__) && !defined(__AVR_AT90USB1286__) 52# if defined(__AVR__) && !defined(__AVR_AT90USB1286__)
53# define DISABLE_RGB_MATRIX_ALPHAS_MODS 53# define DISABLE_RGB_MATRIX_ALPHAS_MODS
54# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN 54# define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
55# define DISABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
55# define DISABLE_RGB_MATRIX_BREATHING 56# define DISABLE_RGB_MATRIX_BREATHING
56# define DISABLE_RGB_MATRIX_BAND_SAT 57# define DISABLE_RGB_MATRIX_BAND_SAT
57# define DISABLE_RGB_MATRIX_BAND_VAL 58# define DISABLE_RGB_MATRIX_BAND_VAL
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 1a4ee9b41..ba19d4803 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -18,12 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
18#include "drashna.h" 18#include "drashna.h"
19 19
20userspace_config_t userspace_config; 20userspace_config_t userspace_config;
21#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
22# define DRASHNA_UNICODE_MODE UC_WIN
23#else
24// set to 2 for UC_WIN, set to 4 for UC_WINC
25# define DRASHNA_UNICODE_MODE 2
26#endif
27 21
28bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed) { 22bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed) {
29 static uint16_t this_timer; 23 static uint16_t this_timer;
@@ -93,19 +87,17 @@ void matrix_init_user(void) {
93 DDRB &= ~(1 << 0); 87 DDRB &= ~(1 << 0);
94 PORTB &= ~(1 << 0); 88 PORTB &= ~(1 << 0);
95#endif 89#endif
96
97#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
98 set_unicode_input_mode(DRASHNA_UNICODE_MODE);
99 get_unicode_input_mode();
100#endif // UNICODE_ENABLE
101 matrix_init_keymap(); 90 matrix_init_keymap();
102} 91}
103 92
104__attribute__((weak)) void keyboard_post_init_keymap(void) {} 93__attribute__((weak)) void keyboard_post_init_keymap(void) {}
105 94
106void keyboard_post_init_user(void) { 95void keyboard_post_init_user(void) {
107#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) 96#if defined(RGBLIGHT_ENABLE)
108 keyboard_post_init_rgb(); 97 keyboard_post_init_rgb_light();
98#endif
99#if defined(RGB_MATRIX_ENABLE)
100 keyboard_post_init_rgb_matrix();
109#endif 101#endif
110 keyboard_post_init_keymap(); 102 keyboard_post_init_keymap();
111} 103}
@@ -155,9 +147,12 @@ void matrix_scan_user(void) {
155 run_diablo_macro_check(); 147 run_diablo_macro_check();
156#endif // TAP_DANCE_ENABLE 148#endif // TAP_DANCE_ENABLE
157 149
158#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) 150#if defined(RGBLIGHT_ENABLE)
159 matrix_scan_rgb(); 151 matrix_scan_rgb_light();
160#endif // RGBLIGHT_ENABLE 152#endif // RGBLIGHT_ENABLE
153#if defined(RGB_MATRIX_ENABLE)
154 matrix_scan_rgb_matrix();
155#endif
161 156
162 matrix_scan_keymap(); 157 matrix_scan_keymap();
163} 158}
@@ -168,8 +163,8 @@ __attribute__((weak)) layer_state_t layer_state_set_keymap(layer_state_t state)
168// Then runs keymap's layer change check 163// Then runs keymap's layer change check
169layer_state_t layer_state_set_user(layer_state_t state) { 164layer_state_t layer_state_set_user(layer_state_t state) {
170 state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); 165 state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
171#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) 166#if defined(RGBLIGHT_ENABLE)
172 state = layer_state_set_rgb(state); 167 state = layer_state_set_rgb_light(state);
173#endif // RGBLIGHT_ENABLE 168#endif // RGBLIGHT_ENABLE
174 return layer_state_set_keymap(state); 169 return layer_state_set_keymap(state);
175} 170}
@@ -200,12 +195,6 @@ void eeconfig_init_user(void) {
200 userspace_config.raw = 0; 195 userspace_config.raw = 0;
201 userspace_config.rgb_layer_change = true; 196 userspace_config.rgb_layer_change = true;
202 eeconfig_update_user(userspace_config.raw); 197 eeconfig_update_user(userspace_config.raw);
203#if (defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE))
204 set_unicode_input_mode(DRASHNA_UNICODE_MODE);
205 get_unicode_input_mode();
206#else
207 eeprom_update_byte(EECONFIG_UNICODEMODE, DRASHNA_UNICODE_MODE);
208#endif
209 eeconfig_init_keymap(); 198 eeconfig_init_keymap();
210 keyboard_init(); 199 keyboard_init();
211} 200}
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 0ba181760..c10ea5114 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -25,9 +25,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
25#ifdef TAP_DANCE_ENABLE 25#ifdef TAP_DANCE_ENABLE
26# include "tap_dances.h" 26# include "tap_dances.h"
27#endif // TAP_DANCE_ENABLE 27#endif // TAP_DANCE_ENABLE
28#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) 28#if defined(RGBLIGHT_ENABLE)
29# include "rgb_stuff.h" 29# include "rgb_stuff.h"
30#endif 30#endif
31#if defined(RGB_MATRIX_ENABLE)
32# include "rgb_matrix_stuff.h"
33#endif
34#if defined(OLED_DRIVER_ENABLE)
35# include "oled_stuff.h"
36#endif
31 37
32/* Define layer names */ 38/* Define layer names */
33enum userspace_layers { 39enum userspace_layers {
@@ -70,7 +76,6 @@ typedef union {
70 bool rgb_layer_change :1; 76 bool rgb_layer_change :1;
71 bool is_overwatch :1; 77 bool is_overwatch :1;
72 bool nuke_switch :1; 78 bool nuke_switch :1;
73 uint8_t unicode_mod :4;
74 bool swapped_numbers :1; 79 bool swapped_numbers :1;
75 bool rgb_matrix_idle_anim :1; 80 bool rgb_matrix_idle_anim :1;
76 }; 81 };
diff --git a/users/drashna/oled_stuff.c b/users/drashna/oled_stuff.c
new file mode 100644
index 000000000..7580de1d3
--- /dev/null
+++ b/users/drashna/oled_stuff.c
@@ -0,0 +1,278 @@
1#include "drashna.h"
2
3extern uint8_t is_master;
4
5#ifndef KEYLOGGER_LENGTH
6// # ifdef OLED_DISPLAY_128X64
7# define KEYLOGGER_LENGTH ((int)(OLED_DISPLAY_HEIGHT / OLED_FONT_WIDTH))
8// # else
9// # define KEYLOGGER_LENGTH (uint8_t *(OLED_DISPLAY_WIDTH / OLED_FONT_HEIGHT))
10// # endif
11#endif
12
13static uint32_t oled_timer = 0;
14static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
15static uint16_t log_timer = 0;
16
17// clang-format off
18static const char PROGMEM code_to_name[0xFF] = {
19// 0 1 2 3 4 5 6 7 8 9 A B c D E F
20 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
21 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
22 '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
23 ']','\\', '#', ';','\'', '`', ',', '.', '/', 128, ' ', ' ', ' ', ' ', ' ', ' ', // 3x
24 ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'S', ' ', ' ', ' ', ' ', 16, ' ', ' ', ' ', // 4x
25 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 5x
26 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
27 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
28 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
29 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
30 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
31 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
32 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
33 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
34 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ex
35 ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
36};
37// clang-format on
38
39void add_keylog(uint16_t keycode) {
40 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
41 keycode = keycode & 0xFF;
42 } else if (keycode > 0xFF) {
43 keycode = 0;
44 }
45
46 for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) {
47 keylog_str[i] = keylog_str[i - 1];
48 }
49
50 if (keycode < (sizeof(code_to_name) / sizeof(char))) {
51 keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
52 }
53
54 log_timer = timer_read();
55}
56
57bool process_record_user_oled(uint16_t keycode, keyrecord_t *record) {
58 if (record->event.pressed) {
59#ifdef OLED_DRIVER_ENABLE
60 oled_timer = timer_read32();
61 add_keylog(keycode);
62#endif
63 }
64 return true;
65}
66
67void update_log(void) {
68 if (timer_elapsed(log_timer) > 750) {
69 // add_keylog(0);
70 }
71}
72
73void render_keylogger_status(void) {
74 oled_write_P(PSTR(OLED_RENDER_KEYLOGGER), false);
75 oled_write(keylog_str, false);
76}
77
78void render_default_layer_state(void) {
79 oled_write_P(PSTR(OLED_RENDER_LAYOUT_NAME), false);
80 switch (get_highest_layer(default_layer_state)) {
81 case _QWERTY:
82 oled_write_P(PSTR(OLED_RENDER_LAYOUT_QWERTY), false);
83 break;
84 case _COLEMAK:
85 oled_write_P(PSTR(OLED_RENDER_LAYOUT_COLEMAK), false);
86 break;
87 case _DVORAK:
88 oled_write_P(PSTR(OLED_RENDER_LAYOUT_DVORAK), false);
89 break;
90 case _WORKMAN:
91 oled_write_P(PSTR(OLED_RENDER_LAYOUT_WORKMAN), false);
92 break;
93 case _NORMAN:
94 oled_write_P(PSTR(OLED_RENDER_LAYOUT_NORMAN), false);
95 break;
96 case _MALTRON:
97 oled_write_P(PSTR(OLED_RENDER_LAYOUT_MALTRON), false);
98 break;
99 case _EUCALYN:
100 oled_write_P(PSTR(OLED_RENDER_LAYOUT_EUCALYN), false);
101 break;
102 case _CARPLAX:
103 oled_write_P(PSTR(OLED_RENDER_LAYOUT_CARPLAX), false);
104 break;
105 }
106#ifdef OLED_DISPLAY_128X64
107 oled_advance_page(true);
108#endif
109}
110
111void render_layer_state(void) {
112 oled_write_P(PSTR(OLED_RENDER_LAYER_NAME), false);
113#ifdef OLED_DISPLAY_128X64
114 oled_write_P(PSTR(" "), false);
115#endif
116 oled_write_P(PSTR(OLED_RENDER_LAYER_LOWER), layer_state_is(_LOWER));
117#ifdef OLED_DISPLAY_128X64
118 oled_write_P(PSTR(" "), false);
119#endif
120 oled_write_P(PSTR(OLED_RENDER_LAYER_RAISE), layer_state_is(_RAISE));
121#if _MODS
122# ifdef OLED_DISPLAY_128X64
123 oled_write_P(PSTR(" "), false);
124# endif
125 oled_write_P(PSTR(OLED_RENDER_LAYER_MODS), layer_state_is(_MODS));
126#endif
127#ifdef OLED_DISPLAY_128X64
128 oled_advance_page(true);
129#endif
130}
131
132void render_keylock_status(uint8_t led_usb_state) {
133 oled_write_P(PSTR(OLED_RENDER_LOCK_NAME), false);
134 oled_write_P(PSTR(" "), false);
135 oled_write_P(PSTR(OLED_RENDER_LOCK_NUML), led_usb_state & (1 << USB_LED_NUM_LOCK));
136#ifdef OLED_DISPLAY_128X64
137 oled_write_P(PSTR(" "), false);
138#endif
139 oled_write_P(PSTR(OLED_RENDER_LOCK_CAPS), led_usb_state & (1 << USB_LED_CAPS_LOCK));
140#ifdef OLED_DISPLAY_128X64
141 oled_write_P(PSTR(" "), false);
142#endif
143 oled_write_P(PSTR(OLED_RENDER_LOCK_SCLK), led_usb_state & (1 << USB_LED_SCROLL_LOCK));
144#ifndef OLED_DISPLAY_128X64
145 oled_advance_page(true);
146#endif
147}
148
149void render_mod_status(uint8_t modifiers) {
150 oled_write_P(PSTR(OLED_RENDER_MODS_NAME), false);
151 oled_write_P(PSTR(OLED_RENDER_MODS_SFT), (modifiers & MOD_MASK_SHIFT));
152#ifdef OLED_DISPLAY_128X64
153 oled_write_P(PSTR(" "), false);
154#endif
155 oled_write_P(PSTR(OLED_RENDER_MODS_CTL), (modifiers & MOD_MASK_CTRL));
156#ifdef OLED_DISPLAY_128X64
157 oled_write_P(PSTR(" "), false);
158#endif
159 oled_write_P(PSTR(OLED_RENDER_MODS_ALT), (modifiers & MOD_MASK_ALT));
160#ifdef OLED_DISPLAY_128X64
161 oled_write_P(PSTR(" "), false);
162#endif
163 oled_write_P(PSTR(OLED_RENDER_MODS_GUI), (modifiers & MOD_MASK_GUI));
164}
165
166void render_bootmagic_status(void) {
167 /* Show Ctrl-Gui Swap options */
168 static const char PROGMEM logo[][2][3] = {
169 {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
170 {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
171 };
172
173 oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NAME), false);
174#ifdef OLED_DISPLAY_128X64
175 if (keymap_config.swap_lctl_lgui)
176#else
177 oled_write_P(PSTR(" "), false);
178#endif
179 {
180 oled_write_P(logo[1][0], false);
181#ifdef OLED_DISPLAY_128X64
182 } else {
183#endif
184 oled_write_P(logo[0][0], false);
185 }
186 oled_write_P(PSTR(" "), false);
187#ifdef OLED_DISPLAY_128X64
188 oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
189 oled_write_P(PSTR(" "), false);
190 oled_write_ln_P(PSTR(OLED_RENDER_BOOTMAGIC_NOGUI), !keymap_config.no_gui);
191 oled_write_P(PSTR("Magic "), false);
192 if (keymap_config.swap_lctl_lgui)
193#endif
194 {
195 oled_write_P(logo[1][1], false);
196#ifdef OLED_DISPLAY_128X64
197 } else {
198#endif
199 oled_write_P(logo[0][1], false);
200 }
201 oled_write_P(PSTR(" "), false);
202#ifdef OLED_DISPLAY_128X64
203 oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_GRV), keymap_config.swap_grave_esc);
204 oled_write_P(PSTR(" "), false);
205 oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_CAPS), keymap_config.swap_control_capslock);
206 oled_advance_page(true);
207#else
208 oled_write_P(PSTR(OLED_RENDER_BOOTMAGIC_NKRO), keymap_config.nkro);
209#endif
210}
211
212void render_user_status(void) {
213 oled_write_P(PSTR(OLED_RENDER_USER_NAME), false);
214 oled_write_P(PSTR(" "), false);
215 oled_write_P(PSTR(OLED_RENDER_USER_ANIM), userspace_config.rgb_matrix_idle_anim);
216 oled_write_P(PSTR(" "), false);
217 oled_write_P(PSTR(OLED_RENDER_USER_LAYR), userspace_config.rgb_layer_change);
218 oled_write_P(PSTR(" "), false);
219 oled_write_P(PSTR(OLED_RENDER_USER_NUKE), userspace_config.nuke_switch);
220#ifdef OLED_DISPLAY_128X64
221 oled_advance_page(true);
222#endif
223}
224
225__attribute__((weak)) void oled_driver_render_logo(void) {
226 // clang-format off
227 static const char PROGMEM qmk_logo[] = {
228 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
229 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
230 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
231 // clang-format on
232 oled_write_P(qmk_logo, false);
233}
234
235void render_status_secondary(void) {
236#if !defined(SPLIT_TRANSPORT_MIRROR) || defined(OLED_DRIVER_128x64)
237 oled_driver_render_logo();
238#endif
239#ifdef SPLIT_TRANSPORT_MIRROR
240 /* Show Keyboard Layout */
241 render_default_layer_state();
242 render_layer_state();
243 render_mod_status(get_mods() | get_oneshot_mods());
244 render_keylogger_status();
245
246#endif
247}
248// clang-format on
249
250void render_status_main(void) {
251 /* Show Keyboard Layout */
252 render_default_layer_state();
253 render_keylock_status(host_keyboard_leds());
254 render_bootmagic_status();
255 render_user_status();
256
257 render_keylogger_status();
258}
259
260void oled_task_user(void) {
261 if (timer_elapsed32(oled_timer) > 30000) {
262 oled_off();
263 return;
264 }
265#ifndef SPLIT_KEYBOARD
266 else {
267 oled_on();
268 }
269#endif
270
271 update_log();
272
273 if (is_master) {
274 render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
275 } else {
276 render_status_secondary();
277 }
278}
diff --git a/users/drashna/oled_stuff.h b/users/drashna/oled_stuff.h
new file mode 100644
index 000000000..662e206b7
--- /dev/null
+++ b/users/drashna/oled_stuff.h
@@ -0,0 +1,91 @@
1#pragma once
2
3#include "quantum.h"
4#include "oled_driver.h"
5
6void oled_driver_render_logo(void);
7bool process_record_user_oled(uint16_t keycode, keyrecord_t *record);
8
9#ifdef OLED_DISPLAY_128X64
10# define OLED_RENDER_KEYLOGGER "Keylogger: "
11
12# define OLED_RENDER_LAYOUT_NAME "Layout: "
13# define OLED_RENDER_LAYOUT_QWERTY "Qwerty"
14# define OLED_RENDER_LAYOUT_COLEMAK "Colemak"
15# define OLED_RENDER_LAYOUT_DVORAK "Dvorak"
16# define OLED_RENDER_LAYOUT_WORKMAN "Workman"
17# define OLED_RENDER_LAYOUT_NORMAN "Norman"
18# define OLED_RENDER_LAYOUT_MALTRON "Matron"
19# define OLED_RENDER_LAYOUT_EUCALYN "Eucalyn"
20# define OLED_RENDER_LAYOUT_CARPLAX "Carplax"
21
22# define OLED_RENDER_LAYER_NAME "Layer:\n"
23# define OLED_RENDER_LAYER_LOWER "Lower"
24# define OLED_RENDER_LAYER_RAISE "Raise"
25# define OLED_RENDER_LAYER_ADJUST "Adjust"
26# define OLED_RENDER_LAYER_MODS "Mods"
27
28# define OLED_RENDER_LOCK_NAME "Lock: "
29# define OLED_RENDER_LOCK_NUML "NUML"
30# define OLED_RENDER_LOCK_CAPS "CAPS"
31# define OLED_RENDER_LOCK_SCLK "SCLK"
32
33# define OLED_RENDER_MODS_NAME "Mods: "
34# define OLED_RENDER_MODS_SFT "Sft"
35# define OLED_RENDER_MODS_CTL "Ctl"
36# define OLED_RENDER_MODS_ALT "Alt"
37# define OLED_RENDER_MODS_GUI "GUI"
38
39# define OLED_RENDER_BOOTMAGIC_NAME "Boot "
40# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
41# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
42# define OLED_RENDER_BOOTMAGIC_GRV "GRV"
43# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
44
45# define OLED_RENDER_USER_NAME "USER:"
46# define OLED_RENDER_USER_ANIM "Anim"
47# define OLED_RENDER_USER_LAYR "Layr"
48# define OLED_RENDER_USER_NUKE "Nuke"
49
50#else
51# define OLED_RENDER_KEYLOGGER "KLogr"
52
53# define OLED_RENDER_LAYOUT_NAME "Lyout"
54# define OLED_RENDER_LAYOUT_QWERTY " QRTY"
55# define OLED_RENDER_LAYOUT_COLEMAK " COLE"
56# define OLED_RENDER_LAYOUT_DVORAK " DVRK"
57# define OLED_RENDER_LAYOUT_WORKMAN " WKMN"
58# define OLED_RENDER_LAYOUT_NORMAN " NORM"
59# define OLED_RENDER_LAYOUT_MALTRON " MLTN"
60# define OLED_RENDER_LAYOUT_EUCALYN " ECLN"
61# define OLED_RENDER_LAYOUT_CARPLAX " CRPX"
62
63# define OLED_RENDER_LAYER_NAME "LAYER"
64# define OLED_RENDER_LAYER_LOWER "Lower"
65# define OLED_RENDER_LAYER_RAISE "Raise"
66# define OLED_RENDER_LAYER_ADJUST "Adjst"
67# define OLED_RENDER_LAYER_MODS " Mods"
68
69# define OLED_RENDER_LOCK_NAME "Lock:"
70# define OLED_RENDER_LOCK_NUML "N"
71# define OLED_RENDER_LOCK_CAPS "C"
72# define OLED_RENDER_LOCK_SCLK "S"
73
74# define OLED_RENDER_MODS_NAME "Mods: "
75# define OLED_RENDER_MODS_SFT "S"
76# define OLED_RENDER_MODS_CTL "C"
77# define OLED_RENDER_MODS_ALT "A"
78# define OLED_RENDER_MODS_GUI "G"
79
80# define OLED_RENDER_BOOTMAGIC_NAME "BTMGK"
81# define OLED_RENDER_BOOTMAGIC_NKRO "NKRO"
82# define OLED_RENDER_BOOTMAGIC_NOGUI "nGUI"
83# define OLED_RENDER_BOOTMAGIC_GRV "GRV"
84# define OLED_RENDER_BOOTMAGIC_CAPS "CAPS"
85
86# define OLED_RENDER_USER_NAME "USER:"
87# define OLED_RENDER_USER_ANIM "Anim"
88# define OLED_RENDER_USER_LAYR "Layr"
89# define OLED_RENDER_USER_NUKE "Nuke"
90
91#endif
diff --git a/users/drashna/process_records.c b/users/drashna/process_records.c
index af3ee9cf0..101b3d95c 100644
--- a/users/drashna/process_records.c
+++ b/users/drashna/process_records.c
@@ -17,101 +17,308 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
17 xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed); 17 xprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
18# endif 18# endif
19#endif // KEYLOGGER_ENABLE 19#endif // KEYLOGGER_ENABLE
20#ifdef OLED_DRIVER_ENABLE
21 process_record_user_oled(keycode, record);
22#endif // OLED
20 23
21 switch (keycode) { 24 if (process_record_keymap(keycode, record) && process_record_secrets(keycode, record)
22 case KC_QWERTY ... KC_WORKMAN: 25#ifdef RGB_MATRIX_ENABLE
23 if (record->event.pressed) { 26 && process_record_user_rgb_matrix(keycode, record)
24 uint8_t mods = mod_config(get_mods() | get_oneshot_mods()); 27#endif
25 if (!mods) { 28#ifdef RGBLIGHT_ENABLE
26 set_single_persistent_default_layer(keycode - KC_QWERTY); 29 && process_record_user_rgb_light(keycode, record)
27 } else if (mods & MOD_MASK_SHIFT) { 30#endif
28 set_single_persistent_default_layer(keycode - KC_QWERTY + 4); 31 ) {
29 } else if (mods & MOD_MASK_CTRL) { 32 switch (keycode) {
30 set_single_persistent_default_layer(keycode - KC_QWERTY + 8); 33 case KC_QWERTY ... KC_WORKMAN:
34 if (record->event.pressed) {
35 uint8_t mods = mod_config(get_mods() | get_oneshot_mods());
36 if (!mods) {
37 set_single_persistent_default_layer(keycode - KC_QWERTY);
38 } else if (mods & MOD_MASK_SHIFT) {
39 set_single_persistent_default_layer(keycode - KC_QWERTY + 4);
40 } else if (mods & MOD_MASK_CTRL) {
41 set_single_persistent_default_layer(keycode - KC_QWERTY + 8);
42 }
31 } 43 }
32 } 44 break;
33 break;
34 45
35 case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader 46 case KC_MAKE: // Compiles the firmware, and adds the flash command based on keyboard bootloader
36 if (!record->event.pressed) { 47 if (!record->event.pressed) {
37 uint8_t temp_mod = mod_config(get_mods());
38 uint8_t temp_osm = mod_config(get_oneshot_mods());
39 clear_mods();
40 clear_oneshot_mods();
41 send_string_with_delay_P(PSTR("make " QMK_KEYBOARD ":" QMK_KEYMAP), TAP_CODE_DELAY);
42#ifndef MAKE_BOOTLOADER 48#ifndef MAKE_BOOTLOADER
43 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT) 49 uint8_t temp_mod = mod_config(get_mods());
50 uint8_t temp_osm = mod_config(get_oneshot_mods());
51 clear_mods();
52 clear_oneshot_mods();
44#endif 53#endif
45 { 54 send_string_with_delay_P(PSTR("bin/qmk"), TAP_CODE_DELAY);
46 send_string_with_delay_P(PSTR(":flash"), TAP_CODE_DELAY); 55#ifndef MAKE_BOOTLOADER
47 } 56 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
48 if ((temp_mod | temp_osm) & MOD_MASK_CTRL) { 57#endif
49 send_string_with_delay_P(PSTR(" -j8 --output-sync"), TAP_CODE_DELAY); 58 {
50 } 59 send_string_with_delay_P(PSTR(" flash "), TAP_CODE_DELAY);
60#ifndef MAKE_BOOTLOADER
61 } else {
62 send_string_with_delay_P(PSTR(" compile "), TAP_CODE_DELAY);
63#endif
64 }
65 send_string_with_delay_P(PSTR("-kb " QMK_KEYBOARD " -km " QMK_KEYMAP), TAP_CODE_DELAY);
51#ifdef RGB_MATRIX_SPLIT_RIGHT 66#ifdef RGB_MATRIX_SPLIT_RIGHT
52 send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY); 67 send_string_with_delay_P(PSTR(" RGB_MATRIX_SPLIT_RIGHT=yes"), TAP_CODE_DELAY);
53# ifndef OLED_DRIVER_ENABLE 68# ifndef OLED_DRIVER_ENABLE
54 send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY); 69 send_string_with_delay_P(PSTR(" OLED_DRIVER_ENABLE=no"), TAP_CODE_DELAY);
55# endif 70# endif
56#endif 71#endif
57 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY); 72 send_string_with_delay_P(PSTR(SS_TAP(X_ENTER)), TAP_CODE_DELAY);
58 } 73 }
59 74
60 break; 75 break;
61 76
62 case VRSN: // Prints firmware version 77 case VRSN: // Prints firmware version
63 if (record->event.pressed) { 78 if (record->event.pressed) {
64 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY); 79 send_string_with_delay_P(PSTR(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION ", Built on: " QMK_BUILDDATE), TAP_CODE_DELAY);
65 } 80 }
66 break; 81 break;
67 82
68 case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them 83 case KC_DIABLO_CLEAR: // reset all Diablo timers, disabling them
69#ifdef TAP_DANCE_ENABLE 84#ifdef TAP_DANCE_ENABLE
70 if (record->event.pressed) { 85 if (record->event.pressed) {
71 for (uint8_t index = 0; index < 4; index++) { 86 for (uint8_t index = 0; index < 4; index++) {
72 diablo_timer[index].key_interval = 0; 87 diablo_timer[index].key_interval = 0;
88 }
73 } 89 }
74 }
75#endif // TAP_DANCE_ENABLE 90#endif // TAP_DANCE_ENABLE
76 break; 91 break;
77 92
78 case KC_CCCV: // One key copy/paste 93 case KC_CCCV: // One key copy/paste
79 if (record->event.pressed) { 94 if (record->event.pressed) {
80 copy_paste_timer = timer_read(); 95 copy_paste_timer = timer_read();
81 } else { 96 } else {
82 if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy 97 if (timer_elapsed(copy_paste_timer) > TAPPING_TERM) { // Hold, copy
83 tap_code16(LCTL(KC_C)); 98 tap_code16(LCTL(KC_C));
84 } else { // Tap, paste 99 } else { // Tap, paste
85 tap_code16(LCTL(KC_V)); 100 tap_code16(LCTL(KC_V));
101 }
86 } 102 }
87 } 103 break;
88 break;
89#ifdef UNICODE_ENABLE 104#ifdef UNICODE_ENABLE
90 case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻ 105 case UC_FLIP: // (ノಠ痊ಠ)ノ彡┻━┻
91 if (record->event.pressed) { 106 if (record->event.pressed) {
92 send_unicode_hex_string("0028 30CE 0CA0 75CA 0CA0 0029 30CE 5F61 253B 2501 253B"); 107 send_unicode_string("(ノಠ痊ಠ)ノ彡┻━┻");
93 } 108 }
94 break; 109 break;
95 case UC_TABL: // ┬─┬ノ( º _ ºノ) 110 case UC_TABL: // ┬─┬ノ( º _ ºノ)
96 if (record->event.pressed) { 111 if (record->event.pressed) {
97 send_unicode_hex_string("252C 2500 252C 30CE 0028 0020 00BA 0020 005F 0020 00BA 30CE 0029"); 112 send_unicode_string("┬─┬ノ( º _ ºノ)");
98 } 113 }
99 break; 114 break;
100 case UC_SHRG: // ¯\_(ツ)_/¯ 115 case UC_SHRG: // ¯\_(ツ)_/¯
101 if (record->event.pressed) { 116 if (record->event.pressed) {
102 send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF"); 117 send_unicode_string("¯\\_(ツ)_/¯");
103 } 118 }
104 break; 119 break;
105 case UC_DISA: // ಠ_ಠ 120 case UC_DISA: // ಠ_ಠ
106 if (record->event.pressed) { 121 if (record->event.pressed) {
107 send_unicode_hex_string("0CA0 005F 0CA0"); 122 send_unicode_string("ಠ_ಠ");
108 } 123 }
109 break; 124 break;
110#endif 125#endif
111 } 126 case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
112 return process_record_keymap(keycode, record) &&
113#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE) 127#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
114 process_record_user_rgb(keycode, record) && 128 if (record->event.pressed) {
129 userspace_config.rgb_layer_change ^= 1;
130 dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
131 eeconfig_update_user(userspace_config.raw);
132 if (userspace_config.rgb_layer_change) {
133# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
134 rgblight_enable_noeeprom();
135# endif
136 layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
137# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
138 } else {
139 rgblight_disable_noeeprom();
140# endif
141 }
142 }
115#endif // RGBLIGHT_ENABLE 143#endif // RGBLIGHT_ENABLE
116 process_record_secrets(keycode, record); 144 break;
145
146#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
147 case RGB_TOG:
148 // Split keyboards need to trigger on key-up for edge-case issue
149# ifndef SPLIT_KEYBOARD
150 if (record->event.pressed) {
151# else
152 if (!record->event.pressed) {
153# endif
154# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
155 rgblight_toggle();
156# endif
157# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
158 rgb_matrix_toggle();
159# endif
160 }
161 return false;
162 break;
163 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
164 if (record->event.pressed) {
165 bool is_eeprom_updated;
166# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
167 // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
168 if (userspace_config.rgb_layer_change) {
169 userspace_config.rgb_layer_change = false;
170 dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
171 is_eeprom_updated = true;
172 }
173# endif
174# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
175 if (userspace_config.rgb_matrix_idle_anim) {
176 userspace_config.rgb_matrix_idle_anim = false;
177 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
178 is_eeprom_updated = true;
179 }
180# endif
181 if (is_eeprom_updated) {
182 eeconfig_update_user(userspace_config.raw);
183 }
184 }
185
186# if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES)
187 if (keycode == RGB_MODE_FORWARD && record->event.pressed) {
188 uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
189 if (shifted) {
190# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
191 rgblight_step_reverse();
192# endif
193# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
194 rgb_matrix_step_reverse();
195# endif
196 } else {
197# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
198 rgblight_step();
199# endif
200# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
201 rgb_matrix_step();
202# endif
203 }
204 } else if (keycode == RGB_MODE_REVERSE && record->event.pressed) {
205 uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
206 if (shifted) {
207# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
208 rgblight_step();
209# endif
210# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
211 rgb_matrix_step();
212# endif
213 } else {
214# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
215 rgblight_step_reverse();
216# endif
217# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
218 rgb_matrix_step_reverse();
219# endif
220 }
221 } else if (keycode == RGB_HUI) {
222# ifndef SPLIT_KEYBOARD
223 if (record->event.pressed) {
224# else
225 if (!record->event.pressed) {
226# endif
227# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
228 rgblight_increase_hue();
229# endif
230# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
231 rgb_matrix_increase_hue();
232# endif
233 }
234 } else if (keycode == RGB_HUD) {
235# ifndef SPLIT_KEYBOARD
236 if (record->event.pressed) {
237# else
238 if (!record->event.pressed) {
239# endif
240# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
241 rgblight_decrease_hue();
242# endif
243# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
244 rgb_matrix_decrease_hue();
245# endif
246 }
247 } else if (keycode == RGB_SAI) {
248# ifndef SPLIT_KEYBOARD
249 if (record->event.pressed) {
250# else
251 if (!record->event.pressed) {
252# endif
253# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
254 rgblight_increase_sat();
255# endif
256# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
257 rgb_matrix_increase_sat();
258# endif
259 }
260 } else if (keycode == RGB_SAD) {
261# ifndef SPLIT_KEYBOARD
262 if (record->event.pressed) {
263# else
264 if (!record->event.pressed) {
265# endif
266# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
267 rgblight_decrease_sat();
268# endif
269# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
270 rgb_matrix_decrease_sat();
271# endif
272 }
273 } else if (keycode == RGB_VAI) {
274# ifndef SPLIT_KEYBOARD
275 if (record->event.pressed) {
276# else
277 if (!record->event.pressed) {
278# endif
279# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
280 rgblight_increase_val();
281# endif
282# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
283 rgb_matrix_increase_val();
284# endif
285 }
286 } else if (keycode == RGB_VAD) {
287# ifndef SPLIT_KEYBOARD
288 if (record->event.pressed) {
289# else
290 if (!record->event.pressed) {
291# endif
292# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
293 rgblight_decrease_val();
294# endif
295# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
296 rgb_matrix_decrease_val();
297# endif
298 }
299 } else if (keycode == RGB_SPI) {
300 if (record->event.pressed) {
301# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
302 rgblight_increase_speed();
303# endif
304# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
305 rgb_matrix_increase_speed();
306# endif
307 }
308 } else if (keycode == RGB_SPD) {
309 if (record->event.pressed) {
310# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
311 rgblight_decrease_speed();
312# endif
313# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
314 rgb_matrix_decrease_speed();
315# endif
316 }
317 }
318 return false;
319# endif
320#endif
321 }
322 }
323 return true;
117} 324}
diff --git a/users/drashna/process_records.h b/users/drashna/process_records.h
index cb7ec3ec4..999882d4b 100644
--- a/users/drashna/process_records.h
+++ b/users/drashna/process_records.h
@@ -34,13 +34,13 @@ enum userspace_custom_keycodes {
34bool process_record_secrets(uint16_t keycode, keyrecord_t *record); 34bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
35bool process_record_keymap(uint16_t keycode, keyrecord_t *record); 35bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
36 36
37#define LOWER MO(_LOWER) 37#define LOWER MO(_LOWER)
38#define RAISE MO(_RAISE) 38#define RAISE MO(_RAISE)
39#define ADJUST MO(_ADJUST) 39#define ADJUST MO(_ADJUST)
40#define TG_MODS TG(_MODS) 40#define TG_MODS TG(_MODS)
41#define TG_GAME TG(_GAMEPAD) 41#define TG_GAME TG(_GAMEPAD)
42#define OS_LWR OSL(_LOWER) 42#define OS_LWR OSL(_LOWER)
43#define OS_RSE OSL(_RAISE) 43#define OS_RSE OSL(_RAISE)
44 44
45#define KC_SEC1 KC_SECRET_1 45#define KC_SEC1 KC_SECRET_1
46#define KC_SEC2 KC_SECRET_2 46#define KC_SEC2 KC_SECRET_2
@@ -48,13 +48,13 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
48#define KC_SEC4 KC_SECRET_4 48#define KC_SEC4 KC_SECRET_4
49#define KC_SEC5 KC_SECRET_5 49#define KC_SEC5 KC_SECRET_5
50 50
51#define QWERTY KC_QWERTY 51#define QWERTY KC_QWERTY
52#define DVORAK KC_DVORAK 52#define DVORAK KC_DVORAK
53#define COLEMAK KC_COLEMAK 53#define COLEMAK KC_COLEMAK
54#define WORKMAN KC_WORKMAN 54#define WORKMAN KC_WORKMAN
55 55
56#define KC_RESET RESET 56#define KC_RESET RESET
57#define KC_RST KC_RESET 57#define KC_RST KC_RESET
58 58
59#ifdef SWAP_HANDS_ENABLE 59#ifdef SWAP_HANDS_ENABLE
60# define KC_C1R3 SH_T(KC_TAB) 60# define KC_C1R3 SH_T(KC_TAB)
@@ -81,7 +81,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
81#define OS_RCTL OSM(MOD_RCTL) 81#define OS_RCTL OSM(MOD_RCTL)
82#define OS_LALT OSM(MOD_LALT) 82#define OS_LALT OSM(MOD_LALT)
83#define OS_RALT OSM(MOD_RALT) 83#define OS_RALT OSM(MOD_RALT)
84#define OS_MEH OSM(MOD_MEH) 84#define OS_MEH OSM(MOD_MEH)
85#define OS_HYPR OSM(MOD_HYPR) 85#define OS_HYPR OSM(MOD_HYPR)
86 86
87#define ALT_APP ALT_T(KC_APP) 87#define ALT_APP ALT_T(KC_APP)
diff --git a/users/drashna/rgb_matrix_stuff.c b/users/drashna/rgb_matrix_stuff.c
new file mode 100644
index 000000000..0914aab14
--- /dev/null
+++ b/users/drashna/rgb_matrix_stuff.c
@@ -0,0 +1,86 @@
1#include "drashna.h"
2
3#include "lib/lib8tion/lib8tion.h"
4extern led_config_t g_led_config;
5
6static uint32_t hypno_timer;
7#if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd)
8# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
9#else
10# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
11#endif
12
13void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
14 HSV hsv = {hue, sat, val};
15 if (hsv.v > rgb_matrix_config.hsv.v) {
16 hsv.v = rgb_matrix_config.hsv.v;
17 }
18
19 switch (mode) {
20 case 1: // breathing
21 {
22 uint16_t time = scale16by8(g_rgb_counters.tick, speed / 8);
23 hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
24 RGB rgb = hsv_to_rgb(hsv);
25 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
26 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
27 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
28 }
29 }
30 break;
31 }
32 default: // Solid Color
33 {
34 RGB rgb = hsv_to_rgb(hsv);
35 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
36 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
37 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
38 }
39 }
40 break;
41 }
42 }
43}
44
45__attribute__((weak)) void rgb_matrix_indicator_keymap(void) {}
46
47void matrix_scan_rgb_matrix(void) {
48#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
49 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) {
50 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
51 }
52#endif
53 rgb_matrix_indicator_keymap();
54}
55
56void keyboard_post_init_rgb_matrix(void) {
57#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
58 if (userspace_config.rgb_matrix_idle_anim) {
59 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
60 }
61#endif
62}
63
64bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
65#if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
66 hypno_timer = timer_read32();
67 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
68 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
69 }
70#endif
71 switch (keycode) {
72 case RGB_IDL: // This allows me to use underglow as layer indication, or as normal
73#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
74 if (record->event.pressed) {
75 userspace_config.rgb_matrix_idle_anim ^= 1;
76 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
77 eeconfig_update_user(userspace_config.raw);
78 if (userspace_config.rgb_matrix_idle_anim) {
79 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
80 }
81 }
82#endif
83 break;
84 }
85 return true;
86}
diff --git a/users/drashna/rgb_matrix_stuff.h b/users/drashna/rgb_matrix_stuff.h
new file mode 100644
index 000000000..35b01047b
--- /dev/null
+++ b/users/drashna/rgb_matrix_stuff.h
@@ -0,0 +1,9 @@
1#pragma once
2#include "quantum.h"
3
4bool process_record_user_rgb_matrix(uint16_t keycode, keyrecord_t *record);
5void keyboard_post_init_rgb_matrix(void);
6void matrix_scan_rgb_matrix(void);
7
8void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
9void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type);
diff --git a/users/drashna/rgb_stuff.c b/users/drashna/rgb_stuff.c
index e7247f754..06b1e3c0c 100644
--- a/users/drashna/rgb_stuff.c
+++ b/users/drashna/rgb_stuff.c
@@ -2,89 +2,77 @@
2#include "rgb_stuff.h" 2#include "rgb_stuff.h"
3#include "eeprom.h" 3#include "eeprom.h"
4 4
5#if defined(RGBLIGHT_ENABLE)
6extern rgblight_config_t rgblight_config; 5extern rgblight_config_t rgblight_config;
7bool has_initialized; 6bool has_initialized;
8 7
9void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); } 8void rgblight_sethsv_default_helper(uint8_t index) { rgblight_sethsv_at(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, index); }
10#endif // RGBLIGHT_ENABLE
11
12#if defined(RGB_MATRIX_ENABLE)
13static uint32_t hypno_timer;
14# if defined(SPLIT_KEYBOARD) || defined(KEYBOARD_ergodox_ez) || defined(KEYBOARD_crkbd)
15# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN_DUAL
16# else
17# define RGB_MATRIX_REST_MODE RGB_MATRIX_CYCLE_OUT_IN
18# endif
19#endif
20 9
21/* Custom indicators for modifiers. 10/* Custom indicators for modifiers.
22 * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback. 11 * This allows for certain lights to be lit up, based on what mods are active, giving some visual feedback.
23 * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up. 12 * This is especially useful for One Shot Mods, since it's not always obvious if they're still lit up.
24 */ 13 */
25#ifdef RGBLIGHT_ENABLE 14#ifdef INDICATOR_LIGHTS
26# ifdef INDICATOR_LIGHTS
27void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) { 15void set_rgb_indicators(uint8_t this_mod, uint8_t this_led, uint8_t this_osm) {
28 if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) { 16 if (userspace_config.rgb_layer_change && get_highest_layer(layer_state) == 0) {
29 if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) { 17 if ((this_mod | this_osm) & MOD_MASK_SHIFT || this_led & (1 << USB_LED_CAPS_LOCK)) {
30# ifdef SHFT_LED1 18# ifdef SHFT_LED1
31 rgblight_sethsv_at(120, 255, 255, SHFT_LED1); 19 rgblight_sethsv_at(120, 255, 255, SHFT_LED1);
32# endif // SHFT_LED1 20# endif // SHFT_LED1
33# ifdef SHFT_LED2 21# ifdef SHFT_LED2
34 rgblight_sethsv_at(120, 255, 255, SHFT_LED2); 22 rgblight_sethsv_at(120, 255, 255, SHFT_LED2);
35# endif // SHFT_LED2 23# endif // SHFT_LED2
36 } else { 24 } else {
37# ifdef SHFT_LED1 25# ifdef SHFT_LED1
38 rgblight_sethsv_default_helper(SHFT_LED1); 26 rgblight_sethsv_default_helper(SHFT_LED1);
39# endif // SHFT_LED1 27# endif // SHFT_LED1
40# ifdef SHFT_LED2 28# ifdef SHFT_LED2
41 rgblight_sethsv_default_helper(SHFT_LED2); 29 rgblight_sethsv_default_helper(SHFT_LED2);
42# endif // SHFT_LED2 30# endif // SHFT_LED2
43 } 31 }
44 if ((this_mod | this_osm) & MOD_MASK_CTRL) { 32 if ((this_mod | this_osm) & MOD_MASK_CTRL) {
45# ifdef CTRL_LED1 33# ifdef CTRL_LED1
46 rgblight_sethsv_at(0, 255, 255, CTRL_LED1); 34 rgblight_sethsv_at(0, 255, 255, CTRL_LED1);
47# endif // CTRL_LED1 35# endif // CTRL_LED1
48# ifdef CTRL_LED2 36# ifdef CTRL_LED2
49 rgblight_sethsv_at(0, 255, 255, CTRL_LED2); 37 rgblight_sethsv_at(0, 255, 255, CTRL_LED2);
50# endif // CTRL_LED2 38# endif // CTRL_LED2
51 } else { 39 } else {
52# ifdef CTRL_LED1 40# ifdef CTRL_LED1
53 rgblight_sethsv_default_helper(CTRL_LED1); 41 rgblight_sethsv_default_helper(CTRL_LED1);
54# endif // CTRL_LED1 42# endif // CTRL_LED1
55# ifdef CTRL_LED2 43# ifdef CTRL_LED2
56 rgblight_sethsv_default_helper(CTRL_LED2); 44 rgblight_sethsv_default_helper(CTRL_LED2);
57# endif // CTRL_LED2 45# endif // CTRL_LED2
58 } 46 }
59 if ((this_mod | this_osm) & MOD_MASK_GUI) { 47 if ((this_mod | this_osm) & MOD_MASK_GUI) {
60# ifdef GUI_LED1 48# ifdef GUI_LED1
61 rgblight_sethsv_at(51, 255, 255, GUI_LED1); 49 rgblight_sethsv_at(51, 255, 255, GUI_LED1);
62# endif // GUI_LED1 50# endif // GUI_LED1
63# ifdef GUI_LED2 51# ifdef GUI_LED2
64 rgblight_sethsv_at(51, 255, 255, GUI_LED2); 52 rgblight_sethsv_at(51, 255, 255, GUI_LED2);
65# endif // GUI_LED2 53# endif // GUI_LED2
66 } else { 54 } else {
67# ifdef GUI_LED1 55# ifdef GUI_LED1
68 rgblight_sethsv_default_helper(GUI_LED1); 56 rgblight_sethsv_default_helper(GUI_LED1);
69# endif // GUI_LED1 57# endif // GUI_LED1
70# ifdef GUI_LED2 58# ifdef GUI_LED2
71 rgblight_sethsv_default_helper(GUI_LED2); 59 rgblight_sethsv_default_helper(GUI_LED2);
72# endif // GUI_LED2 60# endif // GUI_LED2
73 } 61 }
74 if ((this_mod | this_osm) & MOD_MASK_ALT) { 62 if ((this_mod | this_osm) & MOD_MASK_ALT) {
75# ifdef ALT_LED1 63# ifdef ALT_LED1
76 rgblight_sethsv_at(240, 255, 255, ALT_LED1); 64 rgblight_sethsv_at(240, 255, 255, ALT_LED1);
77# endif // ALT_LED1 65# endif // ALT_LED1
78# ifdef GUI_LED2 66# ifdef GUI_LED2
79 rgblight_sethsv_at(240, 255, 255, ALT_LED2); 67 rgblight_sethsv_at(240, 255, 255, ALT_LED2);
80# endif // GUI_LED2 68# endif // GUI_LED2
81 } else { 69 } else {
82# ifdef GUI_LED1 70# ifdef GUI_LED1
83 rgblight_sethsv_default_helper(ALT_LED1); 71 rgblight_sethsv_default_helper(ALT_LED1);
84# endif // GUI_LED1 72# endif // GUI_LED1
85# ifdef GUI_LED2 73# ifdef GUI_LED2
86 rgblight_sethsv_default_helper(ALT_LED2); 74 rgblight_sethsv_default_helper(ALT_LED2);
87# endif // GUI_LED2 75# endif // GUI_LED2
88 } 76 }
89 } 77 }
90} 78}
@@ -95,9 +83,9 @@ void matrix_scan_indicator(void) {
95 set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods()); 83 set_rgb_indicators(get_mods(), host_keyboard_leds(), get_oneshot_mods());
96 } 84 }
97} 85}
98# endif // INDICATOR_LIGHTS 86#endif // INDICATOR_LIGHTS
99 87
100# ifdef RGBLIGHT_TWINKLE 88#ifdef RGBLIGHT_TWINKLE
101static rgblight_fadeout lights[RGBLED_NUM]; 89static rgblight_fadeout lights[RGBLED_NUM];
102 90
103__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; } 91__attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) { return false; }
@@ -105,40 +93,40 @@ __attribute__((weak)) bool rgblight_twinkle_is_led_used_keymap(uint8_t index) {
105/* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */ 93/* This function checks for used LEDs. This way, collisions don't occur and cause weird rendering */
106bool rgblight_twinkle_is_led_used(uint8_t index) { 94bool rgblight_twinkle_is_led_used(uint8_t index) {
107 switch (index) { 95 switch (index) {
108# ifdef INDICATOR_LIGHTS 96# ifdef INDICATOR_LIGHTS
109# ifdef SHFT_LED1 97# ifdef SHFT_LED1
110 case SHFT_LED1: 98 case SHFT_LED1:
111 return true; 99 return true;
112# endif // SHFT_LED1 100# endif // SHFT_LED1
113# ifdef SHFT_LED2 101# ifdef SHFT_LED2
114 case SHFT_LED2: 102 case SHFT_LED2:
115 return true; 103 return true;
116# endif // SHFT_LED2 104# endif // SHFT_LED2
117# ifdef CTRL_LED1 105# ifdef CTRL_LED1
118 case CTRL_LED1: 106 case CTRL_LED1:
119 return true; 107 return true;
120# endif // CTRL_LED1 108# endif // CTRL_LED1
121# ifdef CTRL_LED2 109# ifdef CTRL_LED2
122 case CTRL_LED2: 110 case CTRL_LED2:
123 return true; 111 return true;
124# endif // CTRL_LED2 112# endif // CTRL_LED2
125# ifdef GUI_LED1 113# ifdef GUI_LED1
126 case GUI_LED1: 114 case GUI_LED1:
127 return true; 115 return true;
128# endif // GUI_LED1 116# endif // GUI_LED1
129# ifdef GUI_LED2 117# ifdef GUI_LED2
130 case GUI_LED2: 118 case GUI_LED2:
131 return true; 119 return true;
132# endif // GUI_LED2 120# endif // GUI_LED2
133# ifdef ALT_LED1 121# ifdef ALT_LED1
134 case ALT_LED1: 122 case ALT_LED1:
135 return true; 123 return true;
136# endif // ALT_LED1 124# endif // ALT_LED1
137# ifdef ALT_LED2 125# ifdef ALT_LED2
138 case ALT_LED2: 126 case ALT_LED2:
139 return true; 127 return true;
140# endif // ALT_LED2 128# endif // ALT_LED2
141# endif // INDICATOR_LIGHTS 129# endif // INDICATOR_LIGHTS
142 default: 130 default:
143 return rgblight_twinkle_is_led_used_keymap(index); 131 return rgblight_twinkle_is_led_used_keymap(index);
144 } 132 }
@@ -213,23 +201,15 @@ void start_rgb_light(void) {
213 201
214 rgblight_sethsv_at(light->hue, 255, light->life, light_index); 202 rgblight_sethsv_at(light->hue, 255, light->life, light_index);
215} 203}
216# endif 204#endif
217#endif // RGBLIGHT_ENABLE
218 205
219bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) { 206bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record) {
220 uint16_t temp_keycode = keycode; 207 uint16_t temp_keycode = keycode;
221 // Filter out the actual keycode from MT and LT keys. 208 // Filter out the actual keycode from MT and LT keys.
222 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { 209 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) {
223 temp_keycode &= 0xFF; 210 temp_keycode &= 0xFF;
224 } 211 }
225 212
226#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
227 hypno_timer = timer_read32();
228 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_REST_MODE) {
229 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
230 }
231#endif
232
233 switch (temp_keycode) { 213 switch (temp_keycode) {
234#ifdef RGBLIGHT_TWINKLE 214#ifdef RGBLIGHT_TWINKLE
235 case KC_A ... KC_SLASH: 215 case KC_A ... KC_SLASH:
@@ -242,228 +222,19 @@ bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
242 start_rgb_light(); 222 start_rgb_light();
243 } 223 }
244 break; 224 break;
245#endif // RGBLIGHT_TWINKLE 225#endif // RGBLIGHT_TWINKLE
246 case KC_RGB_T: // This allows me to use underglow as layer indication, or as normal
247#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
248 if (record->event.pressed) {
249 userspace_config.rgb_layer_change ^= 1;
250 dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
251 eeconfig_update_user(userspace_config.raw);
252 if (userspace_config.rgb_layer_change) {
253# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
254 rgblight_enable_noeeprom();
255# endif
256 layer_state_set(layer_state); // This is needed to immediately set the layer color (looks better)
257# if defined(RGBLIGHT_ENABLE) && defined(RGB_MATRIX_ENABLE)
258 } else {
259 rgblight_disable_noeeprom();
260# endif
261 }
262 }
263#endif // RGBLIGHT_ENABLE
264 break;
265 case RGB_IDL: // This allows me to use underglow as layer indication, or as normal
266#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
267 if (record->event.pressed) {
268 userspace_config.rgb_matrix_idle_anim ^= 1;
269 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
270 eeconfig_update_user(userspace_config.raw);
271 if (userspace_config.rgb_matrix_idle_anim) {
272 rgb_matrix_mode_noeeprom(RGB_MATRIX_TYPING_HEATMAP);
273 }
274 }
275#endif
276 break;
277#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
278 case RGB_TOG:
279 // Split keyboards need to trigger on key-up for edge-case issue
280# ifndef SPLIT_KEYBOARD
281 if (record->event.pressed) {
282# else
283 if (!record->event.pressed) {
284# endif
285# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
286 rgblight_toggle();
287# endif
288# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
289 rgb_matrix_toggle();
290# endif
291 }
292 return false;
293 break;
294 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // quantum_keycodes.h L400 for definitions
295 if (record->event.pressed) {
296 bool is_eeprom_updated;
297# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
298 // This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
299 if (userspace_config.rgb_layer_change) {
300 userspace_config.rgb_layer_change = false;
301 dprintf("rgblight layer change [EEPROM]: %u\n", userspace_config.rgb_layer_change);
302 is_eeprom_updated = true;
303 }
304# endif
305# if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
306 if (userspace_config.rgb_matrix_idle_anim) {
307 userspace_config.rgb_matrix_idle_anim = false;
308 dprintf("RGB Matrix Idle Animation [EEPROM]: %u\n", userspace_config.rgb_matrix_idle_anim);
309 is_eeprom_updated = true;
310 }
311# endif
312 if (is_eeprom_updated) {
313 eeconfig_update_user(userspace_config.raw);
314 }
315 }
316
317# if defined(RGBLIGHT_DISABLE_KEYCODES) || defined(RGB_MATRIX_DISABLE_KEYCODES)
318 if (keycode == RGB_MODE_FORWARD && record->event.pressed) {
319 uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
320 if (shifted) {
321# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
322 rgblight_step_reverse();
323# endif
324# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
325 rgb_matrix_step_reverse();
326# endif
327 } else {
328# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
329 rgblight_step();
330# endif
331# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
332 rgb_matrix_step();
333# endif
334 }
335 } else if (keycode == RGB_MODE_REVERSE && record->event.pressed) {
336 uint8_t shifted = get_mods() & (MOD_MASK_SHIFT);
337 if (shifted) {
338# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
339 rgblight_step();
340# endif
341# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
342 rgb_matrix_step();
343# endif
344 } else {
345# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
346 rgblight_step_reverse();
347# endif
348# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
349 rgb_matrix_step_reverse();
350# endif
351 }
352 } else if (keycode == RGB_HUI) {
353# ifndef SPLIT_KEYBOARD
354 if (record->event.pressed) {
355# else
356 if (!record->event.pressed) {
357# endif
358# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
359 rgblight_increase_hue();
360# endif
361# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
362 rgb_matrix_increase_hue();
363# endif
364 }
365 } else if (keycode == RGB_HUD) {
366# ifndef SPLIT_KEYBOARD
367 if (record->event.pressed) {
368# else
369 if (!record->event.pressed) {
370# endif
371# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
372 rgblight_decrease_hue();
373# endif
374# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
375 rgb_matrix_decrease_hue();
376# endif
377 }
378 } else if (keycode == RGB_SAI) {
379# ifndef SPLIT_KEYBOARD
380 if (record->event.pressed) {
381# else
382 if (!record->event.pressed) {
383# endif
384# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
385 rgblight_increase_sat();
386# endif
387# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
388 rgb_matrix_increase_sat();
389# endif
390 }
391 } else if (keycode == RGB_SAD) {
392# ifndef SPLIT_KEYBOARD
393 if (record->event.pressed) {
394# else
395 if (!record->event.pressed) {
396# endif
397# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
398 rgblight_decrease_sat();
399# endif
400# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
401 rgb_matrix_decrease_sat();
402# endif
403 }
404 } else if (keycode == RGB_VAI) {
405# ifndef SPLIT_KEYBOARD
406 if (record->event.pressed) {
407# else
408 if (!record->event.pressed) {
409# endif
410# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
411 rgblight_increase_val();
412# endif
413# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
414 rgb_matrix_increase_val();
415# endif
416 }
417 } else if (keycode == RGB_VAD) {
418# ifndef SPLIT_KEYBOARD
419 if (record->event.pressed) {
420# else
421 if (!record->event.pressed) {
422# endif
423# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
424 rgblight_decrease_val();
425# endif
426# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
427 rgb_matrix_decrease_val();
428# endif
429 }
430 } else if (keycode == RGB_SPI) {
431 if (record->event.pressed) {
432# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
433 rgblight_increase_speed();
434# endif
435# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
436 rgb_matrix_increase_speed();
437# endif
438 }
439 } else if (keycode == RGB_SPD) {
440 if (record->event.pressed) {
441# if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)
442 rgblight_decrease_speed();
443# endif
444# if defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES)
445 rgb_matrix_decrease_speed();
446# endif
447 }
448 }
449 return false;
450# endif
451#endif
452
453 break;
454 } 226 }
455 return true; 227 return true;
456} 228}
457 229
458void keyboard_post_init_rgb(void) { 230void keyboard_post_init_rgb_light(void) {
459#if defined(RGBLIGHT_ENABLE) 231#if defined(RGBLIGHT_STARTUP_ANIMATION)
460# if defined(RGBLIGHT_STARTUP_ANIMATION)
461 bool is_enabled = rgblight_config.enable; 232 bool is_enabled = rgblight_config.enable;
462 if (userspace_config.rgb_layer_change) { 233 if (userspace_config.rgb_layer_change) {
463 rgblight_enable_noeeprom(); 234 rgblight_enable_noeeprom();
464 } 235 }
465 if (rgblight_config.enable) { 236 if (rgblight_config.enable) {
466 layer_state_set_user(layer_state); 237 layer_state_set_rgb_light(layer_state);
467 uint16_t old_hue = rgblight_config.hue; 238 uint16_t old_hue = rgblight_config.hue;
468 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); 239 rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
469 for (uint16_t i = 255; i > 0; i--) { 240 for (uint16_t i = 255; i > 0; i--) {
@@ -476,17 +247,11 @@ void keyboard_post_init_rgb(void) {
476 rgblight_disable_noeeprom(); 247 rgblight_disable_noeeprom();
477 } 248 }
478 249
479# endif
480 layer_state_set_user(layer_state);
481#endif
482#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
483 if (userspace_config.rgb_matrix_idle_anim) {
484 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
485 }
486#endif 250#endif
251 layer_state_set_rgb_light(layer_state);
487} 252}
488 253
489void matrix_scan_rgb(void) { 254void matrix_scan_rgb_light(void) {
490#ifdef RGBLIGHT_ENABLE 255#ifdef RGBLIGHT_ENABLE
491# ifdef RGBLIGHT_TWINKLE 256# ifdef RGBLIGHT_TWINKLE
492 scan_rgblight_fadeout(); 257 scan_rgblight_fadeout();
@@ -496,23 +261,15 @@ void matrix_scan_rgb(void) {
496 matrix_scan_indicator(); 261 matrix_scan_indicator();
497# endif 262# endif
498#endif 263#endif
499
500#if defined(RGB_MATRIX_ENABLE) && defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS)
501 if (userspace_config.rgb_matrix_idle_anim && rgb_matrix_get_mode() == RGB_MATRIX_TYPING_HEATMAP && timer_elapsed32(hypno_timer) > 15000) {
502 rgb_matrix_mode_noeeprom(RGB_MATRIX_REST_MODE);
503 }
504#endif
505} 264}
506 265
507#ifdef RGBLIGHT_ENABLE
508void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) { 266void rgblight_set_hsv_and_mode(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode) {
509 rgblight_sethsv_noeeprom(hue, sat, val); 267 rgblight_sethsv_noeeprom(hue, sat, val);
510 wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly 268 wait_us(175); // Add a slight delay between color and mode to ensure it's processed correctly
511 rgblight_mode_noeeprom(mode); 269 rgblight_mode_noeeprom(mode);
512} 270}
513#endif
514 271
515layer_state_t layer_state_set_rgb(layer_state_t state) { 272layer_state_t layer_state_set_rgb_light(layer_state_t state) {
516#ifdef RGBLIGHT_ENABLE 273#ifdef RGBLIGHT_ENABLE
517 if (userspace_config.rgb_layer_change) { 274 if (userspace_config.rgb_layer_change) {
518 switch (get_highest_layer(state)) { 275 switch (get_highest_layer(state)) {
@@ -574,40 +331,3 @@ layer_state_t layer_state_set_rgb(layer_state_t state) {
574 331
575 return state; 332 return state;
576} 333}
577
578#ifdef RGB_MATRIX_ENABLE
579# include "lib/lib8tion/lib8tion.h"
580extern led_config_t g_led_config;
581
582void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type) {
583 HSV hsv = {hue, sat, val};
584 if (hsv.v > rgb_matrix_config.hsv.v) {
585 hsv.v = rgb_matrix_config.hsv.v;
586 }
587
588 switch (mode) {
589 case 1: // breathing
590 {
591 uint16_t time = scale16by8(g_rgb_counters.tick, speed / 8);
592 hsv.v = scale8(abs8(sin8(time) - 128) * 2, hsv.v);
593 RGB rgb = hsv_to_rgb(hsv);
594 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
595 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
596 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
597 }
598 }
599 break;
600 }
601 default: // Solid Color
602 {
603 RGB rgb = hsv_to_rgb(hsv);
604 for (uint8_t i = 0; i < DRIVER_LED_TOTAL; i++) {
605 if (HAS_FLAGS(g_led_config.flags[i], led_type)) {
606 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
607 }
608 }
609 break;
610 }
611 }
612}
613#endif
diff --git a/users/drashna/rgb_stuff.h b/users/drashna/rgb_stuff.h
index 50b73c1c3..98a552db1 100644
--- a/users/drashna/rgb_stuff.h
+++ b/users/drashna/rgb_stuff.h
@@ -1,10 +1,7 @@
1#pragma once 1#pragma once
2#include "quantum.h" 2#include "quantum.h"
3#ifdef RGB_MATRIX_ENABLE
4# include "rgb_matrix.h"
5#endif
6 3
7#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_TWINKLE) 4#if defined(RGBLIGHT_TWINKLE)
8typedef struct { 5typedef struct {
9 bool enabled; 6 bool enabled;
10 uint8_t hue; 7 uint8_t hue;
@@ -13,20 +10,13 @@ typedef struct {
13} rgblight_fadeout; 10} rgblight_fadeout;
14#endif 11#endif
15 12
16bool process_record_user_rgb(uint16_t keycode, keyrecord_t *record); 13bool process_record_user_rgb_light(uint16_t keycode, keyrecord_t *record);
17void keyboard_post_init_rgb(void); 14void keyboard_post_init_rgb_light(void);
18void matrix_scan_rgb(void); 15void matrix_scan_rgb_light(void);
19layer_state_t layer_state_set_rgb(layer_state_t state); 16layer_state_t layer_state_set_rgb_light(layer_state_t state);
20layer_state_t default_layer_state_set_rgb(layer_state_t state); 17layer_state_t default_layer_state_set_rgb_light(layer_state_t state);
18void rgblight_sethsv_default_helper(uint8_t index);
21 19
22#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_TWINKLE) 20#if defined(RGBLIGHT_TWINKLE)
23void scan_rgblight_fadeout(void); 21void scan_rgblight_fadeout(void);
24#endif 22#endif
25#if defined(RGBLIGHT_ENABLE)
26void rgblight_sethsv_default_helper(uint8_t index);
27#endif
28
29#ifdef RGB_MATRIX_ENABLE
30void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
31void rgb_matrix_layer_helper(uint8_t hue, uint8_t sat, uint8_t val, uint8_t mode, uint8_t speed, uint8_t led_type);
32#endif
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 4d55da803..051368ff5 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -2,9 +2,10 @@ SRC += drashna.c \
2 process_records.c 2 process_records.c
3 3
4ifneq ($(PLATFORM),CHIBIOS) 4ifneq ($(PLATFORM),CHIBIOS)
5 LTO_ENABLE = yes 5 LTO_ENABLE = yes
6endif 6endif
7SPACE_CADET_ENABLE = no 7SPACE_CADET_ENABLE = no
8GRAVE_ESC_ENABLE = no
8 9
9ifneq ($(strip $(NO_SECRETS)), yes) 10ifneq ($(strip $(NO_SECRETS)), yes)
10 ifneq ("$(wildcard $(USER_PATH)/secrets.c)","") 11 ifneq ("$(wildcard $(USER_PATH)/secrets.c)","")
@@ -19,10 +20,6 @@ ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
19 SRC += tap_dances.c 20 SRC += tap_dances.c
20endif 21endif
21 22
22
23
24
25
26ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) 23ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
27 SRC += rgb_stuff.c 24 SRC += rgb_stuff.c
28 ifeq ($(strip $(INDICATOR_LIGHTS)), yes) 25 ifeq ($(strip $(INDICATOR_LIGHTS)), yes)
@@ -41,7 +38,7 @@ endif
41 38
42RGB_MATRIX_ENABLE ?= no 39RGB_MATRIX_ENABLE ?= no
43ifneq ($(strip $(RGB_MATRIX_ENABLE)), no) 40ifneq ($(strip $(RGB_MATRIX_ENABLE)), no)
44 SRC += rgb_stuff.c 41 SRC += rgb_matrix_stuff.c
45endif 42endif
46 43
47 44
@@ -61,3 +58,7 @@ endif
61ifeq ($(strip $(PROTOCOL)), VUSB) 58ifeq ($(strip $(PROTOCOL)), VUSB)
62 NKRO_ENABLE = no 59 NKRO_ENABLE = no
63endif 60endif
61
62ifeq ($(strip $(OLED_DRIVER_ENABLE)), yes)
63 SRC += oled_stuff.c
64endif