macOS: Fix set_configuration and reset by using USBDeviceOpen #88
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.
Fixes #87
USBDeviceOpen
is not required for claiming interfaces. The documentation says it's required for control transfers, but it works without. It is, however, required forset_configuration
andreset
.Having an interface claimed does not cause
set_configuration
andreset
to fail on macOS like it does on Linux. After doing some testing, I ended up doing what libusb does and attempting toUSBDeviceOpen
when opening a device to try to get exclusive access, but ignoring failures, and trying again and requiring success only beforeset_configuration
andreset
. That's not perfect -- you can be the second process to open a device and failUSBDeviceOpen
, then the first process closes it, and a third process is then able to call these methods, but I can't find a better way.