]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/crkbd/keymaps/drashna/keymap.c
[Keymap] Add keymap nomu30 likejijs (#5917)
[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, RGUI_T(KC_QUOT), \
24     OS_LSFT, CTL_T(K21), K22, K23,      K24,     K25,                        K26,     K27,     K28,     K29, RCTL_T(K2A), OS_RSFT, \
25                            LT(_LOWER,KC_GRV), KC_SPC,  KC_BSPC,     KC_DEL,  KC_ENT,  RAISE                                        \
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     log_timer = timer_read();
160 }
161
162 void update_log(void) {
163     if (timer_elapsed(log_timer) > 750) {
164         add_keylog(0);
165     }
166 }
167
168
169 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
170     if (record->event.pressed) {  add_keylog(keycode); }
171     return true;
172 }
173
174 void render_status(void) {
175
176     oled_write_P(PSTR("Layer"), false);
177     switch (biton32(layer_state)) {
178         case 0:
179             oled_write_P(PSTR("Base "), false);
180             break;
181         case _RAISE:
182             oled_write_P(PSTR("Raise"), false);
183             break;
184         case _LOWER:
185             oled_write_P(PSTR("Lower"), false);
186             break;
187         case _ADJUST:
188             oled_write_P(PSTR("Adjst"), false);
189             break;
190         default:
191             oled_write_P(PSTR("Unkn "), false);
192             break;
193     }
194     oled_write_P(PSTR("Lyout"), false);
195     switch (biton32(default_layer_state)) {
196         case _QWERTY:
197             oled_write_P(PSTR("QWRTY"), false);
198             break;
199         case _COLEMAK:
200             oled_write_P(PSTR("COLMK"), false);
201             break;
202         case _DVORAK:
203             oled_write_P(PSTR("DVRAK"), false);
204             break;
205         case _WORKMAN:
206             oled_write_P(PSTR("WRKMN"), false);
207             break;
208         case _NORMAN:
209             oled_write_P(PSTR("NORMN"), false);
210             break;
211         case _MALTRON:
212             oled_write_P(PSTR("MLTRN"), false);
213             break;
214         case _EUCALYN:
215             oled_write_P(PSTR("ECLYN"), false);
216             break;
217         case _CARPLAX:
218             oled_write_P(PSTR("CRPLX"), false);
219             break;
220     }
221
222     uint8_t modifiers = get_mods();
223     uint8_t one_shot = get_oneshot_mods();
224
225     oled_write_P(PSTR("Mods:"), false);
226     oled_write_P( (modifiers & MOD_MASK_SHIFT || one_shot & MOD_MASK_SHIFT) ? PSTR(" SFT ") : PSTR("     "), false);
227     oled_write_P( (modifiers & MOD_MASK_CTRL  || one_shot & MOD_MASK_CTRL ) ? PSTR(" CTL ") : PSTR("     "), false);
228     oled_write_P( (modifiers & MOD_MASK_ALT   || one_shot & MOD_MASK_ALT  ) ? PSTR(" ALT ") : PSTR("     "), false);
229     oled_write_P( (modifiers & MOD_MASK_GUI   || one_shot & MOD_MASK_GUI  ) ? PSTR(" GUI ") : PSTR("     "), false);
230
231
232     oled_write_P(PSTR("BTMGK"), false);
233
234     if (keymap_config.swap_lalt_lgui) {
235         oled_write_P(PSTR(" Mac "), false);
236     } else {
237         oled_write_P(PSTR(" Win "), false);
238     }
239
240     uint8_t led_usb_state = host_keyboard_leds();
241     oled_write_P(PSTR("Lock:"), false);
242     oled_write_P(led_usb_state & (1<<USB_LED_NUM_LOCK)    ? PSTR(" NUM ") : PSTR("     "), false);
243     oled_write_P(led_usb_state & (1<<USB_LED_CAPS_LOCK)   ? PSTR(" CAPS") : PSTR("     "), false);
244     oled_write_P(led_usb_state & (1<<USB_LED_SCROLL_LOCK) ? PSTR(" SCRL") : PSTR("     "), false);
245
246     oled_write(keylog_str, false);
247 }
248
249
250 void oled_task_user(void) {
251     if (is_master) {
252         render_status();     // Renders the current keyboard state (layer, lock, caps, scroll, etc)
253     } else {
254         render_crkbd_logo();
255         oled_scroll_left();  // Turns on scrolling
256     }
257 }
258
259 void matrix_scan_keymap(void) { update_log(); }
260 #endif
261
262 uint16_t get_tapping_term(uint16_t keycode) {
263     switch (keycode) {
264         case ALT_T(KC_A):
265             return TAPPING_TERM + 100;
266         default:
267             return TAPPING_TERM;
268     }
269 }