Rename extract_data to extract_iso_data, add extract_data for use by

other transfer types.
This commit is contained in:
Sebastian Zagrodzki
2017-02-10 21:45:26 +01:00
parent 9018981e65
commit 9e50cd8c1c
2 changed files with 26 additions and 1 deletions

View File

@@ -64,7 +64,26 @@ void print_xfer(struct libusb_transfer *xfer) {
}
}
// extract data from a non-isochronous transfer.
int extract_data(struct libusb_transfer *xfer, void *raw, int max, unsigned char *status) {
int i;
unsigned char *in = xfer->buffer;
unsigned char *out = raw;
int len = xfer->actual_length;
if (len > max) {
len = max;
}
memcpy(out, in, len);
if (xfer->status != 0 && *status == 0) {
*status = xfer->status;
}
return len;
}
// extract data from an isochronous transfer. Very similar to extract_data, but
// acquires data from xfer->iso_packet_desc array instead of xfer attributes.
int extract_iso_data(struct libusb_transfer *xfer, void *raw, int max, unsigned char *status) {
int i;
int copied = 0;
unsigned char *in = xfer->buffer;

View File

@@ -18,6 +18,7 @@ package usb
#include <libusb-1.0/libusb.h>
int extract_data(struct libusb_transfer *xfer, void *data, int max, unsigned char *status);
int extract_iso_data(struct libusb_transfer *xfer, void *data, int max, unsigned char *status);
int submit(struct libusb_transfer *xfer);
*/
import "C"
@@ -50,7 +51,12 @@ func (t *usbTransfer) wait(b []byte) (n int, err error) {
case <-t.done:
}
var status uint8
n = int(C.extract_data(t.xfer, unsafe.Pointer(&b[0]), C.int(len(b)), (*C.uchar)(unsafe.Pointer(&status))))
switch TransferType(t.xfer._type) {
case TRANSFER_TYPE_ISOCHRONOUS:
n = int(C.extract_iso_data(t.xfer, unsafe.Pointer(&b[0]), C.int(len(b)), (*C.uchar)(unsafe.Pointer(&status))))
default:
n = int(C.extract_data(t.xfer, unsafe.Pointer(&b[0]), C.int(len(b)), (*C.uchar)(unsafe.Pointer(&status))))
}
if status != 0 {
err = TransferStatus(status)
}