]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/drashna/keymap.c
[Keymap] Drashna Corne Keyboard updates (#5903)
[qmk_firmware.git] / keyboards / crkbd / keymaps / drashna / keymap.c
1 #include QMK_KEYBOARD_H
2 #include "drashna.h"
3
4 extern keymap_config_t keymap_config;
5 extern uint8_t is_master;
6
7 #ifdef RGBLIGHT_ENABLE
8 //Following line allows macro to read current RGB settings
9 extern rgblight_config_t rgblight_config;
10 #endif
11
12 enum crkbd_keycodes {
13     RGBRST = NEW_SAFE_RANGE
14 };
15
16 #define LAYOUT_crkbd_base( \
17     K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
18     K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
19     K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A  \
20   ) \
21   LAYOUT_wrapper( \
22     KC_ESC,  K01,    K02,     K03,      K04,     K05,                        K06,     K07,     K08,     K09,     K0A,     KC_MINS, \
23     KC_TAB, ALT_T(K11),  K12, K13,      K14,     K15,                        K16,     K17,     K18,     K19,     K1A,     KC_QUOT, \
24     OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,                        K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \
25                                         KC_GRV,  KC_SPC,  BK_LWER, DL_RAIS,  KC_ENT,  OS_RGUI                                      \
26   )
27 #define LAYOUT_crkbd_base_wrapper(...)       LAYOUT_crkbd_base(__VA_ARGS__)
28
29 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
30   [_QWERTY] = LAYOUT_crkbd_base_wrapper(
31     _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
32     _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
33     _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
34   ),
35
36   [_COLEMAK] = LAYOUT_crkbd_base_wrapper(
37     _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
38     _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
39     _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
40   ),
41
42   [_DVORAK] = LAYOUT_crkbd_base_wrapper(
43     _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
44     _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
45     _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
46   ),
47
48   [_WORKMAN] = LAYOUT_crkbd_base_wrapper(
49     _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
50     _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
51     _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
52   ),
53
54   [_NORMAN] = LAYOUT_crkbd_base_wrapper(
55     _________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
56     _________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
57     _________________NORMAN_L3_________________, _________________NORMAN_R3_________________
58   ),
59
60   [_MALTRON] = LAYOUT_crkbd_base_wrapper(
61     _________________MALTRON_L1________________, _________________MALTRON_R1________________,
62     _________________MALTRON_L2________________, _________________MALTRON_R2________________,
63     _________________MALTRON_L3________________, _________________MALTRON_R3________________
64   ),
65
66   [_EUCALYN] = LAYOUT_crkbd_base_wrapper(
67     _________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
68     _________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
69     _________________EUCALYN_L3________________, _________________EUCALYN_R3________________
70   ),
71
72   [_CARPLAX] = LAYOUT_crkbd_base_wrapper(
73     _____________CARPLAX_QFMLWY_L1_____________, _____________CARPLAX_QFMLWY_R1_____________,
74     _____________CARPLAX_QFMLWY_L2_____________, _____________CARPLAX_QFMLWY_R2_____________,
75     _____________CARPLAX_QFMLWY_L3_____________, _____________CARPLAX_QFMLWY_R3_____________
76   ),
77
78   [_MODS] = LAYOUT_wrapper(
79       _______, ___________________BLANK___________________,                  ___________________BLANK___________________, _______,
80       _______, ___________________BLANK___________________,                  ___________________BLANK___________________, _______,
81       KC_LSFT, ___________________BLANK___________________,                  ___________________BLANK___________________, KC_RSFT,
82                                      _______, _______, _______,        _______, _______, _______
83   ),
84
85   [_LOWER] = LAYOUT_wrapper(
86     KC_F11,  _________________LOWER_L1__________________,                    _________________LOWER_R1__________________, KC_F11,
87     KC_F12,  _________________LOWER_L2__________________,                    _________________LOWER_R2__________________, KC_PIPE,
88     _______, _________________LOWER_L3__________________,                    _________________LOWER_R3__________________, _______,
89                                      _______, _______, _______,        _______, _______, _______
90   ),
91
92   [_RAISE] = LAYOUT_wrapper( \
93     _______, _________________RAISE_L1__________________,                    _________________RAISE_R1__________________, _______,
94     _______, _________________RAISE_L2__________________,                    _________________RAISE_R2__________________, KC_BSLS,
95     _______, _________________RAISE_L3__________________,                    _________________RAISE_R3__________________, _______,
96                                      _______, _______, _______,        _______, _______, _______
97   ),
98
99   [_ADJUST] = LAYOUT_wrapper( \
100     KC_MAKE, _________________ADJUST_L1_________________,                    _________________ADJUST_R1_________________, KC_RESET,
101     VRSN,    _________________ADJUST_L2_________________,                    _________________ADJUST_R2_________________, EEP_RST,
102     _______, _________________ADJUST_L3_________________,                    _________________ADJUST_R3_________________, KC_MPLY,
103                                      _______, KC_NUKE, _______,        _______, TG_MODS, _______
104   )
105 };
106
107 void matrix_init_keymap(void) {
108 #ifndef CONVERT_TO_PROTON_C
109     setPinOutput(D5);
110     writePinHigh(D5);
111
112     setPinOutput(B0);
113     writePinHigh(B0);
114 #endif
115 }
116
117
118 #ifdef OLED_DRIVER_ENABLE
119 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
120     if (is_master) {
121         return OLED_ROTATION_270;
122     } else {
123         return rotation;
124     }
125 }
126
127 void render_crkbd_logo(void) {
128     static const char PROGMEM crkbd_logo[] = {
129         0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
130         0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
131         0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
132         0};
133     oled_write_P(crkbd_logo, false);
134 }
135
136 #define KEYLOG_LEN (int)(32 / OLED_FONT_WIDTH)
137 char keylog_str[KEYLOG_LEN] = {};
138 uint8_t keylogs_str_idx = 0;
139 uint16_t log_timer = 0;
140
141 const char code_to_name[60] = {
142     ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
143     'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
144     'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
145     '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
146     'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
147     '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
148
149 void add_keylog(uint16_t keycode) {
150     if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
151         (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
152
153     for (uint8_t i = KEYLOG_LEN - 1; i > 0; i--) {
154         keylog_str[i] = keylog_str[i - 1];
155     }
156     if (keycode < 60) {
157         keylog_str[0] = code_to_name[keycode];
158     }
159     keylog_str[KEYLOG_LEN] = 0;
160
161     log_timer = timer_read();
162 }
163
164 void update_log(void) {
165     if (timer_elapsed(log_timer) > 750) {
166         add_keylog(0);
167     }
168 }
169
170
171 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
172     if (record->event.pressed) {  add_keylog(keycode); }
173     return true;
174 }
175
176 void render_status(void) {
177
178     oled_write_P(PSTR("Layer"), false);
179     switch (biton32(layer_state)) {
180         case 0:
181             oled_write_P(PSTR("Base "), false);
182             break;
183         case _RAISE:
184             oled_write_P(PSTR("Raise"), false);
185             break;
186         case _LOWER:
187             oled_write_P(PSTR("Lower"), false);
188             break;
189         case _ADJUST:
190             oled_write_P(PSTR("Adjst"), false);
191             break;
192         default:
193             oled_write_P(PSTR("Unkn "), false);
194             break;
195     }
196     oled_write_P(PSTR("Lyout"), false);
197     switch (biton32(default_layer_state)) {
198         case _QWERTY:
199             oled_write_P(PSTR("QWRTY"), false);
200             break;
201         case _COLEMAK:
202             oled_write_P(PSTR("COLMK"), false);
203             break;
204         case _DVORAK:
205             oled_write_P(PSTR("DVRAK"), false);
206             break;
207         case _WORKMAN:
208             oled_write_P(PSTR("WRKMN"), false);
209             break;
210         case _NORMAN:
211             oled_write_P(PSTR("NORMN"), false);
212             break;
213         case _MALTRON:
214             oled_write_P(PSTR("MLTRN"), false);
215             break;
216         case _EUCALYN:
217             oled_write_P(PSTR("ECLYN"), false);
218             break;
219         case _CARPLAX:
220             oled_write_P(PSTR("CRPLX"), false);
221             break;
222     }
223
224     uint8_t modifiers = get_mods();
225     uint8_t one_shot = get_oneshot_mods();
226
227     oled_write_P(PSTR("Mods:"), false);
228     oled_write_P( (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? PSTR(" SFT ") : PSTR("     "), false);
229     oled_write_P( (modifiers & MOD_MASK_CTRL  || one_shot & MOD_MASK_CTRL ) ? PSTR(" CTL ") : PSTR("     "), false);
230     oled_write_P( (modifiers & MOD_MASK_ALT   || one_shot & MOD_MASK_ALT  ) ? PSTR(" ALT ") : PSTR("     "), false);
231     oled_write_P( (modifiers & MOD_MASK_GUI   || one_shot & MOD_MASK_GUI  ) ? PSTR(" GUI ") : PSTR("     "), false);
232
233
234     oled_write_P(PSTR("BTMGK"), false);
235
236     if (keymap_config.swap_lalt_lgui) {
237         oled_write_P(PSTR(" Mac "), false);
238     } else {
239         oled_write_P(PSTR(" Win "), false);
240     }
241
242     uint8_t led_usb_state = host_keyboard_leds();
243     oled_write_P(PSTR("Lock:"), false);
244     oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK)    ? PSTR(" NUM ") : PSTR("     "), false);
245     oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK)   ? PSTR(" CAPS") : PSTR("     "), false);
246     oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR(" SCRL") : PSTR("     "), false);
247
248     oled_write(keylog_str, false);
249 }
250
251
252 void oled_task_user(void) {
253     if (is_master) {
254         render_status();     // Renders the current keyboard state (layer, lock, caps, scroll, etc)
255     } else {
256         render_crkbd_logo();
257         oled_scroll_left();  // Turns on scrolling
258     }
259 }
260
261 void matrix_scan_keymap(void) { update_log(); }
262 #endif
263
264 uint16_t get_tapping_term(uint16_t keycode) {
265     switch (keycode) {
266         case ALT_T(KC_A):
267             return TAPPING_TERM + 100;
268         default:
269             return TAPPING_TERM;
270     }
271 }
272
273 #ifdef RGB_MATRIX_ENABLE
274
275 void suspend_power_down_keymap(void) {
276     rgb_matrix_set_suspend_state(true);
277 }
278
279 void suspend_wakeup_init_keymap(void) {
280     rgb_matrix_set_suspend_state(false);
281 }
282
283 void rgb_matrix_indicators_user(void) {
284     if ( userspace_config.rgb_layer_change &&
285 #ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
286         !g_suspend_state &&
287 #endif
288 #if defined(RGBLIGHT_ENABLE)
289         (!rgblight_config.enable && rgb_matrix_config.enable)
290 #else
291         rgb_matrix_config.enable
292 #endif
293     ) {
294         switch (biton32(layer_state)) {
295             case _MODS:
296                 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
297             case _GAMEPAD:
298                 rgb_matrix_layer_helper(0xFF, 0x80, 0x00, LED_FLAG_UNDERGLOW); break;
299             case _DIABLO:
300                 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
301             case _RAISE:
302                 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
303             case _LOWER:
304                 rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
305             case _ADJUST:
306                 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
307             default:
308                 switch (biton32(default_layer_state)) {
309                     case _QWERTY:
310                         rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, LED_FLAG_UNDERGLOW); break;
311                     case _COLEMAK:
312                         rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
313                     case _DVORAK:
314                         rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
315                     case _WORKMAN:
316                         rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, LED_FLAG_UNDERGLOW); break;
317                     case _NORMAN:
318                         rgb_matrix_layer_helper(0xFF, 0x7C, 0x4D, LED_FLAG_UNDERGLOW); break;
319                     case _MALTRON:
320                         rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
321                     case _EUCALYN:
322                         rgb_matrix_layer_helper(0xFF, 0x80, 0xBF, LED_FLAG_UNDERGLOW); break;
323                     case _CARPLAX:
324                         rgb_matrix_layer_helper(0x00, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
325                 }
326         }
327     }
328 }
329 #endif