From 24187b3af604a832ef9722480dfd9bf907ab7132 Mon Sep 17 00:00:00 2001 From: kai-morich Date: Sat, 9 Nov 2019 22:48:00 +0100 Subject: [PATCH] refactor duplicated code in close method --- .../usbserial/driver/CdcAcmSerialDriver.java | 17 +-------------- .../usbserial/driver/Ch34xSerialDriver.java | 14 +------------ .../usbserial/driver/CommonUsbSerialPort.java | 21 ++++++++++++++++++- .../usbserial/driver/Cp21xxSerialDriver.java | 15 +------------ .../usbserial/driver/FtdiSerialDriver.java | 10 +-------- .../driver/ProlificSerialDriver.java | 19 +++++------------ 6 files changed, 29 insertions(+), 67 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 8efccd7..a2825f1 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 @@ -239,26 +239,11 @@ public class CdcAcmSerialDriver implements UsbSerialDriver { } @Override - public void close() throws IOException { - if (mConnection == null) { - throw new IOException("Already closed"); - } - synchronized (this) { - if (mUsbRequest != null) - mUsbRequest.cancel(); - } - mControlEndpoint = null; - mReadEndpoint = null; - mWriteEndpoint = null; + public void closeInt() { try { mConnection.releaseInterface(mControlInterface); mConnection.releaseInterface(mDataInterface); } catch(Exception ignored) {} - try { - mConnection.close(); - } finally { - mConnection = null; - } } @Override diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Ch34xSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Ch34xSerialDriver.java index c6870b8..481827f 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Ch34xSerialDriver.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Ch34xSerialDriver.java @@ -129,23 +129,11 @@ public class Ch34xSerialDriver implements UsbSerialDriver { } @Override - public void close() throws IOException { - if (mConnection == null) { - throw new IOException("Already closed"); - } - synchronized (this) { - if (mUsbRequest != null) - mUsbRequest.cancel(); - } + public void closeInt() { try { for (int i = 0; i < mDevice.getInterfaceCount(); i++) mConnection.releaseInterface(mDevice.getInterface(i)); } catch(Exception ignored) {} - try { - mConnection.close(); - } finally { - mConnection = null; - } } private int controlOut(int request, int value, int index) { diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CommonUsbSerialPort.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CommonUsbSerialPort.java index cc9797c..b1cca5f 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CommonUsbSerialPort.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/CommonUsbSerialPort.java @@ -109,7 +109,26 @@ public abstract class CommonUsbSerialPort implements UsbSerialPort { public abstract void open(UsbDeviceConnection connection) throws IOException; @Override - public abstract void close() throws IOException; + public void close() throws IOException { + if (mConnection == null) { + throw new IOException("Already closed"); + } + synchronized (this) { + if (mUsbRequest != null) + mUsbRequest.cancel(); + } + try { + closeInt(); + } catch(Exception ignored) {} + try { + mConnection.close(); + } finally { + mConnection = null; + } + + } + + protected abstract void closeInt(); @Override public int read(final byte[] dest, final int timeoutMillis) throws IOException { diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Cp21xxSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Cp21xxSerialDriver.java index a148b43..5334f42 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Cp21xxSerialDriver.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/Cp21xxSerialDriver.java @@ -166,26 +166,13 @@ public class Cp21xxSerialDriver implements UsbSerialDriver { } @Override - public void close() throws IOException { - if (mConnection == null) { - throw new IOException("Already closed"); - } - synchronized (this) { - if(mUsbRequest != null) { - mUsbRequest.cancel(); - } - } + public void closeInt() { try { setConfigSingle(SILABSER_IFC_ENABLE_REQUEST_CODE, UART_DISABLE); } catch (Exception ignored) {} try { mConnection.releaseInterface(mDevice.getInterface(mPortNumber)); } catch(Exception ignored) {} - try { - mConnection.close(); - } finally { - mConnection = null; - } } private void setBaudRate(int baudRate) throws IOException { diff --git a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/FtdiSerialDriver.java b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/FtdiSerialDriver.java index e0162c3..4df1857 100644 --- a/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/FtdiSerialDriver.java +++ b/usbSerialForAndroid/src/main/java/com/hoho/android/usbserial/driver/FtdiSerialDriver.java @@ -266,18 +266,10 @@ public class FtdiSerialDriver implements UsbSerialDriver { } @Override - public void close() throws IOException { - if (mConnection == null) { - throw new IOException("Already closed"); - } + public void closeInt() { try { mConnection.releaseInterface(mDevice.getInterface(mPortNumber)); } catch(Exception ignored) {} - try { - mConnection.close(); - } finally { - mConnection = null; - } } private int setBaudRate(int baudRate) throws IOException { 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 ba084ad..b581702 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 @@ -338,10 +338,7 @@ public class ProlificSerialDriver implements UsbSerialDriver { } @Override - public void close() throws IOException { - if (mConnection == null) { - throw new IOException("Already closed"); - } + public void closeInt() { try { mStopReadStatusThread = true; synchronized (mReadStatusThreadLock) { @@ -354,16 +351,10 @@ public class ProlificSerialDriver implements UsbSerialDriver { } } resetDevice(); - } finally { - try { - mConnection.releaseInterface(mDevice.getInterface(0)); - } catch(Exception ignored) {} - try { - mConnection.close(); - } finally { - mConnection = null; - } - } + } catch(Exception ignored) {} + try { + mConnection.releaseInterface(mDevice.getInterface(0)); + } catch(Exception ignored) {} } @Override