From bf3b23ccd2986ffafe48bcc57d65b79b8a96ce4b Mon Sep 17 00:00:00 2001 From: Sebastian Zagrodzki Date: Thu, 23 Feb 2017 10:45:35 +0100 Subject: [PATCH] move all transfer C parts to libusb.go to alloc() --- usb/libusb.go | 9 +++++++-- usb/transfer.go | 11 ++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/usb/libusb.go b/usb/libusb.go index 00951d4..d5412a9 100644 --- a/usb/libusb.go +++ b/usb/libusb.go @@ -71,7 +71,7 @@ type libusbIntf interface { setAlt(*libusbDevHandle, uint8, uint8) error // endpoint - alloc(*libusbDevHandle, int) (*libusbTransfer, error) + alloc(*libusbDevHandle, uint8, TransferType, time.Duration, int, []byte) (*libusbTransfer, error) cancel(*libusbTransfer) error submit(*libusbTransfer) error free(*libusbTransfer) @@ -327,13 +327,18 @@ func (libusbImpl) setAlt(d *libusbDevHandle, iface, setup uint8) error { return fromUSBError(C.libusb_set_interface_alt_setting((*C.libusb_device_handle)(d), C.int(iface), C.int(setup))) } -func (libusbImpl) alloc(d *libusbDevHandle, isoPackets int) (*libusbTransfer, error) { +func (libusbImpl) alloc(d *libusbDevHandle, addr uint8, tt TransferType, timeout time.Duration, isoPackets int, buf []byte) (*libusbTransfer, error) { xfer := C.libusb_alloc_transfer(C.int(isoPackets)) if xfer == nil { return nil, fmt.Errorf("libusb_alloc_transfer(%d) failed", isoPackets) } xfer.dev_handle = (*C.libusb_device_handle)(d) + xfer.endpoint = C.uchar(addr) + xfer.timeout = C.uint(timeout / time.Millisecond) + xfer._type = C.uchar(tt) xfer.num_iso_packets = C.int(isoPackets) + xfer.buffer = (*C.uchar)((unsafe.Pointer)(&buf[0])) + xfer.length = C.int(len(buf)) return (*libusbTransfer)(xfer), nil } diff --git a/usb/transfer.go b/usb/transfer.go index 81f3da7..fcc0afb 100644 --- a/usb/transfer.go +++ b/usb/transfer.go @@ -133,24 +133,17 @@ func newUSBTransfer(dev *libusbDevHandle, ei EndpointInfo, buf []byte, timeout t } } - xfer, err := libusb.alloc(dev, isoPackets) + xfer, err := libusb.alloc(dev, ei.Address, tt, timeout, isoPackets, buf) if err != nil { return nil, err } - xfer.timeout = C.uint(timeout / time.Millisecond) - xfer.endpoint = C.uchar(ei.Address) - xfer._type = C.uchar(tt) - - xfer.buffer = (*C.uchar)((unsafe.Pointer)(&buf[0])) - xfer.length = C.int(len(buf)) - if tt == TRANSFER_TYPE_ISOCHRONOUS { libusb.setIsoPacketLengths(xfer, ei.MaxIsoPacket) } t := &usbTransfer{ - xfer: (*libusbTransfer)(xfer), + xfer: xfer, buf: buf, } runtime.SetFinalizer(t, func(t *usbTransfer) {