nrf52: usb: better check state on IN resume #1947
Merged
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.
While running a modified
printf_long
test app that prints a long string in a loop on nano33ble, I got an assertion failure:This happens because the resume_in function was only checking the state of the DMA, but not of the IN endpoint, which might be finished with DMA but the entire transfer hasn't finished. I think this wasn't occurring before because with short IN transfers, the end of the DMA and the end of the transfer occur very close to each other and the endpoint wasn't in the
InData
state very long. However, with a longer transfer theInData
state is longer and thus this assertion could fail.The fix is just to check both states, and enqueue the resume in request if either is true.
Testing Strategy
This pull request was tested by running printf_long in a loop on nano33ble. It actually works!
TODO or Help Wanted
You can see my comment about the driver calling
packet_in()
as a direct result of the client callingendpoint_resume_in()
. That should be fixed at some point, or the USB HIL should be changed so that there are no longer upcalls asking for data.Documentation Updated
/docs
, or no updates are required.Formatting
make prepush
.