Adds a new way to initialize the context, `ContextOptions`, and a new way to open devices, `OpenDeviceWithFileDescriptor`.
Combined they can be used to support Android devices, where device enumeration is not supported (can be now disabled through `ContextOptions`) and where USB devices can be opened in the Android SDK and passed over to gousb through a file descriptor.
Co-authored-by: Juan <994594+juaoose@users.noreply.github.com>
Co-authored-by: Kuba Raczkowski <kuba.raczkowski@spectricity.com>
./fakelibusb_test.go:101:87: libusbContext can't be allocated in Go; it is incomplete (or unallocatable)
./fakelibusb_test.go:131:10: libusbDevHandle can't be allocated in Go; it is incomplete (or unallocatable)
Use CGo malloc to obtain unique pointers.
* Add an invalid interface descriptor to one of the test devices.
* Add a test for getting that interface description.
* Handle the malformed interface/alternate setting descriptors, where
interface/alt numbers don't follow the spec (not 0-based, not contiguous
etc.)
Addresses issue #65.
Adds ReadContext/WriteContext methods to endpoints and to streams. Update rawread example tool to use ReadContext for implementation of "timeout" flag.
* One more place that should call gousb_set_debug instead of
libusb_set_debug.
* Better comment to explain what sort of benchmarking this is needed for.
* Support libusb_set_option in additon to libusb_set_debug.
The latter is deprecated in libusb 1.0.22 and later.
* Move the "debug level constants" todo to the right place. Add a comment
about libusb 1.0.22 exported API version.
* Store a reference to libusb implementation in the context, transfers
and some more places. Remove the global libusb variable.
* Parallelize tests.
* Fix the link in README.
* Add APIs for config and interface descriptors. Split out the common
parts of selecting a config descriptor from device desc and
selecting a setting descriptor from a config desc.
* Parallelize the few tests that actually can be parallelized safely.
Add comments where they can't. Note to self: it would be beneficial
to restructure the fakelibusb to index all properties of the lib
with the used context. That way a libusb implementation wouldn't need
to be referred via a shared variable.
In free(), remove Go references to the C memory before the C memory
itself is released. That ensures that a concurrent alloc()
will not try to insert the same pointer into the map that was not
yet removed.
* add alloc/free_transfer_and_buffer. Manages the buffer memory on the C
side.
* switch libusb.go to use the new alloc/free_transfer_and_buffer. Add
a new buffer() call to get access to the allocated buffer as a Go slice.
* Fake USB transfer uses the new alloc/free/buffer interface.
* Switch to the new libusb.alloc signature, where libusb owns the buffer.
* newUSBTransfer now allocates a separate buffer, do a copy on
endpoint.transfer.
* newUSBTransfer will now allocate it's own buffer.
* Enable autodetach in rawread.