keymap.c (13907B)
1 /* Copyright 2020 Adam Naldal <adamnaldal@gmail.com> 2 * 3 * This program is free software: you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License as published by 5 * the Free Software Foundation, either version 2 of the License, or 6 * (at your option) any later version. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 * 13 * You should have received a copy of the GNU General Public License 14 * along with this program. If not, see <http://www.gnu.org/licenses/>. 15 */ 16 #include QMK_KEYBOARD_H 17 18 enum layers { 19 _QWERTY = 0, 20 _NN, 21 _MS, 22 _SP 23 }; 24 25 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 26 /* 27 * Base Layer: QWERTY 28 * 29 * ,-------------------------------------------. ,-------------------------------------------. 30 * | TAB | Q | W | E | R | T | | Y | U | I | O | P | ESC | 31 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 32 * | CTRL | A | S | D | F | G | | H | J | K | L | ; : | ' " | 33 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 34 * | LShift | Z | X | C | V | B | | N | M | , < | . > | / ? | SHIFT | 35 * `------------------------⫟------⫟------⫟------⫟------. ,-----⫟------⫟------⫟------⫟-------------------------' 36 * | GUI | Caps | Space| Nav +| |Media+| Bksp | Enter| AltGr| 37 * | | | |Number| |symbol| | | | 38 * `---------------------------' `---------------------------' 39 */ 40 [_QWERTY] = LAYOUT_split_3x6_4( 41 //,-----------------------------------------------------. ,-----------------------------------------------------. 42 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ESC, 43 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 44 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 45 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 46 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, 47 //|--------+--------+-----------⫟--------⫟--------⫟--------⫟--------. .--------⫟--------⫟--------⫟--------⫟-----------+--------+--------| 48 KC_LGUI, KC_CAPS, KC_SPC, MO(_NN), MO(_MS), KC_BSPC, KC_ENT, KC_RALT 49 //`------------------------------------' '------------------------------------' 50 ), 51 /* 52 * Navigation and Numbers: _NN 53 * 54 * ,-------------------------------------------. ,-------------------------------------------. 55 * | TAB | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ESC | 56 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 57 * | CTRL | F1 | F2 | F3 | F4 | F5 | | left | down | up | right| | | 58 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 59 * | LShift | F6 | F7 | F8 | F9 | F10 | | home | pgdn | pgup | end | | SHIFT | 60 * `------------------------⫟------⫟------⫟------⫟------. ,-----⫟------⫟------⫟------⫟-------------------------' 61 * | GUI | Del | Space| Nav +| |Media+|Back- | Enter| AltGr| 62 * | | | |Number| |symbol|space | | | 63 * `---------------------------' `---------------------------' 64 */ 65 [_NN] = LAYOUT_split_3x6_4( 66 //,-----------------------------------------------------. ,-----------------------------------------------------. 67 KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESC, 68 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 69 KC_LCTL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX, 70 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 71 KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, KC_RSFT, 72 //|--------+--------+-----------⫟--------⫟--------⫟--------⫟--------. .--------⫟--------⫟--------⫟--------⫟-----------+--------+--------| 73 KC_LGUI, KC_DEL, KC_SPC, _______, _______, KC_BSPC, KC_ENT, KC_RALT 74 //`------------------------------------' '------------------------------------' 75 ), 76 /* 77 * Media and Symbols: _MS 78 * 79 * ,-------------------------------------------. ,-------------------------------------------. 80 * | TAB | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ESC | 81 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 82 * | CTRL | | prev | play | next | vol+ | | - | = | { | } | | | ´ | 83 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 84 * | LShift | |brght-|brght+| mute | vol- | | _ | + | [ | ] | \ | ~ | 85 * `------------------------⫟------⫟------⫟------⫟------. ,-----⫟------⫟------⫟------⫟-------------------------' 86 * | GUI | Del | Space| Nav +| |Media+| Bksp | Enter| AltGr| 87 * | | | |Number| |symbol| | | | 88 * `---------------------------' `---------------------------' 89 */ 90 [_MS] = LAYOUT_split_3x6_4( 91 //,-----------------------------------------------------. ,-----------------------------------------------------. 92 KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ESC, 93 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 94 KC_LCTL, XXXXXXX, KC_MRWD, KC_MPLY, KC_MFFD, KC_VOLU, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV, 95 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 96 KC_LSFT, XXXXXXX, KC_BRID, KC_BRIU, KC_MUTE, KC_VOLD, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD, 97 //|--------+--------+-----------⫟--------⫟--------⫟--------⫟--------. .--------⫟--------⫟--------⫟--------⫟-----------+--------+--------| 98 KC_LGUI, KC_DEL, KC_SPC, _______, _______, KC_BSPC, KC_ENT, KC_RALT 99 //`------------------------------------' '------------------------------------' 100 ), 101 /* 102 * Special functions: _SP 103 * 104 * ,-------------------------------------------. ,-------------------------------------------. 105 * | TAB | | | | QK_BOOT| | | | | | | | ESC | 106 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 107 * | CTRL | | |DB_TOGG| | | | | | | | | | 108 * |--------+------+------+------+------+------| |------+------+------+------+------+--------| 109 * | LShift | | | | | | | | | | | | SHIFT | 110 * `------------------------⫟------⫟------⫟------⫟------. ,-----⫟------⫟------⫟------⫟-------------------------' 111 * | GUI | Del | Space| Nav +| |Media+| Bksp | Enter| AltGr| 112 * | | | |Number| |symbol| | | | 113 * `---------------------------' `---------------------------' 114 */ 115 [_SP] = LAYOUT_split_3x6_4( 116 //,-----------------------------------------------------. ,-----------------------------------------------------. 117 KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, 118 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 119 KC_LCTL, XXXXXXX, XXXXXXX, DB_TOGG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 120 //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| 121 KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RSFT, 122 //|--------+--------+-----------⫟--------⫟--------⫟--------⫟--------. .--------⫟--------⫟--------⫟--------⫟-----------+--------+--------| 123 KC_LGUI, KC_DEL, KC_SPC, _______, _______, KC_BSPC, KC_ENT, KC_RALT 124 //`------------------------------------' '------------------------------------' 125 ), 126 127 }; 128 129 layer_state_t layer_state_set_user(layer_state_t state) { 130 return update_tri_layer_state(state, _NN, _MS, _SP); 131 } 132 133 #ifdef OLED_ENABLE 134 135 static void render_logo(void) { 136 static const char PROGMEM qmk_logo[] = { 137 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 138 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 139 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 140 }; 141 142 oled_write_P(qmk_logo, false); 143 } 144 145 static void print_status_narrow(void) { 146 // Print current mode 147 oled_write_P(PSTR("\n"), false); 148 oled_write_ln_P(PSTR("MODE"), false); 149 oled_write_ln_P(PSTR(""), false); 150 151 oled_write_P(PSTR("\n\n"), false); 152 // Print current layer 153 oled_write_ln_P(PSTR("LAYER"), false); 154 switch (get_highest_layer(layer_state)) { 155 case _QWERTY: 156 oled_write_P(PSTR("Base\n"), false); 157 break; 158 case _NN: 159 oled_write_P(PSTR("Nums\n"), false); 160 break; 161 case _MS: 162 oled_write_P(PSTR("Sym\n"), false); 163 break; 164 case _SP: 165 oled_write_P(PSTR("Spec\n"), false); 166 break; 167 default: 168 oled_write_ln_P(PSTR("Undef\n"), false); 169 } 170 oled_write_P(PSTR("\n\n"), false); 171 led_t led_usb_state = host_keyboard_led_state(); 172 oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock); 173 } 174 175 oled_rotation_t oled_init_user(oled_rotation_t rotation) { 176 if (is_keyboard_master()) { 177 return OLED_ROTATION_270; 178 } 179 return rotation; 180 } 181 182 bool oled_task_user(void) { 183 if (is_keyboard_master()) { 184 print_status_narrow(); 185 } else { 186 render_logo(); 187 } 188 return false; 189 } 190 #endif 191 192 #ifdef ENCODER_ENABLE 193 bool encoder_update_user(uint8_t index, bool clockwise) { 194 if (index == 0) { 195 // master side thumb encoder 196 // Volume control 197 if (clockwise) { 198 tap_code(KC_VOLU); 199 } else { 200 tap_code(KC_VOLD); 201 } 202 } 203 else if (index == 1) { 204 // master side pinky encoder 205 // Page down / Page up 206 if (clockwise) { 207 tap_code(KC_PGDN); 208 } else { 209 tap_code(KC_PGUP); 210 } 211 } 212 else if (index == 2) { 213 // minion side thumb encoder 214 // Next track / Previous track 215 if (clockwise) { 216 tap_code(KC_MFFD); 217 } else { 218 tap_code(KC_MRWD); 219 } 220 } 221 else if (index == 3) { 222 // minion side pinky encoder 223 // Page end / Page home 224 if (clockwise) { 225 tap_code(KC_END); 226 } else { 227 tap_code(KC_HOME); 228 } 229 } 230 return true; 231 } 232 #endif