keymap.c (15995B)
1 /* Copyright 2020 marksard 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 #include "../common/oled_helper.h" 18 19 // Each layer gets a name for readability, which is then used in the keymap matrix below. 20 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 21 // Layer names don't all need to be of the same length, obviously, and you can also skip them 22 // entirely and just use numbers. 23 enum layer_number { 24 _BASE = 0, 25 _BASES, 26 _LOWER, 27 _LOWRS, 28 _RAISE, 29 _ADJUST, 30 }; 31 32 enum custom_keycodes { 33 BASE = SAFE_RANGE, 34 BASES, 35 LOWER, 36 LOWRS, 37 RAISE, 38 ADJUST, 39 KANJI, 40 RGBRST 41 }; 42 43 #define KC_TBSF LSFT_T(KC_TAB) 44 #define KC_ALAP LALT_T(KC_APP) 45 46 #define KC_JEQL LSFT(KC_MINS) 47 #define KC_SFUC LSFT(KC_INT1) 48 #define KC_RSBR LSFT(KC_8) 49 #define KC_REBR LSFT(KC_9) 50 51 #define KC_ZSFT LSFT_T(KC_Z) 52 #define KC_ESCT LCTL_T(KC_ESC) 53 #define KC_TBAL LALT_T(KC_TAB) 54 #define KC_11SF LSFT_T(KC_F11) 55 56 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 57 [_BASE] = LAYOUT_rs( 58 // Treadstone48 Rhymestone 59 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 60 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_NUM, 61 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 62 KC_TBSF, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PAST, KC_TAB, 63 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 64 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_PENT, 65 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 66 KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_ALAP, KC_LEFT, KC_DOWN, KC_RGHT, LOWER, KC_P0, KC_PDOT, KC_PPLS, KC_BSPC, 67 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 68 KC_DEL 69 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 70 ), 71 72 [_LOWER] = LAYOUT_rs( 73 // Treadstone48 Rhymestone 74 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 75 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_INT3, KC_LBRC, KC_RBRC, KC_DEL, KC_A, KC_B, KC_C, KC_INT3, KC_HASH, 76 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 77 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUOT, KC_BSLS, _______, KC_D, KC_E, KC_F, KC_PERC, KC_SFUC, 78 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 79 _______, KC_F11, KC_F12, BASES, KANJI, KC_ENT, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_PGUP, KC_RSBR, KC_REBR, KC_RBRC, KC_QUOT, _______, 80 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 81 _______, _______, _______, _______, KC_DEL, _______, _______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, _______, XXXXXXX, KC_COMM, KC_JEQL, KC_DEL, 82 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 83 _______ 84 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 85 ), 86 87 [_BASES] = LAYOUT_rs( 88 // Treadstone48 Rhymestone 89 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 90 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_Q, KC_W, KC_E, KC_R, KC_T, 91 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 92 KC_TBSF, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, 93 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 94 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_ZSFT, KC_X, KC_C, KC_V, KC_B, 95 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 96 KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_ALAP, KC_LEFT, KC_DOWN, KC_RGHT, KC_ESCT, KC_TBAL, KC_LGUI, LOWRS, KC_BSPC, 97 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 98 KC_DEL 99 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 100 ), 101 102 [_LOWRS] = LAYOUT_rs( 103 // Treadstone48 Rhymestone 104 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 105 _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_INT3, KC_LBRC, KC_RBRC, KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, 106 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 107 _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUOT, KC_BSLS, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, 108 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 109 _______, KC_F11, KC_F12, BASE, KANJI, KC_ENT, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, KC_INT1, KC_PGUP, KC_11SF, KC_F12, BASE, KANJI, KC_ENT, 110 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 111 _______, _______, _______, _______, KC_DEL, _______, _______, XXXXXXX, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, _______, KC_DEL, 112 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 113 _______ 114 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 115 ), 116 117 [_RAISE] = LAYOUT_rs( 118 // Treadstone48 Rhymestone 119 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 120 _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 121 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 122 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_QUOT, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 123 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 124 _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_INT1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 125 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 126 _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_COMM, KC_SLSH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 127 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 128 _______ 129 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 130 ), 131 132 [_ADJUST] = LAYOUT_rs( 133 // Treadstone48 Rhymestone 134 //,--------------------------------------------------------------------------------------------------------------------. --------------------------------------------. 135 XXXXXXX, QK_BOOT, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, MS_WHLL, MS_WHLU, KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 136 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+-----------------| --------+--------+--------+--------+--------| 137 XXXXXXX, UG_TOGG, UG_HUEU, UG_SATU, UG_VALU, XXXXXXX, XXXXXXX, MS_WHLR, MS_WHLD, KC_END, KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 138 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 139 _______, UG_NEXT, UG_HUED, UG_SATD, UG_VALD, XXXXXXX, XXXXXXX, XXXXXXX, MS_BTN1, MS_BTN2, XXXXXXX, MS_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 140 //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------+--------| --------+--------+--------+--------+--------| 141 _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, MS_LEFT, MS_DOWN, MS_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 142 //`--------------------------------------------------------------------------------------------------------------------' --------------------------------------------' 143 _______ 144 // ExtraKey: This key is an extra key. REV1 is a split back space. REV2 is to the right of the arrow-up key. 145 ) 146 }; 147 148 #define L_BASE _BASE 149 #define L_BASES (1<<_BASES) 150 #define L_LOWER (1<<_LOWER) 151 #define L_LOWRS (1<<_LOWRS) 152 #define L_RAISE (1<<_RAISE) 153 #define L_ADJUST (1<<_ADJUST) 154 #define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER) 155 156 #ifdef OLED_ENABLE 157 #include <stdio.h> 158 #include <string.h> 159 160 typedef struct { 161 uint8_t state; 162 char name[8]; 163 }LAYER_DISPLAY_NAME; 164 165 #define LAYER_DISPLAY_MAX 7 166 const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = { 167 {L_BASE, "Base"}, 168 {L_BASE + 1, "Base"}, 169 {L_BASES, "BaseSpl"}, 170 {L_LOWER, "Lower"}, 171 {L_LOWRS, "LowrSpl"}, 172 {L_RAISE, "Raise"}, 173 {L_ADJUST_TRI, "Adjust"} 174 }; 175 176 static inline const char* get_leyer_status(void) { 177 178 for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) { 179 if (layer_state == 0 && layer_display_name[i].state == default_layer_state) { 180 181 return layer_display_name[i].name; 182 } else if (layer_state != 0 && layer_display_name[i].state == layer_state) { 183 184 return layer_display_name[i].name; 185 } 186 } 187 188 return "?"; 189 } 190 191 static char layer_status_buf[24] = "Layer state ready.\n"; 192 static inline void update_keymap_status(void) { 193 194 snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n", 195 keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status()); 196 } 197 198 static inline void render_keymap_status(void) { 199 200 oled_write(layer_status_buf, false); 201 } 202 203 #define UPDATE_KEYMAP_STATUS() update_keymap_status() 204 205 static inline void render_status(void) { 206 207 UPDATE_LED_STATUS(); 208 RENDER_LED_STATUS(); 209 render_keymap_status(); 210 UPDATE_LOCK_STATUS(); 211 RENDER_LOCK_STATUS(); 212 RENDER_KEY_STATUS(); 213 } 214 215 oled_rotation_t oled_init_user(oled_rotation_t rotation) { 216 217 // if (is_keyboard_master()) 218 // return OLED_ROTATION_180; // flips the display 180 degrees if offhand 219 return rotation; 220 } 221 222 bool oled_task_user(void) { 223 224 if (is_keyboard_master()) { 225 render_status(); 226 } else { 227 render_logo(); 228 } 229 return false; 230 } 231 232 #else 233 234 #define UPDATE_KEYMAP_STATUS() 235 236 #endif 237 238 void update_change_layer(bool pressed, uint8_t layer1, uint8_t layer2, uint8_t layer3) { 239 240 pressed ? layer_on(layer1) : layer_off(layer1); 241 IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2) ? layer_on(layer3) : layer_off(layer3); 242 } 243 244 int RGB_current_mode; 245 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 246 247 UPDATE_KEY_STATUS(keycode, record); 248 249 bool result = false; 250 switch (keycode) { 251 case LOWER: 252 update_change_layer(record->event.pressed, _LOWER, _RAISE, _ADJUST); 253 break; 254 case RAISE: 255 update_change_layer(record->event.pressed, _RAISE, _LOWER, _ADJUST); 256 break; 257 case BASE: 258 if (record->event.pressed) { 259 default_layer_set(L_BASE); 260 } 261 break; 262 case BASES: 263 if (record->event.pressed) { 264 default_layer_set(L_BASES); 265 } 266 break; 267 case LOWRS: 268 update_change_layer(record->event.pressed, _LOWRS, _RAISE, _ADJUST); 269 break; 270 case KANJI: 271 if (record->event.pressed) { 272 if (keymap_config.swap_lalt_lgui == false) { 273 register_code(KC_LNG2); 274 } else { 275 SEND_STRING(SS_LALT("`")); 276 } 277 } else { 278 unregister_code(KC_LNG2); 279 } 280 break; 281 #ifdef RGBLIGHT_ENABLE 282 case RGBRST: 283 if (record->event.pressed) { 284 eeconfig_update_rgblight_default(); 285 rgblight_enable(); 286 } 287 break; 288 #endif 289 default: 290 result = true; 291 break; 292 } 293 294 UPDATE_KEYMAP_STATUS(); 295 return result; 296 }