{
  "added_at": "2026-11-09",
  "additional_evidence_urls": [
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/ReverseEngineering/README.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/ReverseEngineering/LPC11U37F_Software.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/ReverseEngineering/usbInterface.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Firmware/README.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Firmware/OpenSteamController/src/init.c",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Firmware/OpenSteamController/src/jingle_data.c",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Firmware/OpenSteamController/inc/fw_cfg.h",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Firmware/lpc_chip_11uxx_lib/src/chip_11xx.c",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/Jingle/README.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/UsbConfiguration/README.md",
    "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/UsbConfiguration/SteamControllerConfig.py"
  ],
  "category": "reconstruction-cases",
  "class": "hardware",
  "description_en": "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.",
  "description_zh": "记录对 Valve 初代 Steam Controller 的逆向工程：作者在修改版 pinkySim 模拟器中运行其 LPC11U37F 主处理器固件并记录硬件访问，再据此编写替代固件。不同构建选项可让手柄成为通过 USB 串口查询外设的开发板，或伪装成 PowerA 手柄、供 Nintendo Switch 使用的有线控制器。Qt 转换工具可把 MusicXML 乐曲写入官方固件同样会读取的 EEPROM 区域，作为开机和关机提示音；另有文档记录主板引脚连接和 USB 消息。",
  "entry_url": "https://awesomerea.org/resources/open-steam-controller-firmware-case/",
  "entry_url_zh": "https://awesomerea.org/zh/resources/open-steam-controller-firmware-case/",
  "evidence_url": "https://github.com/greggersaurus/OpenSteamController/blob/325801542fcb762d19a91addd801f0630c825966/README.md",
  "group": "cases",
  "id": "open-steam-controller-firmware-case",
  "json_url": "https://awesomerea.org/resources/open-steam-controller-firmware-case/record.json",
  "kind": "case-study",
  "markdown_url": "https://awesomerea.org/resources/open-steam-controller-firmware-case/index.md",
  "markdown_url_zh": "https://awesomerea.org/zh/resources/open-steam-controller-firmware-case/index.md",
  "name": "Open Steam Controller: reverse-engineered Steam Controller firmware",
  "name_zh": "Open Steam Controller：逆向工程得来的 Steam Controller 固件",
  "record_type": "resource",
  "relationship": "independent-reconstruction",
  "requirements": [
    "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."
  ],
  "requirements_zh": [
    "替代固件面向 Steam Controller 的 Luna_mainboard V000456-00 rev3 主板及其 LPC11U37F 处理器。nRF51822 蓝牙固件仍为原版。",
    "运行自制固件或提示音流程需要使用该主板的 Steam Controller。重复模拟过程还需另行提供 Valve 的 vcf_wired_controller_d0g_57bf5c10.bin 固件及 LPC11U37 的 16 kB 启动 ROM 转储。",
    "固件构建使用 LPCXpresso IDE v8.2.2 和随附的 NXP lpc_chip_11uxx_lib；在 fw_cfg.h 中选择 DEV_BOARD_FW 或 SWITCH_WIRED_POWERA_FW。SCJingleConverter 使用 Qt 5.12；SteamControllerConfig.py 使用 PyUSB。",
    "作者的源文件带有 MIT 声明；随附的 NXP LPCOpen 库仅限与 NXP 微控制器配合使用。仓库没有许可证文件。自制固件内嵌了 Valve 固件的默认提示音数据，以及从 PowerA 手柄复制的 HID 报告描述符。"
  ],
  "targets": [
    "firmware",
    "protocol"
  ],
  "url": "https://github.com/greggersaurus/OpenSteamController",
  "verification": "source-reviewed",
  "verified_at": "2026-10-19"
}
