only:simpler basic console Console buttons to read write tune #5577

This commit is contained in:
rusefillc 2024-06-03 11:21:00 -04:00
parent 4b1d52dacb
commit c6aafef46a
3 changed files with 92 additions and 13 deletions

View File

@ -6,10 +6,7 @@ import com.rusefi.core.preferences.storage.PersistentConfiguration;
import com.rusefi.core.ui.FrameHelper;
import com.rusefi.io.LinkManager;
import com.rusefi.io.serial.BaudRateHolder;
import com.rusefi.maintenance.DriverInstall;
import com.rusefi.maintenance.MaintenanceUtil;
import com.rusefi.maintenance.StLinkFlasher;
import com.rusefi.maintenance.ProgramSelector;
import com.rusefi.maintenance.*;
import com.rusefi.ui.LogoHelper;
import com.rusefi.ui.util.HorizontalLine;
import com.rusefi.ui.util.URLLabel;
@ -46,6 +43,7 @@ public class StartupFrame {
private static final Logging log = getLogging(Launcher.class);
public static final String ALWAYS_AUTO_PORT = "always_auto_port";
private static final String NO_PORTS_FOUND = "<html>No ports found!<br>Confirm blue LED is blinking</html>";
public static final String SCANNING_PORTS = "Scanning ports";
private final JFrame frame;
private final JPanel connectPanel = new JPanel(new FlowLayout());
@ -67,12 +65,20 @@ public class StartupFrame {
* closing the application.
*/
private boolean isProceeding;
private final JLabel noPortsMessage = new JLabel("Scanning ports...");
private final JLabel noPortsMessage = new JLabel();
private final StatusAnimation status;
public StartupFrame() {
String title = "rusEFI console " + Launcher.CONSOLE_VERSION;
log.info(title);
noPortsMessage.setForeground(Color.red);
status = new StatusAnimation(new StatusAnimation.StatusConsumer() {
@Override
public void onStatus(String niceStatus) {
noPortsMessage.setText(niceStatus);
}
}, SCANNING_PORTS);
frame = FrameHelper.createFrame(title).getFrame();
frame.addWindowListener(new WindowAdapter() {
@Override
@ -161,6 +167,7 @@ public class StartupFrame {
}
SerialPortScanner.INSTANCE.addListener(currentHardware -> SwingUtilities.invokeLater(() -> {
status.stop();
selector.apply(currentHardware);
applyKnownPorts(currentHardware);
frame.pack();
@ -221,7 +228,7 @@ public class StartupFrame {
}
}
private static @NotNull JLabel binaryModificationControl() {
public static @NotNull JLabel binaryModificationControl() {
long binaryModificationTimestamp = MaintenanceUtil.getBinaryModificationTimestamp();
String fileTimestampText = binaryModificationTimestamp == 0 ? "firmware file not found" : ("Files " + new Date(binaryModificationTimestamp).toString());
JLabel jLabel = new JLabel(fileTimestampText);
@ -301,6 +308,7 @@ public class StartupFrame {
public void disposeFrameAndProceed() {
isProceeding = true;
frame.dispose();
status.stop();
SerialPortScanner.INSTANCE.stopTimer();
}

View File

@ -28,12 +28,13 @@ import static com.rusefi.ui.util.UiUtils.trueLayout;
public class ProgramSelector {
// todo: migrate to enum?
private static final String AUTO_DFU = "Auto Update";
private static final String MANUAL_DFU = "Manual DFU Update";
private static final String DFU_SWITCH = "Switch to DFU Mode";
private static final String OPENBLT_SWITCH = "Switch to OpenBLT Mode";
private static final String OPENBLT_MANUAL = "Manual OpenBLT Update";
private static final String OPENBLT_AUTO = "Auto OpenBLT Update";
public static final String OPENBLT_MANUAL = "Manual OpenBLT Update";
public static final String OPENBLT_AUTO = "Auto OpenBLT Update";
private static final String DFU_ERASE = "Full Chip Erase";
private static final String INSTALL_OPENBLT = "Install OpenBLT";
private static final String ST_LINK = "ST-LINK Update";
@ -72,7 +73,7 @@ public class ProgramSelector {
});
}
private void executeJob(JComponent parent, String selectedMode, SerialPortScanner.PortResult selectedPort) {
public static void executeJob(JComponent parent, String selectedMode, SerialPortScanner.PortResult selectedPort) {
String jobName = null;
Consumer<UpdateOperationCallbacks> job;
@ -106,7 +107,7 @@ public class ProgramSelector {
break;
case OPENBLT_CAN:
jobName = "OpenBLT via CAN";
job = ProgramSelector.this::flashOpenBltCan;
job = (callbacks) -> flashOpenBltCan(parent, callbacks);
break;
case OPENBLT_MANUAL:
jobName = "OpenBLT via Serial";
@ -139,9 +140,9 @@ public class ProgramSelector {
DfuFlasher.rebootToDfu(parent, port, callbacks, Fields.CMD_REBOOT_OPENBLT);
}
private void flashOpenBltCan(UpdateOperationCallbacks callbacks) {
private static void flashOpenBltCan(JComponent parent, UpdateOperationCallbacks callbacks) {
if (FileLog.is32bitJava()) {
showError32bitJava(content);
showError32bitJava(parent);
return;
}
OpenbltJni.OpenbltCallbacks cb = makeOpenbltCallbacks(callbacks);

View File

@ -1,10 +1,15 @@
package com.rusefi.ui.basic;
import com.rusefi.Launcher;
import com.rusefi.SerialPortScanner;
import com.rusefi.StartupFrame;
import com.rusefi.autodetect.PortDetector;
import com.rusefi.core.FindFileHelper;
import com.rusefi.core.ui.FrameHelper;
import com.rusefi.io.UpdateOperationCallbacks;
import com.rusefi.maintenance.DfuFlasher;
import com.rusefi.maintenance.ProgramSelector;
import com.rusefi.maintenance.StatusAnimation;
import com.rusefi.maintenance.UpdateStatusWindow;
import com.rusefi.ui.LogoHelper;
import com.rusefi.ui.util.HorizontalLine;
@ -14,6 +19,12 @@ import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import static com.rusefi.FileLog.isWindows;
/**
@ -33,9 +44,68 @@ public class BasicStartupFrame {
JPanel panel = new JPanel(new VerticalFlowLayout());
if (isWindows()) {
panel.add(ToolButtons.createShowDeviceManagerButton());
panel.add(StartupFrame.binaryModificationControl());
JButton update = ProgramSelector.createUpdateFirmwareButton();
update.addActionListener(e -> DfuFlasher.doAutoDfu(update, PortDetector.AUTO, new UpdateStatusWindow("Update")));
boolean requireBlt = FindFileHelper.isObfuscated();
if (requireBlt) {
update.setEnabled(false);
JLabel noPortsMessage = new JLabel();
noPortsMessage.setForeground(Color.red);
panel.add(noPortsMessage);
StatusAnimation status = new StatusAnimation(new StatusAnimation.StatusConsumer() {
@Override
public void onStatus(String niceStatus) {
noPortsMessage.setText(niceStatus);
}
}, StartupFrame.SCANNING_PORTS);
SerialPortScanner.INSTANCE.addListener(currentHardware -> SwingUtilities.invokeLater(() -> {
status.stop();
frame.getFrame().pack();
java.util.List<SerialPortScanner.PortResult> ecuPorts = currentHardware.getKnownPorts().stream().filter(new Predicate<SerialPortScanner.PortResult>() {
@Override
public boolean test(SerialPortScanner.PortResult portResult) {
return portResult.type == SerialPortScanner.SerialPortType.EcuWithOpenblt;
}
}).collect(Collectors.toList());
java.util.List<SerialPortScanner.PortResult> bootloaderPorts = currentHardware.getKnownPorts().stream().filter(new Predicate<SerialPortScanner.PortResult>() {
@Override
public boolean test(SerialPortScanner.PortResult portResult) {
return portResult.type == SerialPortScanner.SerialPortType.OpenBlt;
}
}).collect(Collectors.toList());
if (!ecuPorts.isEmpty()) {
noPortsMessage.setVisible(false);
update.setEnabled(true);
update.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ProgramSelector.executeJob(update, ProgramSelector.OPENBLT_AUTO, ecuPorts.get(0));
}
});
} else if (!bootloaderPorts.isEmpty()) {
noPortsMessage.setVisible(false);
update.setEnabled(true);
update.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ProgramSelector.executeJob(update, ProgramSelector.OPENBLT_MANUAL, ecuPorts.get(0));
}
});
} else {
noPortsMessage.setText("ECU not found");
}
}));
} else {
update.addActionListener(e -> DfuFlasher.doAutoDfu(update, PortDetector.AUTO, new UpdateStatusWindow("Update")));
}
panel.add(update);
} else {
panel.add(new JLabel("Sorry only works on Windows"));