From 11605b56ad6bcec05b835aca910d19be69e2fa7d Mon Sep 17 00:00:00 2001 From: Kamalakannan G <56466387+kamal-lab@users.noreply.github.com> Date: Wed, 5 May 2021 20:36:47 +0530 Subject: [PATCH] Updated bulk transfer method Currently I'm unable to transfer data like 10000bytes through syncWrite method. So, I split the data into small pockets. --- .../com/felhr/usbserial/UsbSerialDevice.java | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java index fe24aa4..0a95e56 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java @@ -30,6 +30,7 @@ public abstract class UsbSerialDevice implements UsbSerialInterface protected final UsbDeviceConnection connection; protected static final int USB_TIMEOUT = 0; + private static final int USB_MAX_BUFFER = 4096; protected SerialBuffer serialBuffer; @@ -196,7 +197,18 @@ public abstract class UsbSerialDevice implements UsbSerialInterface if(buffer == null) return 0; - return connection.bulkTransfer(outEndpoint, buffer, buffer.length, timeout); + int totalLength = buffer.length; + byte[] bArr2 = new byte[USB_MAX_BUFFER]; + int i3 = 0; + int i4 = 0; + while (totalLength > 0 && i3 < totalLength && i4 != -1) { + int min = Math.min(USB_MAX_BUFFER, totalLength - i3); + System.arraycopy(buffer, i3, bArr2, 0, min); + i4 = connection.bulkTransfer(outEndpoint, bArr2, min, timeout); + i3 += i4; + } + + return i3; }else { return -1; @@ -225,7 +237,18 @@ public abstract class UsbSerialDevice implements UsbSerialInterface if(buffer == null) return 0; - return connection.bulkTransfer(outEndpoint, buffer, offset, length, timeout); + int totalLength = buffer.length; + byte[] bArr2 = new byte[USB_MAX_BUFFER]; + int i3 = 0; + int i4 = 0; + while (totalLength > 0 && i3 < totalLength && i4 != -1) { + int min = Math.min(USB_MAX_BUFFER, totalLength - i3); + System.arraycopy(buffer, i3, bArr2, 0, min); + i4 = connection.bulkTransfer(outEndpoint, bArr2, min, timeout); + i3 += i4; + } + + return i3; }else { return -1;