diff --git a/usbserial/src/androidTest/java/com/felhr/tests/usbserial/SerialBufferTest.java b/usbserial/src/androidTest/java/com/felhr/tests/usbserial/SerialBufferTest.java index efdabe5..db1c428 100644 --- a/usbserial/src/androidTest/java/com/felhr/tests/usbserial/SerialBufferTest.java +++ b/usbserial/src/androidTest/java/com/felhr/tests/usbserial/SerialBufferTest.java @@ -7,8 +7,9 @@ import junit.framework.TestCase; import org.junit.Assert; import org.junit.Test; +import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.Random; @@ -37,46 +38,96 @@ public class SerialBufferTest extends TestCase { @Test public void testBigSimpleWriteBuffer(){ - Arrays.fill(bigBuffer, (byte) 0x0A); - serialBuffer = new SerialBuffer(true); - serialBuffer.putWriteBuffer(bigBuffer); - byte[] dataReceived = serialBuffer.getWriteBuffer(); - Assert.assertArrayEquals(bigBuffer, dataReceived); + try { + new Random().nextBytes(bigBuffer); + serialBuffer = new SerialBuffer(true); + serialBuffer.putWriteBuffer(bigBuffer); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream( ); + + while(outputStream.size() < bigBuffer.length){ + byte[] srcData = serialBuffer.getWriteBuffer(); + outputStream.write(srcData); + } + + byte[] srcBuffered = outputStream.toByteArray(); + + Assert.assertArrayEquals(bigBuffer, srcBuffered); + } catch (IOException e) { + e.printStackTrace(); + } } @Test public void testSuperBigSimpleWriteBuffer(){ - new Random().nextBytes(bigBuffer2); - serialBuffer = new SerialBuffer(true); - serialBuffer.putWriteBuffer(bigBuffer2); - byte[] dataReceived = serialBuffer.getWriteBuffer(); - Assert.assertArrayEquals(bigBuffer2, dataReceived); + try { + new Random().nextBytes(bigBuffer2); + serialBuffer = new SerialBuffer(true); + serialBuffer.putWriteBuffer(bigBuffer2); + + ByteArrayOutputStream outputStream = new ByteArrayOutputStream( ); + + while(outputStream.size() < bigBuffer2.length){ + byte[] srcData = serialBuffer.getWriteBuffer(); + outputStream.write(srcData); + } + + byte[] srcBuffered = outputStream.toByteArray(); + + Assert.assertArrayEquals(bigBuffer2, srcBuffered); + } catch (IOException e) { + e.printStackTrace(); + } } @Test public void testSimpleWriteBufferAsync1(){ - new Random().nextBytes(bigBuffer2); - serialBuffer = new SerialBuffer(true); + try { + new Random().nextBytes(bigBuffer2); + serialBuffer = new SerialBuffer(true); - WriterThread writerThread = new WriterThread(serialBuffer, bigBuffer2); - writerThread.start(); + WriterThread writerThread = new WriterThread(serialBuffer, bigBuffer2); + writerThread.start(); - while(writerThread.getState() != Thread.State.TERMINATED){/*Busy waiting*/} + while(writerThread.getState() != Thread.State.TERMINATED){/*Busy waiting*/} - byte[] dataReceived = serialBuffer.getWriteBuffer(); - Assert.assertArrayEquals(bigBuffer2, dataReceived); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream( ); + + while(outputStream.size() < bigBuffer2.length){ + byte[] srcData = serialBuffer.getWriteBuffer(); + outputStream.write(srcData); + } + + byte[] dataReceived = outputStream.toByteArray(); + + Assert.assertArrayEquals(bigBuffer2, dataReceived); + } catch (IOException e) { + e.printStackTrace(); + } } @Test public void testSimpleWriteBufferAsync2(){ - new Random().nextBytes(bigBuffer2); - serialBuffer = new SerialBuffer(true); + try { + new Random().nextBytes(bigBuffer2); + serialBuffer = new SerialBuffer(true); - WriterThread writerThread = new WriterThread(serialBuffer, bigBuffer2, Thread.currentThread()); - writerThread.start(); + WriterThread writerThread = new WriterThread(serialBuffer, bigBuffer2, Thread.currentThread()); + writerThread.start(); - byte[] dataReceived = serialBuffer.getWriteBuffer(); - Assert.assertArrayEquals(bigBuffer2, dataReceived); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream( ); + + while(outputStream.size() < bigBuffer2.length){ + byte[] srcData = serialBuffer.getWriteBuffer(); + outputStream.write(srcData); + } + + byte[] dataReceived = outputStream.toByteArray(); + + Assert.assertArrayEquals(bigBuffer2, dataReceived); + } catch (IOException e) { + e.printStackTrace(); + } } // Testing ReadBuffer diff --git a/usbserial/src/main/java/com/felhr/usbserial/SerialBuffer.java b/usbserial/src/main/java/com/felhr/usbserial/SerialBuffer.java index 2b86071..407c073 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/SerialBuffer.java +++ b/usbserial/src/main/java/com/felhr/usbserial/SerialBuffer.java @@ -1,5 +1,6 @@ package com.felhr.usbserial; +import java.io.EOFException; import java.nio.ByteBuffer; import java.util.Arrays; @@ -8,6 +9,7 @@ import okio.Buffer; public class SerialBuffer { static final int DEFAULT_READ_BUFFER_SIZE = 16 * 1024; + static final int MAX_BULK_BUFFER = 16 * 1024; private ByteBuffer readBuffer; private SynchronizedBuffer writeBuffer; private byte[] readBufferCompatible; // Read buffer for android < 4.2 @@ -117,8 +119,17 @@ public class SerialBuffer e.printStackTrace(); } } - - byte[] dst = buffer.readByteArray(); + byte[] dst; + if(buffer.size() <= MAX_BULK_BUFFER){ + dst = buffer.readByteArray(); + }else{ + try { + dst = buffer.readByteArray(MAX_BULK_BUFFER); + } catch (EOFException e) { + e.printStackTrace(); + return new byte[0]; + } + } if(debugging) UsbSerialDebugger.printLogGet(dst, true); diff --git a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java index 1cad68f..d2bb509 100644 --- a/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java +++ b/usbserial/src/main/java/com/felhr/usbserial/UsbSerialDevice.java @@ -29,7 +29,7 @@ public abstract class UsbSerialDevice implements UsbSerialInterface protected final UsbDevice device; protected final UsbDeviceConnection connection; - protected static final int USB_TIMEOUT = 5000; + protected static final int USB_TIMEOUT = 0; protected SerialBuffer serialBuffer;