diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java index 7e874ea79e..edf18603d7 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ldmp/LiveDataProcessor.java @@ -153,6 +153,12 @@ public class LiveDataProcessor { Objects.requireNonNull(outFolder); // TODO: use outputNames + if (constexpr != null) { + if (outputNames.length != constexpr.length) { + throw new IllegalStateException(Arrays.toString(outputNames) + " vs " + Arrays.toString(constexpr)); + } + } + stateDictionaryGenerator.onEntry(name, javaName, outputNames, cppFileName); log.info("Starting " + name + " at " + startingPosition + " with [" + conditional + "]"); @@ -198,7 +204,8 @@ public class LiveDataProcessor { state.addDestination(new FileJavaFieldsConsumer(state, JAVA_DESTINATION + javaName, baseOffset, fileFactory)); if (constexpr != null) { - sdCardFieldsConsumer.home = constexpr[0]; + sdCardFieldsConsumer.home = constexpr; + sdCardFieldsConsumer.names = outputNames; sdCardFieldsConsumer.conditional = conditional; sdCardFieldsConsumer.isPtr = isPtr; state.addDestination(sdCardFieldsConsumer::handleEndStruct); diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java index 02655e9d85..76dc665f17 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java @@ -18,9 +18,10 @@ public class SdCardFieldsContent { public static final String BOARD_LOOKUP_H = "#include \"board_lookup.h\"\n"; private final StringBuilder body = new StringBuilder(); - public String home = "test->reference"; // technical debt: default value is only used by unit tests + public String[] home = new String[] {"test->reference"}; // technical debt: default value is only used by unit tests public String conditional; public Boolean isPtr = false; + public String[] names; public static void wrapContent(LazyFile output, String content) { output.write("// generated by " + SdCardFieldsContent.class + "\n"); @@ -61,10 +62,17 @@ public class SdCardFieldsContent { return ""; String name = configField.getOriginalArrayName(); - return getLine(configField, prefix, prefix + name); + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < home.length; i++) { + String namePrefix = (names == null || names.length <= 1) ? "" : names[i]; + sb.append(getLine(configField, prefix, namePrefix, prefix + name, home[i], isPtr, conditional)); + } + + return sb.toString(); } - private String getLine(ConfigField configField, String prefix, String name) { + private static String getLine(ConfigField configField, String prefix, String namePrefix, String name, String home, Boolean isPtr, String conditional) { String categoryStr = configField.getCategory(); if (categoryStr == null) { @@ -82,9 +90,9 @@ public class SdCardFieldsContent { return before + "\t{" + - home + (isPtr ? "->" : ".") + name + + home + (isPtr ? "->" : ".") + name + ", " - + DataLogConsumer.getHumanGaugeName(prefix, configField, "") + + + DataLogConsumer.getHumanGaugeName(prefix, configField, namePrefix) + ", " + quote(configField.getUnits()) + ", " + diff --git a/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/LiveDataProcessorTest.java b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/LiveDataProcessorTest.java index 3543800f5a..774147573f 100644 --- a/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/LiveDataProcessorTest.java +++ b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/LiveDataProcessorTest.java @@ -120,8 +120,10 @@ public class LiveDataProcessorTest { "#include \"board_lookup.h\"\n" + "static const LogField fields[] = {\n" + "{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n" + - "\t{engine->wbo1.tempC, \"WBO: Temperature\", \"C\", 0, \"cate\"},\n" + - "\t{engine->wbo1.esr, \"WBO: ESR\", \"ohm\", 0},\n" + + "\t{engine->wbo1.tempC, \"WBO: Temperaturewb1\", \"C\", 0, \"cate\"},\n" + + "\t{engine->wbo2.tempC, \"WBO: Temperaturewb2\", \"C\", 0, \"cate\"},\n" + + "\t{engine->wbo1.esr, \"WBO: ESRwb1\", \"ohm\", 0},\n" + + "\t{engine->wbo2.esr, \"WBO: ESRwb2\", \"ohm\", 0},\n" + "\t{engine->outputChannels.oootempC, \"Temperature\", \"C\", 0},\n" + "\t{engine->outputChannels.oooesr, \"ESR\", \"ohm\", 0},\n" + "};\n", diff --git a/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StateDictionaryGeneratorTest.java b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StateDictionaryGeneratorTest.java index 2ef30cb03e..76e92914bb 100644 --- a/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StateDictionaryGeneratorTest.java +++ b/java_tools/configuration_definition_base/src/test/java/com/rusefi/ldmp/StateDictionaryGeneratorTest.java @@ -26,7 +26,7 @@ public class StateDictionaryGeneratorTest { " - name: fuel_computer\n" + " java: FuelComputer.java\n" + " folder: controllers/algo/fuel\n" + - " constexpr: \"engine->fuelComputer\"\n" + + " constexpr: [\"engine->fuelComputer\", \"x\"]\n" + " output_name: [ \"wb1\", \"wb2\" ]\n" + " conditional_compilation: \"EFI_ENGINE_CONTROL\"\n";