diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java index 5b9c7ba690..26f91a638a 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java @@ -46,6 +46,8 @@ public class LinkManager implements Closeable { public static final String LOG_VIEWER = "log viewer"; private final CommandQueue commandQueue; + private String lastTriedPort = null; + private LinkConnector connector = LinkConnector.VOID; private boolean isStarted; private boolean compositeLogicEnabled = true; @@ -209,6 +211,7 @@ public class LinkManager implements Closeable { public void start(String port, ConnectionFailedListener stateListener) { Objects.requireNonNull(port, "port"); log.info("LinkManager: Starting " + port); + lastTriedPort = port; // Save port before connection attempt if (isLogViewerMode(port)) { setConnector(LinkConnector.VOID); } else if (PCAN.equals(port)) { @@ -272,13 +275,20 @@ public class LinkManager implements Closeable { public void restart() { ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.NOT_CONNECTED); - connector.restart(); + close(); // Explicitly kill the connection (call connectors destructor??????) + + String[] ports = getCommPorts(); + boolean isPortAvaliableAgain = Arrays.stream(ports).anyMatch(lastTriedPort::equals); + if(isPortAvaliableAgain) { + connect(lastTriedPort); + } } @Override public void close() { if (connector != null) connector.stop(); + isStarted = false; // Connector is dead and cant be in started state (Otherwise the Exception will raised) } public static String unpackConfirmation(String message) {