qmk_firmware

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

keymap.c (14382B)


      1 #include QMK_KEYBOARD_H
      2 
      3 
      4 #ifdef RGBLIGHT_ENABLE
      5 //Following line allows macro to read current RGB settings
      6 extern rgblight_config_t rgblight_config;
      7 rgblight_config_t RGB_current_config;
      8 #endif
      9 
     10 extern uint8_t is_master;
     11 
     12 // Each layer gets a name for readability, which is then used in the keymap matrix below.
     13 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
     14 // Layer names don't all need to be of the same length, obviously, and you can also skip them
     15 // entirely and just use numbers.
     16 enum layer_number {
     17     _QWERTY = 0,
     18     _COLEMAK,
     19     _DVORAK,
     20     _LOWER,
     21     _RAISE,
     22     _ADJUST
     23 };
     24 
     25 enum custom_keycodes {
     26   LOWER = SAFE_RANGE,
     27   RAISE,
     28   ADJUST,
     29   BACKLIT,
     30   KANA,
     31   EISU,
     32   RGBRST
     33 };
     34 
     35 #define QWERTY PDF(_QWERTY)
     36 #define COLEMAK PDF(_COLEMAK)
     37 #define DVORAK PDF(_DVORAK)
     38 
     39 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     40   /* Qwerty
     41    * ,-----------------------------------------.             ,-----------------------------------------.
     42    * | Tab  |   Q  |   W  |   E  |   R  |   T  |             |   Y  |   U  |   I  |   O  |   P  | Bksp |
     43    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     44    * | Ctrl |   A  |   S  |   D  |   F  |   G  |             |   H  |   J  |   K  |   L  |   ;  |  '   |
     45    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     46    * | Shift|   Z  |   X  |   C  |   V  |   B  |             |   N  |   M  |   ,  |   .  |   /  |Enter |
     47    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     48    * | Esc  |ADJUST| Win  | Alt  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
     49    * `-----------------------------------------'             `-----------------------------------------'
     50    */
     51 [_QWERTY] = LAYOUT_ortho_4x12(
     52       KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSPC,
     53       KC_LCTL, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
     54       KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
     55       KC_ESC,  ADJUST,  KC_LGUI, KC_LALT, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     56       ),
     57 
     58   /* Colemak
     59    * ,-----------------------------------------.             ,-----------------------------------------.
     60    * | Tab  |   Q  |   W  |   F  |   P  |   G  |             |   J  |   L  |   U  |   Y  |   ;  | Bksp |
     61    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     62    * | Ctrl |   A  |   R  |   S  |   T  |   D  |             |   H  |   N  |   E  |   I  |   O  |  '   |
     63    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     64    * | Shift|   Z  |   X  |   C  |   V  |   B  |             |   K  |   M  |   ,  |   .  |   /  |Enter |
     65    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     66    * | Esc  |ADJUST| Alt  | Win  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
     67    * `-----------------------------------------'             `-----------------------------------------'
     68    */
     69   [_COLEMAK] = LAYOUT_ortho_4x12(
     70       KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,                      KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_BSPC,
     71       KC_LCTL, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,                      KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
     72       KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
     73       KC_ESC,  ADJUST,  KC_LALT, KC_LGUI, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     74       ),
     75 
     76   /* Dvorak
     77    * ,-----------------------------------------.             ,-----------------------------------------.
     78    * | Tab  |   '  |   ,  |   .  |   P  |   Y  |             |   F  |   G  |   C  |   R  |   L  | Del  |
     79    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     80    * | Ctrl |   A  |   O  |   E  |   U  |   I  |             |   D  |   H  |   T  |   N  |   S  |  /   |
     81    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     82    * | Shift|   ;  |   Q  |   J  |   K  |   X  |             |   B  |   M  |   W  |   V  |   Z  |Enter |
     83    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     84    * | Esc  |ADJUST| Alt  | Win  |LOWER |Space |             | Space| RAISE| Left | Down |  Up  | Right|
     85    * `-----------------------------------------'             `-----------------------------------------'
     86    */
     87   [_DVORAK] = LAYOUT_ortho_4x12(
     88       KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,                      KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL,
     89       KC_LCTL, KC_A,    KC_O,    KC_E,    KC_U,    KC_I,                      KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
     90       KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,                      KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT ,
     91       KC_ESC,  ADJUST,  KC_LALT, KC_LGUI, LOWER,   KC_SPC,                    KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     92       ),
     93 
     94   /* Lower
     95    * ,-----------------------------------------.             ,-----------------------------------------.
     96    * |   ~  |   !  |   @  |   #  |   $  |   %  |             |   ^  |   &  |   *  |   (  |   )  |      |
     97    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
     98    * |      |      |      |      |      |      |             |   -  |   _  |   +  |   {  |   }  |  |   |
     99    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    100    * |      |      |      |      |      |      |             |      |      |      | Home | End  |      |
    101    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    102    * |      |      |      |      |      |      |             |      |      | Next | Vol- | Vol+ | Play |
    103    * `-----------------------------------------'             `-----------------------------------------'
    104    */
    105   [_LOWER] = LAYOUT_ortho_4x12(
    106       KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC,                   KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
    107       _______, _______, _______, _______, _______, _______,                   KC_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
    108       _______, _______, _______, _______, _______, _______,                   _______, _______, _______, KC_HOME, KC_END,  _______,
    109       _______, _______, _______, _______, _______, _______,                   _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
    110       ),
    111 
    112   /* Raise
    113    * ,-----------------------------------------.             ,-----------------------------------------.
    114    * |   `  |   1  |   2  |   3  |   4  |   5  |             |   6  |   7  |   8  |   9  |   0  | Del  |
    115    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    116    * |      |  F1  |  F2  |  F3  |  F4  |  F5  |             |  F6  |   -  |   =  |   [  |   ]  |  \   |
    117    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    118    * |      |  F7  |  F8  |  F9  |  F10 |  F11 |             |  F12 |      |      |      |      |
    119    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    120    * |      |      |      |      |      |      |             |      |      | Next | Vol- | Vol+ | Play |
    121    * `-----------------------------------------'             `-----------------------------------------'
    122    */
    123   [_RAISE] = LAYOUT_ortho_4x12(
    124       KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,
    125       _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                     KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
    126       _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,                    KC_F12,  _______, _______, _______, _______, _______,
    127       _______, _______, _______, _______, _______, _______,                   _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
    128       ),
    129 
    130   /* Adjust (Lower + Raise)
    131    * ,-----------------------------------------.             ,-----------------------------------------.
    132    * |      | Reset|RGBRST|Aud on|Audoff|      |             |      |Qwerty|Colemk|Dvorak|      | Ins  |
    133    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    134    * |      |RGB ON| HUE+ | SAT+ | VAL+ | Mac  |             | Win  |  -   |   =  |Print |ScLock|Pause |
    135    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    136    * |MODE R| MODE | HUE- | SAT- | VAL- |      |             |      |      |      |      |PageUp|      |
    137    * |------+------+------+------+------+------|             |------+------+------+------+------+------|
    138    * |      |      |      | EISU | EISU | EISU |             | KANA | KANA | Home |PageDn|PageUp| End  |
    139    * `-----------------------------------------'             `-----------------------------------------'
    140    */
    141     [_ADJUST] =  LAYOUT_ortho_4x12(
    142       _______, QK_BOOT, RGBRST,  _______, _______, _______,                   _______, QWERTY,  COLEMAK, DVORAK,  _______, KC_INS,
    143       _______, UG_TOGG, UG_HUEU, UG_SATU, UG_VALU, AG_NORM,                   AG_SWAP, KC_MINS, KC_EQL,  KC_PSCR, KC_SCRL, KC_PAUS,
    144       UG_PREV, UG_NEXT, UG_HUED, UG_SATD, UG_VALD, _______,                   _______, _______, _______, _______, KC_PGUP, _______,
    145       _______, _______, _______, EISU,    EISU,    EISU,                      KANA,    KANA,    KANA,    KC_HOME, KC_PGDN, KC_END
    146       )
    147 };
    148 
    149 // define variables for reactive RGB
    150 bool TOG_STATUS = false;
    151 
    152 // Setting ADJUST layer RGB back to default
    153 void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
    154   if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
    155     #ifdef RGBLIGHT_ENABLE
    156       rgblight_mode_noeeprom(RGB_current_config.mode);
    157     #endif
    158     layer_on(layer3);
    159   } else {
    160     layer_off(layer3);
    161   }
    162 }
    163 
    164 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    165   switch (keycode) {
    166     case LOWER:
    167       if (record->event.pressed) {
    168           //not sure how to have keyboard check mode and set it to a variable, so my work around
    169           //uses another variable that would be set to true after the first time a reactive key is pressed.
    170         if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
    171         } else {
    172           TOG_STATUS = !TOG_STATUS;
    173           #ifdef RGBLIGHT_ENABLE
    174            rgblight_mode_noeeprom(16);
    175           #endif
    176         }
    177         layer_on(_LOWER);
    178         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
    179       } else {
    180         #ifdef RGBLIGHT_ENABLE
    181           rgblight_mode_noeeprom(RGB_current_config.mode);   // revert RGB to initial mode prior to RGB mode change
    182         #endif
    183         TOG_STATUS = false;
    184         layer_off(_LOWER);
    185         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
    186       }
    187       return false;
    188       break;
    189 
    190     case RAISE:
    191       if (record->event.pressed) {
    192         //not sure how to have keyboard check mode and set it to a variable, so my work around
    193         //uses another variable that would be set to true after the first time a reactive key is pressed.
    194         if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
    195         } else {
    196           TOG_STATUS = !TOG_STATUS;
    197           #ifdef RGBLIGHT_ENABLE
    198             rgblight_mode_noeeprom(15);
    199           #endif
    200         }
    201         layer_on(_RAISE);
    202         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
    203       } else {
    204         #ifdef RGBLIGHT_ENABLE
    205           rgblight_mode_noeeprom(RGB_current_config.mode);  // revert RGB to initial mode prior to RGB mode change
    206         #endif
    207         layer_off(_RAISE);
    208         TOG_STATUS = false;
    209         update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
    210       }
    211       return false;
    212       break;
    213 
    214     case ADJUST:
    215         if (record->event.pressed) {
    216           layer_on(_ADJUST);
    217         } else {
    218           layer_off(_ADJUST);
    219         }
    220         return false;
    221         break;
    222 
    223       //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
    224     case QK_UNDERGLOW_MODE_PREVIOUS:
    225       #if defined(RGBLIGHT_ENABLE)
    226         if (record->event.pressed) {
    227           rgblight_mode_noeeprom(RGB_current_config.mode);
    228           rgblight_step_reverse();
    229           RGB_current_config.mode = rgblight_config.mode;
    230         }
    231       return false;
    232       #endif
    233       break;
    234 
    235     case QK_UNDERGLOW_MODE_NEXT:
    236       #if defined(RGBLIGHT_ENABLE)
    237         if (record->event.pressed) {
    238           rgblight_mode_noeeprom(RGB_current_config.mode);
    239           rgblight_step();
    240           RGB_current_config.mode = rgblight_config.mode;
    241         }
    242       return false;
    243       #endif
    244       break;
    245 
    246     case EISU:
    247       if (record->event.pressed) {
    248         if(keymap_config.swap_lalt_lgui==false){
    249           register_code(KC_LNG2);
    250         }else{
    251           SEND_STRING(SS_LALT("`"));
    252         }
    253       } else {
    254         unregister_code(KC_LNG2);
    255       }
    256       return false;
    257       break;
    258     case KANA:
    259       if (record->event.pressed) {
    260         if(keymap_config.swap_lalt_lgui==false){
    261           register_code(KC_LNG1);
    262         }else{
    263          SEND_STRING(SS_LALT("`"));
    264         }
    265       } else {
    266         unregister_code(KC_LNG1);
    267       }
    268       return false;
    269       break;
    270 
    271     case RGBRST:
    272       #ifdef RGBLIGHT_ENABLE
    273         if (record->event.pressed) {
    274           eeconfig_update_rgblight_default();
    275           rgblight_enable();
    276           RGB_current_config = rgblight_config;
    277         }
    278       #endif
    279       break;
    280   }
    281   return true;
    282 }
    283 
    284 
    285 void matrix_init_user(void) {
    286     #ifdef RGBLIGHT_ENABLE
    287       rgblight_init();
    288       RGB_current_config = rgblight_config;
    289     #endif
    290 }