From cbe5d9311995cf5cb51ba8e9db1fc2ce923aae41 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 25 Sep 2021 23:42:32 -0400 Subject: [PATCH] rusEFI console to compare current bundle against auto-DFU bundle #3266 smaller step forward --- .../com/rusefi/autodetect/PortDetector.java | 4 ++-- .../rusefi/autodetect/SerialAutoChecker.java | 24 ++++++++++++++++--- .../com/rusefi/maintenance/DfuFlasher.java | 4 ++-- 3 files changed, 25 insertions(+), 7 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 4098d7124f..93bfb1df1e 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 @@ -29,7 +29,7 @@ public class PortDetector { * @return port name on which rusEFI was detected or null if none */ @Nullable - public static SerialAutoChecker.AutoDetectResult autoDetectSerial(Function callback) { + public static SerialAutoChecker.AutoDetectResult autoDetectSerial(Function callback) { String rusEfiAddress = System.getProperty("rusefi.address"); if (rusEfiAddress != null) { return getSignatureFromPorts(callback, new String[] {rusEfiAddress}); @@ -43,7 +43,7 @@ public class PortDetector { return getSignatureFromPorts(callback, serialPorts); } - private static SerialAutoChecker.AutoDetectResult getSignatureFromPorts(Function callback, String[] serialPorts) { + private static SerialAutoChecker.AutoDetectResult getSignatureFromPorts(Function callback, String[] serialPorts) { List serialFinder = new ArrayList<>(); CountDownLatch portFound = new CountDownLatch(1); AtomicReference result = new AtomicReference<>(); 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 77db59e4f7..7ffb9dc7e2 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 @@ -21,9 +21,9 @@ public class SerialAutoChecker implements Runnable { private final CountDownLatch portFound; private final AtomicReference result; @Nullable - private final Function callback; + private final Function callback; - public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { + public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { this.serialPort = serialPort; this.portFound = portFound; this.result = result; @@ -49,7 +49,7 @@ public class SerialAutoChecker implements Runnable { log.info("Got signature=" + signature + " from " + serialPort); if (signature.startsWith(Fields.PROTOCOL_SIGNATURE_PREFIX)) { if (callback != null) { - callback.apply(stream); + callback.apply(new CallbackContext(stream, signature)); } isPortFound = true; } @@ -67,6 +67,24 @@ public class SerialAutoChecker implements Runnable { } } + public static class CallbackContext { + private final IoStream stream; + private final String signature; + + public CallbackContext(IoStream stream, String signature) { + this.stream = stream; + this.signature = signature; + } + + public String getSignature() { + return signature; + } + + public IoStream getStream() { + return stream; + } + } + public static class AutoDetectResult { private final String serialPort; diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java index 293b7a6498..7f58df1234 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java @@ -59,8 +59,8 @@ public class DfuFlasher { messages.append("Auto-detecting port...\n"); // instead of opening the just-detected port we execute the command using the same stream we used to discover port // it's more reliable this way - port = PortDetector.autoDetectSerial(stream -> { - DfuHelper.sendDfuRebootCommand(stream, messages); + port = PortDetector.autoDetectSerial(callbackContext -> { + DfuHelper.sendDfuRebootCommand(callbackContext.getStream(), messages); return null; }).getSerialPort(); if (port == null) {