qmk_firmware

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

keymap.c (12856B)


      1 /* Copyright 2020 Takeshi Nishio
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 #include QMK_KEYBOARD_H
     17 #include "keymap_japanese.h"
     18 
     19 // Defines names for use in layer keycodes and the keymap
     20 enum layer_number {
     21     _MAC = 0,
     22     _WIN,
     23     _NUM,
     24     _LOWER,
     25     _RAISE,
     26     _NUM_RAISE,
     27     _ADJUST
     28 };
     29 
     30 // Tap Dance
     31 enum tap_dances{
     32     TD_LSFT_CAPS = 0,
     33     TD_ESC_NUM,
     34 };
     35 
     36 // Tap Dance state
     37 enum {
     38     SINGLE_TAP = 1,
     39     DOUBLE_TAP,
     40     TRIPLE_TAP,
     41     TAP_HOLD,
     42 };
     43 
     44 // Declare the functions to be used with your tap dance key(s)
     45 // Function associated with all tap dances
     46 uint8_t cur_dance(tap_dance_state_t *state);
     47 // Functions associated with individual tap dances
     48 void ql_finished(tap_dance_state_t *state, void *user_data);
     49 void ql_reset(tap_dance_state_t *state, void *user_data);
     50 
     51 // Tap Dance definitions
     52 tap_dance_action_t tap_dance_actions[] = {
     53     [TD_LSFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS),
     54     [TD_ESC_NUM] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ql_finished, ql_reset),
     55 };
     56 
     57 uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
     58     switch (keycode) {
     59         case TD(TD_ESC_NUM):
     60             return 275;
     61         default:
     62             return TAPPING_TERM;
     63     }
     64 }
     65 
     66 // Key Macro
     67 #define ESC_NUM TD(TD_ESC_NUM)
     68 #define S_CAP   TD(TD_LSFT_CAPS)
     69 #define SP_RAI  LT(_RAISE, KC_SPC)
     70 #define SP_NRAI LT(_NUM_RAISE, KC_SPC)
     71 #define SP_SFT  MT(MOD_LSFT, KC_SPC)
     72 #define S_BSLS  RSFT_T(JP_BSLS)
     73 #define C_SLSH  RCTL_T(JP_SLSH)
     74 #define CT_E    LCTL(KC_E)
     75 #define CT_A    LCTL(KC_A)
     76 #define ALT_GRV LALT(KC_GRV)
     77 #define LOWER   MO(_LOWER)
     78 #define NUM     TG(_NUM)
     79 #define MAC     PDF(_MAC)
     80 #define WIN     PDF(_WIN)
     81 
     82 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     83     [_MAC] = LAYOUT_jp(
     84         ESC_NUM,KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   JP_MINS,KC_BSPC,JP_CIRC,JP_YEN,
     85         KC_TAB,     KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,               JP_AT,  JP_LBRC,
     86         KC_LCTL,    KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   JP_SCLN, KC_ENT,    JP_COLN,JP_RBRC,
     87         S_CAP,          KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   JP_COMM,JP_DOT, C_SLSH, S_BSLS, KC_UP,  LOWER,
     88         KC_MUTE,KC_LALT,KC_LGUI,KC_LNG2,       SP_SFT,         SP_RAI,        KC_LNG1,KC_RGUI,KC_RALT,KC_LEFT,KC_DOWN,KC_RGHT
     89     ),
     90     [_WIN] = LAYOUT_jp(
     91         _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
     92         _______,    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,            _______,_______,
     93         _______,    _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,    _______,_______,
     94         _______,        _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
     95         _______,KC_LGUI,KC_LALT,JP_MHEN,        _______,        _______,        JP_HENK,JP_KANA,KC_APP, _______,_______,_______
     96     ),
     97     [_NUM] = LAYOUT_jp(
     98         _______,_______,_______,_______,_______,_______,_______,XXXXXXX,KC_PSLS,KC_PSLS,KC_PAST,_______,_______,_______,_______,
     99         _______,    _______,_______,_______,_______,_______,_______,KC_P7,  KC_P8,  KC_P9,  KC_PPLS,            _______,_______,
    100         _______,    _______,_______,_______,_______,_______,_______,KC_P4,  KC_P5,  KC_P6,  XXXXXXX,_______,    _______,_______,
    101         _______,        _______,_______,_______,_______,_______,_______,KC_P1,  KC_P2,  KC_P3,  KC_PENT,_______,_______,_______,
    102         _______,_______,_______,_______,        _______,        SP_NRAI,        KC_P0,  KC_PDOT,_______,_______,_______,_______
    103     ),
    104     [_LOWER] = LAYOUT_jp(
    105         KC_PAUS,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_INS, KC_DEL,
    106         KC_PSCR,    _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,            KC_END, KC_VOLU,
    107         _______,    _______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_LEFT,KC_RGHT,    _______,KC_VOLD,
    108         _______,        _______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,KC_DOWN,_______,KC_PGUP,_______,
    109         _______,_______,_______,_______,        _______,        _______,         _______,_______,_______,KC_HOME,KC_PGDN,KC_END
    110     ),
    111     [_RAISE] = LAYOUT_jp(
    112         KC_PAUS,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_INS, KC_DEL,
    113         KC_PSCR,    _______,_______,CT_E,   _______,_______,_______,_______,_______,_______,KC_PGUP,            _______,_______,
    114         _______,    CT_A,   _______,KC_DEL, KC_RGHT,KC_ESC, KC_LEFT,KC_DOWN,KC_UP,  KC_RGHT,_______,_______,    _______,_______,
    115         _______,        _______,_______,_______,_______,KC_LEFT,KC_PGDN,KC_ENT, _______,KC_MRWD,KC_MFFD,_______,KC_PGUP,_______,
    116         _______,_______,_______,_______,        _______,        _______,        _______,_______,_______,KC_HOME,KC_PGDN,KC_END
    117     ),
    118     [_NUM_RAISE] = LAYOUT_jp(
    119         KC_ESC, KC_1,   KC_2,   KC_3,   KC_4,   KC_5,   KC_6,   KC_7,   KC_8,   KC_9,   KC_0,   JP_MINS,KC_BSPC,JP_CIRC,JP_YEN,
    120         KC_TAB,     KC_Q,   KC_W,   KC_E,   KC_R,   KC_T,   KC_Y,   KC_U,   KC_I,   KC_O,   KC_P,               JP_AT,  JP_LBRC,
    121         KC_LCTL,    KC_A,   KC_S,   KC_D,   KC_F,   KC_G,   KC_H,   KC_J,   KC_K,   KC_L,   JP_SCLN, KC_ENT,    JP_COLN,JP_RBRC,
    122         S_CAP,          KC_Z,   KC_X,   KC_C,   KC_V,   KC_B,   KC_N,   KC_M,   JP_COMM,JP_DOT, C_SLSH, S_BSLS, KC_UP,  _______,
    123         _______,_______,_______,_______,        _______,        _______,        _______,_______,_______,_______,_______,_______
    124     ),
    125     [_ADJUST] = LAYOUT_jp(
    126         _______,UG_HUEU,UG_SATU,UG_VALU,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
    127         _______,    _______,WIN,    _______,QK_BOOT,_______,UG_HUEU,UG_SATU,UG_VALU,_______,UG_PREV,            _______,_______,
    128         _______,    _______,_______,_______,_______,_______,UG_HUED,UG_SATD,UG_VALD,UG_TOGG,UG_NEXT,_______,    _______,_______,
    129         _______,        _______,_______,_______,_______,_______,NUM,     MAC,   _______,_______,_______,_______,_______,_______,
    130         _______,_______,_______,_______,        _______,        _______,        _______,_______,_______,_______,_______,_______
    131     )
    132 };
    133 
    134 #if defined(AUDIO_ENABLE) && defined(MUSIC_MAP)
    135 const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_jp(
    136     51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
    137     38,   39, 40, 41, 42, 43, 44, 45, 46, 47, 48,       49, 50,
    138     25,   26, 27, 28, 29, 30, 31, 32, 33, 34, 35,  36,  37, 38,
    139     11,     12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
    140     0,   1,  2,  3,      4,      5,      6,  7,  8,  9, 10, 11
    141 );
    142 #endif
    143 
    144 //------------------------------------------------------------------------------
    145 // RGB Light settings
    146 #ifdef RGBLIGHT_LAYERS
    147 
    148 // for Default layer (= Base layer)
    149 const rgblight_segment_t PROGMEM my_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    150     {0, 1, HSV_WHITE}
    151 );
    152 const rgblight_segment_t PROGMEM my_win_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    153     {0, 1, HSV_BLUE}
    154 );
    155 const rgblight_segment_t PROGMEM my_num_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    156     {0, 1, HSV_YELLOW}
    157 );
    158 
    159 // for temporal layer
    160 const rgblight_segment_t PROGMEM my_caps_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    161     {1, 1, HSV_MAGENTA}
    162 );
    163 
    164 const rgblight_segment_t PROGMEM my_lower_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    165     {1, 1, HSV_GREEN}
    166 );
    167 
    168 const rgblight_segment_t PROGMEM my_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    169     {1, 1, HSV_CYAN}
    170 );
    171 
    172 const rgblight_segment_t PROGMEM my_num_raise_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    173     {1, 1, HSV_GOLD}
    174 );
    175 
    176 const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS(
    177     {1, 1, HSV_RED}
    178 );
    179 
    180 // Define the array of layers. Later layers take precedence
    181 const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
    182     my_mac_layer,
    183     my_win_layer,
    184     my_num_layer,
    185     my_caps_layer,
    186     my_lower_layer,
    187     my_raise_layer,
    188     my_num_raise_layer,
    189     my_adjust_layer
    190 );
    191 
    192 void keyboard_post_init_user(void) {
    193     // Enable the LED layers
    194     rgblight_layers = my_rgb_layers;
    195 }
    196 
    197 // Enabling and disabling lighting layers
    198 layer_state_t layer_state_set_user(layer_state_t state) {
    199      state = update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
    200 
    201    rgblight_set_layer_state(2, layer_state_cmp(state, _NUM));
    202     rgblight_set_layer_state(4, layer_state_cmp(state, _LOWER));
    203     rgblight_set_layer_state(5, layer_state_cmp(state, _RAISE));
    204     rgblight_set_layer_state(6, layer_state_cmp(state, _NUM_RAISE));
    205     rgblight_set_layer_state(7, layer_state_cmp(state, _ADJUST));
    206 
    207     return state;
    208 }
    209 
    210 // Enabling and disabling lighting layers for default layer
    211 layer_state_t default_layer_state_set_user(layer_state_t state) {
    212     rgblight_set_layer_state(0, layer_state_cmp(state, _MAC));
    213     rgblight_set_layer_state(1, layer_state_cmp(state, _WIN));
    214     rgblight_set_layer_state(2, layer_state_cmp(state, _NUM));
    215 
    216     return state;
    217 }
    218 
    219 bool led_update_user(led_t led_state) {
    220     rgblight_set_layer_state(3, led_state.caps_lock);
    221     return true;
    222 }
    223 #endif
    224 
    225 
    226 //------------------------------------------------------------------------------
    227 // Rotary Encoder
    228 bool encoder_update_user(uint8_t index, bool clockwise) {
    229     if (index == 0) { /* First encoder, Right side */
    230         if (clockwise) {
    231             tap_code(KC_VOLD);
    232         } else {
    233             tap_code(KC_VOLU);
    234         }
    235     }
    236     if (index == 1) { /* Second encoder, Left side */
    237         if (clockwise) {
    238             tap_code(KC_VOLD);
    239         } else {
    240             tap_code(KC_VOLU);
    241         }
    242     }
    243     return true;
    244 }
    245 
    246 
    247 //------------------------------------------------------------------------------
    248 // Tap Dance function
    249 
    250 
    251 typedef struct {
    252     bool is_press_action;
    253     uint8_t state;
    254 } tap;
    255 
    256 // Determine the current tap dance state
    257 uint8_t cur_dance(tap_dance_state_t *state) {
    258     if (state->count == 1) {
    259         if (!state->pressed) {
    260             return SINGLE_TAP;
    261         } else {
    262             return TAP_HOLD;
    263         }
    264     } else if (state->count == 2) {
    265         if (!state->pressed) {
    266             return DOUBLE_TAP;
    267         } else {
    268             return TAP_HOLD;
    269         }
    270     } else if (state->count == 3) {
    271         if (!state->pressed) {
    272             return TRIPLE_TAP;
    273         } else {
    274             return TAP_HOLD;
    275         }
    276     } else {
    277         return 8; // Magic number. At some point this method will expand to work for more presses
    278     }
    279 }
    280 
    281 // Initialize tap structure associated with example tap dance key
    282 static tap ql_tap_state = {
    283     .is_press_action = true,
    284     .state = 0
    285 };
    286 
    287 // Functions that control what our tap dance key does
    288 void ql_finished(tap_dance_state_t *state, void *user_data) {
    289     ql_tap_state.state = cur_dance(state);
    290     switch(TAP_DANCE_KEYCODE(state)) {
    291         case TD(TD_ESC_NUM): // ESC key action
    292             switch (ql_tap_state.state) {
    293                 case SINGLE_TAP:
    294                 case DOUBLE_TAP:
    295                     // ESC
    296                     tap_code(KC_ESC);
    297                     break;
    298                 case TAP_HOLD:
    299                     // temporal layer change
    300                     layer_on(_NUM);
    301                     break;
    302                 case TRIPLE_TAP:
    303                     // toggle layer
    304                     // Check to see if the layer is already set
    305                     if (layer_state_is(_NUM)) {
    306                         // If already set, then switch it off
    307                         layer_off(_NUM);
    308                     } else {
    309                         // If not already set, then switch the layer on
    310                         layer_on(_NUM);
    311                     }
    312                     break;
    313             }
    314             break;
    315     }
    316 }
    317 
    318 void ql_reset(tap_dance_state_t *state, void *user_data) {
    319     switch(TAP_DANCE_KEYCODE(state)) {
    320         case TD(TD_ESC_NUM):
    321             // If the key was held down and now is released then switch off the layer
    322             if (ql_tap_state.state == TAP_HOLD) {
    323                 layer_off(_NUM);
    324             }
    325             ql_tap_state.state = 0;
    326             break;
    327     }
    328 }