1 #include QMK_KEYBOARD_H
4 extern keymap_config_t keymap_config;
5 extern uint8_t is_master;
8 //Following line allows macro to read current RGB settings
9 extern rgblight_config_t rgblight_config;
13 RGBRST = NEW_SAFE_RANGE
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 \
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 \
27 #define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__)
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_________________
36 [_COLEMAK] = LAYOUT_crkbd_base_wrapper(
37 _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
38 _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
39 _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
42 [_DVORAK] = LAYOUT_crkbd_base_wrapper(
43 _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
44 _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
45 _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
48 [_WORKMAN] = LAYOUT_crkbd_base_wrapper(
49 _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
50 _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
51 _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
54 [_NORMAN] = LAYOUT_crkbd_base_wrapper(
55 _________________NORMAN_L1_________________, _________________NORMAN_L1_________________,
56 _________________NORMAN_L2_________________, _________________NORMAN_R2_________________,
57 _________________NORMAN_L3_________________, _________________NORMAN_R3_________________
60 [_MALTRON] = LAYOUT_crkbd_base_wrapper(
61 _________________MALTRON_L1________________, _________________MALTRON_R1________________,
62 _________________MALTRON_L2________________, _________________MALTRON_R2________________,
63 _________________MALTRON_L3________________, _________________MALTRON_R3________________
66 [_EUCALYN] = LAYOUT_crkbd_base_wrapper(
67 _________________EUCALYN_L1________________, _________________EUCALYN_R1________________,
68 _________________EUCALYN_L2________________, _________________EUCALYN_R2________________,
69 _________________EUCALYN_L3________________, _________________EUCALYN_R3________________
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_____________
78 [_MODS] = LAYOUT_wrapper(
79 _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
80 _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
81 KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
82 _______, _______, _______, _______, _______, _______
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 _______, _______, _______, _______, _______, _______
92 [_RAISE] = LAYOUT_wrapper( \
93 _______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
94 _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
95 _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
96 _______, _______, _______, _______, _______, _______
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, _______
107 void matrix_init_keymap(void) {
108 #ifndef CONVERT_TO_PROTON_C
118 #ifdef OLED_DRIVER_ENABLE
119 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
121 return OLED_ROTATION_270;
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,
133 oled_write_P(crkbd_logo, false);
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;
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 '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
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; }
153 for (uint8_t i = KEYLOG_LEN - 1; i > 0; i--) {
154 keylog_str[i] = keylog_str[i - 1];
157 keylog_str[0] = code_to_name[keycode];
159 keylog_str[KEYLOG_LEN] = 0;
161 log_timer = timer_read();
164 void update_log(void) {
165 if (timer_elapsed(log_timer) > 750) {
171 bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
172 if (record->event.pressed) { add_keylog(keycode); }
176 void render_status(void) {
178 oled_write_P(PSTR("Layer"), false);
179 switch (biton32(layer_state)) {
181 oled_write_P(PSTR("Base "), false);
184 oled_write_P(PSTR("Raise"), false);
187 oled_write_P(PSTR("Lower"), false);
190 oled_write_P(PSTR("Adjst"), false);
193 oled_write_P(PSTR("Unkn "), false);
196 oled_write_P(PSTR("Lyout"), false);
197 switch (biton32(default_layer_state)) {
199 oled_write_P(PSTR("QWRTY"), false);
202 oled_write_P(PSTR("COLMK"), false);
205 oled_write_P(PSTR("DVRAK"), false);
208 oled_write_P(PSTR("WRKMN"), false);
211 oled_write_P(PSTR("NORMN"), false);
214 oled_write_P(PSTR("MLTRN"), false);
217 oled_write_P(PSTR("ECLYN"), false);
220 oled_write_P(PSTR("CRPLX"), false);
224 uint8_t modifiers = get_mods();
225 uint8_t one_shot = get_oneshot_mods();
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);
234 oled_write_P(PSTR("BTMGK"), false);
236 if (keymap_config.swap_lalt_lgui) {
237 oled_write_P(PSTR(" Mac "), false);
239 oled_write_P(PSTR(" Win "), false);
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);
248 oled_write(keylog_str, false);
252 void oled_task_user(void) {
254 render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
257 oled_scroll_left(); // Turns on scrolling
261 void matrix_scan_keymap(void) { update_log(); }
264 uint16_t get_tapping_term(uint16_t keycode) {
267 return TAPPING_TERM + 100;
273 #ifdef RGB_MATRIX_ENABLE
275 void rgb_matrix_indicators_user(void) {
276 if ( userspace_config.rgb_layer_change &&
277 #ifdef RGB_DISABLE_WHEN_USB_SUSPENDED
280 #if defined(RGBLIGHT_ENABLE)
281 (!rgblight_config.enable && rgb_matrix_config.enable)
283 rgb_matrix_config.enable
286 switch (biton32(layer_state)) {
288 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
290 rgb_matrix_layer_helper(0xFF, 0x80, 0x00, LED_FLAG_UNDERGLOW); break;
292 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
294 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
296 rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
298 rgb_matrix_layer_helper(0xFF, 0x00, 0x00, LED_FLAG_UNDERGLOW); break;
300 switch (biton32(default_layer_state)) {
302 rgb_matrix_layer_helper(0x00, 0xFF, 0xFF, LED_FLAG_UNDERGLOW); break;
304 rgb_matrix_layer_helper(0xFF, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;
306 rgb_matrix_layer_helper(0x00, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
308 rgb_matrix_layer_helper(0xD9, 0xA5, 0x21, LED_FLAG_UNDERGLOW); break;
310 rgb_matrix_layer_helper(0xFF, 0x7C, 0x4D, LED_FLAG_UNDERGLOW); break;
312 rgb_matrix_layer_helper(0xFF, 0xFF, 0x00, LED_FLAG_UNDERGLOW); break;
314 rgb_matrix_layer_helper(0xFF, 0x80, 0xBF, LED_FLAG_UNDERGLOW); break;
316 rgb_matrix_layer_helper(0x00, 0x00, 0xFF, LED_FLAG_UNDERGLOW); break;