aboutsummaryrefslogtreecommitdiff
path: root/keyboards/kyria/keymaps/cwebster2/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/kyria/keymaps/cwebster2/keymap.c')
-rw-r--r--keyboards/kyria/keymaps/cwebster2/keymap.c397
1 files changed, 397 insertions, 0 deletions
diff --git a/keyboards/kyria/keymaps/cwebster2/keymap.c b/keyboards/kyria/keymaps/cwebster2/keymap.c
new file mode 100644
index 000000000..311ad167a
--- /dev/null
+++ b/keyboards/kyria/keymaps/cwebster2/keymap.c
@@ -0,0 +1,397 @@
1/* Copyright 2020 Casey Webster <casey@e1337.dev>
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#include QMK_KEYBOARD_H
17#include "raw_hid.h"
18#define RAW_EPSIZE 8
19#include <stdio.h>
20
21#include "cwebster2.h"
22
23#ifdef WPM_ENABLE
24char wpm_str[10];
25uint16_t wpm_graph_timer = 0;
26#endif
27
28#ifdef COMBO_ENABLE
29enum combos {
30 ZX_COPY,
31 CV_PASTE
32};
33
34const uint16_t PROGMEM copy_combo[] = { KC_Z, KC_X, COMBO_END };
35const uint16_t PROGMEM paste_combo[] = { KC_C, KC_V, COMBO_END };
36
37combo_t key_combos[COMBO_COUNT] = {
38 [ZX_COPY] = COMBO(copy_combo, LCTL_T(KC_C)),
39 [CV_PASTE] = COMBO(paste_combo, LCTL_T(KC_V))
40};
41#endif
42
43#define LAYOUT_kyria_base( \
44 L01, L02, L03, L04, L05, R05, R04, R03, R02, R01, \
45 L11, L12, L13, L14, L15, R15, R14, R13, R12, R11, \
46 L21, L22, L23, L24, L25, R25, R24, R23, R22, R21, \
47 L33, L34, L35, R35, R34, R33 \
48 ) \
49 LAYOUT_kyria_wrapper ( \
50 KC_GRV, L01, L02, L03, L04, L05, R05, R04, R03, R02, R01, KC_BSLS, \
51 KC_CTLBS, L11, L12, L13, L14, L15, R15, R14, R13, R12, R11, KC_QUOT, \
52 KC_EQL, L21, L22, L23, L24, L25, KC_LCCL, KC_LGUI, KC_ALTCL, KC_LSFT, R25, R24, R23, R22, R21, KC_MINS, \
53 SCMD_T(KC_LBRC), C_S_T(KC_MINS), L33, L34, L35, R35, R34, R33, TO(_GAME), KC_PSCR \
54 )
55#define LAYOUT_kyria_base_wrapper(...) LAYOUT_kyria_base(__VA_ARGS__)
56
57
58const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
59/*
60 * Base Layer: QWERTY
61 */
62 [_QWERTY] = LAYOUT_kyria_base_wrapper(
63 /* ,-----------------------. ,-----------------------. */
64 _______QWERTY_L1______, _______QWERTY_R1______,
65 _______QWERTY_L2______, _______QWERTY_R2______,
66 _______QWERTY_L3______, _______QWERTY_R3______,
67 _______THUMBS_L_______, _______THUMBS_R_______
68 /* `---------------------' `---------------------' */
69 ),
70 [_COLEMAK] = LAYOUT_kyria_wrapper(
71 /* ,-----------------------. ,-----------------------. */
72 KC_GRV, _______COLEMAK_L1_____, _______COLEMAK_R1_____, KC_BSLS,
73 KC_CTLBS, _______COLEMAK_L2_____, _______COLEMAK_R2_____, KC_SCLN,
74 KC_EQL, _______COLEMAK_L3_____, KC_LCCL, KC_LGUI, KC_ALTCL, KC_LSFT, _______COLEMAK_R3_____, KC_MINS,
75 SCMD_T(KC_LBRC), C_S_T(KC_MINS), _______THUMBS_L_______, _______THUMBS_R_______, TO(_QWERTY), KC_PSCR
76 /* `---------------------' `---------------------' */
77 ),
78 // GAME layout -- qwerty without homerow mods
79 [_GAME] = LAYOUT_kyria_wrapper(
80 /* ,-------------------------------------------. ,-------------------------------------------. */
81 KC_GRV, _______QWERTY_L1______, _______QWERTY_R1______, KC_BSLS,
82 KC_CTLBS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
83 KC_LSFT, _______QWERTY_L3______, KC_LCCL, KC_LALT, KC_ALTCL, KC_LSFT, _______QWERTY_R3______, KC_MINS,
84 KC_EQL, KC_0, _______NAKED_L___T____, _______THUMBS_R_______, TO(_COLEMAK), KC_F12
85 /* `----------------------------------' `----------------------------------' */
86 ),
87 [_FN] = LAYOUT_kyria_base_wrapper(
88 /* ,-----------------------. ,-----------------------. */
89 _______FN_______L1____, _______INACTIVE_R1____,
90 _______FN_______L2____, _______INACTIVE_R2____,
91 _______FN_______L3____, _______NAV______R2____,
92 _______FN________T____, _______INACTIVE__T____
93 /* `---------------------' `---------------------' */
94 ),
95 [_SYMBOLS] = LAYOUT_kyria_base_wrapper(
96 /* ,-----------------------. ,-----------------------. */
97 _______SYM______L1____, _______INACTIVE_R1____,
98 _______SYM______L2____, _______INACTIVE_R2____,
99 _______SYM______L3____, _______INACTIVE_R3____,
100 _______SYM_______T____, _______INACTIVE__T____
101 /* `---------------------' `---------------------' */
102 ),
103 [_NUM] = LAYOUT_kyria_base_wrapper(
104 /* ,-----------------------. ,-----------------------. */
105 _______NUM______L1____, _______INACTIVE_R1____,
106 _______NUM______L2____, _______INACTIVE_R2____,
107 _______NUM______L3____, _______INACTIVE_R3____,
108 _______NUM_______T____, _______INACTIVE__T____
109 /* `---------------------' `---------------------' */
110 ),
111 [_NAV] = LAYOUT_kyria_base_wrapper(
112 /* ,-----------------------. ,-----------------------. */
113 _______INACTIVE_L1____, _______NAV______R1____,
114 _______INACTIVE_L2____, _______NAV______R2____,
115 _______INACTIVE_L3____, _______NAV______R3____,
116 _______INACTIVE__T____, _______NAV_______T____
117 /* `---------------------' `---------------------' */
118 ),
119 [_MOUSE] = LAYOUT_kyria_base_wrapper(
120 /* ,-----------------------. ,-----------------------. */
121 _______INACTIVE_L1____, _______MOUSE____R1____,
122 _______INACTIVE_L2____, _______MOUSE____R2____,
123 _______INACTIVE_L3____, _______MOUSE____R3____,
124 _______INACTIVE__T____, _______MOUSE_____T____
125 /* `---------------------' `---------------------' */
126 ),
127 [_MEDIA] = LAYOUT_kyria_base_wrapper(
128 /* ,-----------------------. ,-----------------------. */
129 _______INACTIVE_L1____, _______MEDIA____R1____,
130 _______INACTIVE_L2____, _______MEDIA____R2____,
131 _______INACTIVE_L3____, _______MEDIA____R3____,
132 _______INACTIVE__T____, _______MEDIA_____T____
133 /* `---------------------' `---------------------' */
134 ),
135};
136
137#ifdef RAW_ENABLE
138static void send_layer_via_hid(int layer) {
139 uint8_t data[RAW_EPSIZE];
140 data[0] = 1;
141 data[1] = layer;
142 raw_hid_send(data, sizeof(data));
143 return;
144}
145#endif
146
147
148#ifdef RGBLIGHT_LAYERS
149const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_AZURE} );
150const rgblight_segment_t PROGMEM my_colemak_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_BLUE} );
151const rgblight_segment_t PROGMEM my_game_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_RED} );
152const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_PINK} );
153const rgblight_segment_t PROGMEM my_symbols_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_GREEN} );
154const rgblight_segment_t PROGMEM my_num_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_CORAL} );
155const rgblight_segment_t PROGMEM my_nav_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_GOLDENROD} );
156const rgblight_segment_t PROGMEM my_mouse_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_TURQUOISE} );
157const rgblight_segment_t PROGMEM my_media_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 20, HSV_MAGENTA} );
158
159const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
160 {0, 3, HSV_RED},
161 {7, 1, HSV_RED},
162 {10, 3, HSV_RED},
163 {17, 1, HSV_RED}
164);
165
166const rgblight_segment_t PROGMEM my_shift_layer[] = RGBLIGHT_LAYER_SEGMENTS(
167 {3, 1, HSV_RED},
168 {13, 1, HSV_RED}
169);
170
171const rgblight_segment_t PROGMEM my_ctrl_layer[] = RGBLIGHT_LAYER_SEGMENTS(
172 {4, 1, HSV_ORANGE},
173 {14, 1, HSV_ORANGE}
174);
175
176const rgblight_segment_t PROGMEM my_alt_layer[] = RGBLIGHT_LAYER_SEGMENTS(
177 {5, 1, HSV_GOLD},
178 {15, 1, HSV_GOLD}
179);
180
181const rgblight_segment_t PROGMEM my_gui_layer[] = RGBLIGHT_LAYER_SEGMENTS(
182 {9, 1, HSV_SPRINGGREEN},
183 {19, 1, HSV_SPRINGGREEN}
184);
185
186const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
187 my_colemak_layer,
188 my_qwerty_layer,
189 my_game_layer,
190 my_fn_layer,
191 my_symbols_layer,
192 my_num_layer,
193 my_nav_layer,
194 my_mouse_layer,
195 my_media_layer,
196 my_capslock_layer,
197 my_shift_layer,
198 my_ctrl_layer,
199 my_alt_layer,
200 my_gui_layer
201);
202
203void matrix_scan_keymap(void) {
204 uint8_t mods = mod_config(get_mods());
205 rgblight_set_layer_state(10, mods & MOD_MASK_SHIFT);
206 rgblight_set_layer_state(11, mods & MOD_MASK_CTRL);
207 rgblight_set_layer_state(12, mods & MOD_MASK_ALT);
208 rgblight_set_layer_state(13, mods & MOD_MASK_GUI);
209}
210#endif
211
212void keyboard_post_init_user(void) {
213 rgblight_sethsv_noeeprom(HSV_BLUE);
214 keyboard_post_init_rgb();
215#ifdef RGBLIGHT_LAYERS
216 rgblight_layers = my_rgb_layers;
217#else
218 rgblight_sethsv_noeeprom(HSV_BLUE);
219#endif
220 /*debug_enable=true;*/
221 /*debug_matrix=true;*/
222}
223
224//todo https://github.com/qmk/qmk_firmware/blob/debdc6379c7a72815df1f53e3406479381d243af/keyboards/crkbd/keymaps/soundmonster/keymap.c RGBRST
225
226layer_state_t layer_state_set_user(layer_state_t state) {
227#ifdef RGBLIGHT_LAYERS
228 for (int i = _QWERTY; i < __LAST; i++) {
229 rgblight_set_layer_state(i, layer_state_cmp(state, i));
230 }
231# ifdef RAW_ENABLE
232 send_layer_via_hid(state);
233# endif
234#endif
235 return state;
236}
237
238#ifdef RGBLIGHT_LAYERS
239bool led_update_user(led_t led_state) {
240 rgblight_set_layer_state(9, led_state.caps_lock);
241 return true;
242}
243#endif
244
245#ifdef OLED_DRIVER_ENABLE
246void suspend_power_down_user() {
247 oled_clear();
248 oled_off();
249}
250
251oled_rotation_t oled_init_user(oled_rotation_t rotation) {
252 return OLED_ROTATION_180;
253}
254
255static void render_logo(void) {
256 static const char PROGMEM qmk_logo[] = {
257 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
258 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
259 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
260
261 static const char PROGMEM logo[] = {
262 // canvas is 128x64. need 16 padding
263 // 80x32
264 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
265 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x60, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0, 0x60, 0x20, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
266 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
267 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x7c, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0x7c, 0xf8, 0xe0, 0x60, 0x20, 0x10, 0x10, 0x0c, 0x0f, 0x09, 0x08, 0x00, 0x09, 0x9b, 0x5c, 0x50, 0x10, 0x20, 0x40, 0xe0, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x78, 0x38, 0x38, 0x10, 0x00, 0x00,
269 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
271 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x1f, 0x17, 0x15, 0x3d, 0xef, 0xaf, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0xa0, 0xbf, 0xff, 0x3f, 0x3f, 0x3f, 0x1f, 0x1f, 0x1f, 0x1f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
276 };
277 oled_write_raw_P(logo, sizeof(logo));
278
279 oled_advance_page(false);
280 oled_advance_page(false);
281 oled_advance_page(false);
282 oled_advance_page(false);
283 oled_write_P(qmk_logo, false);
284
285#ifdef COMBO_ENABLE
286 oled_write_P(PSTR("Combos enabled: "), false);
287 if (is_combo_enabled()) {
288 oled_write_P(PSTR("Yes\n"), false);
289 } else {
290 oled_write_P(PSTR("No\n"), false);
291 }
292#endif
293
294#ifdef SPLIT_MODS_ENABLE
295 uint8_t mods = get_mods() | get_weak_mods();
296 oled_write_P((mods & MOD_MASK_GUI) ? PSTR("GUI ") : PSTR(" "), false);
297 oled_write_P((mods & MOD_MASK_ALT) ? PSTR("ALT ") : PSTR(" "), false);
298 oled_write_P((mods & MOD_MASK_CTRL) ? PSTR("CTRL ") : PSTR(" "), false);
299 oled_write_P((mods & MOD_MASK_SHIFT) ? PSTR("SHFT ") : PSTR(" "), false);
300 oled_write_P(PSTR("\n"), false);
301
302#endif
303
304#ifdef WPM_ENABLE
305 // Write WPM
306 sprintf(wpm_str, "WPM: %03d", get_current_wpm());
307 //oled_write_P(PSTR("\n"), false);
308 oled_write_P(PSTR(" "), false);
309 oled_write(wpm_str, false);
310#endif
311}
312
313
314static void render_status(void) {
315 static bool isColemak = false;
316 // QMK Logo and version information
317 oled_write_P(PSTR("Kyria rev1.3\n\n"), false);
318
319 oled_write_P(isColemak ? PSTR("COLEMAK ") : PSTR("QWERTY "), false);
320
321 // Host Keyboard Layer Status
322 switch (get_highest_layer(layer_state)) {
323 case _QWERTY:
324 oled_write_P(PSTR("Default\n"), false);
325 isColemak = false;
326 break;
327 case _SYMBOLS:
328 oled_write_P(PSTR("Shifted Sym\n"), false);
329 break;
330 case _NUM:
331 oled_write_P(PSTR("Numbers\n"), false);
332 break;
333 case _NAV:
334 oled_write_P(PSTR("Navigation\n"), false);
335 break;
336 case _FN:
337 oled_write_P(PSTR("Fn\n"), false);
338 break;
339 case _GAME:
340 oled_write_P(PSTR("Game\n"), false);
341 isColemak = false;
342 break;
343 case _COLEMAK:
344 oled_write_P(PSTR("Colemak-DHm\n"), false);
345 isColemak = true;
346 break;
347 case _MEDIA:
348 oled_write_P(PSTR("Media keys\n"), false);
349 break;
350 case _MOUSE:
351 oled_write_P(PSTR("Mouse keys\n"), false);
352 break;
353 default:
354 oled_write_P(PSTR("Undefined\n"), false);
355 }
356
357 uint8_t mods = get_mods() | get_weak_mods();
358 oled_write_P(PSTR("\n"), false);
359 oled_write_P((mods & MOD_MASK_GUI) ? PSTR("GUI ") : PSTR(" "), false);
360 oled_write_P((mods & MOD_MASK_ALT) ? PSTR("ALT ") : PSTR(" "), false);
361 oled_write_P((mods & MOD_MASK_CTRL) ? PSTR("CTRL ") : PSTR(" "), false);
362 oled_write_P((mods & MOD_MASK_SHIFT) ? PSTR("SHFT ") : PSTR(" "), false);
363 oled_write_P(PSTR("\n"), false);
364
365#define I3MASK MOD_BIT(KC_LGUI)
366#define I3SMASK (MOD_BIT(KC_LGUI) | MOD_BIT(KC_LSFT))
367#define KMASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))
368
369 oled_write_P((mods == I3MASK) ? PSTR("I3 ") : (mods == I3SMASK) ? PSTR("I3-SFT ") : PSTR(" "), false);
370 oled_write_P((mods == KMASK) ? PSTR("KITTY ") : PSTR(" "), false);
371 oled_write_P(PSTR("\n"), false);
372
373 // Host Keyboard LED Status
374 uint8_t led_usb_state = host_keyboard_leds();
375 oled_write_P(IS_LED_ON(led_usb_state, USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
376 oled_write_P(IS_LED_ON(led_usb_state, USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
377 oled_write_P(IS_LED_ON(led_usb_state, USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
378
379}
380
381void oled_task_user(void) {
382 if (is_keyboard_master()) {
383 render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
384 } else {
385 render_logo();
386 }
387}
388#endif
389
390
391#ifdef RAW_ENABLE
392void raw_hid_receive(uint8_t *data, uint8_t length) {
393 // messages from host
394 // add ability to set color
395 raw_hid_send(data, length);
396}
397#endif