From 70d2558f049a28efe8837a41da81a6672f68a77f Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 1 Jul 2019 01:10:38 -0400 Subject: [PATCH] Usability - simple VCP and --- .../src/com/rusefi/io/serial/PortHolder.java | 1 + java_console/ui/src/com/rusefi/Launcher.java | 2 +- .../ui/src/com/rusefi/StartupFrame.java | 7 +- .../com/rusefi/maintenance/DriverInstall.java | 69 +++++++++++++++++++ .../com/rusefi/maintenance/ExecHelper.java | 1 - .../maintenance/ProcessStatusWindow.java | 6 +- .../ui/src/com/rusefi/ui/StatusWindow.java | 4 -- .../silent_install_windows7.bat | 3 +- .../silent_install_windows8.bat | 3 +- 9 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 java_console/ui/src/com/rusefi/maintenance/DriverInstall.java diff --git a/java_console/io/src/com/rusefi/io/serial/PortHolder.java b/java_console/io/src/com/rusefi/io/serial/PortHolder.java index 0365125f02..49afe363ae 100644 --- a/java_console/io/src/com/rusefi/io/serial/PortHolder.java +++ b/java_console/io/src/com/rusefi/io/serial/PortHolder.java @@ -48,6 +48,7 @@ public class PortHolder { */ private boolean open(String port, final DataListener listener) { IoStream stream; + // todo: BUG: Mac version 10 also 'is windows10 == true' at the moment :) boolean windows10 = isWindows10(); FileLog.MAIN.logLine("Is windows10: " + windows10); if (windows10) { diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index a2f65feaf4..bd2e7f6d23 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -46,7 +46,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20190630; + public static final int CONSOLE_VERSION = 20190701; public static final boolean SHOW_STIMULATOR = false; public static final String INPUT_FILES_PATH = ".."; private static final String TAB_INDEX = "main_tab"; diff --git a/java_console/ui/src/com/rusefi/StartupFrame.java b/java_console/ui/src/com/rusefi/StartupFrame.java index 0b161df51e..7bc63313c1 100644 --- a/java_console/ui/src/com/rusefi/StartupFrame.java +++ b/java_console/ui/src/com/rusefi/StartupFrame.java @@ -3,9 +3,9 @@ package com.rusefi; import com.rusefi.io.LinkManager; import com.rusefi.io.serial.PortHolder; import com.rusefi.io.tcp.TcpConnector; +import com.rusefi.maintenance.DriverInstall; import com.rusefi.maintenance.EraseChip; import com.rusefi.maintenance.FirmwareFlasher; -import com.rusefi.maintenance.ProcessStatusWindow; import com.rusefi.ui.util.HorizontalLine; import com.rusefi.ui.util.URLLabel; import com.rusefi.ui.util.UiUtils; @@ -43,8 +43,6 @@ public class StartupFrame { private static final String LOGO = "logo.gif"; public static final String LINK_TEXT = "rusEfi (c) 2012-2019"; private static final String URI = "http://rusefi.com/?java_console"; - private static final String VCP_DRIVER_TEXT = "vcp driver"; - private static final String VCP_DRIVER_URI = "http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/driver/stsw-stm32102.zip"; private final JFrame frame; private final Timer scanPortsTimes = new Timer(1000, new ActionListener() { @@ -122,10 +120,11 @@ public class StartupFrame { leftPanel.add(realHardwarePanel); leftPanel.add(miscPanel); + if (FileLog.isWindows()) + realHardwarePanel.add(DriverInstall.createButton()); realHardwarePanel.add(connectPanel); realHardwarePanel.add(noPortsMessage); installMessage(noPortsMessage, "Check you cables. Check your drivers. Do you want to start simulator maybe?"); - realHardwarePanel.add(new URLLabel(VCP_DRIVER_TEXT, VCP_DRIVER_URI)); if (FileLog.isWindows()) { realHardwarePanel.add(new HorizontalLine()); diff --git a/java_console/ui/src/com/rusefi/maintenance/DriverInstall.java b/java_console/ui/src/com/rusefi/maintenance/DriverInstall.java new file mode 100644 index 0000000000..6077474fc4 --- /dev/null +++ b/java_console/ui/src/com/rusefi/maintenance/DriverInstall.java @@ -0,0 +1,69 @@ +package com.rusefi.maintenance; + +import com.rusefi.FileLog; +import com.rusefi.ui.StatusConsumer; +import com.rusefi.ui.StatusWindow; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.io.File; + +/** + * This code automates drivers unpacking and installation + * Both Virtual Comport and ST-Link drivers are installed + *

+ * See https://github.com/rusefi/rusefi/tree/master/misc/install_st + */ +public class DriverInstall { + private static final String FOLDER = "../drivers"; + private static final String ARCHIVE = "silent_st_drivers.exe"; + private static final String YES = " -y"; + private static final String UNPACKED_FOLDER = FOLDER + File.separator + "silent_st_drivers"; + private static final String WINDOWS7_BATCH = "silent_install_windows7.bat"; + private static final String WINDOWS8_BATCH = "silent_install_windows8.bat"; + + public static Component createButton() { + JButton button = new JButton("Install Drivers"); + button.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + int dialogResult = JOptionPane.showConfirmDialog(button, "Do you really want to install ST drivers?", + "Please disconnect from vehicle", JOptionPane.YES_NO_OPTION); + if (dialogResult != JOptionPane.YES_OPTION) + return; + + final StatusWindow wnd = new StatusWindow(); + wnd.showFrame("Windows rusEfi ST Drivers"); + + ExecHelper.submitAction(() -> installDrivers(wnd), getClass() + " thread"); + + } + }); + + return button; + } + + private static void installDrivers(StatusConsumer wnd) { + FileLog.MAIN.logLine("IsWindows=" + FileLog.isWindows()); + if (!new File(FOLDER).exists()) { + String message = FOLDER + " not found"; + wnd.appendMsg(message); + FileLog.MAIN.logLine(message); + return; + } + ExecHelper.executeCommand(FOLDER, + FOLDER + File.separator + ARCHIVE + YES, + ARCHIVE, + wnd); + + String batch = isWindows7orBelow() ? WINDOWS7_BATCH : WINDOWS8_BATCH; + ExecHelper.executeCommand(UNPACKED_FOLDER, "cmd /c start " + batch, batch, wnd); + } + + private static boolean isWindows7orBelow() { + String version = System.getProperty(FileLog.OS_VERSION); + // https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions + return version.startsWith("5.") || version.startsWith("6.0") || version.startsWith("6.1"); + } +} diff --git a/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java b/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java index c07b2c0c72..0537b76c81 100644 --- a/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java +++ b/java_console/ui/src/com/rusefi/maintenance/ExecHelper.java @@ -51,7 +51,6 @@ public class ExecHelper { return error; } - command = workingDirPath + File.separator + command; wnd.appendMsg("Executing " + command); StringBuffer output = new StringBuffer(); try { diff --git a/java_console/ui/src/com/rusefi/maintenance/ProcessStatusWindow.java b/java_console/ui/src/com/rusefi/maintenance/ProcessStatusWindow.java index 87b6add7b0..bae642ec7b 100644 --- a/java_console/ui/src/com/rusefi/maintenance/ProcessStatusWindow.java +++ b/java_console/ui/src/com/rusefi/maintenance/ProcessStatusWindow.java @@ -2,6 +2,8 @@ package com.rusefi.maintenance; import com.rusefi.ui.StatusWindow; +import java.io.File; + /** * (c) Andrey Belomutskiy 2013-2018 */ @@ -9,6 +11,8 @@ public class ProcessStatusWindow { protected final StatusWindow wnd = new StatusWindow(); protected StringBuffer executeCommand(String command) { - return ExecHelper.executeCommand(FirmwareFlasher.BINARY_LOCATION, command, FirmwareFlasher.OPENOCD_EXE, wnd); + return ExecHelper.executeCommand(FirmwareFlasher.BINARY_LOCATION, + FirmwareFlasher.BINARY_LOCATION + File.pathSeparator + command, + FirmwareFlasher.OPENOCD_EXE, wnd); } } \ No newline at end of file diff --git a/java_console/ui/src/com/rusefi/ui/StatusWindow.java b/java_console/ui/src/com/rusefi/ui/StatusWindow.java index 05721c9858..25f1aacfd0 100644 --- a/java_console/ui/src/com/rusefi/ui/StatusWindow.java +++ b/java_console/ui/src/com/rusefi/ui/StatusWindow.java @@ -1,7 +1,6 @@ package com.rusefi.ui; import com.rusefi.ui.util.FrameHelper; -import com.rusefi.ui.util.URLLabel; import com.rusefi.ui.util.UiUtils; import org.jetbrains.annotations.NotNull; @@ -14,7 +13,6 @@ import java.awt.*; */ public class StatusWindow implements StatusConsumer { // todo: extract driver from console bundle? find a separate driver bundle? - private static final String CONSOLE_DRIVER_URI = "http://www.st.com/st-web-ui/static/active/en/st_prod_software_internet/resource/technical/software/utility/stsw-link004.zip"; private final JTextArea log = new JTextArea(); private final JPanel content = new JPanel(new BorderLayout()); private final JScrollPane messagesScroll = new JScrollPane(log, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) { @@ -28,8 +26,6 @@ public class StatusWindow implements StatusConsumer { public StatusWindow() { log.setLineWrap(true); - // todo: move this somewhere else. table editor use-case does not need stm32 driver - content.add(new URLLabel("stm32 driver", CONSOLE_DRIVER_URI), BorderLayout.NORTH); content.add(messagesScroll, BorderLayout.CENTER); } diff --git a/misc/install_st/silent_st_drivers/silent_install_windows7.bat b/misc/install_st/silent_st_drivers/silent_install_windows7.bat index 83fa2fa2d0..df15c8719f 100644 --- a/misc/install_st/silent_st_drivers/silent_install_windows7.bat +++ b/misc/install_st/silent_st_drivers/silent_install_windows7.bat @@ -25,4 +25,5 @@ start "" dpinst_x86.exe /sw goto END :X64 start "" dpinst_amd64.exe /sw -:END \ No newline at end of file +:END +exit \ No newline at end of file diff --git a/misc/install_st/silent_st_drivers/silent_install_windows8.bat b/misc/install_st/silent_st_drivers/silent_install_windows8.bat index 738346345e..1444a10aa0 100644 --- a/misc/install_st/silent_st_drivers/silent_install_windows8.bat +++ b/misc/install_st/silent_st_drivers/silent_install_windows8.bat @@ -25,4 +25,5 @@ start "" dpinst_x86.exe /sw goto END :X64 start "" dpinst_amd64.exe /sw -:END \ No newline at end of file +:END +exit \ No newline at end of file