mirror of https://github.com/rusefi/rusefi.git
only:simpler basic console Console buttons to read write tune #5577
This commit is contained in:
parent
4b1d52dacb
commit
c6aafef46a
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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"));
|
||||
|
|
Loading…
Reference in New Issue