diff --git a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java index 0c73ef7128..bd1aad2f1c 100644 --- a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -76,7 +76,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { private boolean isCompositeLoggerEnabled; private long lastLowRpmTime = System.currentTimeMillis(); - private VcdStreamFile composite = new VcdStreamFile(); + private List compositeLogs = Arrays.asList(new VcdStreamFile(), new TSHighSpeedLog()); public boolean isClosed; /** @@ -200,7 +200,8 @@ public class BinaryProtocol implements BinaryProtocolCommands { packet[1] = Fields.TS_COMPOSITE_DISABLE; executeCommand(packet, "disable composite"); isCompositeLoggerEnabled = false; - composite.close(); + for (StreamFile composite : compositeLogs) + composite.close(); } } @@ -498,7 +499,8 @@ public class BinaryProtocol implements BinaryProtocolCommands { byte[] response = executeCommand(packet, "composite log", true); if (checkResponseCode(response, RESPONSE_OK)) { List events = CompositeParser.parse(response); - composite.append(events); + for (StreamFile composite : compositeLogs) + composite.append(events); } } diff --git a/java_console/models/src/com/rusefi/binaryprotocol/StreamFile.java b/java_console/models/src/com/rusefi/binaryprotocol/StreamFile.java index 9da9a46a40..85b31e14e4 100644 --- a/java_console/models/src/com/rusefi/binaryprotocol/StreamFile.java +++ b/java_console/models/src/com/rusefi/binaryprotocol/StreamFile.java @@ -2,10 +2,36 @@ package com.rusefi.binaryprotocol; import com.rusefi.composite.CompositeEvent; +import java.io.FileWriter; +import java.io.IOException; import java.util.List; -public interface StreamFile { - void append(List events); +public abstract class StreamFile { + protected FileWriter writer; - void close(); + public StreamFile() { + Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { + @Override + public void run() { + close(); + } + })); + } + + abstract void append(List events); + + public synchronized void close() { + if (writer != null) { + try { + writeFooter(writer); + writer.close(); + } catch (IOException e) { + // ignoring this one + } + } + writer = null; + } + + protected void writeFooter(FileWriter writer) throws IOException { + } } diff --git a/java_console/models/src/com/rusefi/binaryprotocol/TSHighSpeedLog.java b/java_console/models/src/com/rusefi/binaryprotocol/TSHighSpeedLog.java new file mode 100644 index 0000000000..3ced323a52 --- /dev/null +++ b/java_console/models/src/com/rusefi/binaryprotocol/TSHighSpeedLog.java @@ -0,0 +1,47 @@ +package com.rusefi.binaryprotocol; + +import com.rusefi.FileLog; +import com.rusefi.composite.CompositeEvent; +import com.rusefi.rusEFIVersion; +import sun.misc.Launcher; + +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.List; + +public class TSHighSpeedLog extends StreamFile { + private int prevTime = 0; + + private static void writeHeader(Writer writer) throws IOException { + writer.write("#Firmware: console" + rusEFIVersion.CONSOLE_VERSION + " firmware " + rusEFIVersion.firmwareVersion.get() + "\n"); + writer.write("PriLevel,SecLevel,Trigger,Sync,Time,ToothTime\n" + + "Flag,Flag,Flag,Flag,ms,ms\n"); + } + + @Override + void append(List events) { + try { + if (writer == null) { + String fileName = FileLog.DIR + "rusEFI_trigger_log_" + FileLog.getDate() + ".csv"; + writer = new FileWriter(fileName); + writeHeader(writer); + } + for (CompositeEvent event : events) { + writer.write(event.isPrimaryTriggerAsInt() + "," + event.isSecondaryTriggerAsInt() + "," + event.isTrgAsInt() + "," + event.isSyncAsInt() + ","); + int delta = event.getTimestamp() - prevTime; + writer.write(event.getTimestamp() / 1000.0 + "," + delta / 1000.0 + "\n"); + prevTime = event.getTimestamp(); + } + writer.flush(); + + } catch (IOException e) { + // ignoring IO exceptions + } + } + + @Override + protected void writeFooter(FileWriter writer) throws IOException { + writer.write("MARK 028\n"); + } +} diff --git a/java_console/models/src/com/rusefi/binaryprotocol/VcdStreamFile.java b/java_console/models/src/com/rusefi/binaryprotocol/VcdStreamFile.java index c836e69dfd..3d90a86c0f 100644 --- a/java_console/models/src/com/rusefi/binaryprotocol/VcdStreamFile.java +++ b/java_console/models/src/com/rusefi/binaryprotocol/VcdStreamFile.java @@ -14,15 +14,13 @@ import java.util.List; * * @see FileLog#WIKI_URL */ -public class VcdStreamFile implements StreamFile { +public class VcdStreamFile extends StreamFile { private static final String TAG_PRIMARY = "t"; private static final String TAG_SECONDARY = "s"; private static final String TAG_TRG = "r"; private static final String TAG_SYNC = "y"; - private FileWriter writer; - - public static void writeHeader(Writer writer, Date date) throws IOException { + private static void writeHeader(Writer writer, Date date) throws IOException { writer.write("$date\n"); writer.write("\t" + date + "\n"); writer.write("$end\n" + @@ -54,6 +52,14 @@ public class VcdStreamFile implements StreamFile { writer.flush(); } + public static void writeVCD(List events, Writer writer, Date date) throws IOException { + writeHeader(writer, date); + appendEvents(events, writer); + } + + public static void writeVCD(List events, FileWriter fileWriter) throws IOException { + writeVCD(events, fileWriter, new Date()); + } @Override public void append(List events) { @@ -68,16 +74,4 @@ public class VcdStreamFile implements StreamFile { // ignoring this one } } - - @Override - public void close() { - if (writer != null) { - try { - writer.close(); - } catch (IOException e) { - // ignoring this one - } - } - writer = null; - } } diff --git a/java_console/models/src/com/rusefi/composite/CompositeParser.java b/java_console/models/src/com/rusefi/composite/CompositeParser.java index 83a33984c4..cc3ed38d4c 100644 --- a/java_console/models/src/com/rusefi/composite/CompositeParser.java +++ b/java_console/models/src/com/rusefi/composite/CompositeParser.java @@ -41,12 +41,4 @@ public class CompositeParser { return events; } - public static void writeVCD(List events, Writer writer, Date date) throws IOException { - VcdStreamFile.writeHeader(writer, date); - VcdStreamFile.appendEvents(events, writer); - } - - public static void writeVCD(List events, FileWriter fileWriter) throws IOException { - writeVCD(events, fileWriter, new Date()); - } } diff --git a/java_console/models/src/com/rusefi/composite/test/CompositeParserTest.java b/java_console/models/src/com/rusefi/composite/test/CompositeParserTest.java index e53295a03f..b2605082fa 100644 --- a/java_console/models/src/com/rusefi/composite/test/CompositeParserTest.java +++ b/java_console/models/src/com/rusefi/composite/test/CompositeParserTest.java @@ -1,5 +1,6 @@ package com.rusefi.composite.test; +import com.rusefi.binaryprotocol.VcdStreamFile; import com.rusefi.composite.CompositeEvent; import com.rusefi.composite.CompositeParser; import org.junit.Test; @@ -18,6 +19,6 @@ public class CompositeParserTest { StringWriter writer = new StringWriter(); //FileWriter writer = new FileWriter("rusEFI.vcd"); - CompositeParser.writeVCD(events, writer, new Date(1590847552574L)); + VcdStreamFile.writeVCD(events, writer, new Date(1590847552574L)); } } diff --git a/java_console/models/src/com/rusefi/rusEFIVersion.java b/java_console/models/src/com/rusefi/rusEFIVersion.java new file mode 100644 index 0000000000..87f955712e --- /dev/null +++ b/java_console/models/src/com/rusefi/rusEFIVersion.java @@ -0,0 +1,8 @@ +package com.rusefi; + +import java.util.concurrent.atomic.AtomicReference; + +public class rusEFIVersion { + public static final int CONSOLE_VERSION = 20200530; + public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); +} diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 2bd208dd00..d046c3d724 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -41,8 +41,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see StartupFrame * @see EngineSnifferPanel */ -public class Launcher { - public static final int CONSOLE_VERSION = 20200530; +public class Launcher extends rusEFIVersion { public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); public static final String TAB_INDEX = "main_tab"; @@ -57,8 +56,6 @@ public class Launcher { public TabbedPanel tabbedPane = new TabbedPanel(); - public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); - private static Frame staticFrame; private MainFrame mainFrame = new MainFrame(tabbedPane); diff --git a/java_console/ui/src/com/rusefi/ui/util/DefaultExceptionHandler.java b/java_console/ui/src/com/rusefi/ui/util/DefaultExceptionHandler.java index fb2d7806eb..6510fcff9a 100644 --- a/java_console/ui/src/com/rusefi/ui/util/DefaultExceptionHandler.java +++ b/java_console/ui/src/com/rusefi/ui/util/DefaultExceptionHandler.java @@ -8,7 +8,6 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; import static com.rusefi.Launcher.*; -import static javax.swing.JOptionPane.OK_OPTION; /** * 6/30/13