diff options
author | Hoi-Ho Chan <hoiho.chan@gmail.com> | 2010-07-27 21:04:17 -0600 |
---|---|---|
committer | Pete Batard <pbatard@gmail.com> | 2010-07-29 11:25:18 +0100 |
commit | f1cc768c9f036f14d61d5fd6fc3061e7f2ba1ba0 (patch) | |
tree | 31b2d186fb5bd4537cdb344267c645ceba1cc86e | |
parent | 8f014a89fba27091698d55cab206e9325655efbc (diff) | |
download | libusb-f1cc768c9f036f14d61d5fd6fc3061e7f2ba1ba0.tar.gz |
Darwin: handle kIOReturnUnderrunpbr284
This return code indicates that the device returned a data packet
less than the max packet size. In libusb backend terms, this is
a successful transfer.
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | libusb/os/darwin_usb.c | 4 |
2 files changed, 4 insertions, 1 deletions
@@ -14,6 +14,7 @@ David Engraf David Moore Felipe Balbi Hans Ulrich Niedermann +Hoi-Ho Chan Ludovic Rousseau Martin Koegler Mikhail Gusarov diff --git a/libusb/os/darwin_usb.c b/libusb/os/darwin_usb.c index 6adcb27..fae75b4 100644 --- a/libusb/os/darwin_usb.c +++ b/libusb/os/darwin_usb.c @@ -90,6 +90,7 @@ static const char *darwin_error_str (int result) { static int darwin_to_libusb (int result) { switch (result) { + case kIOReturnUnderrun: case kIOReturnSuccess: return LIBUSB_SUCCESS; case kIOReturnNotOpen: @@ -1335,6 +1336,7 @@ static void darwin_async_io_callback (void *refcon, IOReturn result, void *arg0) static int darwin_transfer_status (struct usbi_transfer *itransfer, kern_return_t result) { switch (result) { + case kIOReturnUnderrun: case kIOReturnSuccess: return LIBUSB_TRANSFER_COMPLETED; case kIOReturnAborted: @@ -1371,7 +1373,7 @@ static void darwin_handle_callback (struct usbi_transfer *itransfer, kern_return usbi_info (ITRANSFER_CTX (itransfer), "handling %s completion with kernel status %d", isControl ? "control" : isBulk ? "bulk" : isIsoc ? "isoc" : "interrupt", result); - if (kIOReturnSuccess == result) { + if (kIOReturnSuccess == result || kIOReturnUnderrun == result) { if (isIsoc && tpriv->isoc_framelist) { /* copy isochronous results back */ |