qmk_firmware

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

keymap.c (13456B)


      1 /*
      2  * ----------------------------------------------------------------------------
      3  * "THE BEER-WARE LICENSE" (Revision 42):
      4  * <https://github.com/Legonut> wrote this file.  As long as you retain this
      5  * notice you can do whatever you want with this stuff. If we meet some day, and
      6  * you think this stuff is worth it, you can buy me a beer in return. David Rauseo
      7  * ----------------------------------------------------------------------------
      8  */
      9 
     10 #include QMK_KEYBOARD_H
     11 #include "common_oled.h"
     12 
     13 enum keymap_layers {
     14     _QWERTY,
     15     _COLEMAK,
     16     _GAME,
     17     _FN,
     18     _ADJUST,
     19     _VIA1,
     20     _VIA2,
     21     _VIA3
     22 };
     23 
     24 enum keymap_keycodes {
     25     // Disables touch processing
     26     TCH_TOG = SAFE_RANGE,
     27     MENU_BTN,
     28     MENU_UP,
     29     MENU_DN
     30 };
     31 
     32 // Default Layers
     33 #define QWERTY   DF(_QWERTY)
     34 #define COLEMAK  DF(_COLEMAK)
     35 #define GAME     DF(_GAME)
     36 
     37 // Momentary Layers
     38 #define FN       MO(_FN)
     39 #define ADJUST   MO(_ADJUST)
     40 
     41 #define FN_CAPS  LT(_FN, KC_CAPS)
     42 #define FN_ESC   LT(_FN, KC_ESC)
     43 
     44 /* This keyboard is enabled with an RGB Menu Control system.
     45 This functionality is enabled, but still requires a little configuration based on your exact setup.
     46 The RGB Menu will appear on the Right Half's OLED and can be controlled by the MENU keycodes:
     47 MENU_BTN - Triggers a button action for the menu
     48 MENU_UP - Triggers an increase action for the menu
     49 MENU_DN - Triggers a decrease action for the menu
     50 
     51 To finish configuration for your board, you will want to change the default keycodes for an encoder on the right half.
     52 Encoder press keycode should be set to MENU_BTN, Clockwise should be MENU_UP, and Counter Clockwise should be MENU_DN.
     53 Depending on where you add an encoder to the right half will determin in the default keymap where you should put those keycodes.
     54 */
     55 
     56 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     57     /* QWERTY
     58      * .--------------------------------------------------------------.  .--------------------------------------------------------------.
     59      * | `~/ESC | 1      | 2      | 3      | 4      | 5      |   -    |  |    =   | 6      | 7      | 8      | 9      | 0      | Bckspc |
     60      * |--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     61      * | Tab    | Q      | W      | E      | R      | T      |   [    |  |    ]   | Y      | U      | I      | O      | P      | \      |
     62      * |--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     63      * | FN/Caps| A      | S      | D      | F      | G      |   (    |  |    )   | H      | J      | K      | L      | :      | '      |
     64      * |--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     65      * | Shift  | Z      | X      | C      | V      | B      |   {    |  |    }   | N      | M      | ,      | .      | /      |Shft/Ent|
     66      * |--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     67      * | Ctrl   | Win    | Alt    | RGBTOG | Adjust | Space  | Bksp   |  | Enter  | Space  | Left   | Down   | Up     | Right  | Ctrl   |
     68      * '--------+--------+--------+--------+--------+--------+--------'  '--------+--------+--------+--------+--------+--------+--------'
     69      * |--------+--------+--------+--------+--------.                                      .--------+--------+--------+--------+--------|
     70      * | VolDn  | VolUp  | Next   | Play   | Prev   | Touch Encoder          Touch Encoder | RgbHuI | RgbHuD | RgbMdD | RgbTog | RgbMdI |
     71      * '--------+--------+--------+--------+--------'                                      '--------+--------+--------+--------+--------'
     72      */
     73     [_QWERTY] = LAYOUT(
     74         QK_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_MINS,   KC_EQL,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
     75         KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_LBRC,   KC_RBRC,   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_BSLS,
     76         FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_LPRN,   KC_RPRN,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
     77         KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_LCBR,   KC_RCBR,   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, SC_SENT,
     78         KC_LCTL, KC_LGUI, KC_LALT, RM_TOGG, ADJUST,  KC_SPC,  KC_DEL,    KC_ENT,    KC_SPC,  KC_LEFT, KC_DOWN, KC_UP,   KC_RIGHT,KC_RCTL,
     79 
     80         KC_VOLD, KC_VOLU, KC_MNXT, KC_MPLY, KC_MPRV,                                        RM_HUEU, RM_HUED, RM_PREV, RM_TOGG, RM_NEXT
     81     ),
     82 
     83     [_COLEMAK] = LAYOUT(
     84         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
     85         _______, KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    _______, _______, KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, _______,
     86         _______, KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    _______, _______, KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    _______,
     87         _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    _______, _______, KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______,
     88         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
     89 
     90         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
     91     ),
     92 
     93     [_GAME] = LAYOUT(
     94         _______, _______, _______, _______, _______, _______, KC_F1,   KC_F5,   _______, _______, _______, _______, _______, _______,
     95         _______, KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_F2,   KC_F6,   KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    _______,
     96         _______, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_F3,   KC_F7,   KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, _______,
     97         _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_F4,   KC_F8,   KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, _______,
     98         _______, KC_NO,   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
     99 
    100         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    101     ),
    102 
    103     [_FN] = LAYOUT(
    104         _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,  KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______,
    105         _______, KC_HOME, KC_UP,   KC_END,  _______, _______, _______, _______, _______, KC_HOME, KC_UP,   KC_END,  KC_PSCR, KC_PGUP,
    106         _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS,  KC_PGDN,
    107         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    108         _______, _______, _______, TCH_TOG, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU,
    109 
    110         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    111     ),
    112 
    113     [_ADJUST] = LAYOUT(
    114         _______, KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F11,  KC_F12,  KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  _______,
    115         _______, RM_SATD, RM_VALU, RM_SATU, QK_BOOT, _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______,
    116         _______, RM_HUED, RM_VALD, RM_HUEU, _______, _______, _______, _______, _______, KC_P4,   KC_P5,   KC_P6,   _______, _______,
    117         _______, RM_SPDD, _______, RM_SPDU, _______, _______, _______, _______, _______, KC_P1,   KC_P2,   KC_P3,   _______, GAME,
    118         _______, RM_PREV, _______, RM_NEXT, _______, _______, _______, _______, _______, KC_P0,   KC_PDOT, KC_NUM,  QWERTY, COLEMAK,
    119 
    120         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    121     ),
    122 
    123     [_VIA1] = LAYOUT(
    124         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    125         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    126         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    127         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    128         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    129 
    130         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    131     ),
    132 
    133     [_VIA2] = LAYOUT(
    134         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    135         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    136         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    137         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    138         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    139 
    140         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    141     ),
    142 
    143     [_VIA3] = LAYOUT(
    144         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    145         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    146         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    147         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    148         _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    149 
    150         _______, _______, _______, _______, _______,                                     _______, _______, _______, _______, _______
    151     ),
    152 };
    153 
    154 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    155     switch (keycode)
    156     {
    157         case MENU_BTN:
    158             if (record->event.pressed) {
    159                 rgb_menu_selection();
    160             }
    161             return false;
    162         case MENU_UP:
    163             if (record->event.pressed) {
    164                 rgb_menu_action(true);
    165             }
    166             return false;
    167         case MENU_DN:
    168             if (record->event.pressed) {
    169                 rgb_menu_action(false);
    170             }
    171             return false;
    172         case TCH_TOG:
    173             if (record->event.pressed) {
    174                 touch_encoder_toggle();
    175             }
    176             return false;  // Skip all further processing of this key
    177         default:
    178             return true;
    179     }
    180 }
    181 
    182 static void render_layer(void) {
    183     // Host Keyboard Layer Status
    184     oled_write_P(PSTR("Layer"), false);
    185     switch (get_highest_layer(layer_state)) {
    186         case _QWERTY:
    187             oled_write_ln_P(PSTR("QWRTY"), false);
    188             break;
    189         case _COLEMAK:
    190             oled_write_ln_P(PSTR("Colemk"), false);
    191             break;
    192         case _GAME:
    193             oled_write_ln_P(PSTR("Game  "), false);
    194             break;
    195         case _FN:
    196             oled_write_ln_P(PSTR("FN   "), false);
    197             break;
    198         case _ADJUST:
    199             oled_write_ln_P(PSTR("Adjst"), false);
    200             break;
    201         default:
    202             oled_write_ln_P(PSTR("Undef"), false);
    203     }
    204 }
    205 
    206 static void render_leds(void)
    207 {
    208     // Host Keyboard LED Status
    209     led_t led_state = host_keyboard_led_state();
    210     oled_write_P(led_state.num_lock ? PSTR("NUMLK")     : PSTR("     "), false);
    211     oled_write_P(led_state.caps_lock ? PSTR("CAPLK")    : PSTR("     "), false);
    212     oled_write_P(led_state.scroll_lock ? PSTR("SCRLK")  : PSTR("     "), false);
    213 }
    214 
    215 static void render_touch(void)
    216 {
    217     // Host Touch LED Status
    218     oled_write_P(touch_encoder_is_on() ? PSTR("TOUCH")  : PSTR("     "), false);
    219     oled_write_P(touch_encoder_is_calibrating() ? PSTR("CLBRT")  : PSTR("     "), false);
    220 }
    221 
    222 bool oled_task_user(void) {
    223     if (is_keyboard_left()) {
    224         render_icon();
    225         oled_write_P(PSTR("     "), false);
    226         render_layer();
    227         oled_write_P(PSTR("     "), false);
    228         render_leds();
    229         oled_write_P(PSTR("     "), false);
    230         render_touch();
    231     }
    232     else {
    233         render_icon();
    234         oled_write_P(PSTR("     "), false);
    235         render_rgb_menu();
    236     }
    237     return false;
    238 }
    239 
    240 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    241     return OLED_ROTATION_270;
    242 }
    243 
    244 #ifdef ENCODER_MAP_ENABLE
    245 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
    246     [0] =       { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
    247     [1 ... 7] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
    248 };
    249 #endif