From fe5889b84721b22e672d1940c643f090fdf3f23c Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 4 Dec 2021 17:32:51 -0500 Subject: [PATCH] tune via CAN #3361 separating buffered serial from non-buffered --- .../rusefi/autodetect/SerialAutoChecker.java | 4 +- .../main/java/com/rusefi/io/LinkManager.java | 6 +- .../com/rusefi/io/can/Elm327Connector.java | 4 +- .../io/serial/BufferedSerialIoStream.java | 53 +++++++++++++ ...amJSerialComm.java => SerialIoStream.java} | 77 ++++++------------- .../binaryprotocol/test/Elm327Sandbox.java | 4 +- .../com/rusefi/maintenance/DfuFlasher.java | 4 +- 7 files changed, 86 insertions(+), 66 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java rename java_console/io/src/main/java/com/rusefi/io/serial/{SerialIoStreamJSerialComm.java => SerialIoStream.java} (61%) diff --git a/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java index aa846b5ae6..6136649052 100644 --- a/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java @@ -6,7 +6,7 @@ import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; import com.rusefi.io.can.Elm327Connector; import com.rusefi.io.commands.HelloCommand; -import com.rusefi.io.serial.SerialIoStreamJSerialComm; +import com.rusefi.io.serial.BufferedSerialIoStream; import org.jetbrains.annotations.Nullable; import java.io.IOException; @@ -57,7 +57,7 @@ public class SerialAutoChecker { public void openAndCheckResponse(AtomicReference result, Function callback) { String signature; - try (IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort)) { + try (IoStream stream = BufferedSerialIoStream.openPort(serialPort)) { signature = checkResponse(stream, callback); } if (signature != null) { 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 d25659de2f..9fbbb37d44 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 @@ -8,7 +8,7 @@ import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.BinaryProtocolState; import com.rusefi.core.EngineState; import com.rusefi.io.serial.StreamConnector; -import com.rusefi.io.serial.SerialIoStreamJSerialComm; +import com.rusefi.io.serial.BufferedSerialIoStream; import com.rusefi.io.tcp.TcpConnector; import com.rusefi.io.tcp.TcpIoStream; import org.jetbrains.annotations.NotNull; @@ -82,7 +82,7 @@ public class LinkManager implements Closeable { public static IoStream open(String port) throws IOException { if (TcpConnector.isTcpPort(port)) return TcpIoStream.open(port); - return SerialIoStreamJSerialComm.openPort(port); + return BufferedSerialIoStream.openPort(port); } @NotNull @@ -230,7 +230,7 @@ public class LinkManager implements Closeable { @Override public IoStream call() { messageListener.postMessage(getClass(), "Opening port: " + port); - IoStream stream = ((Callable) () -> SerialIoStreamJSerialComm.openPort(port)).call(); + IoStream stream = ((Callable) () -> BufferedSerialIoStream.openPort(port)).call(); if (stream == null) { // error already reported return null; diff --git a/java_console/io/src/main/java/com/rusefi/io/can/Elm327Connector.java b/java_console/io/src/main/java/com/rusefi/io/can/Elm327Connector.java index 0447f9e6a6..f86347bbec 100644 --- a/java_console/io/src/main/java/com/rusefi/io/can/Elm327Connector.java +++ b/java_console/io/src/main/java/com/rusefi/io/can/Elm327Connector.java @@ -3,7 +3,7 @@ package com.rusefi.io.can; import com.devexperts.logging.Logging; import com.opensr5.io.DataListener; import com.rusefi.io.IoStream; -import com.rusefi.io.serial.SerialIoStreamJSerialComm; +import com.rusefi.io.serial.BufferedSerialIoStream; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.TcpConnector; @@ -95,7 +95,7 @@ public class Elm327Connector implements Closeable { public void start(String serialPort) { log.info("* Elm327.start()"); - if (initConnection(serialPort, SerialIoStreamJSerialComm.openPort(serialPort))) { + if (initConnection(serialPort, BufferedSerialIoStream.openPort(serialPort))) { // reset to defaults sendCommand("ATD", "OK"); diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java new file mode 100644 index 0000000000..b28b763e4f --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/serial/BufferedSerialIoStream.java @@ -0,0 +1,53 @@ +package com.rusefi.io.serial; + +import com.devexperts.logging.Logging; +import com.fazecast.jSerialComm.SerialPort; +import com.fazecast.jSerialComm.SerialPortDataListener; +import com.fazecast.jSerialComm.SerialPortEvent; +import com.opensr5.io.DataListener; +import com.rusefi.binaryprotocol.IncomingDataBuffer; +import com.rusefi.io.IoStream; + +import static com.devexperts.logging.Logging.getLogging; + +/** + * https://github.com/Fazecast/jSerialComm looks to be alive as of 2020 + *

+ * Andrey Belomutskiy, (c) 2013-2020 + * 06/03/2019 + */ +public class BufferedSerialIoStream extends SerialIoStream { + private static final Logging log = getLogging(BufferedSerialIoStream.class); + private final IncomingDataBuffer dataBuffer; + + /** + * @see #openPort(String) + */ + private BufferedSerialIoStream(SerialPort sp, String port) { + super(sp, port); + this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this); + } + + @Override + public IncomingDataBuffer getDataBuffer() { + return dataBuffer; + } + + /** + * Just open physical serial and not much more + * @see PortHolder#connectAndReadConfiguration() + */ + public static IoStream openPort(String port) { + log.info("[SerialIoStreamJSerialComm] openPort " + port); + SerialPort serialPort = SerialPort.getCommPort(port); + serialPort.setBaudRate(BaudRateHolder.INSTANCE.baudRate); + serialPort.openPort(0); +// FileLog.LOGGER.info("[SerialIoStreamJSerialComm] opened " + port); + return new BufferedSerialIoStream(serialPort, port); + } + + @Override + public String toString() { + return port + " " + super.toString(); + } +} diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStream.java similarity index 61% rename from java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java rename to java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStream.java index ab623904a5..21872716c1 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStream.java @@ -1,34 +1,23 @@ package com.rusefi.io.serial; -import com.devexperts.logging.Logging; import com.fazecast.jSerialComm.SerialPort; import com.fazecast.jSerialComm.SerialPortDataListener; import com.fazecast.jSerialComm.SerialPortEvent; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; -import com.rusefi.io.IoStream; -import static com.devexperts.logging.Logging.getLogging; +public class SerialIoStream extends AbstractIoStream { + protected final SerialPort sp; + protected final String port; -/** - * https://github.com/Fazecast/jSerialComm looks to be alive as of 2020 - *

- * Andrey Belomutskiy, (c) 2013-2020 - * 06/03/2019 - */ -public class SerialIoStreamJSerialComm extends AbstractIoStream { - private static final Logging log = getLogging(SerialIoStreamJSerialComm.class); - private final SerialPort sp; - private final String port; - private final IncomingDataBuffer dataBuffer; - - /** - * @see #openPort(String) - */ - private SerialIoStreamJSerialComm(SerialPort sp, String port) { + public SerialIoStream(SerialPort sp, String port) { this.sp = sp; this.port = port; - this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this); + } + + @Override + public IncomingDataBuffer getDataBuffer() { + throw new UnsupportedOperationException(); } @Override @@ -36,6 +25,19 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { return ""; } + @Override + public void close() { + log.info(port + ": Closing port..."); + super.close(); + sp.closePort(); + log.info(port + ": Closed port."); + } + + @Override + public void write(byte[] bytes) { + sp.writeBytes(bytes, bytes.length); + } + @Override public void setInputListener(DataListener listener) { // datalistener can be redefined @@ -71,39 +73,4 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { } - @Override - public IncomingDataBuffer getDataBuffer() { - return dataBuffer; - } - - @Override - public void close() { - log.info(port + ": Closing port..."); - super.close(); - sp.closePort(); - log.info(port + ": Closed port."); - } - - @Override - public void write(byte[] bytes) { - sp.writeBytes(bytes, bytes.length); - } - - /** - * Just open physical serial and not much more - * @see PortHolder#connectAndReadConfiguration() - */ - public static IoStream openPort(String port) { - log.info("[SerialIoStreamJSerialComm] openPort " + port); - SerialPort serialPort = SerialPort.getCommPort(port); - serialPort.setBaudRate(BaudRateHolder.INSTANCE.baudRate); - serialPort.openPort(0); -// FileLog.LOGGER.info("[SerialIoStreamJSerialComm] opened " + port); - return new SerialIoStreamJSerialComm(serialPort, port); - } - - @Override - public String toString() { - return port + " " + super.toString(); - } } diff --git a/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/Elm327Sandbox.java b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/Elm327Sandbox.java index 72ea26f406..11d147a59f 100644 --- a/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/Elm327Sandbox.java +++ b/java_console/io/src/test/java/com/rusefi/binaryprotocol/test/Elm327Sandbox.java @@ -3,7 +3,7 @@ package com.rusefi.binaryprotocol.test; import com.rusefi.io.IoStream; import com.rusefi.io.can.Elm327Connector; import com.rusefi.io.serial.BaudRateHolder; -import com.rusefi.io.serial.SerialIoStreamJSerialComm; +import com.rusefi.io.serial.BufferedSerialIoStream; import java.io.IOException; @@ -16,7 +16,7 @@ public class Elm327Sandbox { BaudRateHolder.INSTANCE.baudRate = ELM327_DEFAULT_BAUDRATE; String serialPort = "COM5"; - IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort); + IoStream stream = BufferedSerialIoStream.openPort(serialPort); stream.setInputListener(freshData -> System.out.println("onDataArrived")); stream.write((Elm327Connector.HELLO + ELM_EOL).getBytes()); diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java index dfdf6b2c2c..c984720de7 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java @@ -8,7 +8,7 @@ import com.rusefi.autodetect.PortDetector; import com.rusefi.autodetect.SerialAutoChecker; import com.rusefi.io.DfuHelper; import com.rusefi.io.IoStream; -import com.rusefi.io.serial.SerialIoStreamJSerialComm; +import com.rusefi.io.serial.BufferedSerialIoStream; import com.rusefi.ui.StatusWindow; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -70,7 +70,7 @@ public class DfuFlasher { AtomicBoolean isSignatureValidated = new AtomicBoolean(true); if (!PortDetector.isAutoPort(port)) { wnd.append("Using selected " + port + "\n"); - IoStream stream = SerialIoStreamJSerialComm.openPort(port); + IoStream stream = BufferedSerialIoStream.openPort(port); AtomicReference signature = new AtomicReference<>(); new SerialAutoChecker(PortDetector.DetectorMode.DETECT_TS, port, new CountDownLatch(1)).checkResponse(stream, new Function() { @Override