From 12638ae723954d48e0f9c7ded1d9b7be7cf92722 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 14 Jul 2021 13:01:12 -0400 Subject: [PATCH] rusEFI console start-up speed fix #2964 --- firmware/CHANGELOG.md | 5 ++- .../java/com/rusefi/io/tcp/TcpConnector.java | 5 ++- .../java/com/rusefi/SerialPortScanner.java | 9 ++-- .../main/java/com/rusefi/StartupFrame.java | 42 ++++++++++--------- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index b47dfa52cd..8e4a4fb98d 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -32,7 +32,10 @@ All notable user-facing or behavior-altering changes will be documented in this ### Added - Injector nonlinearity (small pulse) correction - so far just polynomial, but table modes coming soon. - - 1-4-3-6-2-5 firing order for VAG v6 + - 1-4-3-6-2-5 firing order for VAG v6 + +### Fixed + - rusEFI console start-up speed #2964 ## June 2021 Release "National Logistics Day" diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpConnector.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpConnector.java index 1bd2a52727..94553593db 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpConnector.java @@ -62,16 +62,17 @@ public class TcpConnector { } public static Collection getAvailablePorts() { - return isTcpPortOpened() ? Collections.singletonList("" + DEFAULT_PORT) : Collections.emptyList(); + return isTcpPortOpened() ? Collections.singletonList("" + DEFAULT_PORT) : Collections.emptyList(); } public static boolean isTcpPortOpened() { + long now = System.currentTimeMillis(); try { Socket s = new Socket(LOCALHOST, DEFAULT_PORT); s.close(); return true; } catch (IOException e) { - System.out.println(new Date() + ": Connection refused in getAvailablePorts(): simulator not running"); + System.out.println(new Date() + ": Connection refused in getAvailablePorts(): simulator not running in " + (System.currentTimeMillis() - now) + "ms"); return false; } } diff --git a/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java b/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java index 8c0743d124..f1d2f9e8db 100644 --- a/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java +++ b/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java @@ -2,8 +2,10 @@ package com.rusefi; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpConnector; +import com.rusefi.ui.util.UiUtils; import org.jetbrains.annotations.NotNull; +import javax.swing.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -26,13 +28,14 @@ public enum SerialPortScanner { /** * Find all available serial ports and checks if simulator local TCP port is available */ - void findAllAvailablePorts() { + void findAllAvailablePorts(boolean includeSlowTcpLookup) { List ports = new ArrayList<>(); String[] serialPorts = LinkManager.getCommPorts(); if (serialPorts.length > 0 && serialPorts.length < 15) ports.add(AUTO_SERIAL); ports.addAll(Arrays.asList(serialPorts)); - ports.addAll(TcpConnector.getAvailablePorts()); + if (includeSlowTcpLookup) + ports.addAll(TcpConnector.getAvailablePorts()); boolean isListUpdated; synchronized (knownPorts) { @@ -56,7 +59,7 @@ public enum SerialPortScanner { public void startTimer() { Thread portsScanner = new Thread(() -> { while (isRunning) { - findAllAvailablePorts(); + findAllAvailablePorts(true); try { Thread.sleep(1000); } catch (InterruptedException e) { diff --git a/java_console/ui/src/main/java/com/rusefi/StartupFrame.java b/java_console/ui/src/main/java/com/rusefi/StartupFrame.java index dfb5e9ae53..a4aa069c13 100644 --- a/java_console/ui/src/main/java/com/rusefi/StartupFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/StartupFrame.java @@ -23,8 +23,7 @@ import java.util.ArrayList; import java.util.List; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; -import static com.rusefi.ui.util.UiUtils.getAllComponents; -import static com.rusefi.ui.util.UiUtils.setToolTip; +import static com.rusefi.ui.util.UiUtils.*; import static javax.swing.JOptionPane.YES_NO_OPTION; /** @@ -151,26 +150,11 @@ public class StartupFrame { realHardwarePanel.add(new EraseChip().getButton(), "right, wrap"); } - SerialPortScanner.INSTANCE.listeners.add(() -> SwingUtilities.invokeLater(() -> { - List ports = SerialPortScanner.INSTANCE.getKnownPorts(); - if (!currentlyDisplayedPorts.equals(ports) || isFirstTimeApplyingPorts) { - FileLog.MAIN.logLine("Available ports " + ports); - isFirstTimeApplyingPorts = false; - connectPanel.setVisible(!ports.isEmpty()); - noPortsMessage.setVisible(ports.isEmpty()); -// panel.add(comboSpeeds); // todo: finish speed selector UI component -// horizontalLine.setVisible(!ports.isEmpty()); - - applyPortSelectionToUIcontrol(ports); - currentlyDisplayedPorts = ports; - UiUtils.trueLayout(connectPanel); - frame.pack(); - } - })); - + SerialPortScanner.INSTANCE.listeners.add(() -> SwingUtilities.invokeLater(this::applyKnownPorts)); // todo: invoke this NOT on AWT thread? - SerialPortScanner.INSTANCE.findAllAvailablePorts(); + SerialPortScanner.INSTANCE.findAllAvailablePorts(false); + applyKnownPorts(); final JButton buttonLogViewer = new JButton(); buttonLogViewer.setText("Start " + LinkManager.LOG_VIEWER); @@ -211,6 +195,23 @@ public class StartupFrame { } } + private void applyKnownPorts() { + List ports = SerialPortScanner.INSTANCE.getKnownPorts(); + if (!currentlyDisplayedPorts.equals(ports) || isFirstTimeApplyingPorts) { + FileLog.MAIN.logLine("Rendering available ports: " + ports); + isFirstTimeApplyingPorts = false; + connectPanel.setVisible(!ports.isEmpty()); + noPortsMessage.setVisible(ports.isEmpty()); +// panel.add(comboSpeeds); // todo: finish speed selector UI component +// horizontalLine.setVisible(!ports.isEmpty()); + + applyPortSelectionToUIcontrol(ports); + currentlyDisplayedPorts = ports; + UiUtils.trueLayout(connectPanel); + frame.pack(); + } + } + public static void setFrameIcon(Frame frame) { ImageIcon icon = AutoupdateUtil.loadIcon(LOGO); if (icon != null) @@ -301,6 +302,7 @@ public class StartupFrame { comboPorts.addItem(port); String defaultPort = getConfig().getRoot().getProperty(ConsoleUI.PORT_KEY); comboPorts.setSelectedItem(defaultPort); + trueLayout(comboPorts); } private static JComboBox createSpeedCombo() {