I’ve spent a few days adding support for upgrading the firmware of the various wireless 8Bitdo controllers into fwupd. In my opinion, the 8Bitdo hardware is very well made and reasonably priced, and also really good retro fun.
Although they use a custom file format for firmware, and also use a custom flashing protocol (seriously hardware people, just use DFU!) it was quite straightforward to integrate into fwupd. I’ve created a few things to make this all work:
- a small
libebitdo
library in fwupd - a small
ebitdo-tool
binary that talks to the device and can flash a vendor supplied.dat
file - a ebitdo fwupd provider that uses libebitdo to flash the device
- a firmware repo that contains all the extra metadata for the LVFS
I guess I need to thank the guys at 8Bitdo; after asking a huge number of questions they open sourced their OS-X and Windows flashing tools, and also allowed me to distribute the firmware binary on the LVFS. Doing both of those things made it easy to support the hardware.
The result of all this is that you can now do fwupd update
when the game-pad is plugged in using the USB cable (not just connected via bluetooth) and the firmware will be updated to the latest version. Updates will show in GNOME Software, and the world is one step being closer to being awesome.
I always love hearing of this kind of normalisation of hardware updating. Especially making it easier for users.
Well done.
My understanding is that this feature is not implemented in Fedora 24, right ?
It’ll be F25, or perhaps F24 if I backport enough bits.
This doesn’t seem to work with the NES 30 Pro. It’s listed under ‘fwupdmgr get-devices’ but ‘fwupdmgr update’ always says:
No devices can be updated: Nothing to do
Tried both in regular mode and upgrade mode (power and sync button held down before connecting the USB cable, LEDs flashing yellow).
The *Pro devices are different. 8bitdo kindly sent me a free NES30PRO for testing (arrived today), so when I get a tiny bit of extra data out of them I’ll push the *Pro firmware cabinet to the LVFS.
Okay, firmware pushed to the LVFS; when 1.70 is stable I’ll push that too.
This seems a great tool, thanks!
However, I cannot figure out how to update the firmware of my NES30 Pro.
fwupdmgr sees the device (it tells me it’s on fw version 0.1), I can schedule the update to 1.71, but I don’t know how to trigger the update.
I’m probably missing something very simple, but what?
Maybe try `fwupmgr update`
Thanks for your reply. I did try that, the first time it scheduled the update, then if I repeat it it just tells me that an update is already scheduled.
For some reason it is trying to do an offline update, I don’t know if that’s normal.
By the way, the same thing happens whether I try to update to 1.71 or to 1.69 downloading the cab file from lvfs.