forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Keymap] Add new IIDX gamepad keymap for Synth Labs Solo (qmk#18741)
Co-authored-by: Drashna Jaelre <drashna@live.com>
- Loading branch information
Showing
5 changed files
with
93 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# Gamepad Synth Labs Solo Layout | ||
|
||
This keymap is intended for usage as a IIDX controller. The rotary encoder is mapped as a virtual 1-axis joystick. | ||
This keymap is intended for usage as a generic gamepad. The rotary encoder is mapped as a virtual 1-axis joystick. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// Copyright 2022 Aaron Hong (@hongaaronc) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include QMK_KEYBOARD_H | ||
|
||
#include "joystick.h" | ||
|
||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
[0] = LAYOUT_all( | ||
JS_BUTTON0,JS_BUTTON1,JS_BUTTON2,JS_BUTTON3,JS_BUTTON4,JS_BUTTON5,JS_BUTTON6, | ||
JS_BUTTON8, MO(1), JS_BUTTON7, | ||
JS_BUTTON0,JS_BUTTON1,JS_BUTTON2,JS_BUTTON3,JS_BUTTON4,JS_BUTTON5,JS_BUTTON6 | ||
), | ||
[1] = LAYOUT_all( | ||
JS_BUTTON9,JS_BUTTON0,JS_BUTTON10, _______,JS_BUTTON11,JS_BUTTON1,JS_BUTTON12, | ||
_______, _______, _______, | ||
JS_BUTTON10,JS_BUTTON0,JS_BUTTON9, _______,JS_BUTTON11,JS_BUTTON1,JS_BUTTON12 | ||
), | ||
}; | ||
|
||
#if defined(ENCODER_MAP_ENABLE) | ||
/* The amount of time the encoder has to remain stationary, before unregistering encoder bindings */ | ||
uint16_t encoder_stationary_release_delay_ms = 25; | ||
|
||
uint16_t encoder_last_update_time = 0; | ||
|
||
enum { | ||
CCW_JOYSTICK_BUTTON = 8, | ||
CW_JOYSTICK_BUTTON = 7, | ||
}; | ||
|
||
enum { | ||
CCW_MACRO = SAFE_RANGE, | ||
CW_MACRO, | ||
}; | ||
|
||
bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||
switch (keycode) { | ||
case CCW_MACRO: | ||
unregister_joystick_button(CW_JOYSTICK_BUTTON); | ||
register_joystick_button(CCW_JOYSTICK_BUTTON); | ||
encoder_last_update_time = timer_read(); /* Update the last time that the encoder was detected as rotated */ | ||
return false; | ||
case CW_MACRO: | ||
unregister_joystick_button(CCW_JOYSTICK_BUTTON); | ||
register_joystick_button(CW_JOYSTICK_BUTTON); | ||
encoder_last_update_time = timer_read(); /* Update the last time that the encoder was detected as rotated */ | ||
return false; | ||
default: | ||
return true; | ||
} | ||
} | ||
|
||
void housekeeping_task_user(void) { | ||
uint16_t current_time = timer_read(); | ||
uint16_t elapsed_time_since_last_update = current_time - encoder_last_update_time; | ||
|
||
/* If an encoder has been stationary for encoder_stationary_release_delay_ms, then unregister the joystick buttons for both directions */ | ||
if (elapsed_time_since_last_update >= encoder_stationary_release_delay_ms) { | ||
unregister_joystick_button(CCW_JOYSTICK_BUTTON); | ||
unregister_joystick_button(CW_JOYSTICK_BUTTON); | ||
} | ||
} | ||
|
||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { | ||
[0] = { ENCODER_CCW_CW( | ||
CCW_MACRO, | ||
CW_MACRO | ||
) }, | ||
[1] = { ENCODER_CCW_CW(_______, _______) }, | ||
}; | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# IIDX Synth Labs Solo Layout | ||
|
||
This keymap is intended for usage as a gamepad for [beatmania IIDX INFINITAS](https://p.eagate.573.jp/game/infinitas/2/index.html). | ||
|
||
This keycap follows the default keymapping for the game, shown here: | ||
|
||
 | ||
|
||
The face buttons correspond directly to ボタン 1 - ボタン 7 | ||
|
||
Turning the knob clockwise corresponds to スクラッチ-右回転 | ||
Turning the knob counter-clockwise corresponds to スクラッチ-左回転 | ||
|
||
While holding down the knob button | ||
* The bottom row of face buttons corresponds to ボタン E1 - ボタン E4 | ||
* The top-left and top-right face buttons correspond to ボタン 1 and ボタン 2, for adjustment of in-game scroll speed |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
JOYSTICK_ENABLE = yes | ||
DEBOUNCE_TYPE = sym_eager_pk | ||
ENCODER_MAP_ENABLE = yes |