Skip to content

8bitdo SN30 Pro+ controller issues on macos #12126

Closed
@maia-s

Description

@maia-s
Contributor

I'm using an 8bitdo SN30 Pro+ controller on macos with the testcontroller app. These are all wireless bluetooth mode

In PS4 mode, all the buttons and axes are mapped correctly, but pressing the left trigger rumbles the right side of the controller and vice versa.

2025-01-29 23:06:39.183 testcontroller[1022:10344] +[IMKClient subclass]: chose IMKClient_Modern
2025-01-29 23:06:39.183 testcontroller[1022:10344] +[IMKInputSession subclass]: chose IMKInputSession_Modern
2025-01-29 23:06:50.912 testcontroller[1022:10344] Added HIDAPI device 'PS4 Controller' VID 0x054c, PID 0x05c4, bluetooth 1, version 256, serial E4:17:D8:24:D6:B5, interface -1, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0x0001, usage 0x0005, path = DevSrvsID:4294973009, driver = SDL_JOYSTICK_HIDAPI_PS4 (ENABLED)
2025-01-29 23:06:50.913 testcontroller[1022:10344] Gamepad 4 added
2025-01-29 23:06:50.913 testcontroller[1022:10344] Opened gamepad PS4 Controller, guid 05008fe54c050000c405000000016800, DevSrvsID:4294973009
2025-01-29 23:06:50.913 testcontroller[1022:10344] Rumble supported
2025-01-29 23:06:50.913 testcontroller[1022:10344] Player index: 0
2025-01-29 23:06:50.913 testcontroller[1022:10344] Enabling accelerometer at 250.00 Hz
2025-01-29 23:06:50.942 testcontroller[1022:10344] Enabling gyro at 250.00 Hz
2025-01-29 23:06:50.942 testcontroller[1022:10344] Mapping: 05008fe54c050000c405000000016800,*,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,touchpad:b11,crc:e58f,platform:macOS,

In 8bitdo mode, there's no rumble and the X/Y and A/B buttons are swapped

2025-01-29 23:18:28.737 testcontroller[1022:10344] Added HIDAPI device '8BitDo SN30 Pro+' VID 0x2dc8, PID 0x6102, bluetooth 1, version 256, serial E4:17:D8:24:0D:6E, interface -1, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0x0001, usage 0x0005, path = DevSrvsID:4294975033, driver = NONE (DISABLED)
2025-01-29 23:18:28.810 testcontroller[1022:10344] Gamepad 8 added
2025-01-29 23:18:28.810 testcontroller[1022:10344] Opened gamepad 8BitDo SN30 Pro+, guid 0500003eac050000040000003b8a6d04
2025-01-29 23:18:28.810 testcontroller[1022:10344] Player index: 0
2025-01-29 23:18:28.810 testcontroller[1022:10344] Mapping: 0500003eac050000040000003b8a6d04,8BitDo SN30 Pro+,a:b0,b:b1,x:b5,y:b6,back:b4,guide:b2,start:b3,leftstick:b12,rightstick:b15,leftshoulder:b11,rightshoulder:b14,dpup:b10,dpdown:b7,dpleft:b8,dpright:b9,leftx:a0,lefty:a1~,rightx:a2,righty:a3~,lefttrigger:b13,righttrigger:b16,crc:3e00,platform:macOS,

In Switch mode, the left stick starts stuck up/left and the right stick starts stuck down/right. The sticks work after moving them in a circle. Everything's mapped correctly but both triggers rumble on both sides and a bit weaker than in PS4 mode (may be a limitation of this mode?)

2025-01-29 23:24:36.861 testcontroller[1022:10344] Added HIDAPI device 'Nintendo Switch Pro Controller' VID 0x057e, PID 0x2009, bluetooth 1, version 1, serial e4-17-d8-24-29-63, interface -1, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0x0001, usage 0x0005, path = DevSrvsID:4294975332, driver = SDL_JOYSTICK_HIDAPI_SWITCH (ENABLED)
2025-01-29 23:24:37.387 testcontroller[1022:10344] Gamepad 11 added
2025-01-29 23:24:37.387 testcontroller[1022:10344] Opened gamepad Nintendo Switch Pro Controller, guid 0500d71f7e0500000920000001006803, DevSrvsID:4294975332
2025-01-29 23:24:37.387 testcontroller[1022:10344] Has player LED
2025-01-29 23:24:37.387 testcontroller[1022:10344] Rumble supported
2025-01-29 23:24:37.387 testcontroller[1022:10344] Player index: 0
2025-01-29 23:24:37.387 testcontroller[1022:10344] Enabling accelerometer at 200.00 Hz
2025-01-29 23:24:37.684 testcontroller[1022:10344] Enabling gyro at 200.00 Hz
2025-01-29 23:24:37.684 testcontroller[1022:10344] Mapping: 0500d71f7e0500000920000001006803,*,a:b0,b:b1,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,misc1:b11,crc:1fd7,platform:macOS,

In Xbox mode, everything works and is mapped correctly, including rumble

Activity

changed the title [-]8bitdo controller issues on macos[/-] [+]8bitdo SN30 Pro+ controller issues on macos[/+] on Jan 29, 2025
maia-s

maia-s commented on Jan 29, 2025

@maia-s
ContributorAuthor

Wired mode works almost the same, except the rumble isn't swapped in PS4 mode and the axes don't start stuck in switch mode. In 8bitdo mode A/B and X/Y are still swapped

maia-s

maia-s commented on Jan 29, 2025

@maia-s
ContributorAuthor

The testcontroller app stopped responding after I tested the wired modes

added this to the 3.2.2 milestone on Jan 29, 2025
maia-s

maia-s commented on Jan 29, 2025

@maia-s
ContributorAuthor

Also, the accelerometer and gyro show as available in PS4 mode but stay at 0. They seem to work in Switch mode. According to 8bitdo, only Switch mode has motion controls.

maia-s

maia-s commented on Jan 30, 2025

@maia-s
ContributorAuthor

I made a mapping to fix the swapped face buttons in 8bitdo mode. It's the same mapping for bluetooth and wired.

0500003eac050000040000003b8a6d04,8BitDo SN30 Pro+,crc:3e00,platform:macOS,a:b1,b:b0,back:b4,dpdown:b7,dpleft:b8,dpright:b9,dpup:b10,guide:b2,leftshoulder:b11,leftstick:b12,lefttrigger:b13,leftx:a0,lefty:a1~,rightshoulder:b14,rightstick:b15,righttrigger:b16,rightx:a2,righty:a3~,start:b3,x:b6,y:b5,

I'd make a PR, but I'm not sure how to add this to the gamepad db. All the ids for macos end in 0000, and this one doesn't. It looks different from the other 8bitdo ids in general, too

I don't know how to fix the flipped rumble in PS4 mode.

As a side note, I had to use testcontroller to make this mapping, because Steam says there's no gamepad detected and won't let me map it. (It works in the other modes)

modified the milestones: 3.2.2, 3.2.4, 3.2.6 on Feb 2, 2025
maia-s

maia-s commented on Feb 18, 2025

@maia-s
ContributorAuthor

In switch mode, the accelerometer and gyro inputs appear to be swapped, too

self-assigned this
on Feb 22, 2025
slouken

slouken commented on Feb 26, 2025

@slouken
Collaborator

Okay, I took a look at this.

Wired:
Switch mode: It's working fine for me, gyro and accelerometer are correct, I added a fix for stick calibration.
PS4 mode: Everything is mapped correctly and rumble works. The controller doesn't send sensor inputs in PS4 mode.
DInput mode: I added a mapping to fix swapped buttons. The controller doesn't rumble in DInput mode.

Bluetooth:
Switch mode: It's working fine for me, gyro and accelerometer are correct, I added a fix for stick calibration.
PS4 mode: Everything is mapped correctly. The controller doesn't send sensor inputs in PS4 mode. Rumble is swapped as you noted, this appears to be a bug in the controller firmware.
DInput mode: I added a mapping to fix swapped buttons. The controller doesn't rumble in DInput mode.

slouken

slouken commented on Feb 26, 2025

@slouken
Collaborator

With the stick calibration fix and DInput mode mapping, I think we've fixed everything that can be done in SDL.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @slouken@maia-s

      Issue actions

        8bitdo SN30 Pro+ controller issues on macos · Issue #12126 · libsdl-org/SDL