Star on GitHubStar2.4k stars

Case study

Open Steam Controller: reverse-engineered Steam Controller firmware

Documents the reverse engineering of Valve's original Steam Controller, whose LPC11U37F main-processor firmware the author ran in a modified pinkySim simulator to log its hardware accesses, and uses the findings to write replacement firmware. Build options turn the controller into a USB-serial development board for querying its peripherals, or into a wired Nintendo Switch controller that presents itself as a PowerA pad. A Qt converter writes MusicXML songs as startup and shutdown jingles into an EEPROM area that the official firmware also reads, and notes record the board's pin connections and USB messages.

Targets
Firmware · Protocol
Category
Independent reconstruction cases
Relationship
Independent reconstruction project
Sources reviewed
Stars
545
Last commit
2019-09-17
Language
C

GitHub data as of 2026-11-09

Copy as MarkdownView JSONCite

Requirements & limits

  • The replacement firmware targets the Steam Controller Luna_mainboard V000456-00 rev3 board and its LPC11U37F processor. The nRF51822 Bluetooth firmware remains original.
  • A Steam Controller with that board is needed to run the custom firmware or jingle workflow. Repeating the simulation requires Valve’s vcf_wired_controller_d0g_57bf5c10.bin firmware and an LPC11U37 16 kB boot ROM dump, supplied separately.
  • Firmware builds use LPCXpresso IDE v8.2.2 and the bundled NXP lpc_chip_11uxx_lib; select DEV_BOARD_FW or SWITCH_WIRED_POWERA_FW in fw_cfg.h. SCJingleConverter uses Qt 5.12; SteamControllerConfig.py uses PyUSB.
  • Author source files carry MIT notices; the bundled NXP LPCOpen library is limited to NXP microcontrollers. The repository has no license file. The custom firmware embeds default jingle data from Valve firmware and a HID report descriptor copied from a PowerA controller.

Cite

BibTeX

@misc{open-steam-controller-firmware-case,
  title = {{Open Steam Controller: reverse-engineered Steam Controller firmware}},
  howpublished = {\url{https://github.com/greggersaurus/OpenSteamController}},
  url = {https://github.com/greggersaurus/OpenSteamController},
  urldate = {2026-10-19},
  note = {Awesome REA entry: \url{https://awesomerea.org/resources/open-steam-controller-firmware-case/}}
}

Plain text

Open Steam Controller: reverse-engineered Steam Controller firmware. https://github.com/greggersaurus/OpenSteamController (accessed 2026-10-19). Awesome REA entry: https://awesomerea.org/resources/open-steam-controller-firmware-case/

Useful? Star Awesome REA on GitHub2.4k

About this entry

The description was reviewed against primary sources.

Report an outdated entry Suggest a translation fix

Primary sources

  1. README.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  2. ReverseEngineering/README.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  3. ReverseEngineering/LPC11U37F_Software.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  4. ReverseEngineering/usbInterface.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  5. Firmware/README.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  6. Firmware/OpenSteamController/src/init.c GitHub · greggersaurus/OpenSteamController · Revision 3258015
  7. Firmware/OpenSteamController/src/jingle_data.c GitHub · greggersaurus/OpenSteamController · Revision 3258015
  8. Firmware/OpenSteamController/inc/fw_cfg.h GitHub · greggersaurus/OpenSteamController · Revision 3258015
  9. Firmware/lpc_chip_11uxx_lib/src/chip_11xx.c GitHub · greggersaurus/OpenSteamController · Revision 3258015
  10. Jingle/README.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  11. UsbConfiguration/README.md GitHub · greggersaurus/OpenSteamController · Revision 3258015
  12. UsbConfiguration/SteamControllerConfig.py GitHub · greggersaurus/OpenSteamController · Revision 3258015

More in Firmware and hardware

All 260 entries in Firmware and hardwareFirmware and hardware case studies (175)

↑↓ move↵ open⌘↵ new tab