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 <charno@charno.ch>
This commit is contained in:
Christof Arnosti 2020-03-08 15:25:55 +01:00 committed by Dirk Hohndel
parent fe932059fe
commit b15b9c6cd0
2 changed files with 13 additions and 5 deletions

View file

@ -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;
}