/* Copyright 2021 Aaron VerDow * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include QMK_KEYBOARD_H // Layer declarations enum { DEF_LAYER, MOD_LAYER, }; // Tap Dance declarations enum { TD_CAR, TD_PRINT, TD_CAM_UP, TD_CAM_DN }; void camera_number(uint16_t tens, uint16_t ones) { /* Switch to a specific camera number * * I haven't been able to find official docs for this. * * To determine the number click the dropdown in UI and * count from the top. The list can change with updates. * * Shift must be held between both * presses or the combo * won't be recognized. */ register_code16(KC_LSFT); tap_code(KC_8); tap_code(KC_8); unregister_code16(KC_LSFT); tap_code(tens); tap_code(ones); tap_code(KC_ENT); } void cam_up(qk_tap_dance_state_t *state, void *user_data) { switch (state->count) { case 1: tap_code(KC_C); // tap once for next cam break; case 2: camera_number(KC_2,KC_0); // tap twice for reverse chase cam break; } } void cam_down(qk_tap_dance_state_t *state, void *user_data) { switch (state->count) { case 1: tap_code16(LSFT(KC_C)); // tap once for prev cam break; case 2: camera_number(KC_1,KC_8); // tap twice for chase cam break; } } // Tap Dance definitions qk_tap_dance_action_t tap_dance_actions[] = { [TD_CAR] = ACTION_TAP_DANCE_DOUBLE( LSFT(KC_V), // tap once for prev car LCTL(KC_V) // tap twice for my car ), [TD_PRINT] = ACTION_TAP_DANCE_DOUBLE( LCTL(LALT(LSFT(KC_S))), // tap once for iRacing screenshot (must be enabled in options) LGUI(KC_PSCR) // tap twice for Windows print screen and save to file ), [TD_CAM_UP] = ACTION_TAP_DANCE_FN(cam_up), [TD_CAM_DN] = ACTION_TAP_DANCE_FN(cam_down) }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [DEF_LAYER] = LAYOUT_ortho_6x4( /* Base */ TD(TD_CAM_UP), // next cam, double tap for reverse chase cam KC_V, // next car LSFT(KC_P3), // next lap LCTL(KC_P3), // next inc TD(TD_CAM_DN), // prev cam, double tap for chase cam TD(TD_CAR), // prev car, double tap for my car LSFT(KC_P1), // prev lap LCTL(KC_P1), // prev inc LSFT(KC_P4), // rewind KC_P5, // play/pause LSFT(KC_P6), // fast forward KC_P8, // slow mo KC_P4, // prev frame KC_W, // up KC_P6, // next frame TD(TD_PRINT), // print screen KC_A, // left KC_S, // down KC_D, // right LALT(KC_K), // toggle click and drag ui elements (in car) KC_LCTL, // ctrl KC_LALT, // alt LCTL(KC_F12), // camera tool LT(MOD_LAYER, KC_SPACE) // press once for UI, hold for MOD layer ), [MOD_LAYER] = LAYOUT_ortho_6x4( /* Base */ KC_B, // next sub cam KC_PGUP, // next driver cam LCTL(KC_P6), // next session KC_P7, // start LSFT(KC_B), // prev sub cam KC_PGDOWN, // prev driver cam LCTL(KC_P4), // prev session KC_P1, // end KC_RBRC, // FOV up KC_EQL, // step factor up _______, _______, KC_LBRC, // FOV down KC_MINS, // step factor down _______, _______, _______, _______, _______, _______, _______, LALT(KC_M), // cycle aim RALT(KC_ENTER), // fullscreen (unreliable) _______ ), };