mirror of
https://github.com/mik3y/usb-serial-for-android
synced 2025-06-07 07:56:20 +00:00
SerialInputOutputManager.writeAsync(): handle SerialTimeoutException
This commit is contained in:
parent
cab862599d
commit
0c0275675f
@ -1525,6 +1525,15 @@ public class DeviceTest {
|
|||||||
data = telnet.read(2);
|
data = telnet.read(2);
|
||||||
assertEquals(2, data.length);
|
assertEquals(2, data.length);
|
||||||
usb.ioManager.setReadTimeout(200);
|
usb.ioManager.setReadTimeout(200);
|
||||||
|
|
||||||
|
// with internal SerialTimeoutException
|
||||||
|
TestBuffer tbuf = new TestBuffer(usb.writeBufferSize + 2*usb.writePacketSize);
|
||||||
|
usb.ioManager.setWriteTimeout(20); // tbuf len >= 128, needs 133msec @ 9600 baud
|
||||||
|
usb.setParameters(9600, 8, 1, UsbSerialPort.PARITY_NONE);
|
||||||
|
telnet.setParameters(9600, 8, 1, UsbSerialPort.PARITY_NONE);
|
||||||
|
usb.ioManager.writeAsync(tbuf.buf);
|
||||||
|
while(!tbuf.testRead(telnet.read(-1)))
|
||||||
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -9,6 +9,7 @@ package com.hoho.android.usbserial.util;
|
|||||||
import android.os.Process;
|
import android.os.Process;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.hoho.android.usbserial.driver.SerialTimeoutException;
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -254,7 +255,23 @@ public class SerialInputOutputManager implements Runnable {
|
|||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "Writing data len=" + len);
|
Log.d(TAG, "Writing data len=" + len);
|
||||||
}
|
}
|
||||||
mSerialPort.write(buffer, mWriteTimeout);
|
try {
|
||||||
|
mSerialPort.write(buffer, mWriteTimeout);
|
||||||
|
} catch (SerialTimeoutException ex) {
|
||||||
|
synchronized (mWriteBufferLock) {
|
||||||
|
byte[] buffer2 = null;
|
||||||
|
int len2 = mWriteBuffer.position();
|
||||||
|
if (len2 > 0) {
|
||||||
|
buffer2 = new byte[len2];
|
||||||
|
mWriteBuffer.rewind();
|
||||||
|
mWriteBuffer.get(buffer2, 0, len2);
|
||||||
|
mWriteBuffer.clear();
|
||||||
|
}
|
||||||
|
mWriteBuffer.put(buffer, ex.bytesTransferred, buffer.length - ex.bytesTransferred);
|
||||||
|
if (buffer2 != null)
|
||||||
|
mWriteBuffer.put(buffer2);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user