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