qmk_firmware

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

keymap.c (3078B)


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