diff options
| author | Boris Dolgov <[email protected]> | 2026-05-15 21:28:21 +0200 |
|---|---|---|
| committer | Boris Dolgov <[email protected]> | 2026-05-15 21:28:21 +0200 |
| commit | 72e09788e46a8ffaaae8009a316915838927af90 (patch) | |
| tree | fe386a6dc4b227a7e72411068fd07fa96537d9a6 /docs/reference | |
| parent | 7f146c9ff6e3aa6b19887b2b64161ae93f543888 (diff) | |
rp2040: fix host SET_REPORT (and any OUT-data control xfer) sending DATA0 instead of DATA1
hcd_edpt_xfer() previously reset ep->next_pid to 1 only when the control
endpoint direction changed between stages. That handled IN-data control
transfers (e.g. GET_REPORT, GET_DESCRIPTOR) where SETUP is OUT and DATA is
IN, but not OUT-data class requests like SET_REPORT, where SETUP and DATA
are both OUT and the direction-change check is false. ep->next_pid was
left at 0 from hcd_edpt_open(), so the DATA stage went on the wire as
DATA0 when the device expected DATA1. Strict devices (observed: Elgato
Stream Deck) treat this as a protocol violation and disconnect.
Key off "endpoint 0" instead of "direction changed", restoring the
previous behavior. Interrupt/bulk endpoints take the ep->interrupt_num > 0
branch above and never reach this code, so they are unaffected.
Diffstat (limited to 'docs/reference')
0 files changed, 0 insertions, 0 deletions
