Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/usb-serial-telnet-server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-06-03 22:04:04 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-06-03 22:04:04 +0300
commit515414cef1182e18abab8bea7acfb56139cf6d03 (patch)
treee64ae4988fe8e318732a7995d0354b7bd53a5a9c
parentc74aa008a41dcae97669ab3ecbe05f36d185deca (diff)
0xFF symbol escape fix, optimization
-rw-r--r--app/build.gradle5
-rw-r--r--app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpClientThread.java38
-rw-r--r--app/src/main/java/com/clusterrr/usbserialtelnetserver/TcpServerThread.java5
-rw-r--r--app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java10
-rw-r--r--app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java7
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;
}
}