From b15b9c6cd0e8d83ec12a868c10cf184217f51309 Mon Sep 17 00:00:00 2001 From: Christof Arnosti Date: Sun, 8 Mar 2020 15:25:55 +0100 Subject: usb-serial-for-android: Implement timeout-handling Since the Android USB stack and subsequently the usb-serial-for-android driver have problems with read-timeouts, the read-timeout is now implemented in AndroidSerial.java. Also, DC_STATUS_TIMEOUT is returned if there are less bytes returned than expected. Different chipsets seem to behave differently with usb-serial-for-android. On CP210x the read blocks until there is some data here, but on FTDI the chip seems to return whatever is currently in the buffer (so 0 bytes if the buffer is empty). This different behaviour should be mitigated by the changes by this commit. Signed-off-by: Christof Arnosti --- core/serial_usb_android.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'core') diff --git a/core/serial_usb_android.cpp b/core/serial_usb_android.cpp index a5db132ae..8f53c56bb 100644 --- a/core/serial_usb_android.cpp +++ b/core/serial_usb_android.cpp @@ -141,7 +141,11 @@ static dc_status_t serial_usb_android_read(void *io, void *data, size_t size, si env->GetByteArrayRegion(array, 0, retval, (jbyte *) data); env->DeleteLocalRef(array); TRACE (device->context, "%s: actual read size: %i", __FUNCTION__, retval); - return DC_STATUS_SUCCESS; + + if (retval < size) + return DC_STATUS_TIMEOUT; + else + return DC_STATUS_SUCCESS; } -- cgit v1.2.3-70-g09d2