This has been a small nightmare š
So, I own an SN30pro gamepad mostly used to play Nintendo Switch. It works wonders, EXCEPT when running in multiplayer mode alongside other controllers, where I get a totally noticeable input lag
The Update Path
Updating the firmware is performed officially via the 8bitdo firmware updater, which has versions for Windows and Mac, but not for us, the “always a minority” Linux users.
So, we’ll go the LVFS fwupd tool path, since 8bit do is listed there , with a nice official statement of:
All game pads are supported
Fair enough, looking for the SN30pro Firmware list, the lag is something that has received a set of fixes since 2018 (when I bought this controller). So, let’s see which version I do have installed, and where can I update to.
Connecting to Linux
First I need the fwupdmgr
tool to be able to list this damned controller. Which does not seem to work by default, since fwupdmgr get-devices
does not list it.
The controller supports 4 different modes: Switch, Android, Mac and Windows. I tried using Android since it seemed the closer one to Linux :-D, it was a good choice. The manual describes the different modes and how to enable them, for Android mode:
- press
START+B
at the same time - Led1 starts to blink
Since I’m doing this wired, this is the only thing needed. While the led is blinking I plug the controller via USB to the laptop and run fwupdmgr get-devices
.
And here it is:
8Bitdo SF30 Pro DeviceId: 73ef80b60058b4f18549921520bfd94eaf18710a ... Summary: A redesigned classic game controller Plugin: ebitdo Flags: updatable|needs-bootloader|registered Vendor: 8Bitdo VendorId: USB:0x2DC8 Version: 1,28 Icon: input-gaming Created: 2020-01-22
It’s at version 1,28. Which is not even listed in the firmware list of LVFS š
Getting the update
fwupdmgr
is an easy-to-use tool, to get the latest list of updates you only have to type fwupdmgr get-updates
, and that should be it…
> sudo fwupdmgr get-updates Not compatible with org.freedesktop.fwupd version 1.1.2, requires >= 1.1.3 cannot handle firmware requirement not-child
Apparently, not for me. I should update the fwupdmgr
tool to a newer version. Since I don’t know what other parts of ubuntu might be using this I’m not to keen on going through that hassle right now. So what I’ll do is simply download the firmware file manually from the LVFS website and feed it directly to fwupdmgr
.
Updating
With the file downloaded, and a quick look at fwupdmgr -h
, is clear that we can perform the installation from a cabinet file (which is already downloaded).
> fwupdmgr install 8Bitdo-SF30_Pro-SN30_Pro-1.33.cab <deviceID> Unknown [***************************************] Specified firmware is older than installed '1.33 < 1,28'
What a beautiful way of failing, probably because of the comma. Need to signal fwupdmgr
that we don’t care about versions. The flag to use for this case is --allow-older
> fwupdmgr install 8Bitdo-SF30_Pro-SN30_Pro-1.33.cab <deviceID> --allow-older Decompressing⦠[***************************************] Authenticating⦠[***************************************] Device 8Bitdo SF30 Pro needs to manually be put in update mode: Unplug the controller, hold down L1 + R1 + START until the red LED on top of the controller is flashing and then reconnect the controller.
Ok, another stone in the road. The controller needs to be in update mode. On the first couple of tries it seems impossible to follow the provided advice. Pressing L1+R1+START
simply turns off all lights after a while.
The trick is to do L1 then L2 then START then hold
. Note the thens
in between, meaning do it in succession, not at the same time.
After that, the SN30pro flashes the top led, and finally, accepts the firmware.
> sudo fwupdmgr install 8Bitdo-SF30_Pro-SN30_Pro-1.33.cab <deviceID> --allow-older Decompressing⦠[***************************************] Authenticating⦠[***************************************] Installing on 8Bitdo ā¦[ - ] Restarting device⦠[***************************************] failed to wait for replug after update: device <deviceID> did not come back
And I’m not surprised it finished with a failure. But exit code was 0 so it’s not too scary.
Checking the version again shows the newest and shiniest firmware version 1.33.
8Bitdo SF30 Pro DeviceId: 73ef80b60058b4f18549921520bfd94eaf18710a ... Serial: SF30 Pro Summary: A redesigned classic game controller Plugin: ebitdo Flags: updatable|needs-bootloader|registered Vendor: 8Bitdo VendorId: USB:0x2DC8 Version: 1,33 Icon: input-gaming Created: 2020-01-22
And with this, it is done. Now to test it.
The testing
To test it I simply boot the worst offender in my Nintendo Switch (Rocket league) and start a local multiplayer with 2 joycons and the new firmware of the SN30pro.
After some battling the sync of the controller beacause SN30pro refused to connect, the three controllers were online and the match started, noticing no lag at all.
So, yes. The firmware update seems to fix my main issue with it! š Never expected to be updating a controller though.