static int darwin_to_libusb (int result) {
switch (result) {
+ case kIOReturnUnderrun:
case kIOReturnSuccess:
return LIBUSB_SUCCESS;
case kIOReturnNotOpen:
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:
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 */