Skip to content

Conversation

@rygwdn
Copy link
Contributor

@rygwdn rygwdn commented Oct 10, 2025

Based on my reading of the USB HID spec, each report ID defines an independent report structure with its own bit offset tracking. Previously, offsets were reset when encountering a new report ID or at collection boundaries, causing incorrect parsing of descriptors when the report ID swapped back and forth within the same descriptor.

Changes:

  • Add report_offset_map_t to map report IDs to their offsets
  • Track offsets separately for each report ID in parser state

Per USB HID spec section 6.2.2.7, each report ID defines an independent
report structure with its own bit offset tracking. Previously, offsets
were reset when encountering a new report ID or at collection boundaries,
causing incorrect parsing of descriptors with multiple reports.

Changes:
- Add report_offset_map_t to map report IDs to their offsets
- Track offsets separately for each report ID in parser state
- Remove incorrect offset resets on report ID change and collection end
- Add helper functions for offset lookup and creation

Local items still reset after Main items and Global items persist,
matching spec requirements.
@hrvach
Copy link
Owner

hrvach commented Oct 12, 2025

Thank you so much for the work and patches, I'll test and merge as soon as I'm back from a work trip!

@hrvach hrvach merged commit 9151e95 into hrvach:main Oct 31, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants