configs/keymap.c
keymap.cRaw
1/*
2Copyright 2019 @foostan
3Copyright 2020 Drashna Jaelre <@drashna>
4
5This program is free software: you can redistribute it and/or modify
6it under the terms of the GNU General Public License as published by
7the Free Software Foundation, either version 2 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program. If not, see <http://www.gnu.org/licenses/>.
17*/
18
19// INSTRUCTIONS
20// clone repo https://github.com/qmk/qmk_firmware into ~/qmk_firmware
21// copy this file into ~/qmk_firmware/keyboards/crkbd/keymaps/default/keymap.c
22// copy qmk.ini into ~/
23// once keyboard connected, execute:
24// > qmk flash
25
26#include QMK_KEYBOARD_H
27
28const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
29 [0] = LAYOUT_split_3x6_3(
30 //,-----------------------------------------------------. ,-----------------------------------------------------.
31 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
32 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
33 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
34 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
35 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
36 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
37 KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
38 //`--------------------------' `--------------------------'
39
40 ),
41
42 [1] = LAYOUT_split_3x6_3(
43 //,-----------------------------------------------------. ,-----------------------------------------------------.
44 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
45 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
46 KC_LCTL,KC__MUTE,KC__VOLDOWN,KC__VOLUP, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
47 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
48 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
49 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
50 KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
51 //`--------------------------' `--------------------------'
52 ),
53
54 [2] = LAYOUT_split_3x6_3(
55 //,-----------------------------------------------------. ,-----------------------------------------------------.
56 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
57 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
58 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
59 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
60 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
61 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
62 KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
63 //`--------------------------' `--------------------------'
64 ),
65
66 [3] = LAYOUT_split_3x6_3(
67 //,-----------------------------------------------------. ,-----------------------------------------------------.
68 RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
69 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
70 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12,
71 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
72 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
73 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
74 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
75 //`--------------------------' `--------------------------'
76 )
77};
78
79#ifdef OLED_DRIVER_ENABLE
80oled_rotation_t oled_init_user(oled_rotation_t rotation) {
81 if (!is_master) {
82 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
83 }
84 return rotation;
85}
86
87#define L_BASE 0
88#define L_LOWER 2
89#define L_RAISE 4
90#define L_ADJUST 8
91
92void oled_render_layer_state(void) {
93 oled_write_P(PSTR("Layer: "), false);
94 switch (layer_state) {
95 case L_BASE:
96 oled_write_ln_P(PSTR("Default"), false);
97 break;
98 case L_LOWER:
99 oled_write_ln_P(PSTR("Lower"), false);
100 break;
101 case L_RAISE:
102 oled_write_ln_P(PSTR("Raise"), false);
103 break;
104 case L_ADJUST:
105 case L_ADJUST|L_LOWER:
106 case L_ADJUST|L_RAISE:
107 case L_ADJUST|L_LOWER|L_RAISE:
108 oled_write_ln_P(PSTR("Adjust"), false);
109 break;
110 }
111}
112
113
114char keylog_str[24] = {};
115
116const char code_to_name[60] = {
117 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
118 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
119 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
120 '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
121 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
122 '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
123
124void set_keylog(uint16_t keycode, keyrecord_t *record) {
125 char name = ' ';
126 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
127 (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
128 if (keycode < 60) {
129 name = code_to_name[keycode];
130 }
131
132 // update keylog
133 snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
134 record->event.key.row, record->event.key.col,
135 keycode, name);
136}
137
138void oled_render_keylog(void) {
139 oled_write(keylog_str, false);
140}
141
142void render_bootmagic_status(bool status) {
143 /* Show Ctrl-Gui Swap options */
144 static const char PROGMEM logo[][2][3] = {
145 {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
146 {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
147 };
148 if (status) {
149 oled_write_ln_P(logo[0][0], false);
150 oled_write_ln_P(logo[0][1], false);
151 } else {
152 oled_write_ln_P(logo[1][0], false);
153 oled_write_ln_P(logo[1][1], false);
154 }
155}
156
157void oled_render_logo(void) {
158 static const char PROGMEM crkbd_logo[] = {
159 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
160 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
161 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
162 0};
163 oled_write_P(crkbd_logo, false);
164}
165
166void oled_task_user(void) {
167 if (is_master) {
168 oled_render_layer_state();
169 oled_render_keylog();
170 } else {
171 oled_render_logo();
172 }
173}
174
175bool process_record_user(uint16_t keycode, keyrecord_t *record) {
176 if (record->event.pressed) {
177 set_keylog(keycode, record);
178 }
179 return true;
180}
181#endif // OLED_DRIVER_ENABLE