From 8f06ffa1e5d1728579a409f2c768f2ea8576663c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 13 Jun 2020 21:51:09 -0400 Subject: [PATCH] REO progress --- .../src/com/opensr5/ConfigurationImage.java | 3 +-- .../src/com/opensr5/ini/IniFileModel.java | 8 ++++++ .../com/opensr5/ini/field/ArrayIniField.java | 18 ++++++++++++- .../com/opensr5/ini/field/EnumIniField.java | 17 +++++++++++++ .../src/com/opensr5/ini/field/IniField.java | 4 ++- .../com/opensr5/ini/field/ScalarIniField.java | 5 ++++ .../com/opensr5/ini/field/StringIniField.java | 5 ++++ .../java/com/rusefi/ui/TuneReadWriteTest.java | 25 ++++++++++++++++--- 8 files changed, 78 insertions(+), 7 deletions(-) diff --git a/java_console/inifile/src/com/opensr5/ConfigurationImage.java b/java_console/inifile/src/com/opensr5/ConfigurationImage.java index 3b54f50114..00dd7431e9 100644 --- a/java_console/inifile/src/com/opensr5/ConfigurationImage.java +++ b/java_console/inifile/src/com/opensr5/ConfigurationImage.java @@ -28,8 +28,7 @@ public class ConfigurationImage { @NotNull public ByteBuffer getByteBuffer(int offset, int size) { - byte data[] = getRange(offset, size); - ByteBuffer wrapped = ByteBuffer.wrap(data); + ByteBuffer wrapped = ByteBuffer.wrap(content, offset, size); wrapped.order(ByteOrder.LITTLE_ENDIAN); return wrapped; } diff --git a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java index 21d2db7854..57260a614c 100644 --- a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java +++ b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java @@ -205,6 +205,14 @@ public class IniFileModel { list.removeFirst(); } + public IniField findByOffset(int i) { + for (IniField field : allIniFields.values()) { + if (i >= field.getOffset() && i < field.getOffset() + field.getSize()) + return field; + } + return null; + } + enum State { SKIPPING, DIALOG diff --git a/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java b/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java index 132fe65dec..f038b95f42 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/ArrayIniField.java @@ -32,6 +32,11 @@ public class ArrayIniField extends IniField { return rows; } + @Override + public int getSize() { + return type.getStorageSize() * cols * rows; + } + @Override public String getValue(ConfigurationImage image) { StringBuilder sb = new StringBuilder(); @@ -60,12 +65,23 @@ public class ArrayIniField extends IniField { for (int rowIndex = 0; rowIndex < rows; rowIndex++) { for (int colIndex = 0; colIndex < cols; colIndex++) { String value = values[rowIndex * cols + colIndex]; - ByteBuffer wrapped = image.getByteBuffer(getOffset(), type.getStorageSize()); + ByteBuffer wrapped = image.getByteBuffer(getOffset(rowIndex, colIndex), type.getStorageSize()); ScalarIniField.setValue(wrapped, type, value, Field.NO_BIT_OFFSET); } } } + @Override + public String toString() { + return "ArrayIniField{" + + "name=" + getName() + + ", offset=" + getOffset() + + ", type=" + type + + ", cols=" + cols + + ", rows=" + rows + + '}'; + } + public static IniField parse(LinkedList list) { String name = list.get(0); FieldType type = FieldType.parseTs(list.get(2)); diff --git a/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java b/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java index 21156f373e..1aa0f4d1f8 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/EnumIniField.java @@ -24,6 +24,11 @@ public class EnumIniField extends IniField { this.bitSize = bitSize; } + @Override + public int getSize() { + return type.getStorageSize(); + } + public int getBitPosition() { return bitPosition; } @@ -71,6 +76,18 @@ public class EnumIniField extends IniField { getByteBuffer(image).putInt(value); } + @Override + public String toString() { + return "EnumIniField{" + + "name=" + getName() + + ", offset=" + getOffset() + + ", type=" + type + + ", enums=" + enums + + ", bitPosition=" + bitPosition + + ", bitSize=" + bitSize + + '}'; + } + public static int setBitRange(int value, int ordinal, int bitPosition, int bitSize) { int num = ((1 << bitSize) - 1) << bitPosition; int clearBitRange = value & ~num; diff --git a/java_console/inifile/src/com/opensr5/ini/field/IniField.java b/java_console/inifile/src/com/opensr5/ini/field/IniField.java index 08fa3271ce..f63d8fe58b 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/IniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/IniField.java @@ -3,7 +3,7 @@ package com.opensr5.ini.field; import com.opensr5.ConfigurationImage; import com.rusefi.tune.xml.Constant; -public class IniField { +public abstract class IniField { private final String name; private final int offset; @@ -24,6 +24,8 @@ public class IniField { return offset; } + public abstract int getSize(); + public String getValue(ConfigurationImage image) { return null; } diff --git a/java_console/inifile/src/com/opensr5/ini/field/ScalarIniField.java b/java_console/inifile/src/com/opensr5/ini/field/ScalarIniField.java index 4e65586e9d..f73037c585 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/ScalarIniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/ScalarIniField.java @@ -29,6 +29,11 @@ public class ScalarIniField extends IniField { return type; } + @Override + public int getSize() { + return type.getStorageSize(); + } + @Override public String getValue(ConfigurationImage image) { Field f = new Field(getName(), getOffset(), getType()); diff --git a/java_console/inifile/src/com/opensr5/ini/field/StringIniField.java b/java_console/inifile/src/com/opensr5/ini/field/StringIniField.java index 969c6360a3..96ec2e0410 100644 --- a/java_console/inifile/src/com/opensr5/ini/field/StringIniField.java +++ b/java_console/inifile/src/com/opensr5/ini/field/StringIniField.java @@ -13,6 +13,11 @@ public class StringIniField extends IniField { this.size = size; } + @Override + public int getSize() { + return size; + } + @Override public String getValue(ConfigurationImage image) { String value = new String(image.getContent(), getOffset(), size); diff --git a/java_console/ui/src/test/java/com/rusefi/ui/TuneReadWriteTest.java b/java_console/ui/src/test/java/com/rusefi/ui/TuneReadWriteTest.java index 797b6b79af..dbc28cd560 100644 --- a/java_console/ui/src/test/java/com/rusefi/ui/TuneReadWriteTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ui/TuneReadWriteTest.java @@ -10,8 +10,12 @@ import com.rusefi.tune.xml.Msq; import com.rusefi.xml.XmlUtil; import org.junit.Test; +import java.lang.reflect.Array; +import java.util.Arrays; import java.util.Objects; +import static org.junit.Assert.assertEquals; + /** * from IDEA this unit test needs to be exectuted with "empty" working directory */ @@ -26,15 +30,28 @@ public class TuneReadWriteTest { Msq tsTune = XmlUtil.readModel(Msq.class, PATH + "CurrentTune.msq"); System.out.println(tsTune); - makeBinaryTune(tsTune, IniFileModel.getInstance()); + ConfigurationImage tsBinaryData = makeBinaryTune(tsTune, IniFileModel.getInstance()); String binary = PATH + "current_configuration.rusefi_binary"; System.out.println("Reading " + binary); - ConfigurationImageFile.readFromFile(binary); + ConfigurationImage fileBinaryData = ConfigurationImageFile.readFromFile(binary); + + + byte[] tsBinaryDataContent = tsBinaryData.getContent(); + byte[] fileBinaryDataContent = fileBinaryData.getContent(); + for (int i = 0; i < tsBinaryDataContent.length; i++) { + byte tsByte = tsBinaryDataContent[i]; + byte fileByte = fileBinaryDataContent[i]; + if (tsByte != fileByte) { +// System.out.println("Out issue is at " + IniFileModel.getInstance().findByOffset(i) + " " + tsByte + "/" + fileByte); +// throw new IllegalStateException("Content not same at " + i); + } + } +// assertEquals(Arrays.toString(tsBinaryDataContent), Arrays.toString(fileBinaryDataContent)); } - private void makeBinaryTune(Msq tsTune, IniFileModel instance) { + private ConfigurationImage makeBinaryTune(Msq tsTune, IniFileModel instance) { ConfigurationImage ci = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); for (Constant constant : tsTune.getPage().constant) { @@ -43,7 +60,9 @@ public class TuneReadWriteTest { } IniField field = instance.allIniFields.get(constant.getName()); Objects.requireNonNull(field, "Field for " + constant.getName()); + System.out.println("Setting " + field); field.setValue(ci, constant); } + return ci; } }