RetroArch
RetroArch copied to clipboard
[macOS] Nintendo Switch Pro Controller is non-functional over USB
First and foremost consider this:
- Only RetroArch bugs should be filed here. Not core bugs or game bugs
- This is not a forum or a help section, this is strictly developer oriented
Description
When an official Nintendo Switch Pro Controller is connected via USB, none of its inputs function in RetroArch at all.
Expected behavior
The controller should work so it can navigate RetroArch's menus and control the cores. The controller does work over USB in other programs (ES-DE, Dolphin, and PCSX2). The controller does work in RetroArch via Bluetooth and the "mfi" controller driver, but macOS Sonoma has a bug that causes it to have significant input lag over Bluetooth, so USB is preferable.
Actual behavior
When the controller is connected via USB, its autoconfig profile is loaded (assuming the "hid" controller driver is set), but nothing else happens. Whether the profile is present or not, none of the inputs will do anything in RetroArch's menu or cores. In previous nightly builds, the controller would sometimes instead send random inputs on every frame, but I cannot recreate this behavior reliably.
The controller also does not work via USB with the "mfi" controller driver, but I assume that is expected (the profile is not loaded in that case). I do not have any other controllers to test, so I do not know if the issue is specific to the Nintendo Switch Pro Controller or if this is a problem with the "hid" controller driver and/or the macOS version of RetroArch in general.
Steps to reproduce the bug
- Open RetroArch on a Mac with the controller driver set to "hid".
- Connect a Nintendo Switch Pro Controller to your Mac via USB.
- See that the autoconfig is loaded, but the controller does nothing.
Bisect Results
In stable 1.9.0 (the earliest available stable build), the controller's (non-)behavior seems to be the same as in the latest nightly. I usually use the controller via Bluetooth myself, so I have no idea if it ever worked via USB on macOS.
Version/Commit
You can find this information under Information/System Information
- RetroArch: 1.16.0 (nightly 2024-01-18)
Environment information
- OS: macOS Sonoma 14.2.1
Downloaded latest stable for MacOS metal(1.16). Nintendo Switch N64 controller via bluetooth and USB is detected, but no inputs are captured.
RetroArch: 1.16.0 (stable) OS: macOS Sonoma 14.2.1
Version: RetroArch 1.17.0 (stable Metal) OS: Sonoma 14.3.1 (Apple Silicon - Arm) Controller Driver: mfi Status: Still not working. Plugged in by USB or Bluetooth
If anyone sees this and is wondering how they could get it working (worked for me in N64 core):
- In the
Drivers
section, change controller tohid
. Restart RA. - Open
Input
>RetroPad Binds
>Port 1 Controls
. SetAnalog to Digital Type
toNone
. Now re-bind all the buttons. - Also in
Input
change theAnalog Sensitivity
to 1.4+. - Load a core, or start up a rom. Open the
Quick Menu
>Controls
>Port 1 Controls
. Check all buttons are mapped correctly (Ex: A button might be bound to B button)
Hello, I was able to solve the issue of the controller not registering while plugged in via usb-c by manually toggling off game mode. Game mode sometimes interferes with background processes that ironically are needed to play games.
Furthermore there is a setting in RetroArch which automatically toggles Game Mode on, you will want to turn it off: Settings > Input > Auto Enable 'Game Mode'.
I also found @erfg12 's suggestion regarding changing Analog to Digital type to None helpful. I had previously set it to left stick thinking this was necessary to have analog support on the Pro Controller. It's not. Instead, go to the Quick Menu while running Swanstation, go to Port 1 and change the device type from Digital Controller to Analog (DualShock).
I don't think any of these comments are related to the issue I'm having.
The controller works fine via Bluetooth (mfi driver), though I prefer using it via USB (hid driver) to avoid input lag. When connected via USB, the "Pro Controller" controller profile is loaded, but all of the inputs are completely ignored in the cores and the menu, even when attempting to remap in Settings > Input.
I did find a workaround: by launching RetroArch from Steam (which does support the Pro Controller via both Bluetooth and USB), you can use Steam Input to create a virtual Xbox 360 controller that does work via USB (hid driver).
@bitznbrewz - I don't have any NSO controllers, so I can't verify if any of them also have this issue.
@erfg12 and @sarahckohl - The issue occurs whether or not macOS's Game Mode is enabled. "Game Focus Mode" in Settings > Input is unrelated to that; that setting disables hotkeys and captures the mouse so you can directly pass keyboard and mouse inputs to certain cores, for systems like DOS and Amiga. It's not relevant for controllers.
"Analog to Digital Type" maps one of your RetroPad's analog sticks so it mimics the D-Pad, allowing it to be used in cores that normally have no analog input (e.g., most 8-bit and 16-bit systems). It doesn't affect the buttons, and it's useless if the analog inputs were non-functional to begin with, as mine were.
@DJtheMan2101 I see what you're talking about. I've added it to my list.
@warmenhoven - Thanks for looking at this. Sometimes, instead of doing nothing, the controller spams many different inputs at once, though I cannot figure how to consistently trigger this behavior consistently. Whenever this occurs, the keyboard inputs also stop working.
FWIW I can't get it to work in Dolphin either. Steam works brilliantly though. Haven't tried PCSX2 yet.
I can confirm this is happening with version 1.18.0 on macOS Sonoma. This is indirectly related to a bug I reported.
The issue was fixed by using the sdl2 controller driver, which was added to macOS by https://github.com/libretro/RetroArch/commit/b56547f9ddeed646ea8ae6c21753e471505866a0. With SDL2, the Nintendo Switch Pro Controller works as it should when connected via USB.