[PR #267] Improvements to Steam puck runtime, reliability and transport #266

Open
opened 2026-10-22 05:08:29 +00:00 by roman · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/safijari/openpuck/pull/267
Author: @ixelyth
Created: 9/3/2026
Status: 🔄 Open

Base: main ← Head: steam-puck-runtime


📝 Commits (1)

  • 8579087 Steam puck runtime, reliability and transport

📊 Changes

17 files changed (+2675 additions, -282 deletions)

View changed files

📝 OpenPuck/OpenPuck.ino (+23 -4)
📝 OpenPuck/bonds.h (+36 -5)
📝 OpenPuck/controllers.cpp (+7 -0)
📝 OpenPuck/controllers.h (+4 -4)
📝 OpenPuck/fault_diag.cpp (+2 -0)
📝 OpenPuck/haptics.cpp (+1545 -79)
📝 OpenPuck/haptics.h (+78 -4)
📝 OpenPuck/puck_hid.cpp (+252 -123)
➕ OpenPuck/puck_hid_driver.cpp (+119 -0)
➕ OpenPuck/puck_hid_driver.h (+5 -0)
📝 OpenPuck/rf_link.cpp (+325 -63)
➕ OpenPuck/rf_timing.cpp (+200 -0)
➕ OpenPuck/rf_timing.h (+18 -0)
📝 OpenPuck/usb_app_drivers.cpp (+1 -0)
📝 OpenPuck/usb_app_drivers.h (+1 -0)
📝 OpenPuck/wake_hid.cpp (+53 -0)
📝 OpenPuck/wake_hid.h (+6 -0)

📄 Description

Improvements to the core runtime path to closely better follow the official Steam puck, including USB/reliability handling, controller-backed identity and bond management, haptics/PCM output, and Steam HID transport.

Fixes #61 #192 #214 #218 #258
Steam Haptics Player isn't absolutely perfect just yet, though. Or maybe my ears deceive me.

Changes:

  • Uses the steady-state bare E3 polling path at the fixed controller polling cadence.
  • Serializes feature queries and haptic traffic per controller so replies remain associated with the correct host request.
  • Adds bounded high-resolution RF response timing using TIMER3/PPI.
  • Adds the Steam HID interrupt-OUT path required by HardwareUpdater while retaining SET_REPORT compatibility and the existing Steam USB identity. This fixes the issue with Steam being unable to alert you to a Puck or Controller update.
  • Expands Steam haptic handling, including rumble shaping, PCM/output processing, autonomous-pad control, reconnect safety, and stuck-rumble protection.
  • Keeps Lizard HID transport behavior separate from the Steam interrupt-OUT path.
  • Preserves bond/controller identity behavior across the updated transport.
  • Suppresses the complete mode-switch chord from the host-facing report while continuing to forward partial combinations normally.
  • Hardens RF cold-start behavior, USB startup, watchdog/reset handling, callback-safe logging, and suspend/resume wake behavior.
  • Routes haptic and PCM OUTPUT reports to the correct live controller. Before, if you had multiple controllers active on the puck, like for a co-op game, it would at times, albeit rarely, route haptics to the wrong controller.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/safijari/openpuck/pull/267 **Author:** [@ixelyth](https://github.com/ixelyth) **Created:** 9/3/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `steam-puck-runtime` --- ### 📝 Commits (1) - [`8579087`](https://github.com/safijari/openpuck/commit/85790876edf7957d53be4645150f3de182f40623) Steam puck runtime, reliability and transport ### 📊 Changes **17 files changed** (+2675 additions, -282 deletions) <details> <summary>View changed files</summary> 📝 `OpenPuck/OpenPuck.ino` (+23 -4) 📝 `OpenPuck/bonds.h` (+36 -5) 📝 `OpenPuck/controllers.cpp` (+7 -0) 📝 `OpenPuck/controllers.h` (+4 -4) 📝 `OpenPuck/fault_diag.cpp` (+2 -0) 📝 `OpenPuck/haptics.cpp` (+1545 -79) 📝 `OpenPuck/haptics.h` (+78 -4) 📝 `OpenPuck/puck_hid.cpp` (+252 -123) ➕ `OpenPuck/puck_hid_driver.cpp` (+119 -0) ➕ `OpenPuck/puck_hid_driver.h` (+5 -0) 📝 `OpenPuck/rf_link.cpp` (+325 -63) ➕ `OpenPuck/rf_timing.cpp` (+200 -0) ➕ `OpenPuck/rf_timing.h` (+18 -0) 📝 `OpenPuck/usb_app_drivers.cpp` (+1 -0) 📝 `OpenPuck/usb_app_drivers.h` (+1 -0) 📝 `OpenPuck/wake_hid.cpp` (+53 -0) 📝 `OpenPuck/wake_hid.h` (+6 -0) </details> ### 📄 Description Improvements to the core runtime path to closely better follow the official Steam puck, including USB/reliability handling, controller-backed identity and bond management, haptics/PCM output, and Steam HID transport. Fixes #61 #192 #214 #218 #258 Steam Haptics Player isn't absolutely perfect just yet, though. Or maybe my ears deceive me. **Changes:** - Uses the steady-state bare `E3` polling path at the fixed controller polling cadence. - Serializes feature queries and haptic traffic per controller so replies remain associated with the correct host request. - Adds bounded high-resolution RF response timing using TIMER3/PPI. - Adds the Steam HID interrupt-OUT path required by HardwareUpdater while retaining SET_REPORT compatibility and the existing Steam USB identity. This fixes the issue with Steam being unable to alert you to a Puck or Controller update. - Expands Steam haptic handling, including rumble shaping, PCM/output processing, autonomous-pad control, reconnect safety, and stuck-rumble protection. - Keeps Lizard HID transport behavior separate from the Steam interrupt-OUT path. - Preserves bond/controller identity behavior across the updated transport. - Suppresses the complete mode-switch chord from the host-facing report while continuing to forward partial combinations normally. - Hardens RF cold-start behavior, USB startup, watchdog/reset handling, callback-safe logging, and suspend/resume wake behavior. - Routes haptic and PCM OUTPUT reports to the correct live controller. Before, if you had multiple controllers active on the puck, like for a co-op game, it would at times, albeit rarely, route haptics to the wrong controller. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No labels
pull-request
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
safijari/openpuck#266
No description provided.