More actions
(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...") |
No edit summary |
||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Infobox Switch Homebrews | {{Infobox Switch Homebrews | ||
|title= | |title=joycontrol-kb | ||
|image= | |image=joycontrolkbnx.png | ||
|description=Emulate Nintendo Switch Controllers over Bluetooth | |description=Emulate Nintendo Switch Controllers over Bluetooth. | ||
|author=QueenLinuxGlitch | |author=QueenLinuxGlitch | ||
|lastupdated=2020/08/12 | |lastupdated=2020/08/12 | ||
|type= | |type=Remote Play and Streaming | ||
|version=2020 | |version=2020 | ||
|license=GPL-3.0 | |license=GPL-3.0 | ||
|download=https://dlhb.gamebrew.org/switchhomebrews/ | |download=https://dlhb.gamebrew.org/switchhomebrews/joycontrolkbnx.7z | ||
|website=https://github.com/QueenLinuxGlitch/joycontrol-kb | |website=https://github.com/QueenLinuxGlitch/joycontrol-kb | ||
|source=https://github.com/QueenLinuxGlitch/joycontrol-kb | |source=https://github.com/QueenLinuxGlitch/joycontrol-kb | ||
|donation= | |donation= | ||
}} | }} | ||
Emulate Nintendo Switch Controllers over Bluetooth w/ Amiibo Support through Python3. Based on [[Joycontrol-ms Switch|joycontrol-ms]]. | |||
| | Tested on Debian, Generic Hardware. | ||
== Features == | == Features == | ||
Emulation of JOYCON_R, JOYCON_L and PRO_CONTROLLER. | * Emulation of JOYCON_R, JOYCON_L and PRO_CONTROLLER. | ||
** button commands | |||
* button commands | ** stick state | ||
* stick state | ** nfc data | ||
* nfc data | ** controller keybinding | ||
* controller keybinding | ** controller macro recording, playback, deleting | ||
* controller macro recording, playback, deleting | |||
== Installation == | == Installation == | ||
Install dependencies: | |||
* Deb-systems: | |||
Deb-systems: Install the <code>dbus-python</code> <code>libhidapi-hidraw0</code> and <code>keyboard</code> packages | ** Install the <code>dbus-python</code> <code>libhidapi-hidraw0</code> and <code>keyboard</code> packages | ||
** <code>sudo apt install python3-dbus libhidapi-hidraw0</code> | |||
< | ** <code>sudo pip3 install keyboard</code> | ||
* Arch Linux Derivatives: | |||
< | ** Install the <code>hidapi</code> and <code>bluez-utils-compat</code>(AUR) packages. | ||
Arch Linux Derivatives: Install the <code>hidapi</code> and <code>bluez-utils-compat</code>(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: <code>sudo pip3 install .</code> | |||
Disable the bluez "input" plugin, see [https://github.com/mart1nro/joycontrol/issues/8 #8]. | |||
==User guide== | |||
=== Command line interface example === | |||
Run the script: | |||
* <code>sudo python3 run_controller_cli.py PRO_CONTROLLER</code> | |||
* 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. | * If you call "test_buttons", the emulated controller automatically navigates to the "Test Controller Buttons" menu. | ||
== CLI Readme == | === CLI Readme === | ||
<pre>While running the cli, call "help" for an explanation of available commands. | <pre> | ||
While running the cli, call "help" for an explanation of available commands. | |||
Usage: | Usage: | ||
Line 98: | Line 87: | ||
--nfc <nfc_data_file> Sets the nfc data of the controller to a given nfc dump upon initial | --nfc <nfc_data_file> Sets the nfc data of the controller to a given nfc dump upon initial | ||
connection.</pre> | connection. | ||
</pre> | |||
=== Resources === | |||
*[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Nintendo_Switch_Reverse_Engineering.] | |||
*[https://github.com/timmeh87/switchnotes/blob/master/console_pairing_session console_pairing_session.] | |||
==Known | ==Known issues== | ||
* Some bluetooth adapters seem to cause disconnects for reasons unknown, try to use an usb adapter instead | * 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 [https://github.com/mart1nro/joycontrol/issues/8 #8] | * Incompatibility with Bluetooth "input" plugin requires a bluetooth restart, see [https://github.com/mart1nro/joycontrol/issues/8 #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. | * 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. | ||
== External links == | == External links == | ||
* | * GitHub - https://github.com/QueenLinuxGlitch/joycontrol-kb |
Latest revision as of 03:05, 20 October 2024
joycontrol-kb | |
---|---|
General | |
Author | QueenLinuxGlitch |
Type | Remote Play and Streaming |
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. Based on joycontrol-ms.
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-python
libhidapi-hidraw0
andkeyboard
packages sudo apt install python3-dbus libhidapi-hidraw0
sudo pip3 install keyboard
- Install the
- Arch Linux Derivatives:
- Install the
hidapi
andbluez-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.