PERFORCE change 163484 for review
Sylvestre Gallon
syl at FreeBSD.org
Thu Jun 4 12:07:30 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163484
Change 163484 by syl at syl_rincewind on 2009/06/04 12:07:08
Fix transfer flag in interrupt transfers.
Affected files ...
.. //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#7 edit
Differences ...
==== //depot/projects/soc2009/syl_usb/src/lib/libusb/libusb10_io.c#7 (text+ko) ====
@@ -558,12 +558,13 @@
return (ret);
}
-int
-libusb_bulk_transfer(struct libusb_device_handle *devh,
+static int
+do_transfer(struct libusb_device_handle *devh,
unsigned char endpoint, unsigned char *data, int length,
- int *transferred, unsigned int timeout)
+ int *transferred, unsigned int timeout, int type)
{
struct libusb_transfer *xfer;
+ libusb_context *ctx;
int complet;
int ret;
@@ -574,9 +575,11 @@
if (xfer == NULL)
return (LIBUSB_ERROR_NO_MEM);
+ ctx = devh->dev->ctx;
+
xfer->dev_handle = devh;
xfer->endpoint = endpoint;
- xfer->type = LIBUSB_TRANSFER_TYPE_BULK;
+ xfer->type = type;
xfer->timeout = timeout;
xfer->buffer = data;
xfer->length = length;
@@ -589,16 +592,18 @@
return (ret);
}
- while (!complet)
- if ((ret = libusb_handle_events(devh->dev->ctx)) < 0) {
+ while (complet == 0) {
+ if ((ret = libusb_handle_events(ctx)) < 0) {
libusb_cancel_transfer(xfer);
libusb_free_transfer(xfer);
- while (!complet)
- if (libusb_handle_events(devh->dev->ctx))
- break;
+ while (complet == 0) {
+ if (libusb_handle_events(ctx))
+ break ;
+ }
return (ret);
}
-
+ }
+
*transferred = xfer->actual_length;
switch (xfer->status) {
case LIBUSB_TRANSFER_COMPLETED:
@@ -618,14 +623,23 @@
return (0);
}
+int
+libusb_bulk_transfer(struct libusb_device_handle *devh,
+ unsigned char endpoint, unsigned char *data, int length,
+ int *transferred, unsigned int timeout)
+{
+ return (do_transfer(devh, endpoint, data, length, transferred,
+ timeout, LIBUSB_TRANSFER_TYPE_BULK));
+}
+
/*
* Need to fix xfer->type
*/
int
libusb_interrupt_transfer(struct libusb_device_handle *devh,
- unsigned char endpoint, unsigned char *data, int length, int *transferred,
- unsigned int timeout)
+ unsigned char endpoint, unsigned char *data, int length,
+ int *transferred, unsigned int timeout)
{
- return (libusb_bulk_transfer(devh, endpoint, data, length,
- transferred, timeout));
+ return (do_transfer(devh, endpoint, data, length, transferred,
+ timeout, LIBUSB_TRANSFER_TYPE_INTERRUPT));
}
More information about the p4-projects
mailing list