Move device handle to newUSBTransfer args, remove separate attach()
This commit is contained in:
@@ -62,11 +62,10 @@ func (e *endpoint) transfer(buf []byte, timeout time.Duration) (int, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tt := e.TransferType()
|
tt := e.TransferType()
|
||||||
t, err := newUSBTransfer(e.EndpointInfo, buf, timeout)
|
t, err := newUSBTransfer(e.Device.handle, e.EndpointInfo, buf, timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
t.attach(e.Device.handle)
|
|
||||||
defer t.free()
|
defer t.free()
|
||||||
|
|
||||||
if err := t.submit(); err != nil {
|
if err := t.submit(); err != nil {
|
||||||
|
@@ -35,17 +35,16 @@ func xfer_callback(cptr unsafe.Pointer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type usbTransfer struct {
|
type usbTransfer struct {
|
||||||
|
// xfer is the allocated libusb_transfer.
|
||||||
xfer *C.struct_libusb_transfer
|
xfer *C.struct_libusb_transfer
|
||||||
|
// buf is the buffer allocated for the transfer. Both buf and xfer.buffer
|
||||||
|
// point to the same piece of memory.
|
||||||
buf []byte
|
buf []byte
|
||||||
|
// done is blocking until the transfer is complete and data and transfer
|
||||||
|
// status are available.
|
||||||
done chan struct{}
|
done chan struct{}
|
||||||
}
|
}
|
||||||
|
|
||||||
type deviceHandle *C.libusb_device_handle
|
|
||||||
|
|
||||||
func (t *usbTransfer) attach(dev deviceHandle) {
|
|
||||||
t.xfer.dev_handle = dev
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *usbTransfer) submit() error {
|
func (t *usbTransfer) submit() error {
|
||||||
t.done = make(chan struct{})
|
t.done = make(chan struct{})
|
||||||
t.xfer.user_data = (unsafe.Pointer)(&t.done)
|
t.xfer.user_data = (unsafe.Pointer)(&t.done)
|
||||||
@@ -80,7 +79,9 @@ func (t *usbTransfer) free() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newUSBTransfer(ei EndpointInfo, buf []byte, timeout time.Duration) (*usbTransfer, error) {
|
type deviceHandle *C.libusb_device_handle
|
||||||
|
|
||||||
|
func newUSBTransfer(dev deviceHandle, ei EndpointInfo, buf []byte, timeout time.Duration) (*usbTransfer, error) {
|
||||||
var isoPackets int
|
var isoPackets int
|
||||||
tt := ei.TransferType()
|
tt := ei.TransferType()
|
||||||
if tt == TRANSFER_TYPE_ISOCHRONOUS {
|
if tt == TRANSFER_TYPE_ISOCHRONOUS {
|
||||||
@@ -92,6 +93,7 @@ func newUSBTransfer(ei EndpointInfo, buf []byte, timeout time.Duration) (*usbTra
|
|||||||
return nil, fmt.Errorf("libusb_alloc_transfer(%d) failed", isoPackets)
|
return nil, fmt.Errorf("libusb_alloc_transfer(%d) failed", isoPackets)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xfer.dev_handle = dev
|
||||||
xfer.timeout = C.uint(timeout / time.Millisecond)
|
xfer.timeout = C.uint(timeout / time.Millisecond)
|
||||||
xfer.endpoint = C.uchar(ei.Address)
|
xfer.endpoint = C.uchar(ei.Address)
|
||||||
xfer._type = C.uchar(tt)
|
xfer._type = C.uchar(tt)
|
||||||
|
Reference in New Issue
Block a user