From 6d1474d76bc86413fe385305ef54cfedd04ddd6c Mon Sep 17 00:00:00 2001 From: rusefillc Date: Tue, 23 Nov 2021 16:23:57 -0500 Subject: [PATCH] rusEFI console to has "Erase via DFU" button #2250 --- .../main/java/com/rusefi/rusEFIVersion.java | 2 +- .../com/rusefi/maintenance/DfuFlasher.java | 33 ++++++++++++++----- .../rusefi/maintenance/ProgramSelector.java | 2 ++ 3 files changed, 27 insertions(+), 10 deletions(-) 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 faf51cf7df..5b77f7935b 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 = 20211122; + public static final int CONSOLE_VERSION = 20211123; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); public static long classBuildTimeMillis() { diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java index 3837d7fa17..dedabb78e1 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java @@ -52,15 +52,19 @@ public class DfuFlasher { wnd.appendMsg("rusEFI console can only program on Windows"); return; } - ExecHelper.submitAction(() -> { + submitAction(() -> { timeForDfuSwitch(wnd); executeDFU(wnd); - }, DfuFlasher.class + " thread"); + }); } else { wnd.appendMsg("Please use manual DFU to change bundle type."); } } + private static void submitAction(Runnable r) { + ExecHelper.submitAction(r, DfuFlasher.class + " thread"); + } + @Nullable public static AtomicBoolean rebootToDfu(JComponent parent, String port, StatusWindow wnd) { AtomicBoolean isSignatureValidated = new AtomicBoolean(true); @@ -108,15 +112,22 @@ public class DfuFlasher { return wnd; } + public static void runDfuErase() { + StatusWindow wnd = createStatusWindow(); + submitAction(() -> ExecHelper.executeCommand(DFU_BINARY_LOCATION, + getDfuEraseCommand(), + DFU_BINARY, wnd, new StringBuffer())); + } + public static void runDfuProgramming() { StatusWindow wnd = createStatusWindow(); - ExecHelper.submitAction(() -> executeDFU(wnd), DfuFlasher.class + " thread"); + submitAction(() -> executeDFU(wnd)); } private static void executeDFU(StatusWindow wnd) { StringBuffer stdout = new StringBuffer(); String errorResponse = ExecHelper.executeCommand(DFU_BINARY_LOCATION, - getDfuCommand(), + getDfuWriteCommand(), DFU_BINARY, wnd, stdout); if (stdout.toString().contains("Download verified successfully")) { // looks like sometimes we are not catching the last line of the response? 'Upgrade' happens before 'Verify' @@ -157,13 +168,17 @@ public class DfuFlasher { } } - private static String getDfuCommand() { - String fileName = IniFileModel.findFile(Launcher.INPUT_FILES_PATH, "rusefi", ".hex"); - if (fileName == null) + private static String getDfuWriteCommand() { + String hexFileName = IniFileModel.findFile(Launcher.INPUT_FILES_PATH, "rusefi", ".hex"); + if (hexFileName == null) return "File not found"; - String absolutePath = new File(fileName).getAbsolutePath(); + String hexAbsolutePath = new File(hexFileName).getAbsolutePath(); - return DFU_BINARY_LOCATION + "/" + DFU_BINARY + " -c port=usb1 -w " + absolutePath + " -v -s"; + return DFU_BINARY_LOCATION + "/" + DFU_BINARY + " -c port=usb1 -w " + hexAbsolutePath + " -v -s"; + } + + private static String getDfuEraseCommand() { + return DFU_BINARY_LOCATION + "/" + DFU_BINARY + " -c port=usb1 -e all"; } @NotNull diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java b/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java index 1d99b16812..4202b8d9a6 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/ProgramSelector.java @@ -70,6 +70,8 @@ public class ProgramSelector { Object selected = comboPorts.getSelectedItem(); String port = selected == null ? PortDetector.AUTO : selected.toString(); DfuFlasher.rebootToDfu(comboPorts, port, wnd); + } else if (selectedMode.equals(DFU_ERASE)) { + DfuFlasher.runDfuErase(); } else { throw new IllegalArgumentException("How did you " + selectedMode); }