qmk_firmware

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

keymap.c (12100B)


      1 /* Copyright 2024 Vaarai
      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 
     17 #include QMK_KEYBOARD_H
     18 
     19 #include "./keymap.h"
     20 #include "./tap_dances.h"
     21 
     22 /* Flag to enable/disable trackpad scroll */
     23 bool set_scrolling = false;
     24 
     25 /* Variables to store accumulated scroll values */
     26 float scroll_accumulated_h = 0;
     27 float scroll_accumulated_v = 0;
     28 
     29 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     30     [_ALPHA] = LAYOUT_split_3x6_3( /* Fire (Oxey) : https://bit.ly/layout-doc-v2 */
     31   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     32        KC_ESC,    KC_P,    KC_L,    KC_D,    KC_G,    KC_V,                         KC_Q,    KC_F,    KC_O,    KC_U, KC_COMM, KC_BSPC,
     33   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     34        KC_TAB,    KC_N,    KC_R,    KC_T,    KC_S,    KC_Y,                         KC_J,    KC_H,    KC_A,    KC_E,    KC_I, KC_LALT,
     35   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     36       KC_LCTL,    KC_X,    KC_K,    KC_C,    KC_W,    KC_Z,                         KC_B,    KC_M, KC_QUOT, KC_SCLN,  KC_DOT, KC_RCTL,
     37   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     38                         TD(TD_SFT_CAPSW), TD(TD_NAV_ACCENT), KC_SPC,   KC_ENT, TD(TD_NUM_ACCENT), TD(TD_SFT_CAPSW)
     39                                       //`--------------------------'  `--------------------------'
     40   ),
     41 
     42     [_NAV] = LAYOUT_split_3x6_3(
     43   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     44       _______, G(KC_L), XXXXXXX, CK_SCRL, C(KC_A), XXXXXXX,                      MS_BTN1, MS_BTN2, MS_BTN3, XXXXXXX, XXXXXXX,  KC_DEL,
     45   //|--------+--------+ GUI V  +--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     46       _______, C(KC_X), G(KC_V), C(KC_V), C(KC_C), C(KC_Z),                      MS_WHLU, KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, _______, 
     47   //|ALT LEFT+--------+ ALT SFT+scrnshot+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     48    A(KC_LEFT),C(KC_S),S(KC_LALT), CK_SSHT,C(KC_F), C(KC_Y),                      MS_WHLD, KC_HOME, CK_SELL, CK_SELR,  KC_END, _______,
     49   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     50                                           KC_LGUI, _______, _______,  _______,MO(_ADJUST),_______
     51                                       //`--------------------------'  `--------------------------'
     52   ),
     53 
     54     [_NUM] = LAYOUT_split_3x6_3(
     55   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     56       _______,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
     57   //|--------+-- / ---+-- { ---+-- ( ---+-- [ ---+-- - ---|                    |--- _ --+--- ] --+-- ) ---+-- } ---+-- \ ---+--------|
     58       _______, KC_SLSH, KC_LCBR, KC_LPRN, KC_LBRC, KC_MINS,                      KC_UNDS, KC_RBRC, KC_RPRN, KC_RCBR, KC_BSLS, _______,
     59   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     60       _______, XXXXXXX,  KC_GRV, KC_QUES,  KC_EQL, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
     61   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     62                                         _______,MO(_ADJUST),_______,    _______, _______, KC_RGUI
     63                                       //`--------------------------'  `--------------------------'
     64   ),
     65 
     66     [_ADJUST] = LAYOUT_split_3x6_3(
     67   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     68       QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                        KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,
     69   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     70       XXXXXXX, RM_TOGG, RM_HUEU, RM_VALU, CK_DPII, XXXXXXX,                        KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12,
     71   //|--------+--------+--------+--------+--------|--------|                    |--------+--------+--------+--------+--------+--------|
     72       XXXXXXX, RM_NEXT, RM_HUED, RM_VALD, CK_DPID, XXXXXXX,                      TO(_G0), TO(_G1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     73   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     74                                           _______, _______, _______,    _______, _______, _______
     75                                       //`--------------------------'  `--------------------------'
     76   ),
     77 
     78   /* Generic game */
     79     [_G0] = LAYOUT_split_3x6_3(
     80   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     81        KC_ESC,  KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     82   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     83       XXXXXXX, KC_LSFT,    KC_A,    KC_S,    KC_D,    KC_F,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     84   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     85       KC_LGUI, KC_LCTL,    KC_Z,    KC_X,    KC_C,    KC_V,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     86   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
     87                                            KC_SPC,  KC_SPC, XXXXXXX,    XXXXXXX, TG(_G0), XXXXXXX
     88                                       //`--------------------------'  `--------------------------'
     89   ),
     90 
     91   /* Warframe */
     92     [_G1] = LAYOUT_split_3x6_3(
     93   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     94        KC_TAB,  KC_ESC,    KC_Q,    KC_W,    KC_1,    KC_2,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     95   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     96          KC_F, KC_LSFT,    KC_A,    KC_S,    KC_D,    KC_3,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     97   //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
     98       KC_LGUI, KC_LCTL,    KC_M,    KC_Y,    KC_X,    KC_4,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
     99   //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
    100                                            KC_SPC,CK_RKJMP,    KC_5,    XXXXXXX, TG(_G1), XXXXXXX
    101                                       //`--------------------------'  `--------------------------'
    102   ),
    103 };
    104 
    105 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    106     switch (keycode) {
    107         case CK_RKJMP: /* Warframe rocket jump */
    108             if (record->event.pressed) {
    109                 SEND_STRING(SS_DOWN(X_C));
    110             } else {
    111                 SEND_STRING(SS_DOWN(X_SPC) SS_DELAY(50) SS_UP(X_C) SS_DELAY(50) SS_UP(X_SPC));
    112             }
    113             return false;
    114         case CK_DPII: /* Increase trackpad DPI */
    115             if (record->event.pressed) {
    116                 pointing_device_set_cpi(pointing_device_get_cpi()+100);
    117             }
    118             return false;
    119         case CK_DPID: /* Decrease trackpad DPI */
    120             if (record->event.pressed) {
    121                 pointing_device_set_cpi(pointing_device_get_cpi()-100);
    122             }
    123             return false;
    124         case CK_SCRL: /* Toggle set_scrolling when CK_SCRL key is pressed or released */
    125             set_scrolling = record->event.pressed;
    126             return false;
    127     }
    128     /* Accented letters */
    129     if (accent_state != ACCENT_NONE && record->event.pressed)
    130     {
    131         switch (keycode) {
    132             case KC_A:
    133                 SEND_STRING(SS_ACCENT_A_GRAVE);
    134                 break;  
    135             case KC_C:
    136                 SEND_STRING(SS_ACCENT_C_CEDIL);
    137                 break;
    138             case KC_E:
    139                 switch (accent_state) {
    140                     case ACCENT_LEFT:
    141                         SEND_STRING(SS_ACCENT_E_ACUTE); break;
    142                     case ACCENT_RIGHT:
    143                         SEND_STRING(SS_ACCENT_E_GRAVE); break;
    144                     case ACCENT_NONE:
    145                         break;
    146                 }
    147                 break;
    148             case KC_O:
    149                 SEND_STRING(SS_ACCENT_O_CIRCU);
    150                 break;
    151             case KC_U:
    152                 SEND_STRING(SS_ACCENT_U_GRAVE);
    153                 break;
    154         }
    155         accent_state = ACCENT_NONE;
    156         return false;
    157     }
    158     return true;
    159 }
    160 
    161 bool shutdown_user(bool jump_to_bootloader) {
    162     oled_clear();
    163     oled_set_cursor(0, 2);
    164     if (jump_to_bootloader) {
    165         oled_write_P(PSTR("FLASH"), false);
    166     } else {
    167         oled_write_P(PSTR("RESET"), false);
    168     }
    169     oled_render_dirty(true);
    170     return false;
    171 }
    172 
    173 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    174     return OLED_ROTATION_270;
    175 }
    176 
    177 bool oled_task_user(void) {
    178     /* Print cornia logo */
    179     cornia_render_logo();
    180 
    181     /* Print layer status */
    182     oled_set_cursor(0, 7);
    183     switch (get_highest_layer(layer_state)) {
    184         case _ALPHA:
    185             oled_write_ln("ALPHA", 0);
    186             break;
    187         case _NAV:
    188             oled_write_ln("NAV", 0);
    189             break;
    190         case _NUM:
    191             oled_write_ln("NUM", 0);
    192             break;
    193         case _ADJUST:
    194             oled_write_ln("ADJUS", 0);
    195             break;
    196         case _G0:
    197             oled_write_ln("GAME0", 0);
    198             break;
    199         case _G1:
    200             oled_write_ln("GAME1", 0);
    201             break;
    202     }
    203     return false;
    204 }
    205 
    206 report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
    207     /* Check if drag scrolling is active */
    208     if (set_scrolling) {
    209         /* Calculate and accumulate scroll values based on mouse movement and divisors */
    210         scroll_accumulated_h += (float)mouse_report.x / SCROLL_DIVISOR_H;
    211         scroll_accumulated_v += (float)mouse_report.y / SCROLL_DIVISOR_V;
    212 
    213         /* Assign integer parts of accumulated scroll values to the mouse report */
    214         mouse_report.h = (int8_t)scroll_accumulated_h;
    215         mouse_report.v = (int8_t)scroll_accumulated_v;
    216 
    217         /* Update accumulated scroll values by subtracting the integer parts */
    218         scroll_accumulated_h -= (int8_t)scroll_accumulated_h;
    219         scroll_accumulated_v -= (int8_t)scroll_accumulated_v;
    220 
    221         /* Clear the X and Y values of the mouse report */
    222         mouse_report.x = 0;
    223         mouse_report.y = 0;
    224     }
    225     return mouse_report;
    226 }