Use the calculated max iso packet size.
This commit is contained in:
19
usb/iso.go
19
usb/iso.go
@@ -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)),
|
||||||
|
Reference in New Issue
Block a user