Using the Host API how are you meant to know how many bytes have been returned from a UsbRequest.queue() function? In the UsbConnection.requestWait() function we return the request that was issued but we don't return the number of bytes. Asynchronous USB transfers can't work if we don't know this value.
request = new UsbRequest(); request.setClientData(bufferIndex); request.initialize(usbConnection, bulkInEndpoint); request.queue(buffer, MAX_TRANSFER_SIZE); UsbRequest request = usbConnection.requestWait(); if (request != null) { // process the data.... In the native code I can see that we know how many bytes were read but this information isn't passed back up into our Java application: struct usb_request *usb_request_wait(struct usb_device *dev) // Native code....{ struct usbdevfs_urb *urb = NULL; struct usb_request *req = NULL; int res; while (1) { int res = ioctl(dev->fd, USBDEVFS_REAPURB, &urb); D("USBDEVFS_REAPURB returned %d\n", res); if (res < 0) { if(errno == EINTR) { continue; } D("[ reap urb - error ]\n"); return NULL; } else { D("[ urb @%p status = %d, actual = %d ]\n", urb, urb->status, urb->actual_length); req = (struct usb_request*)urb->usercontext; req->actual_length = urb->actual_length; } break; } return req;} static jobjectandroid_hardware_UsbDeviceConnection_request_wait(JNIEnv *env, jobject thiz) // Java wrapper...{ struct usb_device* device = get_device_from_object(env, thiz); if (!device) { LOGE("device is closed in native_request_wait"); return NULL; } struct usb_request* request = usb_request_wait(device); if (request) return (jobject)request->client_data; // Ignores the actual_length field?!?!? else return NULL;} -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en