Update Firmware (HOJA Controllers)

Firmware updates for Hand Held Legend controllers running HOJA (GC Ultimate, ProGCC, Super Gamepad+ and others) are done in the browser with HHL Gamepad Config at hoja.handheldlegend.com.

You need: Chrome, Edge or another Chromium browser on Windows, macOS, Linux, ChromeOS or Android, a USB data cable (some cables only charge), and an internet connection. iPhone and iPad browsers can't connect to USB controllers.

Update a controller

  1. Plug the controller in while holding A (or B) so it starts in a mode the app can talk to.

  2. Open hoja.handheldlegend.com and press Connect. The app checks for new firmware every time a controller connects. Home and the Firmware & backup page show Update available.

  3. Press Update now. Optional but recommended: use Save a backup first to save your settings to a file.

  4. Press Enter update mode. The controller restarts into update mode.

Step 1: the update dialog. Enter update mode restarts the controller

Step 1: the update dialog. Enter update mode restarts the controller


  1. Writing starts by itself. If the app says One more step: press Update, press it and pick the controller in the browser's window. A controller with the HOJA bootloader is listed by its name followed by "Update" (for example GCU 1 Update). Other controllers show as RP2 Boot or RP2350 Boot.

Step 3: writing the firmware. Keep the controller plugged in

Step 3: writing the firmware. Keep the controller plugged in


  1. When it says Update complete, give the controller a moment to restart, then press Connect.

Step 4: update complete

Step 4: update complete


Keep the controller plugged in until the update is complete.

A USB update also installs the HOJA bootloader on the controller (see The HOJA update mode below). Controllers that support it can also be updated over Bluetooth from the app, but a Bluetooth update doesn't install the HOJA bootloader.

If the browser can't write to the controller directly

This is common on Windows. The app switches to copying the firmware onto the controller's update drive instead, and shows the steps:

The drive step: pick the RPI-RP2 drive in the folder window

The drive step: pick the RPI-RP2 drive in the folder window


  1. Press Select followed by the drive's name (for example Select GCU 1 or Select RPI-RP2).

  2. In the folder window, pick the controller's drive itself. With the HOJA bootloader it's named after the controller (for example GCU 1); otherwise it's RPI-RP2 or RP2350. On Windows it's under This PC in the sidebar; on a Mac under Locations. The drive looks empty in that window. That's normal.

  3. Allow the browser's "edit files" prompt if one appears. The controller restarts when the copy finishes, and the drive disappears. That's normal too.

If no folder window is available, the app offers Download UF2. Copy that file onto the controller's drive yourself.

Controllers on old firmware

Controllers with firmware from before HOJA 2 can't be configured until they're updated. When you connect one, the app offers its model's current firmware. Follow the same steps.

The HOJA update mode

Controllers with the HOJA bootloader have their own update mode. Any USB update from the app installs it.

  • In the HOJA update mode the controller shows up as a USB drive named after the controller (for example GCU 1), and in the browser's USB window as the controller's name followed by "Update" (for example GCU 1 Update).

  • Dragging that controller's own .uf2 file onto its drive installs it. A file made for a different board is refused, so the wrong firmware can't be installed by accident.

  • Controllers without the HOJA bootloader, and any controller in the chip's own bootloader (BOOTSEL), show the drive RPI-RP2 (RP2040 chips) or RP2350 (RP2350 chips) instead, listed in the browser as RP2 Boot or RP2350 Boot. That bootloader accepts any file, so pick carefully.

Enter update mode by hand

If the controller won't start normally, you can put it in update mode yourself. Hold L + Start (+) while you plug it in. On the GC Ultimate it's ZL + Start (the left Z button). See your controller's own page for its combo. The controller then shows up as its update drive: named after the controller (for example GCU 1) if it has the HOJA bootloader, otherwise RPI-RP2 or RP2350.

While the controller is connected to the app, you can also press Restart in update mode under Update mode (safe) on the Recovery card (see below).

Install on a blank board

For new builds, or a board with no firmware:

  1. Unplug the controller and remove the battery if it has one.

  2. Hold the BOOTSEL button (or bridge the boot pads) and plug it in. A drive named RPI-RP2 or RP2350 appears.

  3. In HHL Gamepad Config, open Firmware & backup. On the Install HOJA on a blank board card, press Select bootloader and pick RP2 Boot (or RP2350 Boot).

  4. The app asks What are you installing? Choose Gamepad firmware. It then lists only the gamepad firmware for the chip it found (RP2040 or RP2350).

  5. Choose your exact controller, tick the warning box, then Install.

The installer: choose your controller, then Install

The installer: choose your controller, then Install


Pick the right controller. Firmware for different hardware can stop the controller working until it's reinstalled from BOOTSEL. Manual downloads of every build are under Manual downloads on the Recovery card, and listed in Manual download below.

Recovery

The Recovery card on Firmware & backup has two restart buttons. Both need a USB cable.

  • Update mode (safe) restarts the controller in its HOJA update mode, with the controller's own drive (on controllers without the HOJA bootloader: RPI-RP2 or RP2350). Use it to install firmware by hand.

  • Boot ROM (advanced) restarts in the chip's own bootloader, the RPI-RP2 or RP2350 drive. It skips the HOJA bootloader's board checks, so firmware for another board could be written and stop the controller working. Use it only to recover a controller.

If something went wrong:

  • Stuck in update mode after an interrupted update: on Firmware & backup press Restart from bootloader, or install again as above. If that fails, unplug it and plug it back in.

  • Still misbehaving after reinstalling: press Reinstall firmware and choose Start fresh: erase everything first. It wipes all settings, calibration and pairings, then writes the firmware. With the HOJA update mode, the app erases the controller over USB itself: there's no file to copy onto a drive. Only a board in the chip's own bootloader (RPI-RP2 or RP2350) uses the "flash nuke" erase image. Recalibrate the sticks and triggers afterwards.

  • Reset the settings without reinstalling: on the Recovery card, Reset settings offers two choices. Settings and calibration keeps the default mode, Switch colors and Bluetooth pairings. Everything, including pairings also gives the controller a new Bluetooth address, so every Switch, PC and other device has to pair again. The reset takes effect when the controller restarts: unplug it and plug it back in, or turn it off and on.

Controllers are very hard to brick permanently: BOOTSEL always works.

Backups

The Backup & restore card on Firmware & backup keeps your settings safe:

  • Back up settings saves them to a file, and Restore from file loads one back. Backups can include calibration, which you can choose to restore or not.

  • Automatic backups: the app saves a backup in the browser every time a controller connects, and keeps the last 5 for each controller. Click Automatic backups to open the list and restore one. They're stored in that browser only.

Dongles

The WLAN dongle has its own firmware, separate from the controller's. A dongle on current firmware updates from the app once it's connected, on the Dongle card of Firmware & backup.

To install or recover a dongle by hand, put it in its bootloader as below, then press Open installer on the Dongle card (or Select bootloader on the blank board card), and choose Dongle firmware when the app asks What are you installing?

Dongle

Enter its bootloader

Shows up as

HOJA Dongle

Hold both buttons while plugging it in

RP2350 Boot

Dongle on a Raspberry Pi Pico W

Hold BOOTSEL while plugging it in

RP2 Boot

Dongle on a Raspberry Pi Pico 2 W

Hold BOOTSEL while plugging it in

RP2350 Boot

Waveshare RP2350B-Plus-W

Hold BOOT while plugging it in, or while it's plugged in hold BOOT and press RESET

RP2350 Boot

Dongles don't have the HOJA bootloader, so they always use the chip's own bootloader for installs by hand. Pick the firmware for your exact dongle.

Manual download

The app is the easiest and safest way to install firmware: it picks the file and checks it. To open the installer with your board already chosen, use the Open in the app link below. If you really need the .uf2 file, for example to drag it onto the controller's drive, download the one for your exact board:

Board

Open in the app

Download

ProGCC 3

Open

progcc_3.uf2

ProGCC 3+

Open

progcc_3p.uf2

ProGCC 3.1

Open

progcc_3.1.uf2

ProGCC 3.2 (wired and wireless)

Open

progcc_3.2.uf2

ProGCC 3S

Open

progcc_3s.uf2

Super Gamepad+

Open

super_gamepad.uf2

GC Ultimate 1 (Kickstarter Edition)

Open

gcu_1.uf2

GC Ultimate 2

Open

gcu_2.uf2

GC Ultimate 2S

Open

gcu_2s.uf2

GC Ultimate (Prototype Edition)

Open

gcu_proto.uf2

Phob 2

Open

phob_2.uf2

HOJA Dongle

Open

dongle_hoja.uf2

Dongle (Pico W)

Open

dongle_pico_w.uf2

Dongle (Pico 2 W)

Open

dongle_pico2_w.uf2

Dongle (Waveshare RP2350B-Plus-W)

Open

dongle_rp2350b_plus_w.uf2

Older links to gcu_r4k, gcu_r5 or gcu_s1 files are out of date. Those boards are now GC Ultimate 1 (gcu_1), GC Ultimate 2 (gcu_2) and GC Ultimate 2S (gcu_2s).

Wireless module

Controllers with an ESP32 wireless module (GC Ultimate 1, ProGCC 3+, 3.1 and 3.2, Super Gamepad+) also have separate wireless firmware. Update it from the Wireless page, or from the Wireless module (ESP32) card on Firmware & backup. See Update the Wireless Module.