Steam Controller (2026): Methode voor Custom Firmware

Hier zijn enkele andere projecten die mensen hebben gemaakt:

  • https://github.com/CouchTurtle/sc2-research
  • https://github.com/mwdmwd/sc26re

Waarschuwingen

GEVAAR Dit lijkt een interne, ongedocumenteerde tool te zijn. Je kunt je apparaat hiermee 'bricken' (permanent onbruikbaar maken). Zorg ervoor dat je deze map kopieert naar een andere locatie, zodat Steam deze niet onverwacht verwijdert. Sluit Steam volledig af tijdens het proces, zodat de software de flashing-procedure niet onderbreekt. Ik weet niet waar deze bestanden zich op Windows bevinden, of dat ze daar überhaupt bestaan.

EXTREEM GEVAAR Ik heb mijn eigen controller hiermee gebrickt. Totdat ik toegang krijg tot de interne SWD-debugpins en de juiste pinout heb, kan ik dit niet herstellen. Wees uiterst voorzichtig met Custom Firmware (CFW).

Herstel en Recovery

Belangrijke update: Succesvol herstel Met behulp van een Raspberry Pi Pico en door te solderen aan de debug-pins, is het gelukt om de firmware terug te flashen. Ik heb het zelfs aan de praat gekregen met Rust!

Er is bovendien een zeer nuttige recovery-knop voor beschadigde firmware: door A + START + SELECT ingedrukt te houden bij het inschakelen, komt het apparaat in de bootloadermodus. Ik kon deze informatie nergens anders op internet vinden.

Bestanden en Locaties

Mijn doel was om CFW te installeren zodat ik games direct op de controller kan draaien. Na een update van de controller op mijn computer vond ik de volgende map:

~/.local/share/Steam/bin/hardwareupdater/

Het kan ook op deze locatie staan: ~/.steam/steam/ubuntu12_32/hardwareupdater/

In deze map staan enkele zeer nuttige bestanden:

  • IBEXFW6A4423D7.fw: IBEX is de codenaam voor de Steam Controller (2026). Dit bestand wordt gecontroleerd met een CRC-32 en lijkt geen cryptografische handtekening of versleuteling te hebben. Dit bestand kan waarschijnlijk worden gereverse-engineered.
  • PROTEUSFW6A4423DE.fw: Dit lijkt de firmware te zijn voor de Steam Controller Puck, maar aangezien dit niet mijn hoofddoel is, heb ik dit nog niet onderzocht.
  • hardwareupdater.cfg: Dit bestand lijkt de hardwareupdater te vertellen welk bestand geflasht moet worden, aangezien je het bestand niet als argument meegeeft. De inhoud is als volgt:
  • MUSTUPDATETRITONFWTS:6A18D057
  • MUSTUPDATEPROTEUSFWTS:6A18D053
  • TRITONFWTS:6A4423D7
  • PROTEUSFWTS:6A4423DE

De Hardware Updater Tool

Het meest nuttige bestand is hardwareupdater.x86_64. Dit is een via PyInstaller gepackaged CLI (Command Line Interface) voor het installeren van firmware op de controller en de puck.

Na het uitvoeren van chmod +x om het bestand uitvoerbaar te maken, geeft het programma de volgende opties:

hardwareupdater.py [--help | --check-for-updates | --update-all | --update-by-serial SERNUM | --prep-by-serial SERNUM | --reboot-by-serial SERNUM | --show-all-devices]

Apparaten opsommen

Door het volgende commando uit te voeren: ./hardwareupdater.x86_64 --show-all-devices

Krijg je een lijst met apparaten in dit formaat:

{
  "version": "1.5",
  "updates_available": [
    {
      "type": 2,
      "Name": "Triton USB",
      "hardware_id": 73,
      "serial_number": "FXA9961700A0E",
      "current_ts": "0x6A4423D7",
      "update_ts": "0x0",
      "must_update": false
    }
  ]
}

Bootloadermodus activeren

Met het serienummer kun je de controller in de bootloadermodus zetten: ./hardwareupdater.x8664 --prep-by-serial SERIALNUMBER

Het apparaat identificeert zich dan als: 28de:1005 Valve Software Steam Controller Bootloader

Na een tijdje verlaat het apparaat deze modus. Als Steam openstaat, zal het firmware-update- of onboarding-scherm opnieuw verschijnen.

Firmware Flashen

Ik heb getest of het flashen van de stock-firmware werkt. Het flashen lukt zelfs als de firmware al up-to-date is, maar je krijgt de melding "ERROR: NO UNIT NEEDING UPDATE FOUND FOR SERIAL NUMBER" als je niet eerst --prep-by-serial uitvoert.

Het update-commando is: ./hardwareupdater.x8664 --update-by-serial SERIALNUMBER

Installeren van Custom Firmware: De beste manier om custom firmware te installeren is door het IBEX_FW bestand te vervangen door een nieuw bestand met exact dezelfde naam.

Let op:

  1. Maak altijd een back-up van het originele bestand zodat je kunt herstellen.
  2. Sluit Steam volledig af bij het uitvoeren van deze actie om te voorkomen dat Steam het bestand overschrijft of dat de controller gebrickt wordt.

Nagekomen update: Na het opnieuw flashen koppelde de puck correct, maar de haptische feedback klinkt vreemd. Ik weet niet of dit zichzelf oplost of dat het ongerelateerd is.

Technische specificaties van het firmwarebestand

Volgens analyse (via Claude) heeft het IBEX-firmwarebestand het volgende formaat:

Een header van 32 bytes bestaande uit:

  • Magic: 0xD2D86467
  • Payload grootte: 350672
  • CRC-32 van de payload: 0x92D7396B
  • 20 null-bytes

Dit wordt gevolgd door een raw Nordic nRF52833 (Cortex-M4) firmware image, waarbij zowel de grootte als de CRC-32 zijn geverifieerd tegen het bestand.