keymap.c (3405B)
1 2 #include QMK_KEYBOARD_H 3 #include "led.h" 4 5 // This is the 21-key keypad to 2x11 element matrix mapping 6 #define LAYOUT_pad21( \ 7 k00, k01, k02, k03, \ 8 k10, k11, k12, k13, \ 9 k04, k05, k06, \ 10 k14, k15, k16, k07, \ 11 k08, k09, k0A, \ 12 k19, k1A, k17 \ 13 ) { \ 14 { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A }, \ 15 { k10, k11, k12, k13, k14, k15, k16, k17, KC_NO, k19, k1A } \ 16 } 17 18 enum layers { 19 LAYER_BASE, 20 LAYER_EDIT, 21 LAYER_FUNCTION 22 }; 23 24 enum custom_keycodes { 25 M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT 26 M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL 27 M_CTALT // KC_FN7: MACRO_CONTROL_ALT 28 }; 29 30 #define SC_UNDO LCTL(KC_Z) 31 #define SC_REDO LCTL(KC_Y) 32 #define SC_CUT LCTL(KC_X) 33 #define SC_COPY LCTL(KC_C) 34 #define SC_PSTE LCTL(KC_V) 35 #define SC_SELA LCTL(KC_A) 36 #define SC_SAVE LCTL(KC_S) 37 #define SC_OPEN LCTL(KC_O) 38 #define SC_ACLS LALT(KC_F4) 39 #define SC_CCLS LCTL(KC_F4) 40 41 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 42 43 [LAYER_BASE] = LAYOUT_pad21( 44 KC_ESC, KC_TAB, KC_BSLS, MO(2), 45 KC_NUM, KC_PSLS, KC_PAST, KC_PMNS, 46 KC_P7, KC_P8, KC_P9, 47 KC_P4, KC_P5, KC_P6, KC_PPLS, 48 KC_P1, KC_P2, KC_P3, 49 KC_P0, KC_PDOT, KC_PENT ), 50 51 [LAYER_EDIT] = LAYOUT_pad21( 52 KC_ESC, KC_TAB, KC_SPC, _______, 53 TG(1), SC_PSTE, SC_REDO, SC_UNDO, 54 KC_HOME, KC_UP, KC_PGUP, 55 KC_LEFT, M_COPY, KC_RGHT, M_CTALT, 56 KC_END, KC_DOWN, KC_PGDN, 57 KC_BSPC, KC_DEL, M_SHFCT), 58 59 [LAYER_FUNCTION] = LAYOUT_pad21( 60 BL_TOGG, BL_UP, BL_DOWN, _______, 61 TG(1), _______, _______, _______, 62 _______, _______, _______, 63 _______, _______, _______, _______, 64 _______, _______, _______, 65 QK_BOOT, _______, _______ ), 66 67 }; 68 69 70 bool process_record_user(uint16_t keycode, keyrecord_t * record) { 71 // MACRODOWN only works in this function 72 switch (keycode) { 73 74 case M_COPY: 75 if (record->event.pressed) { 76 register_code(KC_LCTL); 77 if (record->tap.count == 1) { 78 register_code(KC_C); 79 unregister_code(KC_C); 80 } else if (record->tap.count == 2) { 81 register_code(KC_X); 82 unregister_code(KC_X); 83 } 84 unregister_code(KC_LCTL); 85 } 86 break; 87 88 case M_SHFCT: 89 if (record->event.pressed) { 90 if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT)); 91 if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL)); 92 if (record->tap.count == 3) register_code(KC_PENT);; 93 } else { 94 unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL)); 95 unregister_code(KC_PENT); 96 } 97 break; 98 99 case M_CTALT: 100 if (record->event.pressed) { 101 if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL)); 102 if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT)); 103 } else { 104 unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT)); 105 } 106 break; 107 } 108 109 return true; 110 } 111 112 bool led_update_user(led_t led_state) 113 { 114 if (led_state.caps_lock) { 115 // output high 116 gpio_set_pin_output(D6); 117 gpio_write_pin_high(D6); 118 } else { 119 // Hi-Z 120 gpio_set_pin_input(D6); 121 } 122 if (led_state.num_lock) { 123 // output low 124 gpio_set_pin_output(C7); 125 gpio_write_pin_low(C7); 126 } else { 127 // Hi-Z 128 gpio_set_pin_input(C7); 129 } 130 return false; 131 }