From 36bd3961f3f62eca520779658091e66c4e276f28 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 19 Jul 2020 12:24:36 -0400 Subject: [PATCH] "digits" support for rusEFI tune XML files --- ...eadWriteTest_testCompareBinaryToTSTune.xml | 21 +++++++++++++++++++ ...neReadWriteTest_testWriteAndReadTSTune.xml | 21 +++++++++++++++++++ .../com/opensr5/ini/field/ArrayIniField.java | 12 +++++++++-- .../java/com/opensr5/ini/field/IniField.java | 4 ++++ .../com/opensr5/ini/field/ScalarIniField.java | 12 +++++++++-- .../java/com/rusefi/tune/xml/Constant.java | 13 +++++++++++- .../main/java/com/rusefi/tune/xml/Msq.java | 2 +- .../main/java/com/rusefi/tune/xml/Page.java | 9 ++++++++ .../src/test/java/com/rusefi/TestHelper.java | 4 ++-- .../java/com/rusefi/ui/TuneReadWriteTest.java | 13 ++++++++++++ .../resources/frankenso/mainController.ini | 2 +- 11 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 java_console/.idea/runConfigurations/TuneReadWriteTest_testCompareBinaryToTSTune.xml create mode 100644 java_console/.idea/runConfigurations/TuneReadWriteTest_testWriteAndReadTSTune.xml diff --git a/java_console/.idea/runConfigurations/TuneReadWriteTest_testCompareBinaryToTSTune.xml b/java_console/.idea/runConfigurations/TuneReadWriteTest_testCompareBinaryToTSTune.xml new file mode 100644 index 0000000000..dfa3bbb3de --- /dev/null +++ b/java_console/.idea/runConfigurations/TuneReadWriteTest_testCompareBinaryToTSTune.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java_console/.idea/runConfigurations/TuneReadWriteTest_testWriteAndReadTSTune.xml b/java_console/.idea/runConfigurations/TuneReadWriteTest_testWriteAndReadTSTune.xml new file mode 100644 index 0000000000..d52300921a --- /dev/null +++ b/java_console/.idea/runConfigurations/TuneReadWriteTest_testWriteAndReadTSTune.xml @@ -0,0 +1,21 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java_console/inifile/src/main/java/com/opensr5/ini/field/ArrayIniField.java b/java_console/inifile/src/main/java/com/opensr5/ini/field/ArrayIniField.java index f78c45c848..f1a7e95832 100644 --- a/java_console/inifile/src/main/java/com/opensr5/ini/field/ArrayIniField.java +++ b/java_console/inifile/src/main/java/com/opensr5/ini/field/ArrayIniField.java @@ -13,13 +13,15 @@ public class ArrayIniField extends IniField { private final int cols; private final int rows; private final double multiplier; + private final String digits; - public ArrayIniField(String name, int offset, FieldType type, int cols, int rows, String unit, double multiplier) { + public ArrayIniField(String name, int offset, FieldType type, int cols, int rows, String unit, double multiplier, String digits) { super(name, offset); this.type = type; this.cols = cols; this.rows = rows; this.multiplier = multiplier; + this.digits = digits; } public FieldType getType() { @@ -34,6 +36,11 @@ public class ArrayIniField extends IniField { return rows; } + @Override + public String getDigits() { + return digits; + } + @Override public int getSize() { return type.getStorageSize() * cols * rows; @@ -90,6 +97,7 @@ public class ArrayIniField extends IniField { int offset = Integer.parseInt(list.get(3)); String size = list.get(4); String unit = list.get(5); + String digits = list.get(10); double multiplier = Double.parseDouble(list.get(6)); size = size.replaceAll("[\\]\\[x]", " ").trim(); @@ -106,6 +114,6 @@ public class ArrayIniField extends IniField { throw new IllegalStateException("Unexpected " + size); } - return new ArrayIniField(name, offset, type, cols, rows, unit, multiplier); + return new ArrayIniField(name, offset, type, cols, rows, unit, multiplier, digits); } } diff --git a/java_console/inifile/src/main/java/com/opensr5/ini/field/IniField.java b/java_console/inifile/src/main/java/com/opensr5/ini/field/IniField.java index f63d8fe58b..031bf93c3c 100644 --- a/java_console/inifile/src/main/java/com/opensr5/ini/field/IniField.java +++ b/java_console/inifile/src/main/java/com/opensr5/ini/field/IniField.java @@ -20,6 +20,10 @@ public abstract class IniField { return null; } + public String getDigits() { + return null; + } + public int getOffset() { return offset; } diff --git a/java_console/inifile/src/main/java/com/opensr5/ini/field/ScalarIniField.java b/java_console/inifile/src/main/java/com/opensr5/ini/field/ScalarIniField.java index e03bd15e79..d4228f8b6a 100644 --- a/java_console/inifile/src/main/java/com/opensr5/ini/field/ScalarIniField.java +++ b/java_console/inifile/src/main/java/com/opensr5/ini/field/ScalarIniField.java @@ -13,17 +13,24 @@ import static com.rusefi.config.FieldType.*; public class ScalarIniField extends IniField { private final String unit; private final FieldType type; + private final String digits; private final double multiplier; - public ScalarIniField(String name, int offset, String unit, FieldType type, double multiplier) { + public ScalarIniField(String name, int offset, String unit, FieldType type, double multiplier, String digits) { super(name, offset); this.unit = unit; this.type = type; + this.digits = digits; if (multiplier == 0) throw new IllegalArgumentException("Multiplier should not be zero"); this.multiplier = multiplier; } + @Override + public String getDigits() { + return digits; + } + @Override public String getUnits() { return unit; @@ -86,10 +93,11 @@ public class ScalarIniField extends IniField { String name = list.get(0); FieldType type = FieldType.parseTs(list.get(2)); int offset = Integer.parseInt(list.get(3)); + String digits = list.get(9); String unit = list.get(4); double multiplier = Double.parseDouble(list.get(5)); - return new ScalarIniField(name, offset, unit, type, multiplier); + return new ScalarIniField(name, offset, unit, type, multiplier, digits); } } diff --git a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Constant.java b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Constant.java index aa0f1c1a71..78671c9a41 100644 --- a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Constant.java +++ b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Constant.java @@ -7,14 +7,16 @@ public class Constant { private String name; private String units; private String value; + private String digits; public Constant() { } - public Constant(String name, String units, String value) { + public Constant(String name, String units, String value, String digits) { this.name = name; this.units = units; this.value = value; + this.digits = digits; } @XmlAttribute @@ -32,6 +34,15 @@ public class Constant { return value; } + @XmlAttribute + public String getDigits() { + return digits; + } + + public void setDigits(String digits) { + this.digits = digits; + } + public void setName(String name) { this.name = name; } diff --git a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Msq.java b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Msq.java index 246ea77daa..778a762e81 100644 --- a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Msq.java +++ b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Msq.java @@ -80,7 +80,7 @@ public class Msq { System.out.println("Msq: No page"); return; } - page.constant.add(new Constant(field.getName(), field.getUnits(), value)); + page.constant.add(new Constant(field.getName(), field.getUnits(), value, field.getDigits())); } public Page findPage() { diff --git a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Page.java b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Page.java index 112f6d7690..d829a41b7e 100644 --- a/java_console/inifile/src/main/java/com/rusefi/tune/xml/Page.java +++ b/java_console/inifile/src/main/java/com/rusefi/tune/xml/Page.java @@ -37,6 +37,15 @@ public class Page { this.size = size; } + public Constant findParameter(String name) { + for (Constant parameter : constant) { + if (parameter.getName().equals(name)) { + return parameter; + } + } + return null; + } + @Override public String toString() { return "Page{" + diff --git a/java_console/ui/src/test/java/com/rusefi/TestHelper.java b/java_console/ui/src/test/java/com/rusefi/TestHelper.java index d47e3327c5..ddcb4f7638 100644 --- a/java_console/ui/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/ui/src/test/java/com/rusefi/TestHelper.java @@ -23,14 +23,14 @@ public class TestHelper { @NotNull public static ScalarIniField createIniField(Field field) { - return new ScalarIniField(field.getName(), field.getOffset(), "", field.getType(), 1); + return new ScalarIniField(field.getName(), field.getOffset(), "", field.getType(), 1, "0"); } @NotNull public static ConfigurationImage prepareImage(int input, ScalarIniField scalarIniField) { ConfigurationImage ci = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); - scalarIniField.setValue(ci, new Constant(scalarIniField.getName(), "", Integer.toString(input))); + scalarIniField.setValue(ci, new Constant(scalarIniField.getName(), "", Integer.toString(input), scalarIniField.getDigits())); return ci; } 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 3b0448edf0..37d7551778 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 @@ -6,6 +6,7 @@ import com.opensr5.ini.field.IniField; import com.opensr5.io.ConfigurationImageFile; import com.rusefi.binaryprotocol.MsqFactory; import com.rusefi.config.generated.Fields; +import com.rusefi.tune.xml.Constant; import com.rusefi.tune.xml.Msq; import org.junit.Before; import org.junit.Test; @@ -35,6 +36,10 @@ public class TuneReadWriteTest { System.out.println(tsTune); assertNotNull("signature", tsTune.getVersionInfo().getSignature()); + Constant flow = tsTune.findPage().findParameter("injector_flow"); + assertNotNull(flow); + assertEquals("2", flow.getDigits()); + ConfigurationImage tsBinaryData = tsTune.asImage(IniFileModel.getInstance(), Fields.TOTAL_CONFIG_SIZE); System.out.println("Reading " + TEST_BINARY_FILE); @@ -55,6 +60,14 @@ public class TuneReadWriteTest { Msq tuneFromBinary = MsqFactory.valueOf(fileBinaryData); tuneFromBinary.writeXmlFile(fileName); + Constant batteryCorrection = tuneFromBinary.findPage().findParameter("injector_battLagCorrBins"); + assertNotNull(batteryCorrection); + assertEquals("2", batteryCorrection.getDigits()); + + Constant flow = tuneFromBinary.findPage().findParameter("injector_flow"); + assertNotNull(flow); + assertEquals("2", flow.getDigits()); + // and now reading that XML back Msq tuneFromFile = Msq.readTune(fileName); assertNotNull(tuneFromFile.getVersionInfo().getSignature()); diff --git a/java_console/ui/src/test/resources/frankenso/mainController.ini b/java_console/ui/src/test/resources/frankenso/mainController.ini index 8e890d2e2b..41616496d2 100644 --- a/java_console/ui/src/test/resources/frankenso/mainController.ini +++ b/java_console/ui/src/test/resources/frankenso/mainController.ini @@ -849,7 +849,7 @@ page = 1 cj125CsPinMode = bits, U08, 2225, [0:7], "default", "default inverted", "open collector", "open collector inverted" dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","TLE6240_1", "TLE6240_2", "TLE6240_3", "TLE6240_4", "TLE6240_5", "TLE6240_6", "TLE6240_7", "TLE6240_8", "TLE6240_9", "TLE6240_10", "TLE6240_11", "TLE6240_12", "TLE6240_13", "TLE6240_14", "TLE6240_15", "TLE6240_16", "MC33972_1", "MC33972_2", "MC33972_3", "MC33972_4", "MC33972_5", "MC33972_6", "MC33972_7", "MC33972_8", "MC33972_9", "MC33972_10", "MC33972_11", "MC33972_12", "MC33972_13", "MC33972_14", "MC33972_15", "MC33972_16", "MC33972_17", "MC33972_18", "MC33972_19", "MC33972_20", "MC33972_21", "MC33972_22", "TLE8888_1", "TLE8888_2", "TLE8888_3", "TLE8888_4", "TLE8888_5", "TLE8888_6", "TLE8888_7", "TLE8888_8", "TLE8888_9", "TLE8888_10", "TLE8888_11", "TLE8888_12", "TLE8888_13", "TLE8888_14", "TLE8888_15", "TLE8888_16", "TLE8888_17", "TLE8888_18", "TLE8888_19", "TLE8888_20", "TLE8888_21", "TLE8888_22", "TLE8888_23", "TLE8888_24", "TLE8888_25", "TLE8888_26", "TLE8888_27", "TLE8888_28", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" dizzySparkOutputPinMode = bits, U08, 2227, [0:7], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, + crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, 0 tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4