Is there a way to get gyro working with the Switch Pro Controller or similar controllers?
I tried using the sdl2 driver. Enabled motion controls in cores that support it, and in the RetroArch input settings. But it just won’t work.
Is there a way to get gyro working with the Switch Pro Controller or similar controllers?
I tried using the sdl2 driver. Enabled motion controls in cores that support it, and in the RetroArch input settings. But it just won’t work.
You did try with nightly build ? Please provide some log.
If it is detected you should get in the log for udev controller driver
[INFO] [udev] Pad #0: found sensor at /dev/input/event25 (accel=yes, gyro=yes).
[INFO] [udev] Pad #0 (/dev/input/event24) supports force feedback.
[INFO] [udev] Pad #0 (/dev/input/event24) supports 16 force feedback effects.
I am not sure we have some log for SDL about gyro but it is supported.
Thank you.
I managed to get gyro motions working with the DS4/DualShock4 (standard PS4 controller). I did had to switch to the sdl2 driver for the controller in order for it to work.
Also, on Windows, no luck getting gyro working with previous RA versions -anything below 1.22.x (still using an older version except for testing/debugging purposes) which might push me to migrate to the latest RA version.
What’s neat is that in conjunction with DS4windows you can, in theory, configure it/make a controller profile to use gyro for stuff that didn’t use gyro originally. Anything that’s analogue basically ex: analogue sticks. Or configure it so that it acts like a mouse device for games that used a trackball for example. So you could play something like Arkanoid or similar games via gyro motion. Not sure it would play well but it could be done. Or better yet: games like Space Harriers that controlled via flight sticks.
I’m using the nightly v1.22.2 (Git 82c5e3b).
[INFO] RetroArch 1.22.2 (Git 82c5e3b)
[INFO] === Build =======================================
[INFO] CPU Model Name: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
[INFO] Capabilities: MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4 SSE42 AES AVX AVX2
[INFO] Version: 1.22.2
[INFO] Git: 82c5e3b
[INFO] Built: Mar 23 2026
[INFO] =================================================
[INFO] [Input] Found input driver: "sdl2".
[INFO] [Environ] SET_PIXEL_FORMAT: RGB565.
[INFO] [Core] Version of libretro API: 1, Compiled against API: 1
[INFO] [Core] Geometry: 320x240, Aspect: 1.333, FPS: 60.01, Sample rate: 48000.00 Hz.
[INFO] [Video] Set video size to: fullscreen.
[INFO] [GLCore] Found GL context: "wgl".
[INFO] [GLCore] Detecting screen resolution: 1920x1080.
[INFO] [WGL] Extensions: WGL_EXT_depth_float WGL_ARB_buffer_region WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_pixel_format WGL_ARB_pbuffer WGL_EXT_extensions_string WGL_EXT_swap_control WGL_ARB_multisample WGL_ARB_pixel_format_float WGL_ARB_framebuffer_sRGB WGL_ARB_create_context WGL_ARB_create_context_profile WGL_EXT_pixel_format_packed_float WGL_EXT_create_context_es_profile WGL_EXT_create_context_es2_profile WGL_NV_DX_interop WGL_NV_DX_interop2 WGL_ARB_robustness_application_isolation WGL_ARB_robustness_share_group_isolation WGL_ARB_create_context_robustness WGL_ARB_context_flush_control
[INFO] [GLCore] Vendor: Intel, Renderer: Intel(R) UHD Graphics 620.
[INFO] [GLCore] Version: 4.6.0 - Build 31.0.101.2127.
[INFO] [GLCore] Using resolution 1920x1080.
[WARN] [SDL] Couldn't open haptic device of the joypad #0: Haptic: There are 0 haptic devices available.
[INFO] [SDL] Falling back to joystick rumble.
[INFO] [Input] Found joypad driver: "sdl2".
[INFO] [GLCore] Using Slang shader backend.
[DEBUG] [Autoconf] Config files scanned: driver "sdl2", name "Nintendo Switch Pro Controller" (057e/2009), phys "", affinity 50.
[INFO] [Autoconf] Nintendo Switch Pro Controller configured in port 1.
[INFO] [GLCore] Loading stock shader.
[INFO] [GLCore] Building pass #0 (N/A)
[INFO] [GLCore] Not using frame history.
[INFO] [GLCore] Not using framebuffer feedback.
[INFO] [Video] Found display server: "win32".
[INFO] [Audio] Set audio input rate to: 48000.00 Hz.
[DEBUG] [XAudio2] Requesting 32-bit 2-channel client with WAVE_FORMAT_IEEE_FLOAT samples at 48000Hz 64ms.
[INFO] [XAudio2] Requesting 64 ms latency, using 64 ms latency.
[INFO] [Audio] Started synchronous audio driver.
[INFO] [Microphone] Initialized microphone driver.
[INFO] [Display] Found display driver: "glcore".
[INFO] [Playlist] Loading favorites file: "R:\RETRO\RetroArch\playlists\builtin\content_favorites.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_image_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_music_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_video_history.lpl".
[WARN] [SDL] Couldn't open haptic device of the joypad #0: Haptic: There are 0 haptic devices available.
[INFO] [SDL] Falling back to joystick rumble.
[DEBUG] [Autoconf] Config files scanned: driver "sdl2", name "Nintendo Switch Pro Controller" (057e/2009), phys "", affinity 50.
[INFO] [Autoconf] Nintendo Switch Pro Controller configured in port 1.
[DEBUG] [Autoconf] First unconfigured / unreserved player is 1.
[DEBUG] [Autoconf] Device "Nintendo Switch Pro Controller" (57e:2009) is not reserved for any player slot.
[DEBUG] [Autoconf] First unconfigured / unreserved player is 1.
[DEBUG] [Autoconf] Device "Nintendo Switch Pro Controller" (57e:2009) is not reserved for any player slot.
Also, while at it, I want to report that vibration does not work with some controllers in dinput mode like 8Bitdo Pro 2. Although it works in xinput and switch modes on the same controller:
[INFO] RetroArch 1.22.2 (Git 82c5e3b)
[INFO] === Build =======================================
[INFO] CPU Model Name: Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
[INFO] Capabilities: MMX MMXEXT SSE SSE2 SSE3 SSSE3 SSE4 SSE42 AES AVX AVX2
[INFO] Version: 1.22.2
[INFO] Git: 82c5e3b
[INFO] Built: Mar 23 2026
[INFO] =================================================
[INFO] [Input] Found input driver: "dinput".
[INFO] [Environ] SET_PIXEL_FORMAT: RGB565.
[INFO] [Core] Version of libretro API: 1, Compiled against API: 1
[INFO] [Core] Geometry: 320x240, Aspect: 1.333, FPS: 60.01, Sample rate: 48000.00 Hz.
[INFO] [Video] Set video size to: fullscreen.
[INFO] [GLCore] Found GL context: "wgl".
[INFO] [GLCore] Detecting screen resolution: 1920x1080.
[INFO] [WGL] Extensions: WGL_EXT_depth_float WGL_ARB_buffer_region WGL_ARB_extensions_string WGL_ARB_make_current_read WGL_ARB_pixel_format WGL_ARB_pbuffer WGL_EXT_extensions_string WGL_EXT_swap_control WGL_ARB_multisample WGL_ARB_pixel_format_float WGL_ARB_framebuffer_sRGB WGL_ARB_create_context WGL_ARB_create_context_profile WGL_EXT_pixel_format_packed_float WGL_EXT_create_context_es_profile WGL_EXT_create_context_es2_profile WGL_NV_DX_interop WGL_NV_DX_interop2 WGL_ARB_robustness_application_isolation WGL_ARB_robustness_share_group_isolation WGL_ARB_create_context_robustness WGL_ARB_context_flush_control
[INFO] [GLCore] Vendor: Intel, Renderer: Intel(R) UHD Graphics 620.
[INFO] [GLCore] Version: 4.6.0 - Build 31.0.101.2127.
[INFO] [GLCore] Using resolution 1920x1080.
[WARN] [DInput] Strong rumble unavailable.
[WARN] [DInput] Weak rumble unavailable.
[INFO] [Input] Found joypad driver: "dinput".
[INFO] [GLCore] Using Slang shader backend.
[DEBUG] [Autoconf] Config files scanned: driver "dinput", name "Bluetooth Wireless Controller" (2dc8/6006), phys "", affinity 30.
[INFO] [Autoconf] 8BitDo Pro 2 configured in port 1.
[INFO] [GLCore] Loading stock shader.
[INFO] [GLCore] Building pass #0 (N/A)
[INFO] [GLCore] Not using frame history.
[INFO] [GLCore] Not using framebuffer feedback.
[INFO] [Video] Found display server: "win32".
[INFO] [Audio] Set audio input rate to: 48000.00 Hz.
[DEBUG] [XAudio2] Requesting 32-bit 2-channel client with WAVE_FORMAT_IEEE_FLOAT samples at 48000Hz 64ms.
[INFO] [XAudio2] Requesting 64 ms latency, using 64 ms latency.
[INFO] [Audio] Started synchronous audio driver.
[INFO] [Microphone] Initialized microphone driver.
[INFO] [Display] Found display driver: "glcore".
[INFO] [Playlist] Loading favorites file: "R:\RETRO\RetroArch\playlists\builtin\content_favorites.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_image_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_music_history.lpl".
[INFO] [Playlist] Loading history file: "R:\RETRO\RetroArch\playlists\builtin\content_video_history.lpl".
[DEBUG] [Autoconf] First unconfigured / unreserved player is 1.
[DEBUG] [Autoconf] Device "Bluetooth Wireless Controller" (2dc8:6006) is not reserved for any player slot.
[DEBUG] [Audio] Stopped audio driver "xaudio".
[INFO] [Core] Unloading core...
[INFO] [Core] Unloading core symbols...
[DEBUG] [Video] Does not have enough samples for monitor refresh rate estimation. Requires to run for at least 4096 frames.
On your PC,does the controller’s gyro works for you with other applications or emulators?
The easiest one to test on PC imo is mGBA standalone. After mapping all the buttons on the 1st run, try the gyro controls with WarioWare: Twisted!. It should work pretty much right out of the gate if the controller/OS/drivers etc supports it.
If gyro works for you on mGBA standalone it should work with the mGBA core as well. The new 3DS azahar core (necessary if you want to play WarioWare Gold) also has gyro support. I read the newer up-to-date Dolphin core might have gyro support (for Wii controls) but I haven’t tested myself so can’t confirm.
edit: Also -in order to test, with DS4windows you can get a reading in the program of the gyro values in real time like so:
Apparently DS4windows works with other non-PS4 controllers including the Switch Pro according to their compatibility list
.
Yes my friend, I went through all of these before and gyro behaves well everywhere except in RetroArch. That’s why I opened this thread, I thought maybe it is not yet supported in windows or that I have something wrong in my setup. But it seems we’re in bug territory.