Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Keymap] Add new IIDX gamepad keymap for Synth Labs Solo #18741

Merged
merged 7 commits into from
Oct 26, 2022
Merged
2 changes: 1 addition & 1 deletion keyboards/synthlabs/solo/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,6 @@
#define BOOTMAGIC_LITE_ROW 1
#define BOOTMAGIC_LITE_COLUMN 1

#define JOYSTICK_BUTTON_COUNT 8
#define JOYSTICK_BUTTON_COUNT 13
#define JOYSTICK_AXES_COUNT 1
#define JOYSTICK_AXES_RESOLUTION 16
2 changes: 1 addition & 1 deletion keyboards/synthlabs/solo/keymaps/gamepad/readme.md
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.
72 changes: 72 additions & 0 deletions keyboards/synthlabs/solo/keymaps/iidx/keymap.c
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
16 changes: 16 additions & 0 deletions keyboards/synthlabs/solo/keymaps/iidx/readme.md
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:

![Default Keymapping Settings Screen](https://i.imgur.com/Va48FnZ.png)

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
3 changes: 3 additions & 0 deletions keyboards/synthlabs/solo/keymaps/iidx/rules.mk
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