func (d *Device) transferN(endpoint uint8, data []byte, n int) error { if m := int(C.libusb_get_max_packet_size(d.dev, C.uchar(endpoint))); n == 0 { n = m } else if n > m { return errors.New("invalid packet size") } for len, off := len(data), 0; len > 0; { var transferred int if n > len { n = len } if err := C.libusb_bulk_transfer(d.handle, C.uchar(endpoint), (*C.uchar)(&data[off]), C.int(n), (*C.int)(unsafe.Pointer(&transferred)), 2500); err != C.LIBUSB_SUCCESS { return &libusbError{err} } len -= transferred off += transferred } return nil }
// Convenience function to retrieve the MaxPacketSize value for a particular endpoint in the active device configuration. func (d *Device) GetMaxPacketSize(endpoint byte) int { return int(C.libusb_get_max_packet_size(d.me(), C.uchar(endpoint))) }
func (dev *Device) GetMaxPacketSize(endpoint int) (int, *UsbError) { sz, err := decodeUsbError(C.libusb_get_max_packet_size(dev.device, C.uchar(endpoint))) return sz, err }