Updating Firmware on 8Bitdo Game Controllers

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.

Screenshot from 2016-08-18 10-36-56

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.

Published by


Richard has over 10 years of experience developing open source software. He is the maintainer of GNOME Software, PackageKit, GNOME Packagekit, GNOME Power Manager, GNOME Color Manager, colord, and UPower and also contributes to many other projects and opensource standards. Richard has three main areas of interest on the free desktop, color management, package management, and power management. Richard graduated a few years ago from the University of Surrey with a Masters in Electronics Engineering. He now works for Red Hat in the desktop group, and also manages a company selling open source calibration equipment. Richard's outside interests include taking photos and eating good food.

9 thoughts on “Updating Firmware on 8Bitdo Game Controllers”

  1. 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).

    1. 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.

  2. 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?

      1. 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.

Comments are closed.