keymap.c (8989B)
1 #include QMK_KEYBOARD_H 2 3 // Each layer gets a name for readability, which is then used in the keymap matrix below. 4 // The underscores don't mean anything - you can have a layer called STUFF or any other name. 5 // Layer names don't all need to be of the same length, obviously, and you can also skip them 6 // entirely and just use numbers. 7 enum layers { 8 _QWERTY, 9 _LOWER, 10 _RAISE, 11 _ADJUST, 12 }; 13 14 enum custom_keycodes { 15 LOWER = SAFE_RANGE, 16 RAISE, 17 ADJUST, 18 RGBRST 19 }; 20 21 22 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 23 [_QWERTY] = LAYOUT( 24 //,-----------------------------------------------. ,-----------------------------------------------. 25 KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_BSPC, 26 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 27 KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, 28 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 29 ADJUST, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_BSLS, 30 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 31 KC_LSFT, LOWER,KC_LGUI, KC_LALT, RAISE, KC_RSFT, 32 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 33 KC_SPC, KC_ENT 34 //`-----------------------------------------------' `-----------------------------------------------' 35 ), 36 [_LOWER] = LAYOUT( 37 //,-----------------------------------------------. ,-----------------------------------------------. 38 KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_TRNS, 39 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 40 KC_TRNS,KC_HOME,KC_LEFT, KC_UP,KC_RGHT,KC_PGUP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, 41 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 42 KC_TRNS, KC_END,KC_PSCR,KC_DOWN, KC_INS,KC_PGDN, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, 43 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 44 KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, 45 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 46 KC_TRNS, KC_TRNS 47 //`-----------------------------------------------' `-----------------------------------------------' 48 ), 49 [_RAISE] = LAYOUT( 50 //,-----------------------------------------------. ,-----------------------------------------------. 51 KC_TRNS,KC_EXLM, KC_AT,KC_HASH, KC_DLR,KC_PERC, KC_CIRC,KC_PSLS,KC_PAST,KC_PMNS,KC_PPLS,KC_TRNS, 52 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 53 KC_TRNS,KC_RBRC,KC_LABK,KC_ASTR,KC_SCLN,KC_LBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, 54 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 55 KC_TRNS,KC_BSLS,KC_RABK,KC_LPRN,KC_INT3,KC_UNDS, KC_6, KC_7, KC_8, KC_9, KC_0,KC_PENT, 56 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+--- ---+-------+-------| 57 KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, 58 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+--- ---+-------+-------| 59 KC_TRNS, KC_TRNS 60 //`-----------------------------------------------' `-----------------------------------------------' 61 ), 62 [_ADJUST] = LAYOUT( 63 //,-----------------------------------------------. ,-----------------------------------------------. 64 KC_TRNS, RGBRST,UG_TOGG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 65 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 66 KC_TRNS,UG_HUEU,UG_SATU,UG_VALU,AG_SWAP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 67 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 68 KC_TRNS,UG_HUED,UG_SATD,UG_VALD,AG_NORM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, 69 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 70 KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, 71 //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------| 72 KC_TRNS, KC_TRNS 73 //`-----------------------------------------------' `-----------------------------------------------' 74 ) 75 }; 76 77 int RGB_current_mode; 78 79 void keyboard_post_init_user(void) { 80 #ifdef RGBLIGHT_ENABLE 81 RGB_current_mode = rgblight_get_mode(); 82 #endif 83 } 84 85 bool process_record_user(uint16_t keycode, keyrecord_t *record) { 86 if (record->event.pressed) { 87 // set_timelog(); 88 } 89 90 switch (keycode) { 91 case LOWER: 92 if (record->event.pressed) { 93 layer_on(_LOWER); 94 update_tri_layer(_LOWER, _RAISE, _ADJUST); 95 } else { 96 layer_off(_LOWER); 97 update_tri_layer(_LOWER, _RAISE, _ADJUST); 98 } 99 return false; 100 break; 101 case RAISE: 102 if (record->event.pressed) { 103 layer_on(_RAISE); 104 update_tri_layer(_LOWER, _RAISE, _ADJUST); 105 } else { 106 layer_off(_RAISE); 107 update_tri_layer(_LOWER, _RAISE, _ADJUST); 108 } 109 return false; 110 break; 111 case ADJUST: 112 if (record->event.pressed) { 113 layer_on(_ADJUST); 114 } else { 115 layer_off(_ADJUST); 116 } 117 return false; 118 break; 119 case QK_UNDERGLOW_TOGGLE: 120 #ifdef RGBLIGHT_ENABLE 121 if (record->event.pressed) { 122 rgblight_mode(RGB_current_mode); 123 rgblight_step(); 124 RGB_current_mode = rgblight_get_mode(); 125 } 126 #endif 127 return false; 128 break; 129 case RGBRST: 130 #ifdef RGBLIGHT_ENABLE 131 if (record->event.pressed) { 132 eeconfig_update_rgblight_default(); 133 rgblight_enable(); 134 RGB_current_mode = rgblight_get_mode(); 135 } 136 #endif 137 break; 138 } 139 return true; 140 } 141 142 #ifdef OLED_ENABLE 143 144 oled_rotation_t oled_init_user(oled_rotation_t rotation) { 145 if (!is_keyboard_master()) { 146 return OLED_ROTATION_180; // flips the display 180 degrees if offhand 147 } 148 149 return rotation; 150 } 151 152 bool oled_task_user(void) { 153 void render_status(void) { 154 // Host Keyboard Layer Status 155 oled_write_P(PSTR("Layer: "), false); 156 157 switch (get_highest_layer(layer_state)) { 158 case _QWERTY: 159 oled_write_P(PSTR("Default\n"), false); 160 break; 161 case _LOWER: 162 oled_write_P(PSTR("LOWER\n"), false); 163 break; 164 case _RAISE: 165 oled_write_P(PSTR("RAISE\n"), false); 166 break; 167 case _ADJUST: 168 oled_write_P(PSTR("ADJUST\n"), false); 169 break; 170 default: 171 // Or use the write_ln shortcut over adding '\n' to the end of your string 172 oled_write_ln_P(PSTR("Undefined"), false); 173 } 174 175 // Host Keyboard LED Status 176 led_t led_state = host_keyboard_led_state(); 177 oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); 178 oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false); 179 oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false); 180 } 181 182 183 void render_logo(void) { 184 static const char PROGMEM qmk_logo[] = { 185 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 186 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 187 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 188 }; 189 190 oled_write_P(qmk_logo, false); 191 } 192 193 if (is_keyboard_master()) { 194 render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc) 195 } else { 196 render_logo(); // Renders a static logo 197 } 198 return false; 199 } 200 #endif