Commit Graph

372 Commits

Author SHA1 Message Date
Sebastian Zagrodzki
550fe8d1f2 Introduce xferMap, avoid passing Go pointer into the C code.
Weirdness with memory barriers.
2017-04-26 21:32:49 +02:00
Sebastian Zagrodzki
dacae32d83 Tests for read transfers, starting on write transfers. 2017-04-23 22:58:30 +02:00
Sebastian Zagrodzki
b50bc8761f First version of streaming transfers. 2017-04-23 10:45:04 +02:00
Sebastian Zagrodzki
d92ea14c33 Add a test to catch invalud endpoint info. 2017-04-10 03:25:32 +02:00
Sebastian Zagrodzki
9cecdec977 Fix a bug where EndpointInfo would always be picked from the last
alternative setting.

When looking up matching EndpointInfo and InterfaceSetting for
an endpoint, a reference to range variable is stored. If range is
allowed to continue, the value of this variable will be updated.
It's a trick to allow use of "nil" pointer as a "found" variable, but it
requires a careful management of the range iterations.
2017-04-10 03:16:59 +02:00
Sebastian Zagrodzki
b0d5519c67 Change the iso packet size if the buffer is very small.
Previously number of iso packets could have amounted to a transfer
buffer larger than passed buffer, which could lead to overflow.

Now the number of bytes requested from device is always smaller or equal
to the buffer size.

In theory, it could lead to inefficiencies in transfer: if max packet
size is 1024 and user request 2046 bytes of data, transfer will return at most
1024 bytes, while it could use a more efficient 2 packets of 1023 bytes.
But at least it's correct now. It seems that for efficiency the user would
always use the reported max packet size anyway.

The device could still send more data than requested, but libusb takes
care of it.
2017-04-10 02:45:16 +02:00
Sebastian Zagrodzki
961f271746 rename setup to alternate, print endpoint description first. 2017-04-10 02:44:23 +02:00
Sebastian Zagrodzki
5efb68e45e iota used on the second line of const block starts from 1, not from 0... 2017-04-10 01:41:36 +02:00
Sebastian Zagrodzki
5150242633 Set slice length, since we don't use append. 2017-04-10 01:41:12 +02:00
Sebastian Zagrodzki
453e3832b2 Add tests for failed open. Add tests for OutEndpoint.Write 2017-04-10 01:28:21 +02:00
Sebastian Zagrodzki
b6794b7d45 Add a test for InEndpoint.Read. Use ID for vid/pid in OpenDevice... 2017-04-10 01:25:51 +02:00
Sebastian Zagrodzki
b1dcaa1195 Add Device.OutEndpoint, simplify endpoint test. 2017-04-10 01:11:38 +02:00
Sebastian Zagrodzki
57b10f0dd3 Remove OpenEndpoint, add InEndpoint for Read transfers. 2017-04-10 01:00:53 +02:00
Sebastian Zagrodzki
dd405348e9 move tests around 2017-04-09 20:55:37 +02:00
Sebastian Zagrodzki
128c206986 Move EndpointInfo to endpoint.go 2017-04-09 20:51:47 +02:00
Sebastian Zagrodzki
b7b8fbb50a references to gousb2.0-dev... 2017-04-09 20:48:07 +02:00
Sebastian Zagrodzki
aaef575b06 rename Setups to AltSettings 2017-04-09 20:45:35 +02:00
Sebastian Zagrodzki
8364724ca4 lint fixes. 2017-04-09 20:28:26 +02:00
Sebastian Zagrodzki
188fd8382d more comments 2017-04-09 20:27:37 +02:00
Sebastian Zagrodzki
56162d0105 Remove BCD.Int, add BCD.Major/Minor. Remove USB spec versions
- I don't expect them to get much use, and reuse of BCD for USB spec
version and device revision makes it somewhat confusing.
2017-04-09 20:25:16 +02:00
Sebastian Zagrodzki
a5c4de3a29 more comments. Rename USBError to just Error. 2017-04-09 19:41:44 +02:00
Sebastian Zagrodzki
87c7a873e9 Go naming for error codes. Export USBError type. 2017-04-09 19:27:33 +02:00
Sebastian Zagrodzki
54aed557d8 more comments 2017-04-09 19:18:11 +02:00
Sebastian Zagrodzki
b09de1cf09 more comments 2017-04-09 19:17:13 +02:00
Sebastian Zagrodzki
f668df87df OpenEndpoint for now takes an address - a device can have two endpoints
with the same number...
2017-04-09 19:08:42 +02:00
Sebastian Zagrodzki
c44b5b7307 OpenEndpoint now uses endpoint number, not endpoint address. 2017-04-09 18:57:43 +02:00
Sebastian Zagrodzki
f58798160d make addr() part of EndpointInfo 2017-04-09 18:55:41 +02:00
Sebastian Zagrodzki
13f4e95f2f Unexport bitmasks, they are only used internally. All values present
in exported structs are meaningful and the users should not need to use
bitmasks.
2017-04-09 18:53:49 +02:00
Sebastian Zagrodzki
3d62929e05 Replace EndpointDirection with a bool 2017-04-09 18:51:51 +02:00
Sebastian Zagrodzki
168b501d53 Rename IfClass/IfSubClass/IfProtocol to Class/SubClass/Protocol, these
fields occur within an interface descriptor.
2017-04-09 18:44:32 +02:00
Sebastian Zagrodzki
f91d53931a Use Protocol type for USB interface protocol. 2017-04-09 18:42:04 +02:00
Sebastian Zagrodzki
d3428d9b35 Use Class for classes in usbid. 2017-04-09 18:29:16 +02:00
Sebastian Zagrodzki
af00028b97 more comments, add Milliamperes type. 2017-04-09 18:15:48 +02:00
Sebastian Zagrodzki
e6f6a4f76e Use golint 2017-04-09 18:05:46 +02:00
Sebastian Zagrodzki
c437b39ef7 comments for endpointinfo type fields 2017-04-09 16:56:36 +02:00
Sebastian Zagrodzki
3e59eeac6c replace class/subclass with Class type 2017-04-09 16:41:38 +02:00
Sebastian Zagrodzki
6d9ea8e966 testDBPath is a const, not var... 2017-04-09 01:05:09 +02:00
Sebastian Zagrodzki
f2c4300ad5 testDBPath to package variables 2017-04-09 01:04:43 +02:00
Sebastian Zagrodzki
0566e701f6 add tests for URL fetching 2017-04-09 00:58:47 +02:00
Sebastian Zagrodzki
aa9661f705 move static data to testdata files 2017-04-09 00:38:42 +02:00
Sebastian Zagrodzki
fc9b74ed82 error.go is a C mapping file, like libusb.go 2017-04-09 00:24:32 +02:00
Sebastian Zagrodzki
83302ae558 add test for an interrupt endpoint. 2017-04-09 00:22:11 +02:00
Sebastian Zagrodzki
ab6b612d1b String of the endpoint should use EndpointInfo, not the default mapping
from InterfaceInfo.
2017-04-09 00:18:54 +02:00
Sebastian Zagrodzki
ca02c03241 since this is the only usecase, return a *libusbDevice for a new
pointer.
2017-04-09 00:12:39 +02:00
Sebastian Zagrodzki
3ec748db4c An invalid pointer triggers a runtime failure when passed as argument in
Go1.7:
runtime: bad pointer in frame
github.com/kylelemons/gousb/usb.(*fakeLibusb).open at 0xc420045ce0: 0x1
fatal error: invalid stack pointer

Use an arbitrary C-allocated pointer instead.
2017-04-09 00:10:15 +02:00
Sebastian Zagrodzki
648d3af9d8 use gousb2.0-dev for badges 2017-04-08 23:53:37 +02:00
Sebastian Zagrodzki
e0f30623b3 Modify EndpointInfo to provide meaningful data rather than raw USB
descriptor values. E.g. for the user, the distinction between
MaxIsoPkt and MaxPktSize is irrelevant, only the calculated max packet
size matters.
2017-04-08 23:49:10 +02:00
Sebastian Zagrodzki
d982ef5a37 Add constants for device speed. 2017-03-27 23:01:02 +02:00
Sebastian Zagrodzki
f3b2f37e3a Rename the rest of the constants. 2017-03-27 22:33:29 +02:00
Sebastian Zagrodzki
36241e869e more constants 2017-03-27 22:29:24 +02:00