diff --git a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java index 4b3158d446..f27e024498 100644 --- a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java +++ b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java @@ -1,7 +1,10 @@ package com.rusefi; +import com.rusefi.board_generator.BoardReader; +import com.rusefi.enum_reader.Value; import com.rusefi.util.LazyFile; import com.rusefi.util.SystemOut; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.IOException; @@ -33,6 +36,36 @@ public class VariableRegistry { public VariableRegistry() { } + @NotNull + public static CharSequence getEnumOptionsForTunerStudio(EnumsReader enumsReader, VariableRegistry variableRegistry, TreeMap valueNameById, String enumName) { + for (Value value : enumsReader.getEnums().get(enumName).values()) { + if (value.getValue().contains("ENUM_32_BITS")) + continue; + + if (isNumeric(value.getValue())) { + valueNameById.put(value.getIntValue(), value.getName()); + } else { + String valueFromRegistry = variableRegistry.get(value.getValue()); + if (valueFromRegistry == null) + throw new IllegalStateException("No value for " + value); + int intValue = Integer.parseInt(valueFromRegistry); + valueNameById.put(intValue, value.getName()); + } + } + + int maxValue = valueNameById.lastKey(); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i <= maxValue; i++) { + if (sb.length() > 0) + sb.append(", "); + + String value = valueNameById.getOrDefault(i, BoardReader.INVALID); + sb.append("\"" + value + "\""); + } + return sb.toString(); + } + /** * This method replaces variables references like @@var@@ with actual values * An exception is thrown if we do not have such variable diff --git a/java_tools/configuration_definition/src/com/rusefi/board_generator/BoardReader.java b/java_tools/configuration_definition/src/com/rusefi/board_generator/BoardReader.java index 35452107e0..4d92a20890 100644 --- a/java_tools/configuration_definition/src/com/rusefi/board_generator/BoardReader.java +++ b/java_tools/configuration_definition/src/com/rusefi/board_generator/BoardReader.java @@ -1,5 +1,6 @@ package com.rusefi.board_generator; +import com.rusefi.EnumToString; import com.rusefi.EnumsReader; import com.rusefi.enum_reader.Value; import com.rusefi.util.LazyFile; @@ -19,13 +20,12 @@ import java.util.Objects; * the primary generation to avoid the intermediate file. */ public class BoardReader { - private static final String INVALID = "INVALID"; + public static final String INVALID = "INVALID"; private static final String KEY_BOARD_NAME = "-board"; private static final String YAML_INPUT_NAME = "-yaml"; private static final String OUTPUT_FILE_NAME = "-output_file"; private static final String KEY_FIRMWARE_PATH = "-firmware_path"; - private final static String KEY_ENUM_INPUT_FILE = "-enumInputFile"; private static final String MAPPING_YAML = "mapping.yaml"; @@ -52,9 +52,9 @@ public class BoardReader { yamlInputFile = args[i + 1]; } else if (key.equals(KEY_FIRMWARE_PATH)) { firmwarePath = args[i + 1]; - } else if (key.equals(KEY_ENUM_INPUT_FILE)) { + } else if (key.equals(EnumToString.KEY_ENUM_INPUT_FILE)) { String inputFile = args[i + 1]; - enumsReader.process(new FileReader(firmwarePath + File.separator + inputFile)); + enumsReader.process(firmwarePath, inputFile); } } @@ -118,15 +118,18 @@ public class BoardReader { private static int getMaxValue(Collection values) { int result = -1; - for (Value v : values) + for (Value v : values) { result = Math.max(result, v.getIntValue()); + } return result; } private static Value findByOrdinal(int ordinal, Collection values) { - for (Value v : values) - if (v.getValue().equals(String.valueOf(ordinal))) + for (Value v : values) { + if (v.getValue().equals(String.valueOf(ordinal))) { return v; + } + } return null; } } diff --git a/java_tools/configuration_definition/src/com/rusefi/test/ConfigDefinitionTest.java b/java_tools/configuration_definition/src/com/rusefi/test/ConfigDefinitionTest.java new file mode 100644 index 0000000000..ec6fb8e4f7 --- /dev/null +++ b/java_tools/configuration_definition/src/com/rusefi/test/ConfigDefinitionTest.java @@ -0,0 +1,33 @@ +package com.rusefi.test; + +import com.rusefi.ConfigDefinition; +import com.rusefi.EnumsReader; +import com.rusefi.VariableRegistry; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.util.TreeMap; + +import static org.junit.Assert.assertNotNull; + +public class ConfigDefinitionTest { + private static final String FIRMWARE = "../../firmware"; + + @Test + public void testEnumIntoType() throws IOException { + EnumsReader enumsReader = new EnumsReader(); + enumsReader.process(FIRMWARE, "controllers/algo/rusefi_enums.h"); + + VariableRegistry variableRegistry = new VariableRegistry(); + + ConfigDefinition.readPrependValues(variableRegistry, FIRMWARE + File.separator + "integration/rusefi_config.txt"); + + TreeMap valueNameById = new TreeMap<>(); + + CharSequence sb = VariableRegistry.getEnumOptionsForTunerStudio(enumsReader, variableRegistry, valueNameById, "engine_type_e"); + + System.out.println(sb); + assertNotNull(sb); + } +} diff --git a/java_tools/enum_to_string/src/com/rusefi/EnumToString.java b/java_tools/enum_to_string/src/com/rusefi/EnumToString.java index 0dd77f29ed..12c6e1d921 100644 --- a/java_tools/enum_to_string/src/com/rusefi/EnumToString.java +++ b/java_tools/enum_to_string/src/com/rusefi/EnumToString.java @@ -27,7 +27,7 @@ public class EnumToString { private final static StringBuilder headerFileContent = new StringBuilder(); private final static String KEY_INPUT_PATH = "-enumInputPath"; - private final static String KEY_ENUM_INPUT_FILE = "-enumInputFile"; + public final static String KEY_ENUM_INPUT_FILE = "-enumInputFile"; private final static String KEY_OUTPUT = "-outputPath"; public static void main(String[] args) throws IOException { diff --git a/java_tools/enum_to_string/src/com/rusefi/EnumsReader.java b/java_tools/enum_to_string/src/com/rusefi/EnumsReader.java index ca90f3de6e..bd4c3c4fab 100644 --- a/java_tools/enum_to_string/src/com/rusefi/EnumsReader.java +++ b/java_tools/enum_to_string/src/com/rusefi/EnumsReader.java @@ -3,9 +3,7 @@ package com.rusefi; import com.rusefi.enum_reader.Value; import com.rusefi.util.SystemOut; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; +import java.io.*; import java.util.Map; import java.util.TreeMap; @@ -14,6 +12,10 @@ public class EnumsReader { private final Map> enums = new TreeMap<>(); + public void process(String path, String fileName) throws IOException { + process(new FileReader(path + File.separator + fileName)); + } + public void process(Reader in) throws IOException { boolean isInsideEnum = false; BufferedReader reader = new BufferedReader(in); diff --git a/java_tools/enum_to_string/src/com/rusefi/enum_reader/Value.java b/java_tools/enum_to_string/src/com/rusefi/enum_reader/Value.java index ade6fabbcc..71d94ec271 100644 --- a/java_tools/enum_to_string/src/com/rusefi/enum_reader/Value.java +++ b/java_tools/enum_to_string/src/com/rusefi/enum_reader/Value.java @@ -2,7 +2,7 @@ package com.rusefi.enum_reader; public class Value implements Comparable { private final String name; - private String value; + private final String value; public Value(String name, String value) { this.name = name;