diff --git a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocolHolder.java b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocolHolder.java index 3c709c82bb..f06d6e98d9 100644 --- a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocolHolder.java +++ b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocolHolder.java @@ -4,6 +4,8 @@ import com.opensr5.Logger; import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; +import java.util.Objects; + /** * At any given moment of time JVM manages one communication stream * @@ -24,6 +26,7 @@ public enum BinaryProtocolHolder { } public static BinaryProtocol getCurrentStreamState() { + Objects.requireNonNull(LinkManager.connector, "connector"); return LinkManager.connector.getBinaryProtocol(); } } diff --git a/java_console/io/src/com/rusefi/io/LinkConnector.java b/java_console/io/src/com/rusefi/io/LinkConnector.java index 82e068901c..60f5cbbe2b 100644 --- a/java_console/io/src/com/rusefi/io/LinkConnector.java +++ b/java_console/io/src/com/rusefi/io/LinkConnector.java @@ -9,7 +9,7 @@ import com.rusefi.binaryprotocol.BinaryProtocol; public interface LinkConnector extends LinkDecoder { LinkConnector VOID = new LinkConnector() { @Override - public void connect(ConnectionStateListener listener) { + public void connectAndReadConfiguration(ConnectionStateListener listener) { } @Override @@ -31,7 +31,7 @@ public interface LinkConnector extends LinkDecoder { } }; - void connect(ConnectionStateListener listener); + void connectAndReadConfiguration(ConnectionStateListener listener); void send(String command, boolean fireEvent) throws InterruptedException; diff --git a/java_console/io/src/com/rusefi/io/LinkManager.java b/java_console/io/src/com/rusefi/io/LinkManager.java index ebecc452ff..074bfbaf47 100644 --- a/java_console/io/src/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/com/rusefi/io/LinkManager.java @@ -135,6 +135,11 @@ public class LinkManager { public static void startAndConnect(String port, ConnectionStateListener stateListener) { FileLog.MAIN.logLine("LinkManager: Starting " + port); + start(port); + connect(stateListener); + } + + public static void start(String port) { if (isLogViewerMode(port)) { connector = LinkConnector.VOID; } else if (TcpConnector.isTcpPort(port)) { @@ -143,7 +148,6 @@ public class LinkManager { } else { connector = new SerialConnector(port); } - connect(stateListener); } public static boolean isLogViewerMode(String port) { @@ -157,11 +161,7 @@ public class LinkManager { public static void connect(ConnectionStateListener listener) { if (connector == null) throw new NullPointerException("connector"); - connector.connect(listener); - } - - public static void connect() { - connect(ConnectionStateListener.VOID); + connector.connectAndReadConfiguration(listener); } public static void send(String command, boolean fireEvent) throws InterruptedException { diff --git a/java_console/io/src/com/rusefi/io/serial/SerialConnector.java b/java_console/io/src/com/rusefi/io/serial/SerialConnector.java index fd94d505f1..b1dd289a79 100644 --- a/java_console/io/src/com/rusefi/io/serial/SerialConnector.java +++ b/java_console/io/src/com/rusefi/io/serial/SerialConnector.java @@ -20,7 +20,7 @@ public class SerialConnector implements LinkConnector { } @Override - public void connect(ConnectionStateListener listener) { + public void connectAndReadConfiguration(ConnectionStateListener listener) { FileLog.MAIN.logLine("SerialConnector: connecting"); portHolder.listener = listener; FileLog.MAIN.logLine("scheduleOpening"); diff --git a/java_console/io/src/com/rusefi/io/tcp/TcpConnector.java b/java_console/io/src/com/rusefi/io/tcp/TcpConnector.java index 3735a690d1..debea1793b 100644 --- a/java_console/io/src/com/rusefi/io/tcp/TcpConnector.java +++ b/java_console/io/src/com/rusefi/io/tcp/TcpConnector.java @@ -92,7 +92,7 @@ public class TcpConnector implements LinkConnector { * this implementation is blocking */ @Override - public void connect(ConnectionStateListener listener) { + public void connectAndReadConfiguration(ConnectionStateListener listener) { FileLog.MAIN.logLine("Connecting to host=" + hostname + "/port=" + port); OutputStream os; BufferedInputStream stream; diff --git a/java_console/ui/src/com/rusefi/ConsoleTools.java b/java_console/ui/src/com/rusefi/ConsoleTools.java index cd399b1b58..e3e92eec30 100644 --- a/java_console/ui/src/com/rusefi/ConsoleTools.java +++ b/java_console/ui/src/com/rusefi/ConsoleTools.java @@ -40,6 +40,16 @@ public class ConsoleTools { } private static void saveBinaryConfig(String[] args) { + if (args.length < 2) { + System.out.println("Please specify output file name for binary configuration"); + System.exit(-1); + } + + String autoDetectedPort = autoDetectPort(); + if (autoDetectedPort == null) + return; + LinkManager.startAndConnect(autoDetectedPort, ConnectionStateListener.VOID); + } diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index cfcdb1340e..11dfce7ea5 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -82,6 +82,8 @@ public class Launcher { getConfig().getRoot().setProperty(PORT_KEY, port); getConfig().getRoot().setProperty(SPEED_KEY, BaudRateHolder.INSTANCE.baudRate); + LinkManager.start(port); + engineSnifferPanel = new EngineSnifferPanel(getConfig().getRoot().getChild("digital_sniffer")); if (!LinkManager.isLogViewerMode(port)) engineSnifferPanel.setOutpinListener(LinkManager.engineState); diff --git a/java_console/ui/src/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/com/rusefi/ui/console/MainFrame.java index 8fa31b4d65..2060fe8c89 100644 --- a/java_console/ui/src/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/com/rusefi/ui/console/MainFrame.java @@ -65,7 +65,7 @@ public class MainFrame { } }); - LinkManager.connect(new ConnectionStateListener() { + LinkManager.startAndConnect(Launcher.port, new ConnectionStateListener() { @Override public void onConnectionFailed() { }