From 63872f3e15ccc987c0b74b48754312e56ebd70dc Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sun, 18 Jun 2023 19:35:46 -0400 Subject: [PATCH] only:Improve toolset for default tune canned tune generation #4871 --- .../main/java/com/rusefi/tune/xml/Msq.java | 2 +- .../src/main/java/com/rusefi/xml/XmlUtil.java | 2 +- .../com/rusefi/tools/tune/TuneCanTool.java | 130 ++++++++++++++++++ .../tune/WriteSimulatorConfiguration.java | 3 + .../com/rusefi/tune/LoadOlderTuneTest.java | 90 +----------- 5 files changed, 136 insertions(+), 91 deletions(-) create mode 100644 java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/TuneCanTool.java 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 9b87d75a47..48211a1c06 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 @@ -66,7 +66,7 @@ public class Msq { return ci; } - public static Msq readTune(String fileName) throws Exception { + public static Msq readTune(String fileName) throws JAXBException { return XmlUtil.readModel(Msq.class, fileName); } diff --git a/java_console/inifile/src/main/java/com/rusefi/xml/XmlUtil.java b/java_console/inifile/src/main/java/com/rusefi/xml/XmlUtil.java index 77a4e227b3..99fa898f25 100644 --- a/java_console/inifile/src/main/java/com/rusefi/xml/XmlUtil.java +++ b/java_console/inifile/src/main/java/com/rusefi/xml/XmlUtil.java @@ -31,7 +31,7 @@ public class XmlUtil { writer.close(); } - public static T readModel(Class modelClass, String fileName) throws Exception { + public static T readModel(Class modelClass, String fileName) throws JAXBException { File xmlFile = new File(fileName); JAXBContext jaxbContext; jaxbContext = JAXBContext.newInstance(modelClass); diff --git a/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/TuneCanTool.java b/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/TuneCanTool.java new file mode 100644 index 0000000000..a9b9da4506 --- /dev/null +++ b/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/TuneCanTool.java @@ -0,0 +1,130 @@ +package com.rusefi.tools.tune; + +import com.opensr5.ini.DialogModel; +import com.opensr5.ini.IniFileModel; +import com.rusefi.*; +import com.rusefi.core.preferences.storage.Node; +import com.rusefi.output.ConfigStructure; +import com.rusefi.tune.xml.Constant; +import com.rusefi.tune.xml.Msq; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import static com.rusefi.ConfigFieldImpl.unquote; +import static com.rusefi.tools.tune.WriteSimulatorConfiguration.INI_FILE_FOR_SIMULATOR; + +public class TuneCanTool { + public static final String SRC_TEST_RESOURCES = "src/test/resources/"; + private static final String FOLDER = "generated"; + public static final String DEFAULT_TUNE = FOLDER + File.separator + "simulator_tune.xml"; + + public static void main(String[] args) throws Exception { + IniFileModel ini = new IniFileModel().readIniFile(INI_FILE_FOR_SIMULATOR); + if (ini == null) + throw new IllegalStateException("Not found " + INI_FILE_FOR_SIMULATOR); + Msq simulatorDefaultTune = Msq.readTune(TuneCanTool.DEFAULT_TUNE); + + RootHolder.ROOT = "../firmware/"; + + + String fileName = "C:\\Users\\Dell2019\\Downloads\\1258.msq"; + + Msq custom = Msq.readTune(fileName); + + StringBuilder sb = TuneCanTool.getTunePatch2(simulatorDefaultTune, custom, ini); + + System.out.println(sb); + + } + + private static boolean isHardwareEnum(String type) { + switch (type) { + case "output_pin_e": + case "brain_input_pin_e": + case "adc_channel_e": + case "Gpio": + return true; + } + return false; + } + + private static Object simplerSpaces(String value) { + if (value == null) + return value; + return value.replaceAll("\\s+", " ").trim(); + } + + @NotNull + public static StringBuilder getTunePatch2(Msq customOldTune, Msq lessOldDefaultTune, IniFileModel ini) throws IOException { + List options = Files.readAllLines(Paths.get(RootHolder.ROOT + "../" + ConfigDefinition.CONFIG_PATH)); + String[] totalArgs = options.toArray(new String[0]); + + ReaderStateImpl state = new ReaderStateImpl(); + ConfigDefinition.doJob(totalArgs, state); + + StringBuilder sb = new StringBuilder(); + for (DialogModel.Field f : ini.fieldsInUiOrder) { + String name = f.getKey(); + Constant customValue = customOldTune.getConstantsAsMap().get(name); + Constant defaultValue = lessOldDefaultTune.getConstantsAsMap().get(name); + if (defaultValue == null) { + // no longer present + continue; + } + + boolean isSameValue = simplerSpaces(defaultValue.getValue()).equals(simplerSpaces(customValue.getValue())); + if (!isSameValue) { + ConfigStructure s = state.getStructures().get("engine_configuration_s"); + System.out.println(s); + ConfigField cf = s.getTsFieldByName(name); + if (cf == null) { + System.out.println("Not found " + name); + continue; + } + + if (cf.getType().equals("boolean")) { + sb.append(TuneTools.getAssignmentCode(customValue.getName(), unquote(customValue.getValue()))); + continue; + } + + + if (!Node.isNumeric(customValue.getValue())) { + // todo: smarter logic for enums + + String type = cf.getType(); + if (isHardwareEnum(type)) { + continue; + } + EnumsReader.EnumState sourceCodeEnum = state.getEnumsReader().getEnums().get(type); + if (sourceCodeEnum == null) { + System.out.println("No info for " + type); + continue; + } + String customEnum = state.getTsCustomLine().get(type); + + int ordinal; + try { + ordinal = TuneTools.resolveEnumByName(customEnum, unquote(customValue.getValue())); + } catch (IllegalStateException e) { + System.out.println("Looks like things were renamed: " + customValue.getValue() + " not found in " + customEnum); + continue; + } + + System.out.println(cf + " " + sourceCodeEnum + " " + customEnum + " " + ordinal); + + String sourceCodeValue = sourceCodeEnum.findByValue(ordinal); + sb.append(TuneTools.getAssignmentCode(customValue.getName(), sourceCodeValue)); + + continue; + } + sb.append(TuneTools.getAssignmentCode(customValue.getName(), customValue.getValue())); + } + } + return sb; + } +} diff --git a/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/WriteSimulatorConfiguration.java b/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/WriteSimulatorConfiguration.java index 2067cec4f5..9bbe94d812 100644 --- a/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/WriteSimulatorConfiguration.java +++ b/java_tools/tune-tools/src/main/java/com/rusefi/tools/tune/WriteSimulatorConfiguration.java @@ -39,5 +39,8 @@ public class WriteSimulatorConfiguration { throw new IllegalStateException("Not found " + INI_FILE_FOR_SIMULATOR); Msq m = MsqFactory.valueOf(configuration, ini); m.writeXmlFile(TuneCanTool.DEFAULT_TUNE); + + Msq newTuneJustToValidate = Msq.readTune(TuneCanTool.DEFAULT_TUNE); + System.out.println("Looks valid " + newTuneJustToValidate); } } diff --git a/java_tools/tune-tools/src/test/java/com/rusefi/tune/LoadOlderTuneTest.java b/java_tools/tune-tools/src/test/java/com/rusefi/tune/LoadOlderTuneTest.java index 546637605d..caf90a819a 100644 --- a/java_tools/tune-tools/src/test/java/com/rusefi/tune/LoadOlderTuneTest.java +++ b/java_tools/tune-tools/src/test/java/com/rusefi/tune/LoadOlderTuneTest.java @@ -1,23 +1,14 @@ package com.rusefi.tune; -import com.opensr5.ini.DialogModel; import com.opensr5.ini.IniFileModel; import com.rusefi.*; -import com.rusefi.core.preferences.storage.Node; -import com.rusefi.output.ConfigStructure; import com.rusefi.tools.tune.TuneCanTool; import com.rusefi.tools.tune.TuneTools; -import com.rusefi.tune.xml.Constant; import com.rusefi.tune.xml.Msq; import com.rusefi.tune.xml.Page; import org.junit.Assert; import org.junit.Test; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.List; - -import static com.rusefi.ConfigFieldImpl.unquote; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -33,71 +24,9 @@ public class LoadOlderTuneTest { IniFileModel ini = new IniFileModel().readIniFile(TuneReadWriteTest.TEST_INI); assertFalse(ini.fieldsInUiOrder.isEmpty()); - List options = Files.readAllLines(Paths.get("../../" + ConfigDefinition.CONFIG_PATH)); - String[] totalArgs = options.toArray(new String[0]); - RootHolder.ROOT = "../../firmware/"; - ReaderStateImpl state = new ReaderStateImpl(); - ConfigDefinition.doJob(totalArgs, state); - StringBuilder sb = new StringBuilder(); - for (DialogModel.Field f : ini.fieldsInUiOrder) { - String name = f.getKey(); - Constant customValue = customOldTune.getConstantsAsMap().get(name); - Constant defaultValue = lessOldDefaultTune.getConstantsAsMap().get(name); - if (defaultValue == null) { - // no longer present - continue; - } - - boolean isSameValue = simplerSpaces(defaultValue.getValue()).equals(simplerSpaces(customValue.getValue())); - if (!isSameValue) { - ConfigStructure s = state.getStructures().get("engine_configuration_s"); - System.out.println(s); - ConfigField cf = s.getTsFieldByName(name); - if (cf == null) { - System.out.println("Not found " + name); - continue; - } - - if (cf.getType().equals("boolean")) { - sb.append(TuneTools.getAssignmentCode(customValue.getName(), unquote(customValue.getValue()))); - continue; - } - - - if (!Node.isNumeric(customValue.getValue())) { - // todo: smarter logic for enums - - String type = cf.getType(); - if (isHardwareEnum(type)) { - continue; - } - EnumsReader.EnumState sourceCodeEnum = state.getEnumsReader().getEnums().get(type); - if (sourceCodeEnum == null) { - System.out.println("No info for " + type); - continue; - } - String customEnum = state.getTsCustomLine().get(type); - - int ordinal; - try { - ordinal = TuneTools.resolveEnumByName(customEnum, unquote(customValue.getValue())); - } catch (IllegalStateException e) { - System.out.println("Looks like things were renamed: " + customValue.getValue() + " not found in " + customEnum); - continue; - } - - System.out.println(cf + " " + sourceCodeEnum + " " + customEnum + " " + ordinal); - - String sourceCodeValue = sourceCodeEnum.findByValue(ordinal); - sb.append(TuneTools.getAssignmentCode(customValue.getName(), sourceCodeValue)); - - continue; - } - sb.append(TuneTools.getAssignmentCode(customValue.getName(), customValue.getValue())); - } - } + StringBuilder sb = TuneCanTool.getTunePatch2(customOldTune, lessOldDefaultTune, ini); assertEquals("\tengineConfiguration->ignitionMode = IM_ONE_COIL;\n" + "\tengineConfiguration->cylindersCount = 4;\n" + @@ -132,23 +61,6 @@ public class LoadOlderTuneTest { "\tengineConfiguration->hip9011CsPinMode = ", sb.substring(0, 1500)); } - private static boolean isHardwareEnum(String type) { - switch (type) { - case "output_pin_e": - case "brain_input_pin_e": - case "adc_channel_e": - case "Gpio": - return true; - } - return false; - } - - private static Object simplerSpaces(String value) { - if (value == null) - return value; - return value.replaceAll("\\s+", " ").trim(); - } - @Test(expected = IllegalStateException.class) public void testLegacyCustomEnumOrdinal() { String tsCustomLine = "bits, U08, @OFFSET@, [0:1], \"Single Coil\", \"Individual Coils\", \"Wasted Spark\", \"Two Distributors\"";