From be0e9cc53039d24c75846d3d62655dcef0b69631 Mon Sep 17 00:00:00 2001 From: Andrey Date: Sun, 15 Jan 2023 21:39:46 -0500 Subject: [PATCH] TS gauges section should be auto-generated #4972 --- .../main/java/com/rusefi/ConfigFieldImpl.java | 8 +++++ .../java/com/rusefi/output/GaugeConsumer.java | 34 ++++++++++++++----- .../java/com/rusefi/test/OutputsTest.java | 7 ++-- .../src/main/java/com/rusefi/ConfigField.java | 7 ++++ 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigFieldImpl.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigFieldImpl.java index 89085bf447..73d4664cc0 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigFieldImpl.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigFieldImpl.java @@ -414,6 +414,14 @@ public class ConfigFieldImpl implements ConfigField { return Integer.parseInt(tokens[5].trim()); } + @Override + public String getCategory() { + String[] tokens = getTokens(); + if (tokens.length < 7) + return null; + return tokens[6].trim(); + } + // see testUnquote public static String unquote(String token) { return VariableRegistry.unquote(token); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java index 8f8df4da4a..620a18797a 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java @@ -6,13 +6,15 @@ import com.rusefi.ReaderState; import java.io.FileWriter; import java.io.IOException; +import java.util.LinkedHashMap; +import java.util.Map; import static com.rusefi.output.DataLogConsumer.getHumanGaugeName; import static org.abego.treelayout.internal.util.java.lang.string.StringUtil.quote; public class GaugeConsumer implements ConfigurationConsumer { private final String fileName; - private final StringBuilder charArrayWriter = new StringBuilder(); + private final LinkedHashMap byCategory = new LinkedHashMap<>(); public GaugeConsumer(String fileName) { this.fileName = fileName; @@ -25,14 +27,13 @@ public class GaugeConsumer implements ConfigurationConsumer { (state, configField, prefix) -> handle(configField, prefix)); iterator.loop(); String content = iterator.getContent(); - charArrayWriter.append(content); } - if (fileName != null) { - FileWriter fw = new FileWriter(fileName); - fw.write(charArrayWriter.toString()); - fw.close(); - } +// if (fileName != null) { +// FileWriter fw = new FileWriter(fileName); +// fw.write(charArrayWriter.toString()); +// fw.close(); +// } } private String handle(ConfigField configField, String prefix) { @@ -47,18 +48,33 @@ public class GaugeConsumer implements ConfigurationConsumer { double min = configField.getMin(); double max = configField.getMax(); int digits = configField.getDigits(); + String category = configField.getCategory(); + if (category == null) + return ""; + + StringBuilder sb = byCategory.computeIfAbsent(category, s -> new StringBuilder()); String fullName = prefix + configField.getName(); - return fullName + "Gauge = " + fullName + "," + comment + + String gaugeEntry = fullName + "Gauge = " + fullName + "," + comment + ", " + quote(configField.getUnits()) + ", " + min + "," + max + ", " + min + "," + max + ", " + min + "," + max + ", " + digits + "," + digits + "\n"; + sb.append(gaugeEntry); + + return ""; } public String getContent() { - return charArrayWriter.toString(); + StringBuilder sb = new StringBuilder(); + + for (Map.Entry e : byCategory.entrySet()) { + sb.append("\t").append("gaugeCategory = ").append(e.getKey()).append("\n"); + sb.append(e.getValue()); + } + + return sb.toString(); } } diff --git a/java_tools/configuration_definition/src/test/java/com/rusefi/test/OutputsTest.java b/java_tools/configuration_definition/src/test/java/com/rusefi/test/OutputsTest.java index 43e1a09f67..da6a7958f1 100644 --- a/java_tools/configuration_definition/src/test/java/com/rusefi/test/OutputsTest.java +++ b/java_tools/configuration_definition/src/test/java/com/rusefi/test/OutputsTest.java @@ -164,8 +164,8 @@ public class OutputsTest { public void sensorStruct() { String test = "struct total\n" + " struct pid_status_s\n" + - " \tfloat iTerm;;\"v\", 1, 0, -10000, 10000, 4\n" + - " \tfloat dTerm;;\"v\", 1, 0, -10000, 10000, 4\n" + + " \tfloat iTerm;;\"v\", 1, 0, -10000, 10000, 4, Alternator\n" + + " \tfloat dTerm;;\"v\", 1, 0, -10000, 10000, 4, Alternator\n" + " end_struct\n" + "\tpid_status_s alternatorStatus\n" + "\tpid_status_s idleStatus\n" + @@ -182,7 +182,8 @@ public class OutputsTest { "entry = idleStatus_dTerm, \"idleStatus_dTerm\", float, \"%.3f\"\n", dataLogConsumer.getContent()); - assertEquals("alternatorStatus_iTermGauge = alternatorStatus_iTerm,\"alternatorStatus_ iTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + + assertEquals("\tgaugeCategory = Alternator\n" + + "alternatorStatus_iTermGauge = alternatorStatus_iTerm,\"alternatorStatus_ iTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + "alternatorStatus_dTermGauge = alternatorStatus_dTerm,\"alternatorStatus_ dTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + "idleStatus_iTermGauge = idleStatus_iTerm,\"idleStatus_ iTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + "idleStatus_dTermGauge = idleStatus_dTerm,\"idleStatus_ dTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n", diff --git a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ConfigField.java b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ConfigField.java index b56d386cee..2e9b26fe4b 100644 --- a/java_tools/configuration_definition_base/src/main/java/com/rusefi/ConfigField.java +++ b/java_tools/configuration_definition_base/src/main/java/com/rusefi/ConfigField.java @@ -125,6 +125,11 @@ public interface ConfigField { return 0; } + @Override + public String getCategory() { + return null; + } + @Override public int getDigits() { return 0; @@ -201,6 +206,8 @@ public interface ConfigField { int getDigits(); + public String getCategory(); + String getIterateOriginalName(); int getIterateIndex();