now supporting offset
This commit is contained in:
parent
984089898f
commit
dd10271de9
|
@ -7,17 +7,44 @@ public class DbcField {
|
||||||
private final int startOffset;
|
private final int startOffset;
|
||||||
private final int length;
|
private final int length;
|
||||||
private final double mult;
|
private final double mult;
|
||||||
|
private final double offset;
|
||||||
private String category;
|
private String category;
|
||||||
private boolean isNiceName;
|
private boolean isNiceName;
|
||||||
|
|
||||||
public DbcField(String name, int startOffset, int length, double mult, String category) {
|
public DbcField(String name, int startOffset, int length, double mult, double offset, String category) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.startOffset = startOffset;
|
this.startOffset = startOffset;
|
||||||
this.length = length;
|
this.length = length;
|
||||||
this.mult = mult;
|
this.mult = mult;
|
||||||
|
this.offset = offset;
|
||||||
this.category = category;
|
this.category = category;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static DbcField parseField(DbcPacket parent, String line) {
|
||||||
|
line = DbcFile.replaceSpecialWithSpaces(line);
|
||||||
|
String[] tokens = line.split(" ");
|
||||||
|
String name = tokens[1];
|
||||||
|
int index = 1;
|
||||||
|
while (!tokens[index - 1].equals(":"))
|
||||||
|
index++;
|
||||||
|
|
||||||
|
|
||||||
|
if (DbcFile.debugEnabled)
|
||||||
|
System.out.println(line);
|
||||||
|
int startOffset;
|
||||||
|
try {
|
||||||
|
startOffset = Integer.parseInt(tokens[index]);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new IllegalStateException("While " + line, e);
|
||||||
|
}
|
||||||
|
int length = Integer.parseInt(tokens[index + 1]);
|
||||||
|
|
||||||
|
double mult = Double.parseDouble(tokens[index + 3]);
|
||||||
|
double offset = Double.parseDouble(tokens[index + 4]);
|
||||||
|
|
||||||
|
return new DbcField(name, startOffset, length, mult, offset, parent.getName());
|
||||||
|
}
|
||||||
|
|
||||||
public String getCategory() {
|
public String getCategory() {
|
||||||
return category;
|
return category;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +69,10 @@ public class DbcField {
|
||||||
return mult;
|
return mult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getOffset() {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "DbcField{" +
|
return "DbcField{" +
|
||||||
|
@ -70,7 +101,7 @@ public class DbcField {
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getValue(CANPacket packet) {
|
public double getValue(CANPacket packet) {
|
||||||
return getBitIndex(packet.getData(), startOffset, length) * mult;
|
return getBitIndex(packet.getData(), startOffset, length) * mult + offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rename(String niceName) {
|
public void rename(String niceName) {
|
||||||
|
|
|
@ -6,7 +6,6 @@ import com.rusefi.sensor_logs.BinaryLogEntry;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -14,7 +13,7 @@ import java.util.Objects;
|
||||||
public class DbcFile {
|
public class DbcFile {
|
||||||
public final LinkedHashMap<Integer, DbcPacket> packets = new LinkedHashMap<>();
|
public final LinkedHashMap<Integer, DbcPacket> packets = new LinkedHashMap<>();
|
||||||
|
|
||||||
private static final boolean debugEnabled = false;
|
public static final boolean debugEnabled = false;
|
||||||
|
|
||||||
private List<BinaryLogEntry> list;
|
private List<BinaryLogEntry> list;
|
||||||
|
|
||||||
|
@ -60,27 +59,7 @@ public class DbcFile {
|
||||||
|
|
||||||
|
|
||||||
} else if (line.startsWith("SG_")) {
|
} else if (line.startsWith("SG_")) {
|
||||||
line = replaceSpecialWithSpaces(line);
|
DbcField field = DbcField.parseField(currentPacket, line);
|
||||||
String[] tokens = line.split(" ");
|
|
||||||
String name = tokens[1];
|
|
||||||
int index = 1;
|
|
||||||
while (!tokens[index - 1].equals(":"))
|
|
||||||
index++;
|
|
||||||
|
|
||||||
|
|
||||||
if (debugEnabled)
|
|
||||||
System.out.println(line);
|
|
||||||
int startOffset;
|
|
||||||
try {
|
|
||||||
startOffset = Integer.parseInt(tokens[index]);
|
|
||||||
} catch (NumberFormatException e) {
|
|
||||||
throw new IllegalStateException("While " + line, e);
|
|
||||||
}
|
|
||||||
int length = Integer.parseInt(tokens[index + 1]);
|
|
||||||
|
|
||||||
double mult = Double.parseDouble(tokens[index + 3]);
|
|
||||||
|
|
||||||
DbcField field = new DbcField(name, startOffset, length, mult, currentPacket.getName());
|
|
||||||
if (debugEnabled)
|
if (debugEnabled)
|
||||||
System.out.println("Found " + field);
|
System.out.println("Found " + field);
|
||||||
currentPacket.add(field);
|
currentPacket.add(field);
|
||||||
|
@ -109,7 +88,7 @@ public class DbcFile {
|
||||||
packets.put(currentPacket.getId(), currentPacket);
|
packets.put(currentPacket.getId(), currentPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String replaceSpecialWithSpaces(String line) {
|
public static String replaceSpecialWithSpaces(String line) {
|
||||||
line = line.replaceAll("[|+@(,)\\[\\]]", " ");
|
line = line.replaceAll("[|+@(,)\\[\\]]", " ");
|
||||||
line = line.replaceAll(" +", " ");
|
line = line.replaceAll(" +", " ");
|
||||||
return line;
|
return line;
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.rusefi.can.reader.impl;
|
||||||
|
|
||||||
|
import com.rusefi.can.CANPacket;
|
||||||
|
import com.rusefi.can.reader.dbc.DbcField;
|
||||||
|
import com.rusefi.can.reader.dbc.DbcPacket;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
public class ParseDbcFieldTest {
|
||||||
|
|
||||||
|
private static final double EPS = 0.001;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseIat() {
|
||||||
|
String line = "SG_ Ansauglufttemperatur : 8|8@1+ (0.75,-48) [-48|142.5] \"\" XXX";
|
||||||
|
DbcPacket parent = new DbcPacket(1, "hello");
|
||||||
|
DbcField iatField = DbcField.parseField(parent, line);
|
||||||
|
assertEquals("Ansauglufttemperatur", iatField.getName());
|
||||||
|
assertEquals(0.75, iatField.getMult(), EPS);
|
||||||
|
assertEquals(-48, iatField.getOffset(), EPS);
|
||||||
|
|
||||||
|
CANPacket packet = new PcanTrcReader().readLine(" 2197) 1234.8 Rx 0380 8 00 62 FA 00 22 00 00 FA");
|
||||||
|
assertEquals(8, packet.getData().length);
|
||||||
|
|
||||||
|
assertEquals(25.5, iatField.getValue(packet), EPS);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue