From 29342581d46f4b430bdd7a5556568edbed4af6b7 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sun, 26 Sep 2021 00:31:47 -0400 Subject: [PATCH] rusEFI console to compare current bundle against auto-DFU bundle #3266 smaller step forward --- .../com/rusefi/autodetect/PortDetector.java | 3 +- .../rusefi/autodetect/SerialAutoChecker.java | 35 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java index cbbe0fc897..e9164187aa 100644 --- a/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java @@ -2,7 +2,6 @@ package com.rusefi.autodetect; import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; -import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; import org.jetbrains.annotations.Nullable; @@ -51,7 +50,7 @@ public class PortDetector { Thread thread = AUTO_DETECT_PORT.newThread(new Runnable() { @Override public void run() { - new SerialAutoChecker(serialPort, portFound).run(result, callback); + new SerialAutoChecker(serialPort, portFound).openAndCheckResponse(result, callback); } }); serialFinder.add(thread); diff --git a/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java index 645958ca1e..3c45c4e040 100644 --- a/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java @@ -24,30 +24,33 @@ public class SerialAutoChecker { this.portFound = portFound; } - public void run(AtomicReference result, Function callback) { - IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort); + public String checkResponse(IoStream stream, Function callback) { IncomingDataBuffer incomingData = stream.getDataBuffer(); - boolean isPortFound = false; - String signature; try { HelloCommand.send(stream); byte[] response = incomingData.getPacket("auto detect"); if (!checkResponseCode(response, (byte) Fields.TS_RESPONSE_OK)) - return; - signature = new String(response, 1, response.length - 1); - log.info("Got signature=" + signature + " from " + serialPort); - if (signature.startsWith(Fields.PROTOCOL_SIGNATURE_PREFIX)) { - if (callback != null) { - callback.apply(new CallbackContext(stream, signature)); - } - isPortFound = true; + return null; + String signature = new String(response, 1, response.length - 1); + if (!signature.startsWith(Fields.PROTOCOL_SIGNATURE_PREFIX)) { + return null; } + log.info("Got signature=" + signature + " from " + serialPort); + if (callback != null) { + callback.apply(new CallbackContext(stream, signature)); + } + return signature; } catch (IOException ignore) { - return; - } finally { - stream.close(); + return null; } - if (isPortFound) { + } + + public void openAndCheckResponse(AtomicReference result, Function callback) { + String signature; + try (IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort)) { + signature = checkResponse(stream, callback); + } + if (signature != null) { /** * propagating result after closing the port so that it could be used right away */