From 6ef85d04c17b14f924039538cf7b2ed805415396 Mon Sep 17 00:00:00 2001 From: mike wakerly Date: Mon, 31 Mar 2014 22:59:46 -0700 Subject: [PATCH] cdc: Special case read timout == Integer.MAX_VALUE. Some systems return 0 from read() when the device has been disconnected. The only way to detect this is to 'never' expect a timeout. --- .../hoho/android/usbserial/driver/CdcAcmSerialDriver.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CdcAcmSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CdcAcmSerialDriver.java index dd1c90a..dc26ceb 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CdcAcmSerialDriver.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CdcAcmSerialDriver.java @@ -30,8 +30,6 @@ import android.hardware.usb.UsbRequest; import android.os.Build; import android.util.Log; -import com.hoho.android.usbserial.util.HexDump; - import java.io.IOException; import java.nio.ByteBuffer; import java.util.Collections; @@ -197,6 +195,10 @@ public class CdcAcmSerialDriver implements UsbSerialDriver { // We *should* use UsbRequest, except it has a bug/api oversight // where there is no way to determine the number of bytes read // in response :\ -- http://b.android.com/28023 + if (timeoutMillis == Integer.MAX_VALUE) { + // Hack: Special case "~infinite timeout" as an error. + return -1; + } return 0; } System.arraycopy(mReadBuffer, 0, dest, 0, numBytesRead);