rusefi/java_console/ui/src/main/java/com/rusefi/ui/light/LightweightGUI.java

121 lines
3.9 KiB
Java

package com.rusefi.ui.light;
import com.devexperts.logging.Logging;
import com.rusefi.*;
import com.rusefi.autodetect.PortDetector;
import com.rusefi.autoupdate.Autoupdate;
import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral;
import com.rusefi.core.rusEFIVersion;
import com.rusefi.io.ConnectionStateListener;
import com.rusefi.io.ConnectionStatusLogic;
import com.rusefi.io.ConnectionWatchdog;
import com.rusefi.io.LinkManager;
import com.rusefi.ui.UIContext;
import com.rusefi.ui.util.FrameHelper;
import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
import java.awt.*;
import static com.devexperts.logging.Logging.getLogging;
import static com.rusefi.StartupFrame.createLogoLabel;
public class LightweightGUI {
private static final Logging log = getLogging(LightweightGUI.class);
private final JPanel connectedPanel = new JPanel();
private final JLabel connectedLabel = new JLabel();
public LightweightGUI(UIContext uiContext) {
final FrameHelper frameHelper = new FrameHelper();
frameHelper.getFrame().setTitle("rusEFI Lightweight " + rusEFIVersion.CONSOLE_VERSION);
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
connectedPanel.add(connectedLabel);
topPanel.add(connectedPanel);
topPanel.add(new InternetStatus().getContent());
JPanel leftPanel = new JPanel(new VerticalFlowLayout());
leftPanel.add(new JLabel(Autoupdate.readBundleFullName()));
JLabel firmwareVersion = new JLabel();
SensorCentral.getInstance().addListener(Sensor.FIRMWARE_VERSION, value -> firmwareVersion.setText(Integer.toString((int) value)));
leftPanel.add(firmwareVersion);
final JPanel content = new JPanel(new BorderLayout());
content.add(topPanel, BorderLayout.NORTH);
content.add(leftPanel, BorderLayout.WEST);
content.add(createLogoUrlPanel(), BorderLayout.EAST);
frameHelper.showFrame(content, true);
}
public static void start() {
UIContext uiContext = new UIContext();
LightweightGUI gui = new LightweightGUI(uiContext);
gui.setConnectedUI(false);
new Thread(() -> waitForDeviceAndStart(uiContext.getLinkManager())).start();
ConnectionStatusLogic.INSTANCE.addListener(new ConnectionStatusLogic.Listener() {
@Override
public void onConnectionStatus(boolean isConnected) {
uiContext.sensorLogger.init();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
gui.setConnectedUI(isConnected);
}
});
}
});
}
private static JPanel createLogoUrlPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel(StartupFrame.LINK_TEXT), BorderLayout.SOUTH);
JLabel logo = createLogoLabel();
if (logo != null) {
panel.add(logo, BorderLayout.CENTER);
}
return panel;
}
private void setConnectedUI(boolean isConnected) {
connectedLabel.setText(isConnected ? "Connected" : "NOT CONNECTED");
connectedPanel.setBackground(isConnected ? Color.green : Color.red);
}
public static void waitForDeviceAndStart(LinkManager linkManager) {
String autoDetectedPort = detectPortUntilDetected();
System.out.println("First time port detected: " + autoDetectedPort);
linkManager.startAndConnect(autoDetectedPort, ConnectionStateListener.VOID);
ConnectionWatchdog.init(linkManager);
}
private static String detectPortUntilDetected() {
while (true) {
String port = PortDetector.autoDetectSerial(null).getSerialPort();
System.out.println("Detected " + port);
if (port != null)
return port;
IoUtil.sleepSeconds(1);
}
}
}