REO progress

This commit is contained in:
rusefi 2020-06-14 12:17:23 -04:00
parent ddc96bbb25
commit 3cbbf22e71
5 changed files with 24 additions and 9 deletions

View File

@ -47,7 +47,7 @@ public class ArrayIniField extends IniField {
for (int colIndex = 0; colIndex < cols; colIndex++) {
Field f = new Field("", getOffset(rowIndex, colIndex), getType());
sb.append(' ');
sb.append(f.getAnyValue(image));
sb.append(f.getAnyValue(image, multiplier));
}
}
sb.append("\n");

View File

@ -42,7 +42,7 @@ public class ScalarIniField extends IniField {
public String getValue(ConfigurationImage image) {
Field f = new Field(getName(), getOffset(), getType());
try {
return f.getValue(image).toString();
return f.getValue(image, multiplier).toString();
} catch (Throwable e) {
throw new IllegalStateException("While getting " + getName(), e);
}

View File

@ -21,6 +21,7 @@ public class Field {
private final FieldType type;
private final int bitOffset;
private final String[] options;
// todo: add multiplier support!
public Field(String name, int offset, FieldType type) {
this(name, offset, type, NO_BIT_OFFSET);
@ -129,10 +130,10 @@ public class Field {
'}';
}
public Object getAnyValue(ConfigurationImage ci) {
public Object getAnyValue(ConfigurationImage ci, double multiplier) {
if (options == null) {
// we are here for non-enum types
return niceToString(getValue(ci));
return niceToString(getValue(ci, multiplier));
}
if (type != INT8)
throw new IllegalStateException("Unsupported enum " + type);
@ -140,9 +141,18 @@ public class Field {
return options[ordinal];
}
/**
* each usage is a potential bug?! we are supposed to have explicit multiplier for each field
*/
@NotNull
@Deprecated
public Number getValue(ConfigurationImage ci) {
return getValue(ci, 1);
}
// todo: rename to getNumberValue?
@NotNull
public Number getValue(ConfigurationImage ci) {
public Number getValue(ConfigurationImage ci, double multiplier) {
Objects.requireNonNull(ci);
Number value;
ByteBuffer wrapped = ci.getByteBuffer(getOffset(), type.getStorageSize());
@ -158,7 +168,7 @@ public class Field {
} else {
value = wrapped.getFloat();
}
return value;
return value.doubleValue() * multiplier;
}
@NotNull

View File

@ -101,7 +101,8 @@ public class LiveDocPanel {
result.actionsListAdd(new LiveDataContext(Fields.LDS_ENGINE_STATE_INDEX), new RefreshActions() {
@Override
public void refresh(BinaryProtocol bp, byte[] response) {
String value = field.getAnyValue(bp.getControllerConfiguration()).toString();
double multiplier = 1; // todo: PROPER MULTIPLIER!!!
String value = field.getAnyValue(bp.getControllerConfiguration(), multiplier).toString();
label.setText(value);
}
});

View File

@ -9,6 +9,7 @@ import org.junit.Before;
import org.junit.Test;
import java.nio.file.Files;
import java.nio.file.Path;
import static org.junit.Assert.assertEquals;
@ -44,7 +45,8 @@ public class TuneReadWriteTest {
public void testWriteAndReadTSTune() throws Exception {
ConfigurationImage originalBinaryData = ConfigurationImageFile.readFromFile(TEST_BINARY_FILE);
String fileName = Files.createTempFile("unit_test_", "xml").getFileName().toString();
Path path = Files.createTempFile("unit_test_", ".xml");
String fileName = path.getFileName().toString();
// writing TS XML tune file with rusEFI code
Msq tuneFromBinary = Msq.valueOf(originalBinaryData);
@ -55,7 +57,9 @@ public class TuneReadWriteTest {
ConfigurationImage binaryDataFromXml = tuneFromFile.asImage(IniFileModel.getInstance());
// assertEquals(0, compareImages(originalBinaryData, binaryDataFromXml));
// todo: why one byte mismatch? since it's in floats I kind of do not care, floats are weird
assertEquals(1, compareImages(originalBinaryData, binaryDataFromXml));
Files.delete(path);
}
private static int compareImages(ConfigurationImage image1, ConfigurationImage image2) {