keymap.c (13456B)
1 /* 2 * ---------------------------------------------------------------------------- 3 * "THE BEER-WARE LICENSE" (Revision 42): 4 * <https://github.com/Legonut> wrote this file. As long as you retain this 5 * notice you can do whatever you want with this stuff. If we meet some day, and 6 * you think this stuff is worth it, you can buy me a beer in return. David Rauseo 7 * ---------------------------------------------------------------------------- 8 */ 9 10 #include QMK_KEYBOARD_H 11 #include "common_oled.h" 12 13 enum keymap_layers { 14 _QWERTY, 15 _COLEMAK, 16 _GAME, 17 _FN, 18 _ADJUST, 19 _VIA1, 20 _VIA2, 21 _VIA3 22 }; 23 24 enum keymap_keycodes { 25 // Disables touch processing 26 TCH_TOG = SAFE_RANGE, 27 MENU_BTN, 28 MENU_UP, 29 MENU_DN 30 }; 31 32 // Default Layers 33 #define QWERTY DF(_QWERTY) 34 #define COLEMAK DF(_COLEMAK) 35 #define GAME DF(_GAME) 36 37 // Momentary Layers 38 #define FN MO(_FN) 39 #define ADJUST MO(_ADJUST) 40 41 #define FN_CAPS LT(_FN, KC_CAPS) 42 #define FN_ESC LT(_FN, KC_ESC) 43 44 /* This keyboard is enabled with an RGB Menu Control system. 45 This functionality is enabled, but still requires a little configuration based on your exact setup. 46 The RGB Menu will appear on the Right Half's OLED and can be controlled by the MENU keycodes: 47 MENU_BTN - Triggers a button action for the menu 48 MENU_UP - Triggers an increase action for the menu 49 MENU_DN - Triggers a decrease action for the menu 50 51 To finish configuration for your board, you will want to change the default keycodes for an encoder on the right half. 52 Encoder press keycode should be set to MENU_BTN, Clockwise should be MENU_UP, and Counter Clockwise should be MENU_DN. 53 Depending on where you add an encoder to the right half will determin in the default keymap where you should put those keycodes. 54 */ 55 56 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 57 /* QWERTY 58 * .--------------------------------------------------------------. .--------------------------------------------------------------. 59 * | `~/ESC | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bckspc | 60 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 61 * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ | 62 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 63 * | FN/Caps| A | S | D | F | G | ( | | ) | H | J | K | L | : | ' | 64 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 65 * | Shift | Z | X | C | V | B | { | | } | N | M | , | . | / |Shft/Ent| 66 * |--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| 67 * | Ctrl | Win | Alt | RGBTOG | Adjust | Space | Bksp | | Enter | Space | Left | Down | Up | Right | Ctrl | 68 * '--------+--------+--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------+--------+--------' 69 * |--------+--------+--------+--------+--------. .--------+--------+--------+--------+--------| 70 * | VolDn | VolUp | Next | Play | Prev | Touch Encoder Touch Encoder | RgbHuI | RgbHuD | RgbMdD | RgbTog | RgbMdI | 71 * '--------+--------+--------+--------+--------' '--------+--------+--------+--------+--------' 72 */ 73 [_QWERTY] = LAYOUT( 74 QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, 75 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, 76 FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, 77 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SC_SENT, 78 KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, ADJUST, KC_SPC, KC_DEL, KC_ENT, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_RCTL, 79 80 KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV, RM_HUEU, RM_HUED, RM_PREV, RM_TOGG, RM_NEXT 81 ), 82 83 [_COLEMAK] = LAYOUT( 84 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 85 _______, KC_Q, KC_W, KC_F, KC_P, KC_G, _______, _______, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______, 86 _______, KC_A, KC_R, KC_S, KC_T, KC_D, _______, _______, KC_H, KC_N, KC_E, KC_I, KC_O, _______, 87 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, 88 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 89 90 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 91 ), 92 93 [_GAME] = LAYOUT( 94 _______, _______, _______, _______, _______, _______, KC_F1, KC_F5, _______, _______, _______, _______, _______, _______, 95 _______, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F2, KC_F6, KC_Y, KC_U, KC_I, KC_O, KC_P, _______, 96 _______, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F3, KC_F7, KC_H, KC_J, KC_K, KC_L, KC_SCLN, _______, 97 _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F4, KC_F8, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______, 98 _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 99 100 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 101 ), 102 103 [_FN] = LAYOUT( 104 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, 105 _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PSCR, KC_PGUP, 106 _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_PGDN, 107 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 108 _______, _______, _______, TCH_TOG, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, 109 110 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 111 ), 112 113 [_ADJUST] = LAYOUT( 114 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, 115 _______, RM_SATD, RM_VALU, RM_SATU, QK_BOOT, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, 116 _______, RM_HUED, RM_VALD, RM_HUEU, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, 117 _______, RM_SPDD, _______, RM_SPDU, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, GAME, 118 _______, RM_PREV, _______, RM_NEXT, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_NUM, QWERTY, COLEMAK, 119 120 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 121 ), 122 123 [_VIA1] = LAYOUT( 124 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 125 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 126 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 127 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 128 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 129 130 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 131 ), 132 133 [_VIA2] = LAYOUT( 134 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 135 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 136 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 137 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 138 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 139 140 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 141 ), 142 143 [_VIA3] = LAYOUT( 144 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 145 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 146 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 147 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 148 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 149 150 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ 151 ), 152 }; 153 154 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 155 switch (keycode) 156 { 157 case MENU_BTN: 158 if (record->event.pressed) { 159 rgb_menu_selection(); 160 } 161 return false; 162 case MENU_UP: 163 if (record->event.pressed) { 164 rgb_menu_action(true); 165 } 166 return false; 167 case MENU_DN: 168 if (record->event.pressed) { 169 rgb_menu_action(false); 170 } 171 return false; 172 case TCH_TOG: 173 if (record->event.pressed) { 174 touch_encoder_toggle(); 175 } 176 return false; // Skip all further processing of this key 177 default: 178 return true; 179 } 180 } 181 182 static void render_layer(void) { 183 // Host Keyboard Layer Status 184 oled_write_P(PSTR("Layer"), false); 185 switch (get_highest_layer(layer_state)) { 186 case _QWERTY: 187 oled_write_ln_P(PSTR("QWRTY"), false); 188 break; 189 case _COLEMAK: 190 oled_write_ln_P(PSTR("Colemk"), false); 191 break; 192 case _GAME: 193 oled_write_ln_P(PSTR("Game "), false); 194 break; 195 case _FN: 196 oled_write_ln_P(PSTR("FN "), false); 197 break; 198 case _ADJUST: 199 oled_write_ln_P(PSTR("Adjst"), false); 200 break; 201 default: 202 oled_write_ln_P(PSTR("Undef"), false); 203 } 204 } 205 206 static void render_leds(void) 207 { 208 // Host Keyboard LED Status 209 led_t led_state = host_keyboard_led_state(); 210 oled_write_P(led_state.num_lock ? PSTR("NUMLK") : PSTR(" "), false); 211 oled_write_P(led_state.caps_lock ? PSTR("CAPLK") : PSTR(" "), false); 212 oled_write_P(led_state.scroll_lock ? PSTR("SCRLK") : PSTR(" "), false); 213 } 214 215 static void render_touch(void) 216 { 217 // Host Touch LED Status 218 oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH") : PSTR(" "), false); 219 oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT") : PSTR(" "), false); 220 } 221 222 bool oled_task_user(void) { 223 if (is_keyboard_left()) { 224 render_icon(); 225 oled_write_P(PSTR(" "), false); 226 render_layer(); 227 oled_write_P(PSTR(" "), false); 228 render_leds(); 229 oled_write_P(PSTR(" "), false); 230 render_touch(); 231 } 232 else { 233 render_icon(); 234 oled_write_P(PSTR(" "), false); 235 render_rgb_menu(); 236 } 237 return false; 238 } 239 240 oled_rotation_t oled_init_user(oled_rotation_t rotation) { 241 return OLED_ROTATION_270; 242 } 243 244 #ifdef ENCODER_MAP_ENABLE 245 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { 246 [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }, 247 [1 ... 7] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) } 248 }; 249 #endif