Date: Thu, 4 Jun 2009 12:07:27 GMT From: Sylvestre Gallon <syl@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 163484 for review Message-ID: <200906041207.n54C7Rwg062096@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=163484 Change 163484 by syl@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)); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906041207.n54C7Rwg062096>