From 6dace7ce0d617077657b5339e4757abe3c49e5de Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 00:48:04 -0400 Subject: [PATCH] broadcast tab seems to work now?! --- .../com/rusefi/autodetect/PortDetector.java | 10 +++- .../rusefi/autodetect/SerialAutoChecker.java | 0 .../com/rusefi/proxy/NetworkConnector.java | 4 ++ .../rusefi/tools/NetworkConnectorStartup.java | 3 +- .../com/rusefi/ts_plugin/BroadcastTab.java | 58 ++++++++++++++++++- .../com/rusefi/ts_plugin/PluginEntry.java | 8 +++ .../java/com/rusefi/ts_plugin/RemoteTab.java | 6 +- .../java/com/rusefi/ts_plugin/UploadTab.java | 3 +- 8 files changed, 82 insertions(+), 10 deletions(-) rename java_console/{ui => io}/src/main/java/com/rusefi/autodetect/PortDetector.java (89%) rename java_console/{ui => io}/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java (100%) diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java similarity index 89% rename from java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java rename to java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java index f4d7778adc..d06ce4e72e 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java @@ -1,6 +1,6 @@ package com.rusefi.autodetect; -import com.rusefi.FileLog; +import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; @@ -19,19 +19,23 @@ import java.util.function.Function; * Andrey Belomutskiy, (c) 2013-2020 */ public class PortDetector { + private final static Logging log = Logging.getLogging(PortDetector.class); + private static final NamedThreadFactory AUTO_DETECT_PORT = new NamedThreadFactory("AutoDetectPort"); /** * Connect to all serial ports and find out which one respond first * @param callback + * @return port name on which rusEFI was detected or null if none */ + @Nullable public static String autoDetectSerial(Function callback) { String[] serialPorts = getPortNames(); if (serialPorts.length == 0) { - System.err.println("No serial ports detected"); + log.error("No serial ports detected"); return null; } - FileLog.MAIN.logLine("Trying " + Arrays.toString(serialPorts)); + log.info("Trying " + Arrays.toString(serialPorts)); List serialFinder = new ArrayList<>(); CountDownLatch portFound = new CountDownLatch(1); AtomicReference result = new AtomicReference<>(); diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java similarity index 100% rename from java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java rename to java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index f7d873c591..f4893a41e6 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -34,6 +34,10 @@ public class NetworkConnector implements Closeable { private final static Logging log = Logging.getLogging(NetworkConnector.class); private boolean isClosed; + public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { + return runNetworkConnector(authToken, controllerPort, context, ReconnectListener.VOID); + } + public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 87e8fd3589..0e8d529000 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -5,7 +5,6 @@ import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.NetworkConnectorContext; -import com.rusefi.tools.online.ProxyClient; import com.rusefi.ui.AuthTokenPanel; public class NetworkConnectorStartup { @@ -25,7 +24,7 @@ public class NetworkConnectorStartup { NetworkConnectorContext connectorContext = new NetworkConnectorContext(); - NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java index e7781fcdef..00946947bb 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java @@ -1,15 +1,69 @@ package com.rusefi.ts_plugin; +import com.rusefi.auth.AutoTokenUtil; +import com.rusefi.autodetect.PortDetector; +import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; +import com.rusefi.ui.AuthTokenPanel; +import com.rusefi.ui.util.URLLabel; +import org.putgemin.VerticalFlowLayout; import javax.swing.*; +/** + * @see PluginEntry + */ public class BroadcastTab { - private final JComponent content = new JPanel(); + private final JComponent content = new JPanel(new VerticalFlowLayout()); + + private final JLabel help = new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING); + + private final JLabel status = new JLabel(); public BroadcastTab() { -// NetworkConnector + JButton broadcast = new JButton("Broadcast"); + broadcast.addActionListener(e -> { + String authToken = AuthTokenPanel.getAuthToken(); + if (!AutoTokenUtil.isToken(authToken)) { + status.setText("Auth token is required to broadcast ECU"); + return; + } + + new Thread(() -> { + String autoDetectedPort = PortDetector.autoDetectSerial(null); + SwingUtilities.invokeLater(() -> { + startBroadcasting(authToken, autoDetectedPort); + }); + + }).start(); + }); + + content.add(broadcast); + content.add(status); + content.add(help); + content.add(new JLabel(PluginEntry.LOGO)); + + AutoupdateUtil.trueLayout(content); + } + + private void startBroadcasting(String authToken, String autoDetectedPort) { + if (autoDetectedPort == null) { + status.setText("rusEFI ECU not detected.
Please make sure that TunerStudio is currently not connected to ECU."); + } else { + status.setText("rusEFI detected at " + autoDetectedPort); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext(); + + new Thread(() -> { + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); + + SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken())); + + }).start(); + } + AutoupdateUtil.trueLayout(content); } public JComponent getContent() { diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java index 9f9a011387..f96efc3498 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java @@ -1,6 +1,7 @@ package com.rusefi.ts_plugin; import com.efiAnalytics.plugin.ecu.ControllerAccess; +import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.ts_plugin.util.ManifestHelper; import com.rusefi.tune.xml.Constant; @@ -11,10 +12,17 @@ import java.util.function.Supplier; /** * {@link TsPluginLauncher} creates an instance of this class via reflection. + * @see UploadTab upload tune & TODO upload logs + * @see RemoteTab remote ECU access & control + * @see BroadcastTab offer your ECU for remove access & control + * @see PluginBodySandbox */ public class PluginEntry implements TsPluginBody { private final JPanel content = new JPanel(new BorderLayout()); + static final ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); + + /** * the real constructor - this one is invoked via reflection */ diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 8e048270b1..c5a1d57eb4 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -29,10 +29,14 @@ import java.util.concurrent.atomic.AtomicReference; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; /** + * remote ECU access & control + * * @see RemoteTabSandbox + * @see PluginEntry */ public class RemoteTab { private static final String APPLICATION_PORT = "application_port"; + public static final String HOWTO_REMOTE_TUNING = "https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning"; private final JComponent content = new JPanel(new BorderLayout()); private final JPanel list = new JPanel(new VerticalFlowLayout()); @@ -87,7 +91,7 @@ public class RemoteTab { topPanel.add(oneTimePasswordControl); topLines.add(topPanel); - topLines.add(new URLLabel("https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning")); + topLines.add(new URLLabel(HOWTO_REMOTE_TUNING)); content.add(topLines, BorderLayout.NORTH); content.add(list, BorderLayout.CENTER); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java index 9862103691..6b36fa6f75 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java @@ -142,8 +142,7 @@ public class UploadTab { content.add(uploadView.getContent()); content.add(upload); - ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); - content.add(new JLabel(LOGO)); + content.add(new JLabel(PluginEntry.LOGO)); content.add(tokenPanel.getContent()); content.add(new URLLabel(REO_URL));