qmk_firmware

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

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 }