diff --git a/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/DeviceTest.java b/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/DeviceTest.java index cb17582..3d56c50 100644 --- a/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/DeviceTest.java +++ b/usbSerialForAndroid/src/androidTest/java/com/hoho/android/usbserial/DeviceTest.java @@ -1970,10 +1970,20 @@ public class DeviceTest { } else { usb.serialPort.getRI(); } - fail("error expected"); + fail("connection closed expected"); } catch (IOException ignored) { } catch (UnsupportedOperationException ignored) { } + try { + usb.serialPort.getRI(); + fail("connection closed expected"); + } catch (IOException ignored) { + } + // reset error + usb.close(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT)); + usb.open(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT, UsbWrapper.OpenCloseFlags.NO_IOMANAGER_THREAD)); + usb.serialPort.getRI(); + usb.serialPort.setRTS(true); } @Test 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 d158b80..02ae7a5 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 @@ -278,7 +278,7 @@ public class CdcAcmSerialDriver implements UsbSerialDriver { private void readControlLinesThreadFunction() { try { byte[] buffer = new byte[Math.max(SERIAL_STATE_PACKET_SIZE, mControlEndpoint.getMaxPacketSize())]; - while (!mStopReadControlLinesThread) { + while (!mStopReadControlLinesThread && mConnection!=null) { long endTime = MonotonicClock.millis() + 500; int readBytesCount = mConnection.bulkTransfer(mControlEndpoint, buffer, buffer.length, 500); if (readBytesCount == -1) { @@ -296,14 +296,14 @@ public class CdcAcmSerialDriver implements UsbSerialDriver { Log.d(TAG, "control line state " + Arrays.toString(buffer)); } } catch (Exception e) { - if (isOpen()) { - mReadControlLinesException = e; - } + mReadControlLinesException = e; } } private int getSerialState() throws IOException { - if ((mReadControlLinesThread == null) && (mReadControlLinesException == null)) { + if(mConnection == null) + throw new IOException("connection closed"); + if (mReadControlLinesThread == null) { synchronized (mReadControlLinesThreadLock) { if (mReadControlLinesThread == null) { mSerialState = 0; @@ -313,17 +313,12 @@ public class CdcAcmSerialDriver implements UsbSerialDriver { } } } - - Exception readControlLinesException = mReadControlLinesException; - if (readControlLinesException != null) { - mReadControlLinesException = null; - throw new IOException(readControlLinesException); + if (mReadControlLinesException != null) { + throw new IOException(mReadControlLinesException); } - return mSerialState; } - @Override protected void closeInt() { try { diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ProlificSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ProlificSerialDriver.java index 3041422..54362f6 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ProlificSerialDriver.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/ProlificSerialDriver.java @@ -218,14 +218,13 @@ public class ProlificSerialDriver implements UsbSerialDriver { } } } catch (Exception e) { - if (isOpen()) - mReadStatusException = e; + mReadStatusException = e; } //Log.d(TAG, "end control line status thread " + mStopReadStatusThread + " " + (mReadStatusException == null ? "-" : mReadStatusException.getMessage())); } private int getStatus() throws IOException { - if ((mReadStatusThread == null) && (mReadStatusException == null)) { + if (mReadStatusThread == null) { synchronized (mReadStatusThreadLock) { if (mReadStatusThread == null) { mStatus = 0; @@ -249,14 +248,9 @@ public class ProlificSerialDriver implements UsbSerialDriver { } } } - - /* throw and clear an exception which occurred in the status read thread */ - Exception readStatusException = mReadStatusException; if (mReadStatusException != null) { - mReadStatusException = null; - throw new IOException(readStatusException); + throw new IOException(mReadStatusException); } - return mStatus; }