qmk_firmware

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

keymap.c (7813B)


      1 #include QMK_KEYBOARD_H
      2 
      3 //#include "v1.h"
      4 
      5 //Following line allows macro to read current RGB settings
      6 
      7 rgblight_config_t RGB_current_config;
      8 
      9 #define KC_KANJI KC_GRV
     10 
     11 
     12 enum Layer
     13 {
     14   _QWERTY,
     15   _DIA,
     16   _YOU,
     17   _CHIKA,
     18   _ZURA,
     19   _RUBY,
     20   _YOHANE,
     21   _RIKO,
     22   _MARI,
     23   _KANAN,
     24   _RUBY_SUB1,
     25   _RUBY_SUB2,
     26   _RUBY_SUB3,
     27   _SCHOOL_IDOL_FESTIVAL
     28 };
     29 
     30 #define SEND_DIA 100
     31 #define SEND_YOU 101
     32 #define SEND_CHIKA 102
     33 #define SEND_ZURA 103
     34 #define SEND_RUBY 104
     35 #define SEND_YOHANE 105
     36 #define SEND_RIKO 106
     37 #define SEND_MARI 107
     38 #define SEND_KANAN 108
     39 
     40 
     41 enum custom_keycodes {
     42   QWERTY = SAFE_RANGE,
     43   DIA,
     44   YOU,
     45   CHIKA,
     46   ZURA,
     47   RUBY,
     48   RUBY_SUB1,
     49   RUBY_SUB2,
     50   RUBY_SUB3,
     51   YOHANE,
     52   RIKO,
     53   MARI,
     54   KANAN,
     55   TO_SCHOOL_IDOL_FESTIVAL,
     56   RETURN_SCHOOL_IDOL_FESTIVAL
     57 };
     58 
     59 
     60 int long_tap_timer;
     61 
     62 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     63   [_QWERTY] = LAYOUT(
     64     DIA, YOU, CHIKA, ZURA, RUBY, YOHANE, RIKO, MARI, KANAN
     65   ),
     66   [_DIA] = LAYOUT(
     67     DIA, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_LSFT
     68   ),
     69 
     70   [_YOU] = LAYOUT(
     71     KC_H, YOU, KC_I, KC_J, KC_K, KC_L, KC_M, KC_N, KC_LSFT
     72   ),
     73 
     74   [_CHIKA] = LAYOUT(
     75     KC_O, KC_P, CHIKA, KC_Q, KC_R, KC_S, KC_T, KC_U, KC_LSFT
     76   ),
     77 
     78   [_ZURA] = LAYOUT(
     79     KC_V, KC_W, KC_X, ZURA, KC_Y, KC_Z, KC_M, KC_N, KC_LSFT
     80   ),
     81 
     82   //推しをたくさん押せるようにルビーちゃんには複数のレイヤー設定
     83   [_RUBY] = LAYOUT(
     84     KC_CIRC, KC_LPRN, KC_QUOT, RUBY_SUB1, RUBY, RUBY_SUB2, KC_LCBR, KC_EXLM, KC_LSFT
     85   ),
     86   [_RUBY_SUB1] = LAYOUT(
     87     KC_RCBR, KC_AT, KC_PIPE, RUBY_SUB1, RUBY, RUBY_SUB2, KC_HASH, KC_EQL, KC_LSFT
     88   ),
     89   [_RUBY_SUB2] = LAYOUT(
     90     KC_TILD, KC_DLR, KC_LBRC, RUBY_SUB1, RUBY, RUBY_SUB2, KC_PERC, KC_RBRC, KC_LSFT
     91   ),
     92   [_RUBY_SUB3] = LAYOUT(
     93     TO_SCHOOL_IDOL_FESTIVAL, KC_DLR, KC_LBRC, RUBY_SUB1, RUBY, RUBY_SUB2, KC_PERC, KC_RBRC, RETURN_SCHOOL_IDOL_FESTIVAL
     94   ),
     95 
     96   [_YOHANE] = LAYOUT(
     97     KC_0, KC_1, KC_2, KC_3, KC_4, YOHANE, KC_5, KC_6, KC_LSFT
     98   ),
     99 
    100   [_RIKO] = LAYOUT(
    101     KC_7, KC_8, KC_9, KC_PLUS, KC_MINS, KC_ASTR, RIKO, KC_SLSH, KC_LSFT
    102   ),
    103 
    104   [_MARI] = LAYOUT(
    105     KC_TAB, KC_DEL, KC_COMM, KC_SPC, KC_ENT, KC_BSPC, KC_DOT, MARI, KC_LSFT
    106   ),
    107 
    108   [_KANAN] = LAYOUT(
    109     KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, KC_BSPC, KC_AMPR, KC_KANJI, KANAN
    110   ),
    111   [_SCHOOL_IDOL_FESTIVAL] = LAYOUT(
    112     KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9
    113   ),
    114 };
    115 
    116 void check_tap_and_send_key(int MEMBER) {
    117   if (long_tap_timer < 500) {
    118     switch (MEMBER) {
    119       case SEND_DIA:
    120         SEND_STRING("KUROSAWA DIA");
    121       break;
    122       case SEND_YOU:
    123         SEND_STRING("WATANABE YOU");
    124       break;
    125       case SEND_CHIKA:
    126         SEND_STRING("TAKAMI CHIKA");
    127       break;
    128       case SEND_ZURA:
    129         SEND_STRING("KUNIKIDA HANAMARU");
    130       break;
    131       case SEND_RUBY:
    132         SEND_STRING("KUROSAWA RUBY");
    133       break;
    134       case SEND_YOHANE:
    135         SEND_STRING("TSUSHIMA YOSHIKO");
    136       break;
    137       case SEND_RIKO:
    138         SEND_STRING("SAKURAUCHI RIKO");
    139       break;
    140       case SEND_MARI:
    141         SEND_STRING("OHARA MARI");
    142       break;
    143       case SEND_KANAN:
    144         SEND_STRING("MATSUURA KANAN");
    145       break;
    146       }
    147   }
    148   long_tap_timer = 0;
    149 }
    150 
    151 int aqours_color_h[] = { 26, 340, 150,   0, 199, 220, 53, 265, 322};
    152 int aqours_color_s[] = {255, 165, 255, 255, 255, 350, 255, 255, 255};
    153 int aqours_color_v[] = {255, 255, 255, 255, 255, 255, 200, 255, 255};
    154 
    155 void LED_default_set(void) {
    156 
    157   rgblight_sethsv_at(aqours_color_h[2], aqours_color_s[2], aqours_color_v[2], 0);
    158   rgblight_sethsv_at(aqours_color_h[7], aqours_color_s[7], aqours_color_v[7], 1);
    159   rgblight_sethsv_at(aqours_color_h[1], aqours_color_s[1], aqours_color_v[1], 2);
    160   rgblight_sethsv_at(aqours_color_h[5], aqours_color_s[5], aqours_color_v[5], 3);
    161   rgblight_sethsv_at(aqours_color_h[8], aqours_color_s[8], aqours_color_v[8], 4);
    162   rgblight_sethsv_at(aqours_color_h[6], aqours_color_s[6], aqours_color_v[6], 5);
    163   rgblight_sethsv_at(aqours_color_h[0], aqours_color_s[0], aqours_color_v[0], 6);
    164   rgblight_sethsv_at(aqours_color_h[4], aqours_color_s[4], aqours_color_v[4], 7);
    165   rgblight_sethsv_at(aqours_color_h[3], aqours_color_s[3], aqours_color_v[3], 8);
    166 }
    167 
    168 
    169 void LED_layer_set(int aqours_index) {
    170   for (int c = 0; c < 9; c++) {
    171     rgblight_sethsv_at(aqours_color_h[aqours_index], aqours_color_s[aqours_index], aqours_color_v[aqours_index], c);
    172   }
    173 }
    174 
    175 
    176 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    177 
    178   switch (keycode) {
    179 
    180     case DIA:
    181       if (record->event.pressed) {
    182         long_tap_timer = 1;
    183         layer_on(_DIA);
    184         LED_layer_set(3);
    185       } else {
    186         check_tap_and_send_key(SEND_DIA);
    187         layer_off(_DIA);
    188         LED_default_set();
    189       }
    190       break;
    191 
    192     case YOU:
    193       if (record->event.pressed) {
    194         long_tap_timer = 1;
    195         layer_on(_YOU);
    196         LED_layer_set(4);
    197       } else {
    198         check_tap_and_send_key(SEND_YOU);
    199         layer_off(_YOU);
    200         LED_default_set();
    201       }
    202       break;
    203 
    204     case CHIKA:
    205       if (record->event.pressed) {
    206         long_tap_timer = 1;
    207         layer_on(_CHIKA);
    208         LED_layer_set(0);
    209       } else {
    210         check_tap_and_send_key(SEND_CHIKA);
    211         layer_off(_CHIKA);
    212         LED_default_set();
    213       }
    214       break;
    215 
    216     case ZURA:
    217       if (record->event.pressed) {
    218         long_tap_timer = 1;
    219         layer_on(_ZURA);
    220         LED_layer_set(6);
    221       } else {
    222         check_tap_and_send_key(SEND_ZURA);
    223         layer_off(_ZURA);
    224         LED_default_set();
    225       }
    226       break;
    227 
    228     case RUBY:
    229       if (record->event.pressed) {
    230         long_tap_timer = 1;
    231         layer_on(_RUBY);
    232         LED_layer_set(8);
    233       } else {
    234         check_tap_and_send_key(SEND_RUBY);
    235         layer_off(_RUBY);
    236         LED_default_set();
    237       }
    238       break;
    239     case RUBY_SUB1:
    240       if (record->event.pressed) {
    241         layer_on(_RUBY_SUB1);
    242         if (IS_LAYER_ON(_RUBY_SUB1) && IS_LAYER_ON(_RUBY_SUB2)) {
    243           layer_on(_RUBY_SUB3);
    244         } else {
    245           layer_off(_RUBY_SUB3);
    246         }
    247       } else {
    248         layer_off(_RUBY_SUB1);
    249       }
    250       break;
    251     case RUBY_SUB2:
    252       if (record->event.pressed) {
    253         layer_on(_RUBY_SUB2);
    254         if (IS_LAYER_ON(_RUBY_SUB1) && IS_LAYER_ON(_RUBY_SUB2)) {
    255           layer_on(_RUBY_SUB3);
    256         } else {
    257           layer_off(_RUBY_SUB3);
    258         }
    259       } else {
    260         layer_off(_RUBY_SUB2);
    261       }
    262       break;
    263 
    264     case YOHANE:
    265       if (record->event.pressed) {
    266         long_tap_timer = 1;
    267         layer_on(_YOHANE);
    268         LED_layer_set(5);
    269       } else {
    270         check_tap_and_send_key(SEND_YOHANE);
    271         layer_off(_YOHANE);
    272         LED_default_set();
    273       }
    274       break;
    275 
    276     case RIKO:
    277       if (record->event.pressed) {
    278         long_tap_timer = 1;
    279         layer_on(_RIKO);
    280         LED_layer_set(1);
    281       } else {
    282         check_tap_and_send_key(SEND_RIKO);
    283         layer_off(_RIKO);
    284         LED_default_set();
    285       }
    286       break;
    287 
    288     case MARI:
    289       if (record->event.pressed) {
    290         long_tap_timer = 1;
    291         layer_on(_MARI);
    292         LED_layer_set(7);
    293       } else {
    294         check_tap_and_send_key(SEND_MARI);
    295         layer_off(_MARI);
    296         LED_default_set();
    297       }
    298       break;
    299 
    300     case KANAN:
    301       if (record->event.pressed) {
    302         long_tap_timer = 1;
    303         layer_on(_KANAN);
    304         LED_layer_set(2);
    305       } else {
    306         check_tap_and_send_key(SEND_KANAN);
    307         layer_off(_KANAN);
    308         LED_default_set();
    309       }
    310       break;
    311 
    312     case TO_SCHOOL_IDOL_FESTIVAL:
    313       if (record->event.pressed) {
    314         LED_default_set();
    315         layer_on(_SCHOOL_IDOL_FESTIVAL);
    316       }
    317       break;
    318     case RETURN_SCHOOL_IDOL_FESTIVAL:
    319       if (record->event.pressed) {
    320         layer_off(_SCHOOL_IDOL_FESTIVAL);
    321       }
    322       break;
    323   }
    324 
    325   return true;
    326 }
    327 
    328 
    329 void matrix_scan_user(void) {
    330 
    331   if (long_tap_timer > 0) {
    332     long_tap_timer++;
    333   }
    334 }