qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keymap.c (4260B)


      1 #include QMK_KEYBOARD_H
      2 
      3 #define MODS_PRESSED(btn)  (get_mods() & (MOD_BIT(KC_L##btn)|MOD_BIT(KC_R##btn)))
      4 
      5 enum custom_keycodes {
      6   SFT_ESC = SAFE_RANGE,
      7   ALT_F4
      8 };
      9 
     10 #define SET_WHETHER(mask, btn1, btn2) \
     11 if (record->event.pressed) {          \
     12     if (mask) {                       \
     13         add_key(btn2);                \
     14         send_keyboard_report();       \
     15     } else {                          \
     16         add_key(btn1);                \
     17         send_keyboard_report();       \
     18     }                                 \
     19 } else {                              \
     20     if (mask) {                       \
     21         del_key(btn2);                \
     22         send_keyboard_report();       \
     23     } else {                          \
     24         del_key(btn1);                \
     25         send_keyboard_report();       \
     26     }                                 \
     27 }                                     \
     28 
     29 
     30 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     31   LAYOUT( /* Base */
     32     SFT_ESC, KC_1,    KC_2,    KC_3,    ALT_F4,  KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
     33     KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
     34     KC_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,
     35     KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT,
     36     TT(1),   KC_LCTL, KC_LALT,                            KC_SPC,                             KC_RALT, KC_RGUI, KC_APP,  KC_RCTL
     37   ),
     38   LAYOUT( /* Cursor layer */
     39     KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,
     40     TT(3),   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
     41     TT(2),   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,          _______,
     42     _______,          _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_END,           KC_UP,
     43     _______, _______, _______,                            _______,                            _______, KC_LEFT, KC_DOWN, KC_RGHT
     44   ),
     45   LAYOUT( /* Keypad layer */
     46     TO(0),   KC_1,    KC_2,    KC_3,    ALT_F4,  KC_5,    KC_6,    KC_P7,   KC_P8,   KC_P9,   KC_P0,   KC_PMNS, KC_PPLS, KC_BSPC,
     47     _______, _______, _______, _______, _______, _______, _______, KC_P4,   KC_P5,   KC_P6,   _______, _______, _______, _______,
     48     _______, _______, _______, _______, _______, _______, _______, KC_P1,   KC_P2,   KC_P3,   _______, _______,          _______,
     49     _______,          _______, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, MS_BTN1, MS_UP,            MS_BTN2,
     50     _______, _______, _______,                            _______,                            MS_LEFT, MS_DOWN, MS_RGHT, MS_BTN3
     51   ),
     52   LAYOUT( /* Multimedia layer */
     53     TO(0),   _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
     54     _______, _______, KC_WAKE, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPRV, KC_MNXT, _______,
     55     _______, _______, KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
     56     _______,          _______, KC_PWR,  _______, _______, _______, _______, _______, _______, MS_BTN1, MS_WHLU,          MS_BTN2,
     57     _______, _______, _______,                            KC_MPLY,                            MS_WHLL, MS_WHLD, MS_WHLR, MS_BTN3
     58   ),
     59 };
     60 
     61 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
     62   switch (keycode) {
     63     case SFT_ESC:
     64       SET_WHETHER(MODS_PRESSED(SFT), KC_ESC, KC_GRAVE);
     65 
     66       return false;
     67 
     68     case ALT_F4:
     69       SET_WHETHER(MODS_PRESSED(ALT), KC_4, KC_F4);
     70 
     71       return false;
     72 
     73     default:
     74       return true;
     75   }
     76 }
     77 
     78 void matrix_init_user(void) {
     79   gpio_set_pin_output(C7);
     80   gpio_write_pin_low(C7);
     81 }
     82 
     83 layer_state_t layer_state_set_user(layer_state_t state) {
     84   if (get_highest_layer(state)) {
     85     gpio_write_pin_high(C7);
     86   } else {
     87     gpio_write_pin_low(C7);
     88   }
     89   return state;
     90 }