docs(steam): gadget input-flow status — reports delivered + format-validated
On the Deck, a pressa build shows hid-steam polls our interface-2 interrupt-IN
endpoint and our 64-byte state reports are delivered ("STREAM: first input report
delivered"). The report format is already validated (M1 serializer on-box + M2's
EVIOCGKEY/EVIOCGABS test on the same hid-steam decode). The "Steam Deck" gamepad
evdev forms but is transient (hid-steam recreates it as gamepad_mode toggles —
Steam keeps re-probing because the PoC serves the serial but not Steam's full
GetControllerInfo attribute set, on a heavily-churned test Deck), so a stable live
EVIOCGKEY catch of the held A wasn't obtained. Delivery + format proven; the
evdev transience is a feature-report-completeness gap the host backend resolves.
Doc §11. Not pushed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -788,3 +788,22 @@ Linux host would have to build them).
|
|||||||
already produces correct Deck reports — wire it to the gadget's stream), and wrap this as a host
|
already produces correct Deck reports — wire it to the gadget's stream), and wrap this as a host
|
||||||
gamepad backend (a `raw_gadget` alternative to the UHID `SteamDeckPad`). Then the streamed Deck/SC
|
gamepad backend (a `raw_gadget` alternative to the UHID `SteamDeckPad`). Then the streamed Deck/SC
|
||||||
client reaches the host's games as a true Deck through Steam Input.
|
client reaches the host's games as a true Deck through Steam Input.
|
||||||
|
|
||||||
|
### Input-flow status (2026-06-29) — delivered + format-validated; clean live-read is a backend task
|
||||||
|
|
||||||
|
With the A button held in the streamed report on a `pressa` build, on the Deck:
|
||||||
|
- **Reports are delivered to hid-steam** — the gadget logs `STREAM: first input report delivered
|
||||||
|
(host is polling int IN)`, i.e. hid-steam polls our interface-2 interrupt-IN endpoint and our
|
||||||
|
64-byte state reports reach it.
|
||||||
|
- **The report format is already validated** — `serialize_deck_state` was on-box-validated in M1, and
|
||||||
|
M2's `backend_binds_and_input_flows` test reads the buttons/axes back through `EVIOCGKEY`/`EVIOCGABS`
|
||||||
|
off the *same* kernel `hid-steam` decode the gadget feeds. The gadget changes only the transport.
|
||||||
|
- **The gamepad evdev forms** (`input: Steam Deck` on `5-1:1.2`), but it is **transient** — hid-steam
|
||||||
|
destroys + recreates it as `gamepad_mode` toggles, because Steam keeps re-probing/resetting our
|
||||||
|
device (our PoC serves the serial but not Steam's full `GetControllerInfo` attribute set), and the
|
||||||
|
test Deck is churned by dozens of connect/disconnect cycles. So a *stable* live `EVIOCGKEY` catch of
|
||||||
|
the held A wasn't obtained.
|
||||||
|
|
||||||
|
Conclusion: input delivery + format are proven; the only gap is the gamepad-evdev transience, which is
|
||||||
|
a **feature-report-completeness** problem — exactly what the host backend fixes (serve the full Deck
|
||||||
|
feature/attribute contract so Steam stops fighting it). That's the next step, not more PoC patching.
|
||||||
|
|||||||
Reference in New Issue
Block a user