diff --git a/firmware/CHANGELOG.md b/firmware/CHANGELOG.md index 7fc418da62..6611cd69c4 100644 --- a/firmware/CHANGELOG.md +++ b/firmware/CHANGELOG.md @@ -28,6 +28,8 @@ All notable user-facing or behavior-altering changes will be documented in this ## Month 202x Release - "Release Name" ### Fixed - SD card logs bugfix #2556 + - Too many small logs are zero size #2553 + - Launcher splash screen is freezy #2560 ## April 2021 Release "Be Kind to Lawyers Day" ### Added diff --git a/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java index e469c8695d..7f41945e9f 100644 --- a/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/shared_io/src/main/java/com/rusefi/rusEFIVersion.java @@ -6,7 +6,7 @@ import java.net.URL; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { - public static final int CONSOLE_VERSION = 20210413; + public static final int CONSOLE_VERSION = 20210415; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); public static long classBuildTimeMillis() { 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 ef62ba0400..8c0743d124 100644 --- a/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java +++ b/java_console/ui/src/main/java/com/rusefi/SerialPortScanner.java @@ -4,7 +4,6 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpConnector; import org.jetbrains.annotations.NotNull; -import javax.swing.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -16,19 +15,17 @@ import java.util.concurrent.CopyOnWriteArrayList; public enum SerialPortScanner { INSTANCE; + private volatile boolean isRunning = true; + static final String AUTO_SERIAL = "Auto Serial"; @NotNull - private List knownPorts = new ArrayList<>(); + private final List knownPorts = new ArrayList<>(); public List listeners = new CopyOnWriteArrayList<>(); - private final Timer scanPortsTimer = new Timer(1000, e -> findAllAvailablePorts()); - - /** * Find all available serial ports and checks if simulator local TCP port is available */ - @NotNull void findAllAvailablePorts() { List ports = new ArrayList<>(); String[] serialPorts = LinkManager.getCommPorts(); @@ -57,11 +54,23 @@ public enum SerialPortScanner { } public void startTimer() { - scanPortsTimer.start(); + Thread portsScanner = new Thread(() -> { + while (isRunning) { + findAllAvailablePorts(); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new IllegalStateException(e); + } + } + + }, "Ports Scanner"); + portsScanner.setDaemon(true); + portsScanner.start(); } public void stopTimer() { - scanPortsTimer.stop(); + isRunning = false; } interface Listener { 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 7dad425d1e..dfb5e9ae53 100644 --- a/java_console/ui/src/main/java/com/rusefi/StartupFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/StartupFrame.java @@ -25,7 +25,6 @@ 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 java.awt.image.ImageObserver.ABORT; import static javax.swing.JOptionPane.YES_NO_OPTION; /** @@ -50,10 +49,10 @@ public class StartupFrame { @NotNull private List currentlyDisplayedPorts = new ArrayList<>(); private boolean isFirstTimeApplyingPorts = true; - private JPanel leftPanel = new JPanel(new VerticalFlowLayout()); + private final JPanel leftPanel = new JPanel(new VerticalFlowLayout()); - private JPanel realHardwarePanel = new JPanel(new MigLayout()); - private JPanel miscPanel = new JPanel(new MigLayout()) { + private final JPanel realHardwarePanel = new JPanel(new MigLayout()); + private final JPanel miscPanel = new JPanel(new MigLayout()) { @Override public Dimension getPreferredSize() { // want miscPanel and realHardwarePanel to be the same width @@ -66,7 +65,7 @@ public class StartupFrame { * closing the application. */ private boolean isProceeding; - private JLabel noPortsMessage = new JLabel("No ports found!"); + private final JLabel noPortsMessage = new JLabel("No ports found!"); public StartupFrame() { // AudioPlayback.start(); @@ -152,28 +151,25 @@ public class StartupFrame { realHardwarePanel.add(new EraseChip().getButton(), "right, wrap"); } - SerialPortScanner.INSTANCE.listeners.add(new SerialPortScanner.Listener() { - @Override - public void onChange() { - 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()); + 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(); - } - + applyPortSelectionToUIcontrol(ports); + currentlyDisplayedPorts = ports; + UiUtils.trueLayout(connectPanel); + frame.pack(); } - }); + })); + // todo: invoke this NOT on AWT thread? SerialPortScanner.INSTANCE.findAllAvailablePorts(); final JButton buttonLogViewer = new JButton();