mirror of
https://github.com/safijari/openpuck.git
synced 2026-11-03 22:30:22 +00:00
[PR #325] ReversePuck firmware: show as a Steam Controller through a puck, fix trackpad haptics #290
Labels
No labels
pull-request
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
safijari/openpuck#290
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/safijari/openpuck/pull/325
Author: @MisterAnderson91
Created: 10/25/2026
Status: 🔄 Open
Base:
main← Head:reversepuck-firmware-fixes📝 Commits (2)
663224bReversePuck firmware: enumerate as a Steam Controller through a puck, per-pad trackpad hapticsc8db85bReversePuck firmware: report a far-future firmware build so Steam stops offering updates📊 Changes
4 files changed (+89 additions, -24 deletions)
View changed files
📝
ReversePuckFirmware/ctrl_link.cpp(+8 -3)📝
ReversePuckFirmware/deck_input.cpp(+68 -17)📝
ReversePuckFirmware/deck_input.h(+4 -1)📝
ReversePuckFirmware/identity.cpp(+9 -3)📄 Description
ReversePuck firmware fixes: the Deck shows up on the host as a proper Steam Controller (not a generic Xbox pad), Steam no longer demands a firmware update before pairing (issue 299), and trackpad haptics reach the right pad.
One of three independent ReversePuck PRs (firmware fixes, pairing commands, Deck app + AppImage). They touch separate files and can be merged in any order.
Summary
663224bFirmware: show as Steam Controller, no forced update, haptics fixedc8db85bOptional: far-future firmware version stops Steam's update offersCommits in detail
1. ReversePuck firmware: enumerate as a Steam Controller through a puck, per-pad trackpad haptics (
ctrl_link.cpp,identity.cpp,deck_input.cpp/.h)0x83/0xAEGETs arrive as[cmd][len][payload], but the parameters were read starting at the length byte. So0xAEanswered string index0x15("NA") instead of the serial, Steam re-asked forever, and the host showed a generic Xbox pad.0x6AA43B55: the previous0x6A18D057is exactlyMUST_UPDATE_TRITON_FW_TSin Steam'shardwareupdater.cfg, so Steam demanded a firmware update before pairing (issue 299).0xEBrumble that relayed trackpad haptics were flattened into. They're now passed to the Deck app as a newPULSEframe ([side][on_us][off_us][repeat], type0x12) and played with the Deck's0x8Fpulse. Steam's0x82clicks ([pad][type][gain], pad 0 = left) become a short pulse on that pad, flipped to the Deck's 0 = right numbering.0x81pulses pass through as-is. Playing them needs the Deck app from the Deck app PR; the current app just ignores the new frame.2. ReversePuck firmware: report a far-future firmware build so Steam stops offering updates (
identity.cpp), optionalWith commit 1, Steam pairs, but it keeps offering an update while it ships a newer build (
TRITON_FW_TS, currently0x6ACFF323). This reports 2035-01-01 (0x7A432B80), which stays below0x80000000so it can't read as ancient if compared as signed. If you'd rather not fake a future version, say so and I'll drop this commit; nothing else depends on it.Testing
Hardware: Steam Deck OLED with a ReversePuck (Pro Micro nRF52840), an OpenPuck on 0.9.51, and the host running Steam on macOS.
Controller Info: HWID: 72, FWTimestamp: 0x7A432B80), with no update offered, on the host and on the Deck's own Steam.make check(clang-format 18) passes, andmake reversepuckbuilds.Not tested: Linux and Windows hosts, and a real Valve puck.
🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.