keymap.c (4318B)
1 /* Copyright 2020 Regan Palmer 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 _BASE, 20 _RAISE, 21 _ADJUST, 22 _GAME, 23 }; 24 25 #define RAISE MO(_RAISE) 26 #define ADJUST MO(_ADJUST) 27 #define GAME TG(_GAME) 28 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 29 [_BASE] = LAYOUT( 30 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 31 KC_A, KC_S, KC_D, KC_F, KC_G, KC_MPLY, KC_H, KC_J, KC_K, KC_L, KC_ENT, 32 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PSCR, KC_N, KC_M, KC_COMM, KC_DOT, KC_BSPC, 33 KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, RAISE, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL), 34 35 [_RAISE] = LAYOUT( 36 KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, 37 KC_ESC, KC_GRV, KC_BSLS, KC_UP, KC_MINS, KC_TRNS, KC_LBRC, KC_RBRC, KC_SCLN, KC_QUOT, KC_TRNS, 38 KC_TAB, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, ADJUST, KC_EQL, KC_SLSH, KC_TRNS, KC_TRNS, KC_TRNS, 39 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 40 41 [_ADJUST] = LAYOUT( 42 KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, 43 KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, GAME, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_TRNS, 44 QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, 45 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), 46 47 [_GAME] = LAYOUT( 48 KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, 49 KC_A, KC_S, KC_D, KC_F, KC_G, GAME, KC_H, KC_J, KC_K, KC_L, KC_ENT, 50 KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PSCR, KC_N, KC_M, KC_COMM, KC_DOT, KC_BSPC, 51 KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, KC_NO, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL) 52 }; 53 54 bool encoder_update_user(uint8_t index, bool clockwise) { 55 switch (get_highest_layer(layer_state)) { 56 case _BASE: 57 if (clockwise) { 58 tap_code(KC_VOLU); 59 } else { 60 tap_code(KC_VOLD); 61 } 62 break; 63 case _RAISE: 64 if (clockwise) { 65 tap_code(MS_WHLD); 66 } else { 67 tap_code(MS_WHLU); 68 } 69 break; 70 case _ADJUST: 71 if (clockwise) { 72 tap_code(MS_WHLR); 73 } else { 74 tap_code(MS_WHLL); 75 } 76 break; 77 case _GAME: 78 if (clockwise) { 79 tap_code(KC_VOLU); 80 } else { 81 tap_code(KC_VOLD); 82 } 83 break; 84 } 85 return true; 86 } 87 88 char wpm[10]; 89 90 bool oled_task_user(void) { 91 sprintf(wpm, "WPM: %03d", get_current_wpm()); 92 93 // Host Keyboard Layer Status 94 oled_write_P(PSTR(" rainkeeb \n"), false); 95 oled_write_P(PSTR(" Layer: "), false); 96 97 switch (get_highest_layer(layer_state)) { 98 case _BASE: 99 oled_write_P(PSTR("Default\n"), false); 100 break; 101 case _RAISE: 102 oled_write_P(PSTR("Raise\n"), false); 103 break; 104 case _ADJUST: 105 oled_write_P(PSTR("Adjust\n"), false); 106 break; 107 case _GAME: 108 oled_write_P(PSTR("Game\n"), false); 109 break; 110 default: 111 // Or use the write_ln shortcut over adding '\n' to the end of your string 112 oled_write_ln_P(PSTR("Undefined"), false); 113 } 114 oled_write_P(PSTR(" "), false); 115 oled_write(wpm, false); 116 return false; 117 }