kr = (*h->interface)->ReadPipe(h->interface, h->end_point[0], data, &size);
- if (kIOReturnSuccess != kr) {
- LOG_DEBUG("Unable to perform bulk read (%08x)\n", kr);
- return -1;
+ if (kIOUSBPipeStalled == kr) {
+ LOG_DEBUG("Pipe stalled, clearing stall.\n");
+ (*h->interface)->ClearPipeStall(h->interface, h->end_point[0]);
+ kr = (*h->interface)->ReadPipe(h->interface, h->end_point[0], data, &size);
}
- return 0;
+ if (kIOReturnSuccess == kr) {
+ return 0;
+ }
+
+ LOG_DEBUG("Unable to perform bulk read (%08x)\n", kr);
+ return -1;
}
int sdb_usb_close(usb_handle *h) {