diff --git a/java_console/bin/dfu_program.sh b/java_console/bin/dfu_program.sh new file mode 100644 index 0000000000..5179c03d71 --- /dev/null +++ b/java_console/bin/dfu_program.sh @@ -0,0 +1 @@ +java -jar console/rusefi_console.jar dfu $1 \ No newline at end of file diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 6824f9fb64..f9d2079e20 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -72,7 +72,8 @@ public class ConsoleTools { registerTool("version", ConsoleTools::version, "Only print version"); - registerTool("lightui", ConsoleTools::lightUI, "Start lightweight GUI for tiny screens"); + registerTool("lightui", strings -> lightUI(), "Start lightweight GUI for tiny screens"); + registerTool("dfu", DfuTool::run, "Program specified file into ECU via DFU"); registerTool("detect", ConsoleTools::detect, "Find attached rusEFI"); @@ -115,7 +116,7 @@ public class ConsoleTools { System.out.println("tune_CRC16=" + crc16); } - private static void lightUI(String[] strings) { + private static void lightUI() { LightweightGUI.start(); } diff --git a/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java new file mode 100644 index 0000000000..53af297d59 --- /dev/null +++ b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java @@ -0,0 +1,34 @@ +package com.rusefi.tools; + +import com.rusefi.dfu.BinaryImage; +import com.rusefi.dfu.DfuImage; +import com.rusefi.dfu.DfuLogic; +import com.rusefi.dfu.HexImage; +import com.rusefi.dfu.usb4java.DfuDeviceLocator; +import com.rusefi.dfu.usb4java.USBDfuConnection; +import cz.jaybee.intelhex.IntelHexException; + +import java.io.IOException; + +public class DfuTool { + public static void run(String[] args) throws IOException, IntelHexException { + if (args.length < 2) { + System.err.println(".dfu or .hex filename parameter expected"); + return; + } + String fileName = args[1]; + + DfuLogic.Logger logger = DfuLogic.Logger.CONSOLE; + USBDfuConnection device = DfuDeviceLocator.findDevice(logger); + if (device == null) { + System.err.println("No DFU devices found"); + return; + } + + BinaryImage image = fileName.toLowerCase().trim().endsWith(".dfu") ? new DfuImage().read(fileName) : HexImage.loadHexToBuffer(fileName, device.getFlashRange()); + + DfuLogic.uploadImage(logger, device, image, device.getFlashRange()); + + logger.info("DfuSe DFU " + device); + } +}