- Notifications
You must be signed in to change notification settings - Fork495
8BitDo Controllers
Your 8BitDo controller can be detected in different modes (Windows, MacOS, Android, Switch, etc) with different key combinations. Check its manual onthe support site to learn how yours work.
If you have issues with the directions, begin by consulting theexisting 8bitdo issues.
You need to connect your controller via USB cable (not just Bluetooth). In my case, the controller was detected correctly in Android mode (turn it on with B + Start):
$ fwupdmgr get-devices8Bitdo SN30 Pro DeviceId: 71413822e87deae707da948bd4b7e537af463c19 Guid: 1bf5ac96-99ce-54f2-abf4-7eabe6802533 Guid: 81becceb-f87b-5c66-b30a-b0958043d65d Guid: 5bc60e62-f461-58bd-91b6-7de3392f8bd6 Guid: 043c7673-bd45-5e2e-b8b9-c22df2dfec2a Guid: b02f1319-c1c4-54f4-b7f2-5bb3552f6a9e Summary: A redesigned classic game controller Plugin: ebitdo Flags: updatable|supported|needs-bootloader|registered Vendor: 8Bitdo VendorId: USB:0x2DC8 Version: 1.26 Icon: input-gaming Created: 2018-09-27
To update to the latest firmware version, runfwupdmgr get-updates
. This will tell you about new firmware versions which you can install by runningfwupdmgr update
.
The command line will give you instructions to start your controller in "Update mode". You need to turn the controller off (usually press Start for a few seconds), then pressL + R + Start
for a few seconds until the red led on top of the controller starts blinking.
fwupdmgr
begins a countdown when it prompts you to restart your controller in update mode, and then it'll stop. So you need to plug your controller in update mode before the delay is over. It used to be 20 seconds, butwas recently bumped to 40 seconds. So it depends on which version of fwupdmgr you're running, but try to take less than 20 seconds to be sure.
You can either do this via the command line with fwupdmgr or if its available in your system, use the GNOME Software application too.
The SN30 Pro enumerates as the following USB VID/PID values:
Mode Number | Power On Combination | Mode | VID:PID | Notes | USB Info |
---|---|---|---|---|---|
N/A | L +R +START | Boot loader | 2DC8:5750 | Used to update firmware. | Manufacturer: 8BitdoJoy Product: 8Bitdo Serial Number: BootMod |
1 | B +START | D-Input | 2DC8:6001 | Also known as "Android" mode. | Manufacturer: 8Bitdo SN30 Pro Product: 8Bitdo SN30 Pro |
2 | X +START | Windows | 045E:028E | Boot controller in Windows (Xbox) mode. Device will usexpad driver and emulate an Xbox 360 controller. | Manufacturer: 8Bitdo SF30 Pro Product: Controller Serial Number: 157F8F8 |
3 | A +START | Mac | 054C:05C4 | Also known as "Mac OS" mode. | Manufacturer: Sony Computer Entertainment Product: Wireless Controller |
4 | Y +START | WiiMote | 057E:2009 | Boot controller in mode compatible with Nintendo Wii and Switch. | Manufacturer: Nintendo Co., Ltd. Product: Pro Controller SerialNumber: 000000000001 |
The SNES30 is based on the GigaDeviceGD32F103C8T6 microcontroller and is "compatible" with the STM32 series of microcontrollers. This is thesame microcontroller also used in the 8Bitdo "Retro Receiver".
The SNES30 controller can operate in one of two states, the "normal" state or the boot loader. When booted in the "normal" state the SNES30 can enter a number of operational modes, presenting various configurations for compatibility with different gaming platforms. It is in the "normal" state wherefwupdmgr
can detect the SNES30 as an 8bitdo device and seek out available updates. In firmware versions 4.0 and below, updates can only be detected in some operational modes.
Forfwupdmgr
to correctly identify the device and seek out available updates, the USB vendor id/product id (VID/PID) must be recognized byfwupdmgr
as an 8bitdo device (2DC8:AB20
). When SNES30 has entered the boot loader it's VID/PID is changed to0483:5750
(STMicroelectronics) and it will be operating as anhiddev
type device. Thus, the update process requiresfwupdmgr
first detecting the 8bitdo device then entering the 8bitdo device's boot loader to allowfwupdmgr
to upgrade the firmware.
To validate the current VID/PID perform one of the following:
$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub...Bus 001 Device 102: ID 2dc8:ab20
$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub...Bus 001 Device 062: ID 0483:5750 STMicroelectronics
Jan 22 09:48:01 leviathan kernel: usb 1-1: new full-speed USB device number 64 using xhci_hcdJan 22 09:48:01 leviathan kernel: usb 1-1: New USB device found, idVendor=2dc8, idProduct=ab20, bcdDevice= 0.01Jan 22 09:48:01 leviathan kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0Jan 22 09:48:01 leviathan kernel: usb 1-1: Product: SNES30 Joy Jan 22 09:48:01 leviathan kernel: usb 1-1: Manufacturer: SNES30 Jan 22 09:48:01 leviathan kernel: input: SNES30 SNES30 Joy as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/0003:2DC8:AB20.002F/input/input58Jan 22 09:48:01 leviathan kernel: hid-generic 0003:2DC8:AB20.002F: input,hidraw0: USB HID v1.10 Joystick [SNES30 SNES30 Joy ] on usb-0000:00:14.0-1/input0
$ journalctl -fk -n0 Jan 22 09:47:15 leviathan kernel: usb 1-1: new full-speed USB device number 63 using xhci_hcdJan 22 09:47:15 leviathan kernel: usb 1-1: New USB device found, idVendor=0483, idProduct=5750, bcdDevice= 2.00Jan 22 09:47:15 leviathan kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3Jan 22 09:47:15 leviathan kernel: usb 1-1: Product: 8Bitdo Jan 22 09:47:15 leviathan kernel: usb 1-1: Manufacturer: 8BitdoHidJan 22 09:47:15 leviathan kernel: usb 1-1: SerialNumber: 8Bitdo Jan 22 09:47:15 leviathan kernel: hid-generic 0003:0483:5750.002E: hiddev96,hidraw0: USB HID v1.10 Device [8BitdoHid 8Bitdo ] on usb-0000:00:14.0-1/input0
Note: This is different from it's normal enumeration where it is operating as aninput
device andnothiddev
.
The SN30 Pro will only be detected byfwupdmgr
when in certain "modes". When powered on the blue LED on the top of the device will flash once, then after a short delay will flash repeatedly denoting the mode that it is running in. The number of flashes will note the mode "number" and will repeat approximately every two seconds. To change the mode boot from a completely unpowered state as follows:
Mode Number | Power On Combination | Mode | VID:PID | Notes |
---|---|---|---|---|
1 | B +START | D-Input | 2DC8:AB20 | Also known as "Android" mode. |
2 | X +START | Windows | 045E:028E | Boot controller in Windows (Xbox) mode. Device will usexpad driver and emulate an Xbox 360 controller |
3 | A +START | Mac | 2DC8:AB20 | Also known as "Mac OS" mode. |
4 | Y +START | WiiMote | 2DC8:AB20 | Boot controller in mode compatible with Nintendo Wii and Switch |
Mode Number | Power On Combination | Mode | VID:PID | Notes |
---|---|---|---|---|
N/A | L +R +START | Boot loader | 0483:5750 | Used to update firmware. |
While holding theL
andR
buttons at the top of the controller, press theSTART
button and continue holding these until both the green and blue LEDs at the top of the device begin flashing at approximately 1 second intervals. As soon as both LEDs are flashing release the buttons and the device will have entered the boot loader state.
Begin with the device powered completely off and unplugged from the host machine.
First, ensurefwupd
is running and check to see connected devices
$ systemctl status fwupd● fwupd.service - Firmware update daemon Loaded: loaded (/usr/lib/systemd/system/fwupd.service; static; vendor preset> Active: active (running) since Tue 2019-01-22 11:40:05 PST; 1min 56s ago Docs: https://fwupd.org/ Main PID: 25922 (fwupd) Tasks: 5 (limit: 4915) Memory: 5.0M CGroup: /system.slice/fwupd.service └─25922 /usr/libexec/fwupd/fwupdJan 22 11:40:04 leviathan systemd[1]: Starting Firmware update daemon...Jan 22 11:40:05 leviathan systemd[1]: Started Firmware update daemon.$ fwupdmgr get-devices$
Boot the device into D-input mode (holdB
then pressSTART
). Other modes may work, this is the "default" mode and will place us in a known good state. Once started, connect the 8bitdo device via USB cable to the host then ensure you see the device enumerated by the host.
$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 104: ID 2dc8:ab20 $ fwupdmgr get-devices SNES30 Joy DeviceId: 672c087de09848d9e7ee32aa1dea2fbeb8b81e6b Guid: 62368573-ff78-54b5-b297-f6316abd7eba Guid: 4cb172ce-9849-5603-8814-a3d455932012 Guid: 5bc60e62-f461-58bd-91b6-7de3392f8bd6 Guid: afa5518d-7c55-51cb-8e1c-bf3b11b67dfa Guid: cee9c5bc-aa12-51eb-a220-d0ef588d7cb2 Guid: 571229d5-caed-5cbc-91c1-5c216601a194 Guid: 043c7673-bd45-5e2e-b8b9-c22df2dfec2a Guid: b02f1319-c1c4-54f4-b7f2-5bb3552f6a9e Summary: A redesigned classic game controller Plugin: ebitdo Flags: updatable|supported|needs-bootloader|registered Vendor: 8Bitdo VendorId: USB:0x2DC8 Version: 4.00 Icon: input-gaming InstallDuration: 120 Created: 2019-01-22
Check for available updates.
$ fwupdmgr get-updatesSNES30 Joy has firmware updates:GUID: 62368573-ff78-54b5-b297-f6316abd7ebaGUID: 4cb172ce-9849-5603-8814-a3d455932012GUID: 5bc60e62-f461-58bd-91b6-7de3392f8bd6GUID: afa5518d-7c55-51cb-8e1c-bf3b11b67dfaGUID: cee9c5bc-aa12-51eb-a220-d0ef588d7cb2GUID: 571229d5-caed-5cbc-91c1-5c216601a194GUID: 043c7673-bd45-5e2e-b8b9-c22df2dfec2aGUID: b02f1319-c1c4-54f4-b7f2-5bb3552f6a9eID: com.8bitdo.snes30.firmwareUpdate Version: 4.10Update Name: SNES30Update Summary: Firmware for the 8Bitdo SNES30 Game ControllerUpdate Remote ID: lvfsUpdate Duration: 2 minutesUpdate Checksum: SHA1(a60593fd1dbb40d7174c99f34b5536f45392bf6c)Update Location: https://fwupd.org/downloads/2999ee63c0cff96893c1614955f505cb4f0fa406-8Bitdo-SFC30_NES30_SFC30_SNES30-4.10.cabUpdate Description: Enhanced the stability of the Bluetooth pairing. ID: com.8bitdo.snes30.firmwareUpdate Version: 4.01Update Name: SNES30Update Summary: Firmware for the 8Bitdo SNES30 Game ControllerUpdate Remote ID: lvfsUpdate Duration: 2 minutesUpdate Checksum: SHA1(78ef2663beaa952415c3719447b0d2ff43e837d8)Update Location: https://fwupd.org/downloads/fe066b57c69265f4cce8a999a5f8ab90d1c13b24-8Bitdo-SFC30_NES30_SFC30_SNES30-4.01.cabUpdate Description: Fixed input lag problem when used with other controllers.
Completely power off the device and start it in the boot loader. Verify that you see the device in the boot loader state, then run the update.
$ lsusbBus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 107: ID 0483:5750 STMicroelectronics $ fwupdmgr update Downloading 4.10 for 8Bitdo ...Decompressing… [***************************************]Authenticating… [***************************************]Updating 8Bitdo … [ - ]Restarting device… [***************************************] Less than one minute remaining…
Check the device firmware after completion
$ fwupdmgr get-devicesSNES30 Joy DeviceId: 672c087de09848d9e7ee32aa1dea2fbeb8b81e6b Guid: 62368573-ff78-54b5-b297-f6316abd7eba Guid: 4cb172ce-9849-5603-8814-a3d455932012 Guid: 5bc60e62-f461-58bd-91b6-7de3392f8bd6 Guid: afa5518d-7c55-51cb-8e1c-bf3b11b67dfa Guid: cee9c5bc-aa12-51eb-a220-d0ef588d7cb2 Guid: 571229d5-caed-5cbc-91c1-5c216601a194 Guid: 043c7673-bd45-5e2e-b8b9-c22df2dfec2a Guid: b02f1319-c1c4-54f4-b7f2-5bb3552f6a9e Guid: ba7f0ecd-1972-5bc0-b474-ffdc5fa17645 Guid: 644ec4d7-3fcf-56b7-89d3-b569cb91edab Summary: A redesigned classic game controller Plugin: ebitdo Flags: updatable|supported|needs-bootloader|registered Vendor: 8Bitdo VendorId: USB:0x2DC8 Version: 4.10 Icon: input-gaming InstallDuration: 120 Created: 2019-01-22________________________________________________Devices that have been updated successfully: • 8Bitdo (4.00 → 4.10)Uploading firmware reports helps hardware vendors to quickly identify failing and successful updates on real devices.Upload report now? (Requires internet connection) [Y|n]: Y...Target: https://fwupd.org/lvfs/firmware/reportPayload: { "ReportVersion" : 2, "MachineId" : "3ba812242e854337353b5fd6a569e2cc71caca02cdf77d2e6a20b0354cc6df47", "Metadata" : { "DistroId" : "fedora", "DistroVersion" : "29", "DistroVariant" : "workstation" }, "Reports" : [ { "Checksum" : "a60593fd1dbb40d7174c99f34b5536f45392bf6c", "UpdateState" : 2, "Guid" : "ba7f0ecd-1972-5bc0-b474-ffdc5fa17645", "Plugin" : "ebitdo", "VersionOld" : "4.00", "VersionNew" : "4.10", "Flags" : 98, "Created" : 1548186524, "Modified" : 1548186528, "Metadata" : { "CpuArchitecture" : "x86_64", "RuntimeVersion(org.freedesktop.fwupd)" : "1.2.3", "DistroId" : "fedora", "CompileVersion(org.freedesktop.fwupd)" : "1.2.3", "CompileVersion(com.redhat.fwupdate)" : "12", "DistroVariant" : "workstation", "CompileVersion(org.freedesktop.gusb)" : "0.3.0", "RuntimeVersion(org.freedesktop.appstream-glib)" : "0.7.14", "KernelVersion" : "4.19.15-300.fc29.x86_64", "DistroVersion" : "29", "CompileVersion(com.redhat.efivar)" : "37", "RuntimeVersion(com.dell.libsmbios)" : "2.4", "BootTime" : "1548026945", "RuntimeVersion(com.redhat.fwupdate)" : "12" } } ] }Proceed with upload? [Y|n]: Y
If you have not successfully entered the boot loader (butfwupdmgr
detects the device) and attempt to run the update you will see the following output fromfwupdmgr
:
$ fwupdmgr update Downloading 4.10 for SNES30 Joy ...Decompressing… [***************************************]Authenticating… [***************************************]Device SNES30 Joy needs to manually be put in update mode: Unplug the controller, hold down L+R+START for 3 seconds until both LEDs are flashing then reconnect the controller.
If this occurs, completely power off the device and repeat the process of entering the boot loader and performing the update.