only: actually both DFU and St-link use same .bin file?

This commit is contained in:
rusefillc 2024-01-31 09:10:55 -05:00
parent 8896f05520
commit 9394443397
6 changed files with 44 additions and 40 deletions

View File

@ -13,12 +13,13 @@ import com.rusefi.io.serial.BufferedSerialIoStream;
import com.rusefi.io.tcp.TcpConnector;
import com.rusefi.maintenance.DfuFlasher;
import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.maintenance.MaintenanceUtil;
import com.rusefi.maintenance.StLinkFlasher;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -266,8 +267,8 @@ public enum SerialPortScanner {
ports.add(new PortResult(tcpPort, SerialPortType.Ecu));
}
dfuConnected = DfuFlasher.detectSTM32BootloaderDriverState(UpdateOperationCallbacks.DUMMY);
stLinkConnected = DfuFlasher.detectStLink(UpdateOperationCallbacks.DUMMY);
PCANConnected = DfuFlasher.detectPcan(UpdateOperationCallbacks.DUMMY);
stLinkConnected = StLinkFlasher.detectStLink(UpdateOperationCallbacks.DUMMY);
PCANConnected = MaintenanceUtil.detectPcan(UpdateOperationCallbacks.DUMMY);
} else {
dfuConnected = false;
stLinkConnected = false;

View File

@ -1,6 +1,5 @@
package com.rusefi.maintenance;
import com.opensr5.ini.IniFileModel;
import com.rusefi.FileLog;
import com.rusefi.Launcher;
import com.rusefi.Timeouts;
@ -33,8 +32,6 @@ public class DfuFlasher {
private static final String DFU_BINARY_LOCATION = Launcher.TOOLS_PATH + File.separator + "STM32_Programmer_CLI/bin";
private static final String DFU_BINARY = "STM32_Programmer_CLI.exe";
private static final String WMIC_DFU_QUERY_COMMAND = "wmic path win32_pnpentity where \"Caption like '%STM32%' and Caption like '%Bootloader%'\" get Caption,ConfigManagerErrorCode /format:list";
private static final String WMIC_STLINK_QUERY_COMMAND = "wmic path win32_pnpentity where \"Caption like '%STLink%'\" get Caption,ConfigManagerErrorCode /format:list";
private static final String WMIC_PCAN_QUERY_COMMAND = "wmic path win32_pnpentity where \"Caption like '%PCAN-USB%'\" get Caption,ConfigManagerErrorCode /format:list";
public static void doAutoDfu(JComponent parent, String port, UpdateOperationCallbacks callbacks) {
if (port == null) {
@ -190,26 +187,7 @@ public class DfuFlasher {
}
public static boolean detectSTM32BootloaderDriverState(UpdateOperationCallbacks callbacks) {
return detectDevice(callbacks, WMIC_DFU_QUERY_COMMAND, "ConfigManagerErrorCode=0");
}
public static boolean detectStLink(UpdateOperationCallbacks wnd) {
return detectDevice(wnd, WMIC_STLINK_QUERY_COMMAND, "STLink");
}
public static boolean detectPcan(UpdateOperationCallbacks wnd) {
return detectDevice(wnd, WMIC_PCAN_QUERY_COMMAND, "PCAN");
}
private static boolean detectDevice(UpdateOperationCallbacks callbacks, String queryCommand, String pattern) {
// long now = System.currentTimeMillis();
StringBuffer output = new StringBuffer();
StringBuffer error = new StringBuffer();
ExecHelper.executeCommand(queryCommand, callbacks, output, error, null);
callbacks.log(output.toString());
callbacks.log(error.toString());
// long cost = System.currentTimeMillis() - now;
// System.out.println("DFU lookup cost " + cost + "ms");
return output.toString().contains(pattern);
return MaintenanceUtil.detectDevice(callbacks, WMIC_DFU_QUERY_COMMAND, "ConfigManagerErrorCode=0");
}
private static void appendWindowsVersion(UpdateOperationCallbacks callbacks) {
@ -238,11 +216,7 @@ public class DfuFlasher {
}
private static String getDfuWriteCommand() throws FileNotFoundException {
String prefix = "rusefi";
String suffix = ".bin";
String fileName = IniFileModel.findFile(Launcher.INPUT_FILES_PATH, prefix, suffix);
if (fileName == null)
throw new FileNotFoundException("File not found " + prefix + "*" + suffix);
String fileName = MaintenanceUtil.FIRMWARE_BIN_FILE;
// we need quotes in case if absolute path contains spaces
String quotedAbsolutePath = quote(new File(fileName).getAbsolutePath());

View File

@ -0,0 +1,30 @@
package com.rusefi.maintenance;
import com.rusefi.io.UpdateOperationCallbacks;
import static com.rusefi.Launcher.INPUT_FILES_PATH;
public class MaintenanceUtil {
/**
* Same .bin used by primary DFU and a bit unneeded ST-LINK options
*/
public static final String FIRMWARE_BIN_FILE = INPUT_FILES_PATH + "/" + "rusefi.bin";
private static final String WMIC_PCAN_QUERY_COMMAND = "wmic path win32_pnpentity where \"Caption like '%PCAN-USB%'\" get Caption,ConfigManagerErrorCode /format:list";
static boolean detectDevice(UpdateOperationCallbacks callbacks, String queryCommand, String pattern) {
// long now = System.currentTimeMillis();
StringBuffer output = new StringBuffer();
StringBuffer error = new StringBuffer();
ExecHelper.executeCommand(queryCommand, callbacks, output, error, null);
callbacks.log(output.toString());
callbacks.log(error.toString());
// long cost = System.currentTimeMillis() - now;
// System.out.println("DFU lookup cost " + cost + "ms");
return output.toString().contains(pattern);
}
public static boolean detectPcan(UpdateOperationCallbacks wnd) {
return detectDevice(wnd, WMIC_PCAN_QUERY_COMMAND, "PCAN");
}
}

View File

@ -81,7 +81,7 @@ public class ProgramSelector {
case ST_LINK:
job = updateOperationCallbacks -> {
// todo: add ST-LINK no-assert mode? or not?
StLinkFlasher.doUpdateFirmware(StLinkFlasher.IMAGE_FILE, updateFirmware);
StLinkFlasher.doUpdateFirmware(MaintenanceUtil.FIRMWARE_BIN_FILE, updateFirmware);
};
break;
case DFU_SWITCH:

View File

@ -10,7 +10,6 @@ import javax.swing.*;
import java.io.File;
import java.io.FileNotFoundException;
import static com.rusefi.Launcher.INPUT_FILES_PATH;
import static com.rusefi.core.preferences.storage.PersistentConfiguration.getConfig;
/**
@ -20,10 +19,6 @@ import static com.rusefi.core.preferences.storage.PersistentConfiguration.getCon
* 2/4/15
*/
public class StLinkFlasher {
/**
* this file is used for ST-LINK flashing option, do we still need it at all?
*/
public static final String IMAGE_FILE = INPUT_FILES_PATH + "/" + "rusefi.bin";
/**
* SWD ST-LINK/V2 mode
*/
@ -34,6 +29,7 @@ public class StLinkFlasher {
private static final String FAILED_MESSAGE_TAG = "failed";
public static final String TITLE = "rusEFI ST-LINK Firmware Flasher";
public static final String DONE = "DONE!";
private static final String WMIC_STLINK_QUERY_COMMAND = "wmic path win32_pnpentity where \"Caption like '%STLink%'\" get Caption,ConfigManagerErrorCode /format:list";
private final JButton button;
@ -95,6 +91,10 @@ public class StLinkFlasher {
}
}
public static boolean detectStLink(UpdateOperationCallbacks wnd) {
return MaintenanceUtil.detectDevice(wnd, WMIC_STLINK_QUERY_COMMAND, "STLink");
}
public JButton getButton() {
return button;
}

View File

@ -1,10 +1,9 @@
package com.rusefi.maintenance;
import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.ui.StatusConsumer;
import static com.rusefi.maintenance.DfuFlasher.detectPcan;
import static com.rusefi.maintenance.DfuFlasher.detectStLink;
import static com.rusefi.maintenance.MaintenanceUtil.detectPcan;
import static com.rusefi.maintenance.StLinkFlasher.detectStLink;
public class DfuFlasherSandbox {
public static void main(String[] args) {