26 Commits

Author SHA1 Message Date
Kuba Raczkowski
606016adee Android support via fileDescriptor (#130)
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>
2024-09-08 21:40:30 +02:00
Jamil Djadala
2f9ed92cb8 suppress 'interrupted [code -10]' log message. resolve #87 (#121) 2024-02-24 22:08:57 +01:00
Will McEnaney
6ad122da6a Add Path to DeviceDesc (#101)
Populates information about device port path in the device descriptor.
2021-11-10 16:04:13 +01:00
Sebastian Zagrodzki
bdb184b25c Make golint fail on errors. (#105)
* make lint fail on errors
* fix lint errors
2021-11-02 12:52:11 +01:00
danielpaulus
0ce3a07f8e Dereference device with a defer call to prevent memory leaks (#98)
We should always dereference devices. c.libusb.open is keeping its own internal reference so there is no risk of breaking anything.
2021-11-01 21:40:49 +01:00
Sebastian Zagrodzki
0995919da4 Since go 1.15 new() on CGo structs is no longer supported: (#85)
./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.
2020-11-09 09:50:43 +01:00
Sebastian Zagrodzki
9ad54830f4 Support malformed interface descriptors (#79)
* 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.
2020-04-28 11:32:10 +02:00
Sebastian Zagrodzki
da849d96b5 Add context-aware read/write (#57)
Adds ReadContext/WriteContext methods to endpoints and to streams. Update rawread example tool to use ReadContext for implementation of "timeout" flag.
2018-11-05 15:33:31 +01:00
Sebastian Zagrodzki
92967a7d10 Use gousb_set_debug instead of libusb_set_debug in one more place. (#44)
* 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.
2018-06-16 20:22:24 +02:00
Sebastian Zagrodzki
c6e780971f Support libusb_set_option in additon to libusb_set_debug. (#39)
* 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.
2018-05-23 16:07:03 +02:00
CriJonsi
01840c1d23 Add the number of the USB port in the DeviceDesc structure (#18) 2017-09-07 17:27:58 +02:00
zagrodzki
c113a5e0de Parallelize tests (#17)
* 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.
2017-09-04 16:55:47 +02:00
zagrodzki
f9aba6fab5 Config and interface description (#16)
* 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.
2017-09-04 14:17:34 +02:00
zagrodzki
cf19eb7001 Fix a race condition in reuse of the same malloc result (#15)
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.
2017-09-04 12:52:42 +02:00
Deomid Ryabkov
757722bf8e Add Device.Manufacturer(), .Product() and .SerialNumber() (#14) 2017-09-04 00:42:55 +02:00
zagrodzki
1aaa100bdb Allocate libusb buffers in C (#11)
* 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.
2017-08-29 12:11:04 +02:00
Nico MT
bc91dd3f2c Extend the autodetach behavior
Detach interfaces before trying to change the config, as libusb doesn't handle that automatically.
2017-07-21 21:15:49 +02:00
Sebastian Zagrodzki
2b78100ce3 Allow the same endpoint number to be reused for IN and OUT endpoints
separately, effectively allowing two endpoints with the same number
- numbers are no unique, only endpoint addresses are.
2017-06-13 23:04:34 +02:00
Sebastian Zagrodzki
688cb291dd Remove unused references to iso_packet_desc field in libusb_transfer. 2017-05-07 17:54:55 +02:00
Sebastian Zagrodzki
a367f386ff populate MaxControlPacketSize 2017-05-07 13:42:09 +02:00
Sebastian Zagrodzki
b0df83bff6 Add PollInterval specifications. 2017-05-06 13:16:48 +02:00
Sebastian Zagrodzki
d68d0c1a41 Rename more "Info" fields to "Desc" 2017-05-06 02:52:19 +02:00
Sebastian Zagrodzki
4991f9c89b use ConfigDesc, InterfaceDesc and EndpointDesc. 2017-05-06 02:43:16 +02:00
Sebastian Zagrodzki
e5961a7cc4 rename ConfigInfo to ConfigDesc 2017-05-06 02:40:09 +02:00
Sebastian Zagrodzki
fedc9864dd rename Descriptor to DeviceDesc 2017-05-06 02:36:45 +02:00
Sebastian Zagrodzki
5200a36191 Move files from gousb/usb to gousb 2017-05-06 00:11:11 +02:00