# 📶 Update the Wireless Module (ESP32)

Some HOJA controllers have an **ESP32 wireless module** with its own firmware, separate from the controller's: GC Ultimate 1 (Kickstarter), ProGCC 3+, 3.1 and 3.2, and Super Gamepad+. GC Ultimate 2 uses a different radio (RM2) and has nothing to update here.

The module runs the **HCI bridge** firmware. It brings Wii mode, the current Switch and Steam Bluetooth, and pairing over USB. Modules from older shipments may still run the older **HOJA baseband** firmware, and HHL Gamepad Config recommends moving them to the bridge.

## Before you start

* **Update the controller firmware first** (see [Update Firmware](https://docs.handheldlegend.com/doc/update-firmware-hoja-controllers-KoFvPA77o1)). The bridge needs current controller firmware. If the app shows **Update the controller first** on the Wireless page, do that, then come back.
* Use Chrome or Edge on a computer, with a USB data cable.
* The update takes about a minute. Keep the controller plugged in.

## Update from HHL Gamepad Config


1. Connect the controller at [hoja.handheldlegend.com](https://hoja.handheldlegend.com) and open the **Wireless** page.
2. On the **Wireless module firmware** card, press **Install HCI bridge** (or **Update now**).

 ![The Wireless module firmware card on the Wireless page](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS8yMThlYzU4OC0wYjEwLTQyMjAtYjM0ZC1jODVlNGFhNzhhYzYvaG9qYS13aXJlbGVzcy1jYXJkLnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkzODE3MDAwLCJleHAiOjE3OTM5MDM0MDB9.Ov6MIo0KYYuYVnKZT8ha3lzA1Y8xpDV1ZiQXHffFc8o " =440x335")


3. Press **Start update**. The app downloads the firmware, then restarts the controller into update mode. Its lights pulse **orange**.

 ![Step 1: the wireless module update dialog](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS80ZGNmYTM3Zi00MDgxLTRmZDctOTYzZi02ZjAxOTkyM2ViMDMvaG9qYS13aXJlbGVzcy1pbnRyby5wbmciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MzgxNzAwMCwiZXhwIjoxNzkzOTAzNDAwfQ.438gRt8gEvOSIMxkSaos_jC3TDR2S6DGgGP21YTJ2pU " =440x326")


4. When the lights pulse orange, press **Connect** and choose the USB serial device. It's usually named **USB-SERIAL CH340**, **USB2.0-Ser!** or **USB Single Serial**.

 ![Step 3: connect to the wireless module](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS9lOWYwZjJkMC00ZjQyLTQ4ZDAtOGM0ZC1hZDYxMjdmMTYyYTQvaG9qYS13aXJlbGVzcy1jb25uZWN0LnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkzODE3MDAwLCJleHAiOjE3OTM5MDM0MDB9.oKfUV1SbfHX9KhMhRprXLG6ecJtgyjCb7yAdxmfjnTI " =440x234")


5. The app erases the module and writes the new firmware by itself.
6. When it says **Wireless module updated**, unplug the controller, wait a moment, plug it back in, and press **Connect**.

 ![Done: unplug the controller to finish](https://docs.handheldlegend.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzLzU5ZGZiY2Y1LTNjZGEtNGY4OC1hMDAyLWViYzFkNmQ5NjMyOS83OTUzNzRkMC0wMjQyLTRkZWEtOWEzOS01MWQ4MWNhMDY5ZGIvaG9qYS13aXJlbGVzcy1kb25lLnBuZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkzODE3MDAwLCJleHAiOjE3OTM5MDM0MDB9.Evm6S7uCJnaYCQXM4T4upVYMQogCr223xm0TKhHlaPU " =440x240")

**After moving from the HOJA baseband to the HCI bridge, pair again.** The module's Bluetooth address changes, so pair your Switch and other Bluetooth devices once more (see [Modes & Pairing](https://docs.handheldlegend.com/doc/modes-pairing-hoja-controllers-H61Dy3zPjm)). Settings may also reset, so check your stick calibration.

### If Connect doesn't work

* **Try the other connection method.** In the dialog, under **Connect using**, switch between **Serial port** and **USB (WebUSB)**.
* **Close other tabs and apps** that might be using the controller.
* **Linux:** choose **USB**, install the app's Linux USB rule once (**Linux setup**), and run `sudo modprobe -r ch341` before pressing Connect. The dialog shows these steps.
* **Lights already pulsing orange?** In the dialog, press **Skip to connecting**.
* **Still failing?** This is most often seen on Windows PCs with AMD processors. Try the offline updater below, or update from another computer or an Android phone or tablet. Then run the wireless diagnostics at [handheldlegend.github.io/hoja3/#/diagnostics](https://handheldlegend.github.io/hoja3/#/diagnostics) on the PC where it fails, and include the report in a [support ticket](https://handheldlegend.freshdesk.com/support/tickets/new).
* To cancel at any point, just unplug the controller. Nothing is broken: the module can always be written again while it's in update mode.

## Enter update mode by hand

Unplug the controller. Hold **R + Start (+)** and plug it in (on the GC Ultimate 1: **ZR + Start**, the right Z button). The lights pulse orange. Then open HHL Gamepad Config, go to the **Firmware & backup** page, and press **Update wireless module** on the **Wireless module (ESP32)** card. It goes straight to Connect.

## Offline updaters

If the browser can't connect (driver problems, locked-down PCs), use a command-line updater. Both install the HCI bridge, and both need current controller firmware.

* **Windows:** download [hoja-local-updater-win.zip](https://github.com/HandHeldLegend/handheldlegend.github.io/raw/refs/heads/master/hoja_esptool/hoja-local-updater-win.zip), unzip it, and double-click **hoja_wireless_update.bat**. It downloads the firmware, then tells you when to put the controller in update mode.
* **Linux / macOS:** download [hoja_wireless_update.sh](https://github.com/HandHeldLegend/handheldlegend.github.io/raw/refs/heads/master/hoja_esptool/hoja_wireless_update.sh) and run `bash hoja_wireless_update.sh`.

Close the browser first, so it doesn't hold the controller's port.