diff --git a/java_console/autotest/src/com/rusefi/ControllerConnectorState.java b/java_console/autotest/src/com/rusefi/ControllerConnectorState.java new file mode 100644 index 0000000000..c8a77917b6 --- /dev/null +++ b/java_console/autotest/src/com/rusefi/ControllerConnectorState.java @@ -0,0 +1,43 @@ +package com.rusefi; + +import com.rusefi.autodetect.PortDetector; +import com.rusefi.config.generated.Fields; +import com.rusefi.core.EngineState; +import com.rusefi.io.LinkManager; +import org.jetbrains.annotations.NotNull; + +/** + * this class helps us to connect to real ECU once per JVM invocation + */ +public class ControllerConnectorState { + public volatile static String firmwareVersion; + private static LinkManager linkManager; + + @NotNull + public synchronized static LinkManager getLinkManager() { + if (linkManager != null) + return linkManager; + + LinkManager linkManager = new LinkManager().setCompositeLogicEnabled(false); + linkManager.getEngineState().registerStringValueAction(Fields.PROTOCOL_VERSION_TAG, new EngineState.ValueCallback() { + @Override + public void onUpdate(String firmwareVersion1) { + firmwareVersion = firmwareVersion1; + } + }); + + /** + * with real hardware we have noise on all analog inputs which gives us random sensor data, we cannot really + * test exact numbers yet + */ + TestingUtils.isRealHardware = true; + FileLog.MAIN.start(); + String port = System.getProperty("ecu.port"); + if (port == null) + port = PortDetector.autoDetectPort(null); + + IoUtil.realHardwareConnect(linkManager, port); + ControllerConnectorState.linkManager = linkManager; + return linkManager; + } +} diff --git a/java_console/autotest/src/com/rusefi/EnduranceTestUtility.java b/java_console/autotest/src/com/rusefi/EnduranceTestUtility.java index fd325bf306..0d593e2f3b 100644 --- a/java_console/autotest/src/com/rusefi/EnduranceTestUtility.java +++ b/java_console/autotest/src/com/rusefi/EnduranceTestUtility.java @@ -6,7 +6,6 @@ import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; import static com.rusefi.IoUtil.*; -import static com.rusefi.RealHwTest.startRealHardwareTest; /** * this command utility confirms that rusEFI hardware stays alive for long periods of time @@ -16,21 +15,14 @@ public class EnduranceTestUtility { private static final int DEFAULT_COUNT = 2000; public static void main(String[] args) { - LinkManager linkManager = new LinkManager(); - CommandQueue commandQueue = linkManager.getCommandQueue(); long start = System.currentTimeMillis(); int count = parseCount(args); + FileLog.MAIN.logLine("Running " + count + " cycles"); try { - String port = startRealHardwareTest(args); - if (port == null) { - System.out.println("EnduranceTest [SERIAL] [COUNT]"); - return; - } + LinkManager linkManager = ControllerConnectorState.getLinkManager(); + CommandQueue commandQueue = linkManager.getCommandQueue(); - FileLog.MAIN.logLine("Running " + count + " cycles"); - - IoUtil.realHardwareConnect(linkManager, port); for (int i = 0; i < count; i++) { BaseTest.currentEngineType = Fields.ET_FORD_ASPIRE; sendCommand("set " + Fields.CMD_ENGINE_TYPE + " " + 3, BaseTest.COMPLEX_COMMAND_RETRY, Timeouts.SET_ENGINE_TIMEOUT, commandQueue); diff --git a/java_console/autotest/src/com/rusefi/RealHwTest.java b/java_console/autotest/src/com/rusefi/RealHwTest.java index 8fabd927ac..8a2e6c665f 100644 --- a/java_console/autotest/src/com/rusefi/RealHwTest.java +++ b/java_console/autotest/src/com/rusefi/RealHwTest.java @@ -1,11 +1,7 @@ package com.rusefi; import com.devexperts.logging.Logging; -import com.rusefi.autodetect.PortDetector; -import com.rusefi.config.generated.Fields; -import com.rusefi.core.EngineState; import com.rusefi.io.LinkManager; -import org.jetbrains.annotations.NotNull; import java.io.PrintWriter; import java.io.StringWriter; @@ -27,7 +23,6 @@ import static com.rusefi.Timeouts.SECOND; public class RealHwTest { private static final Logging log = getLogging(RealHwTest.class); private static final int STARTUP_SLEEP = 20; - private volatile static String firmwareVersion; public static void main(String[] args) throws InterruptedException { log.info("Sleeping " + STARTUP_SLEEP + " seconds to give OS time to connect VCP driver"); @@ -46,21 +41,16 @@ public class RealHwTest { * @return true if test is a SUCCESS, false if a FAILURE */ public static boolean runHardwareTest(String[] args) { - String port = startRealHardwareTest(args); - if (port == null) { - return false; - } else { - return runHardwareTest(port); - } + return runHardwareTest(); } /** * @return true if test is a SUCCESS, false if a FAILURE */ - public static boolean runHardwareTest(String port) { + public static boolean runHardwareTest() { long start = System.currentTimeMillis(); try { - runRealHardwareTest(port); + runRealHardwareTest(ControllerConnectorState.getLinkManager()); } catch (Throwable e) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); @@ -74,38 +64,10 @@ public class RealHwTest { return true; } - static String startRealHardwareTest(@NotNull String[] args) { - /** - * with real hardware we have noise on all analog inputs which gives us random sensor data, we cannot really - * test exact numbers yet - */ - TestingUtils.isRealHardware = true; - FileLog.MAIN.start(); - String port; - if (args.length == 1 || args.length == 2) { - port = args[0]; - } else if (args.length == 0) { - port = PortDetector.autoDetectPort(null); - } else { - System.out.println("Only one optional argument expected: port number"); - port = null; - } - return port; - } - - private static void runRealHardwareTest(String port) { - LinkManager linkManager = new LinkManager().setCompositeLogicEnabled(false); - linkManager.getEngineState().registerStringValueAction(Fields.PROTOCOL_VERSION_TAG, new EngineState.ValueCallback() { - @Override - public void onUpdate(String firmwareVersion) { - RealHwTest.firmwareVersion = firmwareVersion; - } - }); - - IoUtil.realHardwareConnect(linkManager, port); + private static void runRealHardwareTest(LinkManager linkManager) { // first run tests which require real hardware new HardwareTests(linkManager.getCommandQueue()).runRealHardwareTests(); - if (firmwareVersion == null) + if (ControllerConnectorState.firmwareVersion == null) throw new IllegalStateException("firmwareVersion has not arrived"); // now run common part of the test which should be same on real hardware and simulator