can-log-tools/reader/src/main/java/com/rusefi/can/reader/impl/BusMasterReader.java

46 lines
1.4 KiB
Java

package com.rusefi.can.reader.impl;
import com.rusefi.can.CANPacket;
import com.rusefi.can.reader.CANLineReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public enum BusMasterReader implements CANLineReader {
INSTANCE;
public static final CharSequence HEADER = "BUSMASTER Ver 3";
final String FORMAT = "HH:mm:ss:SSS";
DateFormat formatter = new SimpleDateFormat(FORMAT);
@Override
public CANPacket readLine(String line, String fileName, int lineIndex) {
if (line.startsWith("***"))
return null;
String trimmed = line.trim();
if (trimmed.isEmpty())
return null;
String[] tokens = trimmed.split("\\s+");
if (tokens.length < 7)
throw new IllegalStateException("Unexpected " + Arrays.toString(tokens));
String hexId = tokens[3];
String lenghtString = tokens[5];
int sid = Integer.parseInt(hexId.substring(2), 16);
int size = Integer.parseInt(lenghtString);
long timeStamp;
byte[] data = CANLineReader.readHexArray(tokens, 6, size);
try {
Date date = formatter.parse(tokens[0]);
timeStamp = date.getTime();
} catch (ParseException e) {
throw new RuntimeException(e);
}
return new CANPacket(timeStamp, sid, data);
}
}