Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
The main server is currently down. We are running on a backup server, so editing and search functionality are temporarily disabled. Please check back in a few hours.
Revision as of 11:06, 5 April 2023 by HydeWing (talk | contribs) (Created page with "{{Infobox Switch Homebrews |title=JoyControl-KB |image=joycontrolkbswitch.png |description=Emulate Nintendo Switch Controllers over Bluetooth |author=QueenLinuxGlitch |lastupdated=2020/08/12 |type=PC Utilities |version=2020 |license=GPL-3.0 |download=https://dlhb.gamebrew.org/switchhomebrews/joycontrolkbswitch.7z |website=https://github.com/QueenLinuxGlitch/joycontrol-kb |source=https://github.com/QueenLinuxGlitch/joycontrol-kb |donation= }} {{#seo: |title=Switch Homebr...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
JoyControl-KB
File:Joycontrolkbswitch.png
General
AuthorQueenLinuxGlitch
TypePC Utilities
Version2020
LicenseGPL-3.0
Last Updated2020/08/12
Links
Download
Website
Source

The joycontrol-kb is a Python3 program that enables the emulation of Nintendo Switch Controllers over Bluetooth, while also supporting Amiibo, and has been successfully tested on Debian and 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-python libhidapi-hidraw0 and keyboard packages

sudo apt install python3-dbus libhidapi-hidraw0
sudo pip3 install keyboard

Arch Linux Derivatives: Install the hidapi and bluez-utils-compat(AUR) packages

  • 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

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.

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.

Resources

External links

Advertising: