-
Notifications
You must be signed in to change notification settings - Fork 411
8BitDo Controllers
Your 8BitDo controller can be detected in different modes (Windows, MacOS, Android, Switch, etc) with different key combinations. Check its manual on the support site to learn how yours work.
If you have issues with the directions, begin by consulting the existing 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-devices
8Bitdo 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, run fwupdmgr get-updates
. This will tell you about new firmware versions which you can install by running fwupdmgr 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 press L + 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, but was 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 use xpad 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 GigaDevice GD32F103C8T6 microcontroller and is "compatible" with the STM32 series of microcontrollers. This is the same 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 where fwupdmgr
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.
For fwupdmgr
to correctly identify the device and seek out available updates, the USB vendor id/product id (VID/PID) must be recognized by fwupdmgr
as an 8bitdo device (2DC8:AB20
). When SNES30 has entered the boot loader it's VID/PID is changed to 0483:5750
(STMicroelectronics) and it will be operating as an hiddev
type device. Thus, the update process requires fwupdmgr
first detecting the 8bitdo device then entering the 8bitdo device's boot loader to allow fwupdmgr
to upgrade the firmware.
To validate the current VID/PID perform one of the following:
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
...
Bus 001 Device 102: ID 2dc8:ab20
$ lsusb
Bus 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_hcd
Jan 22 09:48:01 leviathan kernel: usb 1-1: New USB device found, idVendor=2dc8, idProduct=ab20, bcdDevice= 0.01
Jan 22 09:48:01 leviathan kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Jan 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/input58
Jan 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_hcd
Jan 22 09:47:15 leviathan kernel: usb 1-1: New USB device found, idVendor=0483, idProduct=5750, bcdDevice= 2.00
Jan 22 09:47:15 leviathan kernel: usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 22 09:47:15 leviathan kernel: usb 1-1: Product: 8Bitdo
Jan 22 09:47:15 leviathan kernel: usb 1-1: Manufacturer: 8BitdoHid
Jan 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 an input
device and not hiddev
.
The SN30 Pro will only be detected by fwupdmgr
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 use xpad 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 the L
and R
buttons at the top of the controller, press the START
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, ensure fwupd
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/fwupd
Jan 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 (hold B
then press START
). 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.
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 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-updates
SNES30 Joy has firmware updates:
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
ID: com.8bitdo.snes30.firmware
Update Version: 4.10
Update Name: SNES30
Update Summary: Firmware for the 8Bitdo SNES30 Game Controller
Update Remote ID: lvfs
Update Duration: 2 minutes
Update Checksum: SHA1(a60593fd1dbb40d7174c99f34b5536f45392bf6c)
Update Location: https://fwupd.org/downloads/2999ee63c0cff96893c1614955f505cb4f0fa406-8Bitdo-SFC30_NES30_SFC30_SNES30-4.10.cab
Update Description: Enhanced the stability of the Bluetooth pairing.
ID: com.8bitdo.snes30.firmware
Update Version: 4.01
Update Name: SNES30
Update Summary: Firmware for the 8Bitdo SNES30 Game Controller
Update Remote ID: lvfs
Update Duration: 2 minutes
Update Checksum: SHA1(78ef2663beaa952415c3719447b0d2ff43e837d8)
Update Location: https://fwupd.org/downloads/fe066b57c69265f4cce8a999a5f8ab90d1c13b24-8Bitdo-SFC30_NES30_SFC30_SNES30-4.01.cab
Update 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.
$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 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-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
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/report
Payload: {
"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 (but fwupdmgr
detects the device) and attempt to run the update you will see the following output from fwupdmgr
:
$ 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.