diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 45b70c76a9..e2c02a03ef 100644 Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java index fc00fd5628..182bb73fa5 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java @@ -54,6 +54,8 @@ public class ConfigField { private final String trueName; private final String falseName; private boolean isFromIterate; + private String iterateOriginalName; + private int iterateIndex; /** * todo: one day someone should convert this into a builder @@ -390,8 +392,18 @@ public class ConfigField { return token; } - public void isFromIterate(boolean isFromIterate) { - this.isFromIterate = isFromIterate; + public void setFromIterate(String iterateOriginalName, int iterateIndex) { + this.iterateOriginalName = iterateOriginalName; + this.iterateIndex = iterateIndex; + this.isFromIterate = true; + } + + public String getIterateOriginalName() { + return iterateOriginalName; + } + + public int getIterateIndex() { + return iterateIndex; } public boolean isFromIterate() { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java index e2302245c4..ffe0f146d0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ReaderState.java @@ -309,7 +309,7 @@ public class ReaderState { String commentWithIndex = getCommentWithIndex(cf, i); ConfigField element = new ConfigField(state, cf.getName() + i, commentWithIndex, null, cf.getType(), new int[0], cf.getTsInfo(), false, false, cf.isHasAutoscale(), null, null); - element.isFromIterate(true); + element.setFromIterate(cf.getName(), i); structure.addTs(element); } } else if (cf.isDirective()) { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java index a15b3b5a70..640f45bad0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/SdCardFieldsConsumer.java @@ -23,7 +23,8 @@ public class SdCardFieldsConsumer implements ConfigurationConsumer { @Override public void endFile() throws IOException { - output.write("static constexpr LogField fields[] = {\r\n"); + output.write("static constexpr LogField fields[] = {\r\n" + + "{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n"); output.write(getBody()); output.write("};\r\n"); output.close(); @@ -48,7 +49,16 @@ public class SdCardFieldsConsumer implements ConfigurationConsumer { if (configField.isBit()) return ""; - return "\t{engine->outputChannels." + configField.getName() + + if (configField.isFromIterate()) { + String name = configField.getIterateOriginalName() + "[" + (configField.getIterateIndex() - 1) + "]"; + return getLine(readerState, configField, prefix, name); + } else { + return getLine(readerState, configField, prefix, configField.getName()); + } + } + + private String getLine(ReaderState readerState, ConfigField configField, String prefix, String name) { + return "\t{engine->outputChannels." + name + ", " + DataLogConsumer.getComment(prefix, configField, readerState.variableRegistry) + ", " + diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java index f4a862d0dc..6dc4c1862c 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/SdCardFieldsGeneratorTest.java @@ -48,4 +48,20 @@ public class SdCardFieldsGeneratorTest { state.readBufferedReader(test, consumer); assertEquals("\t{engine->outputChannels.RPMValue, \"feee\", \"RPM\", 2},\n", consumer.getBody()); } + + @Test + public void array() { + String test = "struct_no_prefix output_channels_s\n" + + "uint16_t[4 iterate] recentErrorCode;;\"error\", 1, 0, 0, 0, 0\n" + + "end_struct"; + + ReaderState state = new ReaderState(); + + SdCardFieldsConsumer consumer = new SdCardFieldsConsumer(LazyFile.TEST); + state.readBufferedReader(test, consumer); + assertEquals("\t{engine->outputChannels.recentErrorCode[0], \"recentErrorCode 1\", \"error\", 0},\n" + + "\t{engine->outputChannels.recentErrorCode[1], \"recentErrorCode 2\", \"error\", 0},\n" + + "\t{engine->outputChannels.recentErrorCode[2], \"recentErrorCode 3\", \"error\", 0},\n" + + "\t{engine->outputChannels.recentErrorCode[3], \"recentErrorCode 4\", \"error\", 0},\n", consumer.getBody()); + } }