keymap.c (4637B)
1 /* Copyright 2021 Ben Roesner (keycapsss.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 17 #include QMK_KEYBOARD_H 18 #include <stdio.h> 19 20 enum layers { 21 _NUMPAD, 22 _NAVIGATION, 23 _MEDIA 24 }; 25 26 enum combos { 27 COMBO1, 28 COMBO2, 29 COMBO3 30 }; 31 32 33 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 34 /* NUMPAD layer 35 * ,-----------------------, 36 * | 7 | 8 | 9 | / | 37 * |-----+-----+-----+-----| 38 * | 4 | 5 | 6 | * | 39 * |-----+-----+-----+-----| 40 * | 1 | 2 | 3 | - | 41 * |-----+-----+-----+-----| 42 * | 0 | . | = | + | 43 * `-----------------------' 44 */ 45 [_NUMPAD] = LAYOUT_ortho_4x4( 46 KC_P7, KC_P8, KC_P9, KC_PSLS, 47 KC_P4, KC_P5, KC_P6, KC_PAST, 48 KC_P1, KC_P2, KC_P3, KC_PMNS, 49 KC_P0, KC_PDOT, KC_PEQL, KC_PPLS 50 ), 51 /* Navigation layer 52 */ 53 [_NAVIGATION] = LAYOUT_ortho_4x4( 54 MS_BTN1, MS_UP, MS_BTN2, XXXXXXX, 55 MS_LEFT, MS_DOWN, MS_RGHT, XXXXXXX, 56 XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, 57 KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX 58 ), 59 /* MEDIA layer 60 */ 61 [_MEDIA] = LAYOUT_ortho_4x4( 62 KC_SYSTEM_SLEEP, XXXXXXX, XXXXXXX, KC_AUDIO_MUTE, 63 XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, 64 KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, XXXXXXX, 65 KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, XXXXXXX 66 ), 67 68 }; 69 70 // Combos for switching layers 71 const uint16_t PROGMEM zeroDot_combo[] = {KC_P0, KC_PDOT, COMBO_END}; 72 const uint16_t PROGMEM leftDown_combo[] = {KC_LEFT, KC_DOWN, COMBO_END}; 73 const uint16_t PROGMEM prevPlay_combo[] = {KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, COMBO_END}; 74 75 combo_t key_combos[] = { 76 [COMBO1] = COMBO_ACTION(zeroDot_combo), 77 [COMBO2] = COMBO_ACTION(leftDown_combo), 78 [COMBO3] = COMBO_ACTION(prevPlay_combo), 79 }; 80 81 void process_combo_event(uint16_t combo_index, bool pressed) { 82 switch(combo_index) { 83 case COMBO1: 84 if (pressed) { 85 layer_move(_NAVIGATION); 86 } 87 break; 88 case COMBO2: 89 if (pressed) { 90 layer_move(_MEDIA); 91 } 92 break; 93 case COMBO3: 94 if (pressed) { 95 layer_move(_NUMPAD); 96 } 97 break; 98 } 99 } 100 101 #ifdef OLED_ENABLE 102 103 void render_space(void) { 104 oled_write_P(PSTR(" "), false); 105 } 106 107 108 void oled_render_layer_state(void) { 109 oled_write_P(PSTR("Layer: "), false); 110 if(layer_state_is(_MEDIA)) { 111 oled_write_ln_P(PSTR("MEDIA"), false); 112 } else if(layer_state_is(_NAVIGATION)) { 113 oled_write_ln_P(PSTR("NAVIGATION"), false); 114 } else { 115 oled_write_ln_P(PSTR("NUMPAD"), false); 116 } 117 } 118 119 120 bool oled_task_user(void) { 121 oled_write_ln_P(PSTR("Plaid-Pad ///////////"), false); 122 oled_render_layer_state(); 123 return false; 124 } 125 126 #endif 127 128 #ifdef ENCODER_MAP_ENABLE 129 /* 130 ,-----------------------, 131 | E1 | E2 | E3 | E4 | 132 |-----+-----+-----+-----| 133 | | | | E3 | 134 |-----+-----+-----+-----| 135 | | | | E2 | 136 |-----+-----+-----+-----| 137 | | | | E1 | 138 `-----------------------' 139 */ 140 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { 141 #ifdef KEYBOARD_keycapsss_plaid_pad_rev1 142 [_NUMPAD] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) }, 143 [_NAVIGATION] = { ENCODER_CCW_CW(C(S(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) }, 144 [_MEDIA] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19) } 145 #else 146 [_NUMPAD] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_F22, KC_F21), ENCODER_CCW_CW(KC_F24, KC_F23) }, 147 [_NAVIGATION] = { ENCODER_CCW_CW(C(S(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(MS_WHLU, MS_WHLD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, 148 [_MEDIA] = { ENCODER_CCW_CW(KC_F18, KC_F17), ENCODER_CCW_CW(KC_F20, KC_F19), ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) } 149 #endif 150 }; 151 152 #endif