summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoi-Ho Chan <hoiho.chan@gmail.com>2010-07-27 21:04:17 -0600
committerPete Batard <pbatard@gmail.com>2010-07-29 11:25:18 +0100
commitf1cc768c9f036f14d61d5fd6fc3061e7f2ba1ba0 (patch)
tree31b2d186fb5bd4537cdb344267c645ceba1cc86e
parent8f014a89fba27091698d55cab206e9325655efbc (diff)
downloadlibusb-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--AUTHORS1
-rw-r--r--libusb/os/darwin_usb.c4
2 files changed, 4 insertions, 1 deletions
diff --git a/AUTHORS b/AUTHORS
index cb7a061..4522897 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -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 */