This commit is contained in:
rusefillc 2022-06-22 03:19:09 -04:00
parent f367a16570
commit 3c15fc279d
5 changed files with 64 additions and 15 deletions

View File

@ -54,4 +54,13 @@ public class DbcFile {
if (currentState != null) if (currentState != null)
this.packets.add(currentState); this.packets.add(currentState);
} }
// todo: performance optimization SOON
public DbcPacket findPacket(int i) {
for (DbcPacket packet : packets) {
if (packet.getId() == i)
return packet;
}
return null;
}
} }

View File

@ -12,6 +12,7 @@ import java.util.function.Function;
public class BinarySensorLog<T extends BinaryLogEntry> implements SensorLog { public class BinarySensorLog<T extends BinaryLogEntry> implements SensorLog {
private final Function<T, Double> valueProvider; private final Function<T, Double> valueProvider;
private final Collection<T> entries; private final Collection<T> entries;
private final TimeProvider timeProvider;
private DataOutputStream stream; private DataOutputStream stream;
private String fileName; private String fileName;
@ -19,8 +20,17 @@ public class BinarySensorLog<T extends BinaryLogEntry> implements SensorLog {
private int counter; private int counter;
public BinarySensorLog(Function<T, Double> valueProvider, Collection<T> sensors) { public BinarySensorLog(Function<T, Double> valueProvider, Collection<T> sensors) {
this.valueProvider = valueProvider; this(valueProvider, sensors, System::currentTimeMillis);
}
public BinarySensorLog(Function<T, Double> valueProvider, Collection<T> sensors, TimeProvider timeProvider) {
this.valueProvider = Objects.requireNonNull(valueProvider, "valueProvider");
this.entries = Objects.requireNonNull(sensors, "entries"); this.entries = Objects.requireNonNull(sensors, "entries");
this.timeProvider = timeProvider;
}
public interface TimeProvider {
long currentTimestamp();
} }
@Override @Override
@ -46,13 +56,15 @@ public class BinarySensorLog<T extends BinaryLogEntry> implements SensorLog {
try { try {
stream.write(0); stream.write(0);
stream.write(counter++); stream.write(counter++);
stream.writeShort((int) (System.currentTimeMillis() * 100)); stream.writeShort((int) (timeProvider.currentTimestamp() * 100));
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos); DataOutputStream dos = new DataOutputStream(baos);
for (T sensor : entries) { for (T sensor : entries) {
double value = valueProvider.apply(sensor); Double value = valueProvider.apply(sensor);
if (value == null)
throw new NullPointerException("No value for " + sensor);
sensor.writeToLog(dos, value); sensor.writeToLog(dos, value);
} }

View File

@ -10,7 +10,9 @@ import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import static com.rusefi.can.reader.impl.ParseDBC.VAG_MOTOR_1; import static com.rusefi.can.reader.impl.ParseDBC.VAG_MOTOR_1;
import static junit.framework.TestCase.assertNull;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class GetValueFromTrc { public class GetValueFromTrc {
@ -23,6 +25,8 @@ public class GetValueFromTrc {
BufferedReader reader = new BufferedReader(new StringReader(VAG_MOTOR_1)); BufferedReader reader = new BufferedReader(new StringReader(VAG_MOTOR_1));
dbc.read(reader); dbc.read(reader);
} }
assertNotNull(dbc.findPacket(640));
assertNull(dbc.findPacket(1640));
String trcLine = " 3769) 2117.7 Rx 0280 8 01 1D DF 12 1E 00 1A 1E "; String trcLine = " 3769) 2117.7 Rx 0280 8 01 1D DF 12 1E 00 1A 1E ";

View File

@ -15,7 +15,7 @@ public class ParseDBC {
public static final String VAG_MOTOR_1 = "BO_ 640 Motor_1: 8 XXX\n" + public static final String VAG_MOTOR_1 = "BO_ 640 Motor_1: 8 XXX\n" +
" SG_ Fahrerwunschmoment : 56|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" + " SG_ Fahrerwunschmoment : 56|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" +
" SG_ mechanisches_Motor_Verlustmomen : 48|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" + " SG_ mechanisches_Motor_Verlustmomen : 48|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" +
" SG_ Fahrpedalwert_oder_Drosselklapp : 40|8@1+ (0.4,0) [0|101.6] \"%\" XXX\n" + " SG_ PPS_TPS : 40|8@1+ (0.4,0) [0|101.6] \"%\" XXX\n" +
" SG_ inneres_Motor_Moment_ohne_exter : 32|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" + " SG_ inneres_Motor_Moment_ohne_exter : 32|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" +
" SG_ RPM : 16|16@1+ (0.25,0) [0|16256] \"U/min\" XXX\n" + " SG_ RPM : 16|16@1+ (0.25,0) [0|16256] \"U/min\" XXX\n" +
" SG_ inneres_Motor_Moment : 8|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" + " SG_ inneres_Motor_Moment : 8|8@1+ (0.39,0) [0|99] \"MDI\" XXX\n" +

View File

@ -12,12 +12,18 @@ import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import static com.rusefi.can.reader.impl.ParseDBC.VAG_MOTOR_1; import static com.rusefi.can.reader.impl.ParseDBC.VAG_MOTOR_1;
public class TrcToMlqSandbox { public class TrcToMlqSandbox {
// private static final String fileName = "C:\\stuff\\rusefi_documentation\\OEM-Docs\\VAG\\2006-Passat-B6\\passat-b6-stock-ecu-ecu-ptcan-not-running-pedal-up-and-down.trc";
private static final String fileName = "C:\\stuff\\rusefi_documentation\\OEM-Docs\\VAG\\2006-Passat-B6\\passat-b6-stock-ecu-ecu-ptcan-parked-revving.trc";
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
DbcFile dbc = new DbcFile(); DbcFile dbc = new DbcFile();
{ {
@ -48,24 +54,42 @@ public class TrcToMlqSandbox {
public void writeToLog(DataOutputStream dos, double value) throws IOException { public void writeToLog(DataOutputStream dos, double value) throws IOException {
dos.writeFloat((float) value); dos.writeFloat((float) value);
} }
});
@Override
public String toString() {
return getName();
}
});
} }
} }
PcanTrcReader reader = new PcanTrcReader(); PcanTrcReader reader = new PcanTrcReader();
List<CANPacket> packets = reader.readFile("C:\\stuff\\rusefi_documentation\\OEM-Docs\\VAG\\2006-Passat-B6\\passat-b6-stock-ecu-ecu-ptcan-not-running-pedal-up-and-down.trc"); List<CANPacket> packets = reader.readFile(fileName);
System.out.println(packets.size() + " packets"); System.out.println(packets.size() + " packets");
BinarySensorLog log = new BinarySensorLog(new Function<BinaryLogEntry, Double>() { Map<String, Double> values = new HashMap<>();
@Override
public Double apply(BinaryLogEntry o) { AtomicReference<Long> time = new AtomicReference<>();
System.out.println("apply"); BinarySensorLog<BinaryLogEntry> log = new BinarySensorLog<>(o -> {
return null; Double value = values.get(o.getName());
} if (value == null)
}, entries); return 0.0;
return value;
}, entries, time::get);
for (CANPacket packetContent : packets) {
DbcPacket packetMeta = dbc.findPacket(packetContent.getId());
if (packetMeta == null)
continue;
time.set((long) (packetContent.getTimeStamp() * 1000));
for (DbcField field : packetMeta.getFields()) {
values.put(field.getName(), field.getValue(packetContent));
}
log.writeSensorLogLine();
}
log.close();
} }
} }