Repository navigation
Native Nintendo Switch 2 Controller Support #113
Replies: 9 comments 2 replies
|
They may already work over USB. The port uses SDL 3.4.18 for controllers, and SDL has a driver for the Switch 2 Pro Controller and Joy-Con 2 over USB, with rumble and motion sensors; the port takes rumble and the gyro from SDL for any controller. SDL doesn't support them over Bluetooth yet ("Nintendo Switch2 controllers not supported over Bluetooth"). Rumble is the plain two-motor kind SDL offers, not HD Rumble 2's waveforms. We don't have one to test. If you try one (plugged in, or through Switch2Connect), please tell us here whether buttons, rumble and motion work; |
|
A correction to what I wrote above, after reading SDL's driver: over USB, SDL sets these controllers up through libusb. On Linux that is the system's Over Bluetooth, SDL has no support (its driver says so), so we are going to add our own: the controllers' Bluetooth LE protocol is known (we will port it from mkw-neo, MIT), with a backend for Linux (BlueZ) and one for Windows. We don't own one of these controllers, so when there is a build to try we'll post it here; if you can test it then (pairing, buttons, sticks, gyro, rumble), that would be the check it needs. |
|
The Linux side is in |
|
Windows is in It reuses the game you already prepared with 0.1.9 (the game code has not changed since), so no new setup:
Then Settings (F1) > Controls > Switch 2 controllers (Bluetooth) on, restart the game, and hold the Sync button of the Pro Controller 2 or a Joy-Con 2 until it connects. It shows up to the game as a normal gamepad, with gyro and rumble; once paired, any button wakes it toward the PC next time. We have checked here, on Linux and on Windows, that the PC finds its Bluetooth adapter and reads devices' advertisements, but not a real controller, so this is the first time it meets one. Whatever happens, please attach |
|
Thank you so much for putting together the test build! Really appreciate it! I tested it on Windows 11, and the Switch 2 Pro Controller now works natively over Bluetooth without any additional software! Unfortunately, there's still very noticeable input lag, making it difficult to play. I suspect this might be related to Windows' Bluetooth LE polling limitations. According to [Switch2Connect](https://github.com/TommyWabg/Switch2Connect), Windows 11 is limited to around 70 Hz, whereas their ESP32-S3 bridge can achieve up to 133 Hz. Would you mind taking a quick look at Switch2Connect? Its USB/IP + Switch 2 mode allows an ESP32-S3 board to expose a virtual USB-connected Switch 2 Pro Controller to Windows, potentially avoiding the Windows Bluetooth limitation. I also tried connecting my actual Switch 2 Pro Controller directly via USB-C, but unfortunately, the test build didn't recognize it. If native wired USB support could be implemented, I imagine the virtual USB/IP Switch 2 controller might work through the same input path as well. Perhaps SDL3's existing Switch 2 HIDAPI USB support could help here? Thanks again for the test build and all your amazing work! I'd be more than happy to test further builds! |
|
Thanks again for the improvements in v0.1.10! I've tested the new build with my Switch 2 Pro Controller and both Joy-Con 2 controllers on Windows 11. I've attached the full First of all, the input lag has definitely improved! Before v0.1.10, it felt roughly twice as bad. With the latest Bluetooth LE optimizations, the controllers are now noticeably more responsive, although there's still some input lag compared to playing on the actual Switch 2. Here are the results:
So the changes have definitely made a difference! However, we're still at around 60 Hz rather than the 7.5 ms / 133 Hz achievable with an ESP32-S3 bridge. Do you think it might be possible to achieve a 7.5 ms BLE connection interval directly through Windows 11, or is this a limitation of the Windows Bluetooth stack/adapter? If 7.5 ms isn't achievable natively, perhaps [Switch2Connect](https://github.com/TommyWabg/Switch2Connect) could be an alternative. I already have the ESP32-S3 N16R8 board, which supports up to 133 Hz. Its USB/IP + Switch 2 mode exposes an emulated USB-connected Switch 2 Pro Controller to Windows. Would it be possible to support this virtual USB controller in MKW Recomp, perhaps through SDL3's existing Switch 2 HIDAPI/libusb implementation? Ideally, this could also enable support for a real Switch 2 Pro Controller connected directly via USB-C. I'd be more than happy to test either approach! Thanks again for your work and for improving the input latency so quickly! |
|
I'll be there for you right away as soon as you need me. |
|
@DamnFine815 the USB part is ready to test. The Windows package now carries an SDL built with libusb and Test build: https://github.com/adriadam10/mkw-recomp/actions/runs/43504163523 (at the bottom, Artifacts, Then, once per controller, the driver step (also in the README, "Switch 2 controllers over USB on Windows"):
The two checks it needs: the Pro Controller 2 over USB-C, and Switch2Connect's USB/IP mode (if it shows up with the same |
|
Thanks a lot for the new test build! Great news: both USB configurations work successfully! 🎉 I tested:
Both were recognized correctly, including gyro and HD rumble. I didn't need to change any drivers with Zadig, as WinUSB was already installed for Interface 1 in both cases (possibly thanks to Switch2Connect). Input latency feels very good with both methods, noticeably better than Bluetooth. I can barely feel any difference between direct USB-C and Switch2Connect USB/IP, so both seem to be working really well. I've attached the One more question: Would it be possible to provide another test build that also logs the actual controller report rate (reports per second and intervals), like the previous Bluetooth build did? The earlier BLE logs showed around 58–61 reports/s at a 15 ms connection interval. I'd love to see what we're actually getting over direct USB versus Switch2Connect USB/IP, especially whether the latter achieves its expected ~133 Hz. Thanks again for your work on this! mkw (ProController USB).log |
Uh oh!
There was an error while loading. Please reload this page.
Would it be possible to add native Nintendo Switch 2 Pro Controller and Joy-Con 2 support?
Switch2Connect already allows Switch 2 controllers to be used on Windows through USB/IP, emulating a genuine USB-connected Switch 2 Pro Controller.
Native support would be especially great for HD Rumble 2, as well as motion controls and other controller-specific features, without having to emulate an older Switch 1 or DualSense controller.
It would be awesome to have full native Switch 2 controller support in this recompilation!
Thanks for considering!
All reactions