From a47530be54b3ca2bcfcbcbc6cba3f6d2798777f1 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Mon, 6 Dec 2021 17:27:38 -0500 Subject: [PATCH] SimulatorTcpSandbox --- .../rusefi/binaryprotocol/BinaryProtocol.java | 10 ++- .../java/com/rusefi/io/LinkConnector.java | 7 +- .../main/java/com/rusefi/io/LinkManager.java | 3 +- .../com/rusefi/io/serial/StreamConnector.java | 4 +- .../binaryprotocol/test/PCanSandbox.java | 23 ------- .../test/SimulatorTcpSandbox.java | 69 +++++++++++++++++++ .../java/com/rusefi/ui/console/MainFrame.java | 3 +- 7 files changed, 88 insertions(+), 31 deletions(-) create mode 100644 java_console/io/src/test/java/com/rusefi/binaryprotocol/test/SimulatorTcpSandbox.java diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index a251d01500..3de4a74333 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -353,6 +353,14 @@ public class BinaryProtocol { ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.CONNECTED); } + public static class Arguments { + final boolean saveFile; + + public Arguments(boolean saveFile) { + this.saveFile = saveFile; + } + } + @Nullable private ConfigurationImage readFullImageFromController(int size) { ConfigurationImage image; @@ -370,7 +378,7 @@ public class BinaryProtocol { int remainingSize = image.getSize() - offset; int requestSize = Math.min(remainingSize, Fields.BLOCKING_FACTOR); - byte packet[] = new byte[5]; + byte[] packet = new byte[5]; packet[0] = Fields.TS_READ_COMMAND; putShort(packet, 1, swap16(offset)); putShort(packet, 3, swap16(requestSize)); diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkConnector.java b/java_console/io/src/main/java/com/rusefi/io/LinkConnector.java index 8ad2466b47..ba2a688af1 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkConnector.java @@ -2,6 +2,7 @@ package com.rusefi.io; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.BinaryProtocolState; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments; import org.jetbrains.annotations.NotNull; /** @@ -11,7 +12,7 @@ import org.jetbrains.annotations.NotNull; public interface LinkConnector extends LinkDecoder { LinkConnector VOID = new LinkConnector() { @Override - public void connectAndReadConfiguration(ConnectionStateListener listener) { + public void connectAndReadConfiguration(BinaryProtocol.Arguments arguments, ConnectionStateListener listener) { } @Override @@ -37,7 +38,7 @@ public interface LinkConnector extends LinkDecoder { } @Override - public void connectAndReadConfiguration(ConnectionStateListener listener) { + public void connectAndReadConfiguration(BinaryProtocol.Arguments arguments, ConnectionStateListener listener) { throw new UnsupportedOperationException(); } @@ -58,7 +59,7 @@ public interface LinkConnector extends LinkDecoder { }; } - void connectAndReadConfiguration(ConnectionStateListener listener); + void connectAndReadConfiguration(BinaryProtocol.Arguments arguments, ConnectionStateListener listener); void send(String command, boolean fireEvent) throws InterruptedException; diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java index 9fbbb37d44..c2a0904c16 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java @@ -11,6 +11,7 @@ import com.rusefi.io.serial.StreamConnector; import com.rusefi.io.serial.BufferedSerialIoStream; import com.rusefi.io.tcp.TcpConnector; import com.rusefi.io.tcp.TcpIoStream; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments; import org.jetbrains.annotations.NotNull; import java.io.Closeable; @@ -196,7 +197,7 @@ public class LinkManager implements Closeable { public void startAndConnect(String port, ConnectionStateListener stateListener) { Objects.requireNonNull(port, "port"); start(port, stateListener); - connector.connectAndReadConfiguration(stateListener); + connector.connectAndReadConfiguration(new BinaryProtocol.Arguments(true), stateListener); } @NotNull diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java index 402107afd0..3e2d3aa228 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java @@ -3,11 +3,11 @@ package com.rusefi.io.serial; import com.devexperts.logging.Logging; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; -import com.rusefi.core.MessagesCentral; import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.IoStream; import com.rusefi.io.LinkConnector; import com.rusefi.io.LinkManager; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments; import static com.devexperts.logging.Logging.getLogging; @@ -28,7 +28,7 @@ public class StreamConnector implements LinkConnector { } @Override - public void connectAndReadConfiguration(ConnectionStateListener listener) { + public void connectAndReadConfiguration(BinaryProtocol.Arguments arguments, ConnectionStateListener listener) { log.info("StreamConnector: connecting"); portHolder.listener = listener; log.info("scheduleOpening"); diff --git a/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/PCanSandbox.java b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/PCanSandbox.java index 52d97ec629..7823aafe5e 100644 --- a/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/PCanSandbox.java +++ b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/PCanSandbox.java @@ -63,29 +63,6 @@ public class PCanSandbox { }); /* - StreamConnector streamConnector = new StreamConnector(linkManager, () -> tsStream); - linkManager.setConnector(streamConnector); - streamConnector.connectAndReadConfiguration(new ConnectionStateListener() { - @Override - public void onConnectionEstablished() { - System.out.println("onConnectionEstablished"); - - BinaryProtocol currentStreamState = linkManager.getCurrentStreamState(); - if (currentStreamState == null) { - System.out.println("No BinaryProtocol"); - } else { - BinaryProtocolState binaryProtocolState = currentStreamState.getBinaryProtocolState(); - ConfigurationImage ci = binaryProtocolState.getControllerConfiguration(); - System.out.println("Got ConfigurationImage " + ci); - System.exit(0); - } - } - - @Override - public void onConnectionFailed() { - System.out.println("onConnectionFailed"); - } - }); */ } diff --git a/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/SimulatorTcpSandbox.java b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/SimulatorTcpSandbox.java new file mode 100644 index 0000000000..526e3df1f0 --- /dev/null +++ b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/SimulatorTcpSandbox.java @@ -0,0 +1,69 @@ +package com.rusefi.binaryprotocol.test; + +import com.opensr5.ConfigurationImage; +import com.rusefi.binaryprotocol.BinaryProtocol; +import com.rusefi.binaryprotocol.BinaryProtocolState; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.ConnectionStateListener; +import com.rusefi.io.IoStream; +import com.rusefi.io.LinkManager; +import com.rusefi.io.serial.StreamConnector; +import com.rusefi.io.tcp.TcpIoStream; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments; + +import java.io.IOException; +import java.net.Socket; + +import static com.rusefi.io.tcp.TcpConnector.DEFAULT_PORT; +import static com.rusefi.io.tcp.TcpConnector.LOCALHOST; + +public class SimulatorTcpSandbox { + public static void main(String[] args) throws IOException { + BinaryProtocol.DISABLE_LOCAL_CACHE = true; + + Socket s = new Socket(LOCALHOST, DEFAULT_PORT); + TcpIoStream tsStream = new TcpIoStream("sandbox", s); + + LinkManager linkManager = new LinkManager(); + verifyCrcNoPending(tsStream, linkManager); + + + StreamConnector streamConnector = new StreamConnector(linkManager, () -> tsStream); + linkManager.setConnector(streamConnector); + streamConnector.connectAndReadConfiguration(new BinaryProtocol.Arguments( false), new ConnectionStateListener() { + @Override + public void onConnectionEstablished() { + System.out.println("onConnectionEstablished"); + + BinaryProtocol currentStreamState = linkManager.getCurrentStreamState(); + if (currentStreamState == null) { + System.out.println("No BinaryProtocol"); + } else { + BinaryProtocolState binaryProtocolState = currentStreamState.getBinaryProtocolState(); + ConfigurationImage ci = binaryProtocolState.getControllerConfiguration(); + System.out.println("Got ConfigurationImage " + ci); + System.exit(0); + } + } + + @Override + public void onConnectionFailed() { + System.out.println("onConnectionFailed"); + } + }); + + } + + private static void verifyCrcNoPending(IoStream tsStream, LinkManager linkManager) { + BinaryProtocol bp = new BinaryProtocol(linkManager, tsStream); + linkManager.COMMUNICATION_EXECUTOR.submit(() -> { + if (tsStream.getDataBuffer().dropPending() != 0) + System.out.println("ERROR Extra data before CRC"); + bp.getCrcFromController(Fields.TOTAL_CONFIG_SIZE); +// bp.getCrcFromController(Fields.TOTAL_CONFIG_SIZE); +// bp.getCrcFromController(Fields.TOTAL_CONFIG_SIZE); + if (tsStream.getDataBuffer().dropPending() != 0) + System.out.println("ERROR Extra data after CRC"); + }); + } +} diff --git a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java index 642328726c..2812b484a3 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java @@ -10,6 +10,7 @@ import com.rusefi.maintenance.VersionChecker; import com.rusefi.ui.storage.Node; import com.rusefi.ui.util.FrameHelper; import com.rusefi.ui.util.UiUtils; +import jdk.nashorn.internal.runtime.regexp.joni.constants.Arguments; import org.jetbrains.annotations.NotNull; import java.util.Objects; @@ -74,7 +75,7 @@ public class MainFrame { }); final LinkManager linkManager = consoleUI.uiContext.getLinkManager(); - linkManager.getConnector().connectAndReadConfiguration(new ConnectionStateListener() { + linkManager.getConnector().connectAndReadConfiguration(new BinaryProtocol.Arguments(true), new ConnectionStateListener() { @Override public void onConnectionFailed() { }