configs/keyboards/corne_keymap.c
keyboards/corne_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// install qmk: python3 -m pip install --user qmk (https://docs.qmk.fm/#/newbs_getting_started)
21// clone repo https://github.com/qmk/qmk_firmware into ~/qmk_firmware
22// copy this file into ~/qmk_firmware/keyboards/crkbd/keymaps/default/keymap.c
23// copy qmk.ini into ~/
24//
25// compile the keymap:
26// > qmk compile -kb crkbd -km default
27//
28// once keyboard connected, execute:
29// > qmk flash
30//
31// or if previous doesn't work, use:
32// > qmk flash -kb crkbd -km default
33//
34// and lately it needs the '-bl dfu' too:
35// > qmk flash -bl dfu -kb crkbd -km default
36//
37// If the right side does not work or acts as it were the left side, in
38// keyboards/crkbd/keymaps/default/config.h add:
39// #define SPLIT_USB_DETECT
40//
41// and to change the part that has the usb connected:
42// #define MASTER_RIGHT
43
44#include QMK_KEYBOARD_H
45
46const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
47 [0] = LAYOUT_split_3x6_3(
48 //,-----------------------------------------------------. ,-----------------------------------------------------.
49 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
50 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
51 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
52 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
53 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
54 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
55 KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT
56 //`--------------------------' `--------------------------'
57
58 ),
59
60 [1] = LAYOUT_split_3x6_3(
61 //,-----------------------------------------------------. ,-----------------------------------------------------.
62 KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
63 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
64 KC_LCTL,KC_MUTE,KC_VOLD,KC_VOLU, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
65 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
66 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
67 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
68 KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT
69 //`--------------------------' `--------------------------'
70 ),
71
72 [2] = LAYOUT_split_3x6_3(
73 //,-----------------------------------------------------. ,-----------------------------------------------------.
74 KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
75 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
76 KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
77 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
78 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
79 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
80 KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT
81 //`--------------------------' `--------------------------'
82 ),
83
84 [3] = LAYOUT_split_3x6_3(
85 //,-----------------------------------------------------. ,-----------------------------------------------------.
86 QK_RBT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
87 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
88 RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12,
89 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
90 RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
91 //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
92 KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT
93 //`--------------------------' `--------------------------'
94 )
95};
96
97#ifdef OLED_DRIVER_ENABLE
98oled_rotation_t oled_init_user(oled_rotation_t rotation) {
99 if (!is_master) {
100 return OLED_ROTATION_180; // flips the display 180 degrees if offhand
101 }
102 return rotation;
103}
104
105#define L_BASE 0
106#define L_LOWER 2
107#define L_RAISE 4
108#define L_ADJUST 8
109
110void oled_render_layer_state(void) {
111 oled_write_P(PSTR("Layer: "), false);
112 switch (layer_state) {
113 case L_BASE:
114 oled_write_ln_P(PSTR("Default"), false);
115 break;
116 case L_LOWER:
117 oled_write_ln_P(PSTR("Lower"), false);
118 break;
119 case L_RAISE:
120 oled_write_ln_P(PSTR("Raise"), false);
121 break;
122 case L_ADJUST:
123 case L_ADJUST|L_LOWER:
124 case L_ADJUST|L_RAISE:
125 case L_ADJUST|L_LOWER|L_RAISE:
126 oled_write_ln_P(PSTR("Adjust"), false);
127 break;
128 }
129}
130
131
132char keylog_str[24] = {};
133
134const char code_to_name[60] = {
135 ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
136 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
137 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
138 '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
139 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
140 '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
141
142void set_keylog(uint16_t keycode, keyrecord_t *record) {
143 char name = ' ';
144 if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
145 (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
146 if (keycode < 60) {
147 name = code_to_name[keycode];
148 }
149
150 // update keylog
151 snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
152 record->event.key.row, record->event.key.col,
153 keycode, name);
154}
155
156void oled_render_keylog(void) {
157 oled_write(keylog_str, false);
158}
159
160void render_bootmagic_status(bool status) {
161 /* Show Ctrl-Gui Swap options */
162 static const char PROGMEM logo[][2][3] = {
163 {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
164 {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
165 };
166 if (status) {
167 oled_write_ln_P(logo[0][0], false);
168 oled_write_ln_P(logo[0][1], false);
169 } else {
170 oled_write_ln_P(logo[1][0], false);
171 oled_write_ln_P(logo[1][1], false);
172 }
173}
174
175void oled_render_logo(void) {
176 static const char PROGMEM crkbd_logo[] = {
177 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
178 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
179 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
180 0};
181 oled_write_P(crkbd_logo, false);
182}
183
184void oled_task_user(void) {
185 if (is_master) {
186 oled_render_layer_state();
187 oled_render_keylog();
188 } else {
189 oled_render_logo();
190 }
191}
192
193bool process_record_user(uint16_t keycode, keyrecord_t *record) {
194 if (record->event.pressed) {
195 set_keylog(keycode, record);
196 }
197 return true;
198}
199#endif // OLED_DRIVER_ENABLE