diff --git a/java_console/io/src/main/java/com/rusefi/io/IoStream.java b/java_console/io/src/main/java/com/rusefi/io/IoStream.java index d452c4b3d4..02d87479d5 100644 --- a/java_console/io/src/main/java/com/rusefi/io/IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/IoStream.java @@ -52,8 +52,13 @@ public interface IoStream extends WriteStream, Closeable, StreamStatistics { write(packet.getPacket()); writeInt(packet.getCrc()); flush(); + onActivity(); } + long latestActivityTime(); + + void onActivity(); + default void sendPacket(byte[] plainPacket) throws IOException { if (plainPacket.length == 0) throw new IllegalArgumentException("Empty packets are not valid."); diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java index c5d7f5221f..5175dac748 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java @@ -10,6 +10,7 @@ public abstract class AbstractIoStream implements IoStream { protected StreamStats streamStats = new StreamStats(); private final AtomicInteger bytesOut = new AtomicInteger(); + private long latestActivity; @Override public StreamStats getStreamStats() { @@ -30,6 +31,15 @@ public abstract class AbstractIoStream implements IoStream { public void flush() throws IOException { } + @Override + public void onActivity() { + latestActivity = System.currentTimeMillis(); + } + + public long latestActivityTime() { + return latestActivity; + } + @Override public boolean isClosed() { return isClosed; @@ -57,6 +67,7 @@ public abstract class AbstractIoStream implements IoStream { maxPacketGap = (int) Math.max(maxPacketGap, now - previousPacketArrivalTime); } previousPacketArrivalTime = now; + AbstractIoStream.this.onActivity(); } public void onArrived(int length) {