mirror of
https://github.com/safijari/openpuck.git
synced 2026-11-03 22:30:22 +00:00
[PR #326] ReversePuck: pairing commands to read, write and erase each slot over USB #289
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#289
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/326
Author: @MisterAnderson91
Created: 10/25/2026
Status: 🔄 Open
Base:
main← Head:reversepuck-pairing-commands📝 Commits (1)
7c1572cReversePuck: read, write and delete pairing slots by number📊 Changes
2 files changed (+78 additions, -8 deletions)
View changed files
📝
ReversePuckFirmware/ctrl_usb.cpp(+74 -8)📝
ReversePuckFirmware/ctrl_usb.h(+4 -0)📄 Description
ReversePuck pairing commands, for SC Hammer compatibility: pairing tools can read, write and erase each of the dongle's 8 pairing slots over USB, and tell a ReversePuck apart from a real Steam Controller.
SC Hammer (a GUI for moving, swapping and pairing Steam Controller pairings) has already been updated for this: v0.2.0 recognises a ReversePuck through
rp/infoand shows and manages all 8 slots. It works as soon as this is merged and the dongle is flashed. With current firmware SC Hammer just treats the dongle as an ordinary two-slot controller, as before.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
7c1572cPairing commands to read, write and erase all 8 slotsDetails
ReversePuck: read, write and delete pairing slots by number (
ctrl_usb.cpp/.h)Pairing tools could only read pairing slot 0 (
0xA3), and every0xEEwrite went to whichever slot find-or-alloc picked. This adds, over USB only:0xEDkeyed read foresb/bond,esb/bond_2and newrp/bond/0..7. Empty slots return length 0, like a real controller.0xED "rp/info"→R P <version> <NBOND>, so tools can tell a ReversePuck from a real controller (a real one answers an unknown key with nothing).0xEE/0xEFwithrp/bond/Nwrite exactly slot N. Steam'sesb/bondwrites keep find-or-alloc, so Steam pairing is unchanged.0xF0deletes the named slot.Testing
Hardware: Steam Deck OLED with a ReversePuck (Pro Micro nRF52840) and an OpenPuck on 0.9.51.
esb/bond/esb/bond_2as before (its tests, with simulated controllers).make check(clang-format 18) passes, andmake reversepuckbuilds.🤖 Generated with Claude Code
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.