Joycontrol-kb Switch
From GameBrew
More actions
| JoyControl-KB | |
|---|---|
| General | |
| Author | QueenLinuxGlitch |
| Type | PC Utilities |
| Version | 2020 |
| License | GPL-3.0 |
| Last Updated | 2020/08/12 |
| Links | |
| Download | |
| Website | |
| Source | |
Emulate Nintendo Switch Controllers over Bluetooth w/ Amiibo Support through Python3.
Tested on Debian, Generic Hardware.
Features
- Emulation of JOYCON_R, JOYCON_L and PRO_CONTROLLER.
- button commands
- stick state
- nfc data
- controller keybinding
- controller macro recording, playback, deleting
Installation
Install dependencies:
- Deb-systems:
- Install the
dbus-pythonlibhidapi-hidraw0andkeyboardpackages sudo apt install python3-dbus libhidapi-hidraw0sudo pip3 install keyboard
- Install the
- Arch Linux Derivatives:
- Install the
hidapiandbluez-utils-compat(AUR) packages.
- Install the
Clone the repository and install the joycontrol package to get missing dependencies:
- (Note: Controller script needs super user rights, so python packages must be installed as root.)
- In the joycontrol folder run:
sudo pip3 install .
Disable the bluez "input" plugin, see #8.
User guide
Command line interface example
Run the script:
sudo python3 run_controller_cli.py PRO_CONTROLLER- This will create a PRO_CONTROLLER instance waiting for the Switch to connect.
Open the "Change Grip/Order" menu of the Switch:
- The Switch only pairs with new controllers in the "Change Grip/Order" menu.
- Note: If you already connected an emulated controller once, you can use the reconnect option of the script (-r "<Switch Bluetooth Mac address>"). This does not require the "Change Grip/Order" menu to be opened. You can find out a paired mac address using the "bluetoothctl" system command.
After connecting, a command line interface is opened. Note: Press <enter> if you don't see a prompt.
- Call "help" to see a list of available commands.
If you call "test_buttons", the emulated controller automatically navigates to the "Test Controller Buttons" menu.
CLI Readme
While running the cli, call "help" for an explanation of available commands.
Usage:
run_controller_cli.py <controller> [--device_id | -d <bluetooth_adapter_id>]
[--spi_flash <spi_flash_memory_file>]
[--reconnect_bt_addr | -r <console_bluetooth_address>]
[--log | -l <communication_log_file>]
[--nfc <nfc_data_file>]
run_controller_cli.py -h | --help
Arguments:
controller Choose which controller to emulate. Either "JOYCON_R", "JOYCON_L" or "PRO_CONTROLLER"
Options:
-d --device_id <bluetooth_adapter_id> ID of the bluetooth adapter. Integer matching the digit in the hci* notation
(e.g. hci0, hci1, ...) or Bluetooth mac address of the adapter in string
notation (e.g. "FF:FF:FF:FF:FF:FF").
Note: Selection of adapters may not work if the bluez "input" plugin is
enabled.
--spi_flash <spi_flash_memory_file> Memory dump of a real Switch controller. Required for joystick emulation.
Allows displaying of JoyCon colors.
Memory dumps can be created using the dump_spi_flash.py script.
-r --reconnect_bt_addr <console_bluetooth_address> Previously connected Switch console Bluetooth address in string
notation (e.g. "FF:FF:FF:FF:FF:FF") for reconnection.
Does not require the "Change Grip/Order" menu to be opened,
-l --log <communication_log_file> Write hid communication (input reports and output reports) to a file.
--nfc <nfc_data_file> Sets the nfc data of the controller to a given nfc dump upon initial
connection.
Resources
Known issues
- Some bluetooth adapters seem to cause disconnects for reasons unknown, try to use an usb adapter instead.
- Incompatibility with Bluetooth "input" plugin requires a bluetooth restart, see #8.
- It seems like the Switch is slower processing incoming messages while in the "Change Grip/Order" menu. This causes flooding of packets and makes pairing somewhat inconsistent. Not sure yet what exactly a real controller does to prevent that. A workaround is to use the reconnect option after a controller was paired once, so that opening of the "Change Grip/Order" menu is not required.