This is about running 8BitDo's Firmware Update tool for Windows in Wine. It can be used for updating newer 8BitDo devices that may not be supported by fwupd on Linux.
This tool needs Segoe UI Symbol font, on Arch this font is provided by ttf-ms-win10-auto package. For other distributions there is install script.
You will have to let Wine access device's HID interface for updating the firmware. Most importantly it should be a boot HID interface (exposed when device is in bootloader mode, often referred to as "manual update mode" or "advanced mode"). It is also worth adding the Product IDs for HID interfaces that are exposed under different conditions (for example, Ultimate Bluetooth Controller's receiver exposes a HID interface when controller is not connected), so the upgrade tool can detect it and automatically put it in bootloader mode for upgrading the firmware. You can use lsusb
tool to get the Vendor and Product IDs. Here's an example for 8BitDo Ultimate Bluetooth Controller and its USB receiver, which you can adapt for your devices by modifying the Product IDs as needed:
sudo nano /etc/udev/rules.d/71-8bitdo-boot.rules
# 8BitDo Ultimate Bluetooth Controller's boot HID interface (seems to be shared by multiple 8BitDo devices)
# Change it only if lsusb prints different Product ID when device is in bootloader mode.
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3208", ATTRS{idVendor}=="2dc8", TAG+="uaccess"
# 8BitDo Ultimate Bluetooth Controller receiver's HID interface (exposed when the controller is not connected)
# When it is exposed, the upgrade tool can detect the receiver and automatically put in in bootloader mode.
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3109", ATTRS{idVendor}=="2dc8", TAG+="uaccess"
Now it is needed to reload the udev rules.
sudo udevadm control --reload-rules && sudo udevadm trigger
Disable SDL mode in winebus because it prevents firmware updater from accessing the device, can be done through Wine registry (seems like it is not needed to be done on recent Wine versions).
wine regedit
add DWORD value of 0 named "Enable SDL" at HKLM\System\CurrentControlSet\Services\winebus
Can be re-enabled after updating firmware (set the "Enable SDL" value to 1 or just remove it).
Shutdown wine server to save and apply registry changes: wineserver -k
Updating the Ultimate Bluetooth Controller works only in manual mode (press LB+RB and connect the controller through USB cable, then select appropriate device). This is (probably) because the Linux xpad
driver doesn't expose additional HID interface that could be used by upgrade tool to detect the device (unlike Windows' XUSB driver, which does).
USB wireless dongle should be detected by the tool when controller is not connected.
Thank you very much for the tutorial. I can confirm that it works on Gentoo. I have updated an 8BitDo USB Wireless Adapter 2 [1] to the latest available version at this moment (1.07) using 8BitDo Firmware Updater [2] via Wine.
For installing the necessary fonts for the 8BitDo Firmware Updater, I preferred a simpler method; I did not need to install the font in another directory:
In the file
/etc/udev/rules.d/71-8bitdo-boot.rules
, I had to add:The directory where I needed to add the DWORD with a value of 0 named "Enable SDL" in my case was
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\winebus
.To use "manual mode" (Bootloader mode), you must hold the pairing button while connecting the USB, showing the following in
dmesg
:For now, it is not possible to use
fwupd
to update the 8BitDo USB Wireless Adapter 2, but it is possible to download the update using8bitdo-firmware.py
from this repository [3]. The 8BitDo USB Wireless Adapter 2 is the number 39 (listed as "USB Adapter 2" when running8bitdo-firmware.py
).[1] https://www.8bitdo.com/wireless-usb-adapter-2/
[2] https://support.8bitdo.com/firmware-updater.html
[3] https://github.com/fwupd/8bitdo-firmware