Use the calculated max iso packet size.

This commit is contained in:
Sebastian Zagrodzki
2017-02-05 04:16:57 +01:00
parent efc611f455
commit a6e284610b

View File

@@ -37,10 +37,8 @@ func iso_callback(cptr unsafe.Pointer) {
} }
func (end *endpoint) allocTransfer() *Transfer { func (end *endpoint) allocTransfer() *Transfer {
// Use libusb_get_max_iso_packet_size ?
const ( const (
iso_packets = 8 // 128 // 242 iso_packets = 8 // 128 // 242
packet_size = 2 * 960 // 1760
) )
xfer := C.libusb_alloc_transfer(C.int(iso_packets)) xfer := C.libusb_alloc_transfer(C.int(iso_packets))
@@ -48,11 +46,22 @@ func (end *endpoint) allocTransfer() *Transfer {
log.Printf("usb: transfer allocation failed?!") log.Printf("usb: transfer allocation failed?!")
return nil 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) buf := make([]byte, iso_packets*packet_size)
done := make(chan struct{}, 1) done := make(chan struct{}, 1)
xfer.dev_handle = end.Device.handle xfer.dev_handle = handle
xfer.endpoint = C.uchar(end.Address) xfer.endpoint = C.uchar(end.Address)
xfer._type = C.LIBUSB_TRANSFER_TYPE_ISOCHRONOUS xfer._type = C.LIBUSB_TRANSFER_TYPE_ISOCHRONOUS
@@ -60,7 +69,7 @@ func (end *endpoint) allocTransfer() *Transfer {
xfer.length = C.int(len(buf)) xfer.length = C.int(len(buf))
xfer.num_iso_packets = iso_packets 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{ pkts := *(*[]C.struct_libusb_packet_descriptor)(unsafe.Pointer(&reflect.SliceHeader{
Data: uintptr(unsafe.Pointer(&xfer.iso_packet_desc)), Data: uintptr(unsafe.Pointer(&xfer.iso_packet_desc)),