From a6e284610b9937b8d71036a0ca786f8ca64b8fcc Mon Sep 17 00:00:00 2001 From: Sebastian Zagrodzki Date: Sun, 5 Feb 2017 04:16:57 +0100 Subject: [PATCH] Use the calculated max iso packet size. --- usb/iso.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/usb/iso.go b/usb/iso.go index 3be4152..414ee9b 100644 --- a/usb/iso.go +++ b/usb/iso.go @@ -37,10 +37,8 @@ func iso_callback(cptr unsafe.Pointer) { } func (end *endpoint) allocTransfer() *Transfer { - // Use libusb_get_max_iso_packet_size ? const ( - iso_packets = 8 // 128 // 242 - packet_size = 2 * 960 // 1760 + iso_packets = 8 // 128 // 242 ) xfer := C.libusb_alloc_transfer(C.int(iso_packets)) @@ -48,11 +46,22 @@ func (end *endpoint) allocTransfer() *Transfer { log.Printf("usb: transfer allocation failed?!") return nil } + handle := end.Device.handle + dev := C.libusb_get_device(handle) + packet_size := C.libusb_get_max_iso_packet_size(dev, C.uchar(end.Address)) + switch packet_size { + case C.LIBUSB_ERROR_NOT_FOUND: + log.Printf("usb: get_max_iso_packet_size: endpoint does not exist") + return nil + case C.LIBUSB_ERROR_OTHER: + log.Printf("usb: get_max_iso_packet_size: unknown failure") + return nil + } buf := make([]byte, iso_packets*packet_size) done := make(chan struct{}, 1) - xfer.dev_handle = end.Device.handle + xfer.dev_handle = handle xfer.endpoint = C.uchar(end.Address) xfer._type = C.LIBUSB_TRANSFER_TYPE_ISOCHRONOUS @@ -60,7 +69,7 @@ func (end *endpoint) allocTransfer() *Transfer { xfer.length = C.int(len(buf)) xfer.num_iso_packets = iso_packets - C.libusb_set_iso_packet_lengths(xfer, packet_size) + C.libusb_set_iso_packet_lengths(xfer, C.uint(packet_size)) /* pkts := *(*[]C.struct_libusb_packet_descriptor)(unsafe.Pointer(&reflect.SliceHeader{ Data: uintptr(unsafe.Pointer(&xfer.iso_packet_desc)),