Skip to content

Error handling fixes#135

Merged
kevinmehall merged 5 commits intomainfrom
errors
May 25, 2025
Merged

Error handling fixes#135
kevinmehall merged 5 commits intomainfrom
errors

Conversation

@kevinmehall
Copy link
Owner

@kevinmehall kevinmehall commented May 25, 2025

Rationale for the IN transfer buffer size error:

This requirement has actually been in the documentation since v0.1.0 with this intention, just not enforced until now. It's a requirement for WinUSB RAW_IO, which nusb now always enables for IN endpoints on Windows because WinUSB has mediocre performance without it. Since Windows was returning an error in this case, I extended the check to all platforms for consistency and to eliminate the need to handle overflow errors.

You should think of an IN transfer of n bytes to be a request for n / max_packet_size packets, ending early after any short packet. It doesn't make sense to request less than a packet, and because the device, not the host, controls how large the packet is, the host needs to have space to receive it.

Users were incorrectly assuming it worked like Read::read() where you could use any size buffer and the remaining data would be kept for the next call, but what actually happens on Linux is that you get an overflow error and the remaining data is lost. nusb was returning confusing errors because the intention was that it shouldn't see an overflow error if the transfers are the expected size. This check makes it fail quickly if used like that. I'm adding EndpointRead / EndpointWrite for those who want the read() semantics.

@kevinmehall kevinmehall merged commit 123ce06 into main May 25, 2025
8 checks passed
@kevinmehall kevinmehall deleted the errors branch May 25, 2025 18:50
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.

1 participant