--- darwin.c.orig 2012-09-17 09:29:57.000000000 -0400
+++ darwin.c 2012-09-17 09:48:45.000000000 -0400
return "invalid argument";
return "transaction aborted";
+ case kIOReturnNotResponding:
+ return "the device is not responding";
case kIOUSBNoAsyncPortErr:
case kIOReturnExclusiveAccess:
+ case kIOReturnNotResponding:
io_cf_plugin_ref_t *plugInInterface = NULL;
if (!IOIteratorIsValid (deviceIterator) || !(usbDevice = IOIteratorNext(deviceIterator)))
IOUSBFindInterfaceRequest request;
struct darwin_dev_handle *device;
struct rw_complete_arg *rw_arg = (struct rw_complete_arg *)refcon;
- fprintf(stderr, "io async operation completed: %s, size=%lu, result=0x%08x\n", darwin_error_str(result),
- (UInt32)io_size, result);
+ fprintf(stderr, "io async operation completed: %s, size=%llu, result=0x%08llx\n", darwin_error_str(result),
+ (UInt64)io_size, (SInt64) result);
rw_arg->io_size = (UInt32)io_size;
if (result == kIOReturnSuccess) {
/* wait for write to complete */
- if (CFRunLoopRunInMode(kCFRunLoopDefaultMode, (timeout+999)/1000, true) == kCFRunLoopRunTimedOut) {
- (*(device->interface))->AbortPipe(device->interface, pipeRef);
- CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true); /* Pick up aborted callback */
- fprintf(stderr, "usb_bulk_read: input timed out\n");
CFRunLoopRemoveSource(CFRunLoopGetCurrent(), cfSource, kCFRunLoopDefaultMode);