diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java index 8f6d4e9cd8..5efd7c900e 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java @@ -24,6 +24,7 @@ public class PortHolder { private final DataListener dataListener; private final Logger logger; private final Callable streamFactory; + private final Callable ioStreamCallable; private final LinkManager linkManager; public ConnectionStateListener listener; @@ -34,12 +35,13 @@ public class PortHolder { @Nullable private BinaryProtocol bp; - protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable streamFactory) { + protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable streamFactory, Callable ioStreamCallable) { this.port = port; this.linkManager = linkManager; dataListener = freshData -> linkManager.getEngineState().processNewData(new String(freshData), LinkManager.ENCODER); this.logger = logger; this.streamFactory = streamFactory; + this.ioStreamCallable = ioStreamCallable; } boolean connectAndReadConfiguration() { @@ -48,13 +50,11 @@ public class PortHolder { MessagesCentral.getInstance().postMessage(logger, getClass(), "Opening port: " + port); - stream = streamFactory.call(); + stream = ioStreamCallable.call(); if (stream == null) { // error already reported return false; } - IncomingDataBuffer dataBuffer = IncomingDataBuffer.createDataBuffer(stream, logger); - stream.setDataBuffer(dataBuffer); synchronized (portLock) { bp = new BinaryProtocol(linkManager, logger, stream, stream.getDataBuffer()); portLock.notifyAll(); diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/SerialConnector.java b/java_console/io/src/main/java/com/rusefi/io/serial/SerialConnector.java index 52fbe705a6..b2dfe36a4c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/SerialConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/SerialConnector.java @@ -3,6 +3,7 @@ package com.rusefi.io.serial; import com.opensr5.Logger; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; +import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.core.MessagesCentral; import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.IoStream; @@ -23,7 +24,21 @@ public class SerialConnector implements LinkConnector { this.linkManager = linkManager; this.logger = logger; - portHolder = new PortHolder(portName, linkManager, logger, streamFactory); + Callable ioStreamCallable = new Callable() { + @Override + public IoStream call() { + IoStream stream = streamFactory.call(); + if (stream == null) { + // error already reported + return null; + } + IncomingDataBuffer dataBuffer = IncomingDataBuffer.createDataBuffer(stream, logger); + stream.setDataBuffer(dataBuffer); + return stream; + } + }; + + portHolder = new PortHolder(portName, linkManager, logger, streamFactory, ioStreamCallable); } @Override