Skip to content

Commit 3f4eb76

Browse files
committed
Do bulk transfers in chunks so devices before 4.3 can be supported
1 parent dbbdaa1 commit 3f4eb76

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<uses-feature android:name="android.hardware.usb.host" />
77

88
<uses-sdk
9-
android:minSdkVersion="18"
9+
android:minSdkVersion="12"
1010
android:targetSdkVersion="19" />
1111

1212
<uses-permission android:name="android.permission.INTERNET" />

src/org/cgutman/usbip/service/UsbIpService.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,27 @@ public void run() {
190190

191191
int bytesTransferred = 0;
192192
while (bytesTransferred < bulkBuffer.length) {
193-
int res = context.devConn.bulkTransfer(selectedEndpoint, bulkBuffer, bytesTransferred,
194-
bulkBuffer.length - bytesTransferred, msg.interval);
193+
byte[] remainingBuffer = new byte[bulkBuffer.length - bytesTransferred];
194+
195+
if (msg.direction == UsbIpDevicePacket.USBIP_DIR_OUT) {
196+
// Copy input data into the new buffer
197+
System.arraycopy(bulkBuffer, bytesTransferred, remainingBuffer, 0, remainingBuffer.length);
198+
}
199+
200+
int res = context.devConn.bulkTransfer(selectedEndpoint, remainingBuffer,
201+
remainingBuffer.length, msg.interval);
195202
if (res < 0) {
196203
// Failed transfer terminates the bulk transfer
197204
System.err.println("Bulk Xfer failed: "+res);
198205
sendReply(replyOut, reply, ProtoDefs.ST_NA);
199206
return;
200207
}
201208

209+
if (msg.direction == UsbIpDevicePacket.USBIP_DIR_IN) {
210+
// Copy output data into the original buffer
211+
System.arraycopy(remainingBuffer, 0, bulkBuffer, bytesTransferred, res);
212+
}
213+
202214
bytesTransferred += res;
203215

204216
if (res < selectedEndpoint.getMaxPacketSize()) {

0 commit comments

Comments
 (0)