blindly implement openblt auto port detect

This commit is contained in:
Matthew Kennedy 2023-10-24 16:19:25 -07:00 committed by rusefillc
parent 3334e1f9c4
commit a521cc0414
1 changed files with 53 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import com.rusefi.Launcher;
import com.rusefi.SerialPortScanner;
import com.rusefi.autodetect.PortDetector;
import com.rusefi.config.generated.Fields;
import com.rusefi.io.LinkManager;
import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.core.ui.AutoupdateUtil;
import com.rusefi.ui.StatusWindow;
@ -17,6 +18,7 @@ import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
@ -111,8 +113,12 @@ public class ProgramSelector {
}
private static void rebootToOpenblt(JComponent parent, String selectedPort) {
rebootToOpenblt(parent, selectedPort, createStatusWindow("OpenBLT switch"));
}
private static void rebootToOpenblt(JComponent parent, String selectedPort, UpdateOperationCallbacks callbacks) {
String port = selectedPort == null ? PortDetector.AUTO : selectedPort;
DfuFlasher.rebootToDfu(parent, port, createStatusWindow("OpenBLT switch"), Fields.CMD_REBOOT_OPENBLT);
DfuFlasher.rebootToDfu(parent, port, callbacks, Fields.CMD_REBOOT_OPENBLT);
}
@NotNull
@ -134,9 +140,52 @@ public class ProgramSelector {
}, "OpenBLT via CAN");
}
private void flashOpenbltSerial(String port) {
UpdateOperationCallbacks callbacks = createStatusWindow("OpenBLT via CAN");
private void flashOpenbltSerialAutomatic(JComponent parent, String fomePort) {
UpdateOperationCallbacks callbacks = createStatusWindow("OpenBLT via Serial");
String[] portsBefore = LinkManager.getCommPorts();
rebootToOpenblt(parent, fomePort, callbacks);
String[] portsAfter = LinkManager.getCommPorts();
// Check that the ECU disappeared from the "before" list
if (!PortDetector.AUTO.equals(fomePort) && Arrays.stream(portsBefore).anyMatch(fomePort::equals)) {
callbacks.log("Looks like your ECU didn't reboot to OpenBLT");
callbacks.error();
return;
}
// Check that exactly one thing appeared in the "after" list
ArrayList<String> newItems = new ArrayList<>();
for (String s : portsAfter) {
if (!Arrays.stream(portsBefore).anyMatch(s::equals)) {
// This item is in the after list but not before list
newItems.add(s);
}
}
if (newItems.size() == 0) {
callbacks.log("Looks like your ECU disappeared during the update process. Please try again.");
callbacks.error();
return;
}
if (newItems.size() > 1) {
// More than one port appeared? whattt?
callbacks.log("Unable to find ECU after reboot as multiple serial ports appeared. Before: " + portsBefore.length + " After: " + portsAfter.length);
callbacks.error();
return;
}
String openbltPort = newItems.get(0);
flashOpenbltSerial(openbltPort, callbacks);
}
private void flashOpenbltSerial(String port) {
flashOpenbltSerial(port, createStatusWindow("OpenBLT via Serial"));
}
private void flashOpenbltSerial(String port, UpdateOperationCallbacks callbacks) {
// We can't auto detect OpenBLT port yet
if (port == null || PortDetector.AUTO.equals(port)) {
callbacks.log("Invalid serial port for OpenBLT: " + port);
@ -154,7 +203,7 @@ public class ProgramSelector {
// it's a lengthy operation let's signal end
Toolkit.getDefaultToolkit().beep();
}, "OpenBLT via serial");
}, "OpenBLT via Serial");
}
@NotNull