From 1887a0d89ea85ed908f11c0878cb9cb6044c57b0 Mon Sep 17 00:00:00 2001 From: Klaus Reimer Date: Sun, 24 Feb 2013 16:02:56 +0100 Subject: [PATCH] Read multiple chunks if necessary --- .../de/ailis/usb4java/support/IrpQueue.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/ailis/usb4java/support/IrpQueue.java b/src/main/java/de/ailis/usb4java/support/IrpQueue.java index e29f661..4c69d94 100644 --- a/src/main/java/de/ailis/usb4java/support/IrpQueue.java +++ b/src/main/java/de/ailis/usb4java/support/IrpQueue.java @@ -141,13 +141,19 @@ public final class IrpQueue extends AbstractIrpQueue final int size = Math.min(len, descriptor.wMaxPacketSize() & 0xffff); final ByteBuffer buffer = ByteBuffer.allocateDirect(size); - final int result = usb_bulk_read(this.device.open(), - descriptor.bEndpointAddress(), buffer, getConfig().getTimeout()); - if (result < 0) throw new Usb4JavaException( - "Unable to read from interrupt endpoint", result); - buffer.rewind(); - buffer.get(data, offset, result); - return result; + int read = 0; + while (read < len) + { + buffer.rewind(); + final int result = usb_bulk_read(this.device.open(), + descriptor.bEndpointAddress(), buffer, getConfig().getTimeout()); + if (result < 0) throw new Usb4JavaException( + "Unable to read from interrupt endpoint", result); + buffer.rewind(); + buffer.get(data, offset + read, result); + read += result; + } + return read; } /**