diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2022-06-03 22:04:04 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2022-06-03 22:04:04 +0300 |
commit | 515414cef1182e18abab8bea7acfb56139cf6d03 (patch) | |
tree | e64ae4988fe8e318732a7995d0354b7bd53a5a9c | |
parent | c74aa008a41dcae97669ab3ecbe05f36d185deca (diff) |
0xFF symbol escape fix, optimization
5 files changed, 41 insertions, 24 deletions
diff --git a/app/build.gradle b/app/build.gradle index 11c9426..9532848 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "com.clusterrr.usbserialtelnetserver" minSdk 19 targetSdk 32 - versionCode 3 - versionName "1.2" + versionCode 5 + versionName "1.3" } buildTypes { @@ -38,4 +38,5 @@ dependencies { implementation 'com.google.android.material:material:1.6.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.3' implementation 'com.github.mik3y:usb-serial-for-android:3.4.3' + implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.8.1' } diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpClientThread.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpClientThread.java index bcb50a7..1ea109b 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpClientThread.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpClientThread.java @@ -2,6 +2,8 @@ package com.clusterrr.usbserialtelnetserver; import android.util.Log; +import com.google.firebase.crashlytics.buildtools.reloc.com.google.common.primitives.Bytes; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -83,8 +85,7 @@ public class TcpClientThread extends Thread { private void proceedBuffer() throws IOException { int len = mBuffer.size(); int i = 0; - byte[] output = new byte[len]; - int outputSize = 0; + List<Byte> output = new ArrayList<>(); for (; i < len; i++) { byte b = mBuffer.get(i); if (b == 0) continue; @@ -98,7 +99,8 @@ public class TcpClientThread extends Thread { byte next = mBuffer.get(i + 1); if (next == (byte)0xFF) { // just 0xFF - output[outputSize++] = mLastChar = (byte)0xFF; + output.add((byte)0xFF); + mLastChar = (byte)0xFF; i++; continue; } @@ -111,15 +113,15 @@ public class TcpClientThread extends Thread { continue; } // just data - output[outputSize++] = mLastChar = b; + output.add(b); mLastChar = b; } // Remove proceeded - for (int j = 0; j < i; j++) - mBuffer.remove(0); + mBuffer.subList(0, i).clear(); - mUsbSerialTelnetService.writeSerialPort(output, 0, outputSize); + // And finally write data to the port + mUsbSerialTelnetService.writeSerialPort(Bytes.toArray(output)); } public void write(byte[] data) throws IOException { @@ -127,29 +129,39 @@ public class TcpClientThread extends Thread { } public void write(byte[] data, int offset, int len) throws IOException { - if (mDataOutputStream != null) - mDataOutputStream.write(data, offset, len); - //Log.d(UsbSerialTelnetService.TAG, "Writing " + len + " bytes to TCP"); + if (mDataOutputStream == null) return; + List<Byte> output = new ArrayList<>(); + for (int i = 0; i < len; i++){ + byte b = data[offset + i]; + if (b != (byte)0xFF) { + output.add(b); + } else { + // Escape 0xFF + output.add((byte)0xFF); + output.add((byte)0xFF); + } + } + mDataOutputStream.write(Bytes.toArray(output)); } public void close() { try { if (mSocket != null) { mSocket.close(); - mSocket = null; } if (mDataOutputStream != null) { mDataOutputStream.close(); - mDataOutputStream = null; } if (mDataInputStream != null) { mDataInputStream.close(); - mDataInputStream = null; } } catch (IOException e) { e.printStackTrace(); } + mSocket = null; + mDataOutputStream = null; + mDataInputStream = null; } public void setNoLocalEcho(boolean noLocalEcho) { diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpServerThread.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpServerThread.java index 44b4318..a8573a6 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpServerThread.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpServerThread.java @@ -70,13 +70,12 @@ public class TcpServerThread extends Thread { public void close() { try { - if (mTcpServer != null) { + if (mTcpServer != null) mTcpServer.close(); - mTcpServer = null; - } } catch (IOException e) { e.printStackTrace(); } + mTcpServer = null; for (TcpClientThread client : mClients) { try { client.close(); diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java index 9daa7dd..6b9f38a 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java @@ -218,9 +218,13 @@ public class UsbSerialTelnetService extends Service { public void writeSerialPort(byte[] buffer, int pos, int len) throws IOException { if (mUsbSerialThread == null) return; - byte[] writeBuffer = new byte[len]; - System.arraycopy(buffer, pos, writeBuffer, 0, len); - mUsbSerialThread.write(writeBuffer); + if ((pos != 0) || (buffer.length != len)) { + byte[] writeBuffer = new byte[len]; + System.arraycopy(buffer, pos, writeBuffer, 0, len); + mUsbSerialThread.write(writeBuffer); + } else { + mUsbSerialThread.write(buffer); + } } public void writeClients(byte[] buffer) throws IOException { diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java index 0ace8a5..1e03796 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java @@ -26,8 +26,10 @@ public class UsbSerialThread extends Thread { try { while (true) { if (mSerialPort == null) break; + // Read data int l = mSerialPort.read(buffer, 0); if (l <= 0) break; // disconnect + // Write data mUsbSerialTelnetService.writeClients(buffer, 0, l); } } @@ -49,12 +51,11 @@ public class UsbSerialThread extends Thread { public void close() { try { - if (mSerialPort != null) { + if (mSerialPort != null) mSerialPort.close(); - mSerialPort = null; - } } catch (Exception e) { e.printStackTrace(); } + mSerialPort = null; } } |