send ZLP to terminate packet size aligned transfers #2564
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Describe the PR
add NCM transfer termination by ZLP if necessary.
If NCM transfer aligns with (multiple) USB packet size the transfer has to be terminated with a ZLP.
This PR also lowers the likelihood of needing a ZLP to terminate a transfer.
Additional context
The driver implementation increased likelihood for this happening by always sending a multiple of 4 bytes in an NCM transfer, caused by including the padding bytes to the next NCM datagram, this however is not required. So by only sending the actual NCM payload length (without the padding to a next, not appended, NCM datagram) the complete USB transfer is no longer always a multiple of 4 bytes, reducing the likelihood of hitting a multiple of USB packet size. Thus terminating the transfer by short packet instead of requiring an extra ZLP.
#2068 Does mention the ZLP problem as well, but aims to improve performance.
Instead of replacing the driver completely (like #2227 ) this PR aims to just fix this one bug with minimal impact.