diff --git a/reader/src/main/java/com/rusefi/can/reader/impl/AutoFormatReader.java b/reader/src/main/java/com/rusefi/can/reader/impl/AutoFormatReader.java index f298bea..60fde0b 100644 --- a/reader/src/main/java/com/rusefi/can/reader/impl/AutoFormatReader.java +++ b/reader/src/main/java/com/rusefi/can/reader/impl/AutoFormatReader.java @@ -28,11 +28,14 @@ public class AutoFormatReader implements CANLineReader { String firstLine = Files.lines(Paths.get(fileName)).findFirst().get(); if (!firstLine.contains(PcanTrcReader2_0.FILEVERSION) && !firstLine.contains(CanHackerReader.HEADER) + && !firstLine.contains(SomethingLinuxReader.HEADER) && !firstLine.contains(BusMasterReader.HEADER) ) throw new IllegalStateException(PcanTrcReader2_0.FILEVERSION + " expected in first line"); if (firstLine.contains(CanHackerReader.HEADER)) { delegate = CanHackerReader.INSTANCE; + } else if (firstLine.contains(SomethingLinuxReader.HEADER)) { + delegate = SomethingLinuxReader.INSTANCE; } else if (firstLine.contains(BusMasterReader.HEADER)) { delegate = BusMasterReader.INSTANCE; } else if (firstLine.contains("1.1")) { diff --git a/reader/src/main/java/com/rusefi/can/reader/impl/SomethingLinuxReader.java b/reader/src/main/java/com/rusefi/can/reader/impl/SomethingLinuxReader.java new file mode 100644 index 0000000..d588d80 --- /dev/null +++ b/reader/src/main/java/com/rusefi/can/reader/impl/SomethingLinuxReader.java @@ -0,0 +1,38 @@ +package com.rusefi.can.reader.impl; + +import com.rusefi.can.CANPacket; +import com.rusefi.can.reader.CANLineReader; + +public enum SomethingLinuxReader implements CANLineReader { + INSTANCE; + + public static final CharSequence HEADER = ") can0 "; + + + @Override + public CANPacket readLine(String line, String fileName, int lineIndex) { + String trimmed = line.trim(); + if (trimmed.isEmpty()) + return null; + String[] tokens = trimmed.split("\\s+"); + if (tokens.length != 3) + throw new IllegalStateException("Three tokens expected [" + trimmed + "]"); + + String time = tokens[0].substring(1, tokens[0].length() - 2); + + String mainToken = tokens[2]; + int poundIndex = mainToken.indexOf('#'); + int sid = Integer.parseInt(mainToken.substring(0, poundIndex), 16); + + String hex = mainToken.substring(poundIndex + 1); + if (hex.length() % 2 != 0) + throw new IllegalStateException("Even length expected " + hex); + byte[] data = new byte[hex.length() / 2]; + for (int i = 0 ;i < data.length; i++) { + String twoSymbols = hex.substring(2 * i, 2 * i + 2); + data[i] = (byte) Integer.parseInt(twoSymbols, 16); + } + + return new CANPacket(Double.parseDouble(time), sid, data); + } +} diff --git a/reader/src/test/java/com/rusefi/can/RallySandbox.java b/reader/src/test/java/com/rusefi/can/RallySandbox.java index 34ab6d9..1ca3189 100644 --- a/reader/src/test/java/com/rusefi/can/RallySandbox.java +++ b/reader/src/test/java/com/rusefi/can/RallySandbox.java @@ -8,6 +8,8 @@ public class RallySandbox { "C:\\stuff\\rusefi_documentation\\OEM-Docs\\Mitsubishi\\2009-rallyart", Launcher.FILENAME_SUFFIX_PROPERTY, ".log", +// Launcher.FILENAME_FILTER_PROPERTY, +// "auto", }); } } diff --git a/reader/src/test/java/com/rusefi/can/reader/impl/SomethingLinuxReaderTest.java b/reader/src/test/java/com/rusefi/can/reader/impl/SomethingLinuxReaderTest.java new file mode 100644 index 0000000..d72d8de --- /dev/null +++ b/reader/src/test/java/com/rusefi/can/reader/impl/SomethingLinuxReaderTest.java @@ -0,0 +1,22 @@ +package com.rusefi.can.reader.impl; + +import com.rusefi.can.CANPacket; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; + +import static org.junit.Assert.assertEquals; + +public class SomethingLinuxReaderTest { + @Test + public void test() throws IOException { + String line = "(1666123717.446553) can0 215#09344FA34F8E01"; + BufferedReader reader = new BufferedReader(new StringReader(line)); + CANPacket packet = SomethingLinuxReader.INSTANCE.readLine(reader.readLine()); + assertEquals(packet.getData().length, 7); + assertEquals(packet.getData()[0], 0x09); + assertEquals(packet.getData()[6], 0x01); + } +}