]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/drashna/keymap.c
Update Corne Keyboard layout
[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 rgb_matrix_indicators_user(void) {
276     if ( userspace_config.rgb_layer_change &&
277 #ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
278         !g_suspend_state &&
279 #endif
280 #if defined(RGBLIGHT_ENABLE)
281         (!rgblight_config.enable && rgb_matrix_config.enable)
282 #else
283         rgb_matrix_config.enable
284 #endif
285     ) {
286         switch (biton32(layer_state)) {
287             case _MODS:
288                 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
289             case _GAMEPAD:
290                 rgb_matrix_layer_helper(0xFF, 0x80, 0x00, LED_FLAG_UNDERGLOW); break;
291             case _DIABLO:
292                 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
293             case _RAISE:
294                 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
295             case _LOWER:
296                 rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
297             case _ADJUST:
298                 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
299             default:
300                 switch (biton32(default_layer_state)) {
301                     case _QWERTY:
302                         rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, LED_FLAG_UNDERGLOW); break;
303                     case _COLEMAK:
304                         rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
305                     case _DVORAK:
306                         rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
307                     case _WORKMAN:
308                         rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, LED_FLAG_UNDERGLOW); break;
309                     case _NORMAN:
310                         rgb_matrix_layer_helper(0xFF, 0x7C, 0x4D, LED_FLAG_UNDERGLOW); break;
311                     case _MALTRON:
312                         rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
313                     case _EUCALYN:
314                         rgb_matrix_layer_helper(0xFF, 0x80, 0xBF, LED_FLAG_UNDERGLOW); break;
315                     case _CARPLAX:
316                         rgb_matrix_layer_helper(0x00, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
317                 }
318         }
319     }
320 }
321 #endif