Example #1
0
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
}
Example #2
0
File: usb.go Project: hanwen/usb
// 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)))
}
Example #3
0
File: usb.go Project: thequux/gousb
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
}