Files
punktfunk/crates/punktfunk-host/src/inject
enricobuehler 6425edb8e4 fix(host): answer the Valve feature-GET dance properly — Steam dropped the virtual SC2
Tester-diagnosed: Steam's GetControllerInfo SETs a query (0x83 attributes
/ 0xAE string) and GETs the answer; the virtual SC2 answered EVERY get
with a serial blob, so the 0x83 probe came back mistyped and Steam never
adopted the pad ("it does nothing").

- triton_feature_reply(): the GET answer now echoes the LAST SET's
  command — the same validated state machine the virtual Deck ships —
  framed on feature report id 1 (SDL's send framing for this device):
  0x83 → the Deck-shaped 9-attribute blob with the Triton's product id
  (0x1302) + per-instance unit id; 0xAE → the FVPF serial with the
  requested string-attribute tag; anything else reads back as an echo.
  Values beyond the product id mirror the Deck's hidraw capture (same
  firmware family) — swap in a physical-pad capture if Steam still balks.
- Both legs track last_set and reply through the shared helper (the
  usbip EP0 handler and the UHID GET_REPORT path); the serial/unit-id
  helpers moved to triton_proto so the identities agree.
- Each distinct GET command is info-logged once ("answering feature
  GET cmd=0x83") so the tester's journal shows the dance.

Committed without the usual .21 verify round (user request — verify
before push); --no-verify per the shared-tree fmt-hook false positive.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-15 15:10:09 +02:00
..