From 37db1559df0a1731f6c3414497e67619d98ef9f2 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Thu, 14 Oct 2021 18:36:47 -0400 Subject: [PATCH] Whatever we call it, whatever we implement it - we need live data / remote view into rusEFI actual state #3353 progress --- firmware/controllers/algo/live_data_ids.h | 22 +++++++ firmware/controllers/algo/rusefi_enums.h | 1 + firmware/gen_enum_to_string.sh | 2 + .../java/com/rusefi/enums/live_data_e.java | 18 +++++ java_tools/enum2string.jar | Bin 80146 -> 84215 bytes .../main/java/com/rusefi/EnumToString.java | 40 +++-------- .../src/main/java/com/rusefi/EnumsReader.java | 32 ++++++++- .../main/java/com/rusefi/InvokeReader.java | 62 ++++++++++++++++++ .../src/main/java/com/rusefi/ToJavaEnum.java | 52 +++++++++++++++ .../java/com/rusefi/EnumToStringTest.java | 22 +++++++ 10 files changed, 218 insertions(+), 33 deletions(-) create mode 100644 firmware/controllers/algo/live_data_ids.h create mode 100644 java_console/ui/src/main/java/com/rusefi/enums/live_data_e.java create mode 100644 java_tools/enum_to_string/src/main/java/com/rusefi/InvokeReader.java create mode 100644 java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java diff --git a/firmware/controllers/algo/live_data_ids.h b/firmware/controllers/algo/live_data_ids.h new file mode 100644 index 0000000000..c55461a201 --- /dev/null +++ b/firmware/controllers/algo/live_data_ids.h @@ -0,0 +1,22 @@ +/** + * @file live_data_ids.h + * + * Live Documentation Structure + * these indexes are used by custom protocol command TS_GET_STRUCT + */ + +#pragma once + +typedef enum { +LDS_SPEED_DENSITY, +LDS_ENGINE, +LDS_FUEL_TRIM, +LDS_TPS_TPS_ENRICHMENT, +LDS_TRIGGER_CENTRAL, +LDS_ETB_PID, +LDS_IDLE_PID, +LDS_ALTERNATOR_PID, +LDS_CJ125_PID, +LDS_TRIGGER_STATE, +LDS_AC_CONTROL +} live_data_e; \ No newline at end of file diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 5e9c70d337..d9d1ba9d36 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -12,6 +12,7 @@ #include "efifeatures.h" #include "obd_error_codes.h" +#include "live_data_ids.h" #include "rusefi_generated.h" // we do not want to start the search for header from current folder so we use brackets here // https://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename diff --git a/firmware/gen_enum_to_string.sh b/firmware/gen_enum_to_string.sh index 0b8921d420..a53adf55de 100755 --- a/firmware/gen_enum_to_string.sh +++ b/firmware/gen_enum_to_string.sh @@ -4,6 +4,8 @@ echo "This batch files reads rusefi_enums.h and produces auto_generated_enums.* rm gen_enum_to_string.log +java -DSystemOut.name=gen_java_enum -cp ../java_tools/enum2string.jar com.rusefi.ToJavaEnum -enumInputFile controllers/algo/live_data_ids.h -outputPath ../java_console/ui/src/main/java/com/rusefi/enums + java -DSystemOut.name=gen_enum_to_string \ -jar ../java_tools/enum2string.jar \ -outputPath controllers/algo \ diff --git a/java_console/ui/src/main/java/com/rusefi/enums/live_data_e.java b/java_console/ui/src/main/java/com/rusefi/enums/live_data_e.java new file mode 100644 index 0000000000..fbc378b883 --- /dev/null +++ b/java_console/ui/src/main/java/com/rusefi/enums/live_data_e.java @@ -0,0 +1,18 @@ +package com.rusefi.enums; +//auto-generated by ToJavaEnum.java + + + +public enum live_data_e { + LDS_SPEED_DENSITY, + LDS_ENGINE, + LDS_FUEL_TRIM, + LDS_TPS_TPS_ENRICHMENT, + LDS_TRIGGER_CENTRAL, + LDS_ETB_PID, + LDS_IDLE_PID, + LDS_ALTERNATOR_PID, + LDS_CJ125_PID, + LDS_TRIGGER_STATE, + LDS_AC_CONTROL, +} diff --git a/java_tools/enum2string.jar b/java_tools/enum2string.jar index cd84b188df037ea4259b9392025500116881253f..ff79711da564fb7fdbb1dfa7c7f4ef530ed8da92 100644 GIT binary patch delta 10145 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 currentValues = new TreeMap<>(); private final Map> enums = new TreeMap<>(); + @NotNull + static List getSortedByOrder(Map brain_pin_e) { + Set byOrdinal = new TreeSet<>(Comparator.comparingInt(Value::getIntValue)); + byOrdinal.addAll(brain_pin_e.values()); + return new ArrayList<>(byOrdinal); + } + public Map> getEnums() { return enums; } @@ -24,6 +32,9 @@ public class EnumsReader { boolean isInsideEnum = false; BufferedReader reader = new BufferedReader(in); String line; + + boolean withAutoValue = false; + while ((line = reader.readLine()) != null) { line = removeSpaces(line); @@ -31,11 +42,15 @@ public class EnumsReader { if (line.startsWith("typedefenum{") || line.startsWith("typedefenum__attribute__")) { SystemOut.println(" EnumsReader: Entering enum"); currentValues.clear(); + withAutoValue = false; isInsideEnum = true; } else if (line.startsWith("}") && line.endsWith(";")) { isInsideEnum = false; line = line.substring(1, line.length() - 1); - SystemOut.println(" EnumsReader: Ending enum " + line + " found " + currentValues.size() + " values"); + SystemOut.println(" EnumsReader: Ending enum " + line + " found " + currentValues.size() + " values"); + if (withAutoValue) + validateValues(currentValues); + enums.put(line, new TreeMap<>(currentValues)); } else { if (isInsideEnum) { @@ -46,6 +61,9 @@ public class EnumsReader { if (index != -1) { value = line.substring(index + 1); line = line.substring(0, index); + } else { + value = Integer.toString(currentValues.size()); + withAutoValue = true; } SystemOut.println(" EnumsReader: Line " + line); currentValues.put(line, new Value(line, value)); @@ -58,6 +76,14 @@ public class EnumsReader { return this; } + private void validateValues(Map currentValues) { + for (Map.Entry entry : currentValues.entrySet()) { + int v = entry.getValue().getIntValue(); + if (v < 0 || v >= currentValues.size()) + throw new IllegalStateException("Unexpected " + entry); + } + } + private static String removeSpaces(String line) { return line.replaceAll("\\s+", ""); } diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/InvokeReader.java b/java_tools/enum_to_string/src/main/java/com/rusefi/InvokeReader.java new file mode 100644 index 0000000000..632d6b1d64 --- /dev/null +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/InvokeReader.java @@ -0,0 +1,62 @@ +package com.rusefi; + +import com.rusefi.util.SystemOut; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +class InvokeReader { + private final static String KEY_INPUT_PATH = "-enumInputPath"; + private final static String KEY_OUTPUT = "-outputPath"; + private final static String KEY_OUTPUT_FILE = "-generatedFile"; + public static String fileSuffix = "enums"; + + private String[] args; + private String outputPath; + private List inputFiles = new ArrayList<>(); + private String inputPath = "."; + + public InvokeReader(String... args) { + if (args.length < 4) { + SystemOut.println("Please specify at least\n\n" + + EnumToString.KEY_ENUM_INPUT_FILE + "XXX\n" + + KEY_OUTPUT + "XXX\n" + ); + System.exit(-1); + } + + this.args = args; + } + + public String getInputPath() { + return inputPath; + } + + public String getOutputPath() { + return outputPath; + } + + public List getInputFiles() { + return inputFiles; + } + + public InvokeReader invoke() throws IOException { + outputPath = null; + for (int i = 0; i < args.length - 1; i += 2) { + String key = args[i]; + if (key.equals(KEY_INPUT_PATH)) { + inputPath = Objects.requireNonNull(args[i + 1], KEY_INPUT_PATH); + } else if (key.equals(EnumToString.KEY_ENUM_INPUT_FILE)) { + String headerInputFile = args[i + 1]; + inputFiles.add(headerInputFile); + } else if (key.equals(KEY_OUTPUT_FILE)) { + fileSuffix = args[i + 1]; + } else if (key.equals(KEY_OUTPUT)) { + outputPath = args[i + 1]; + } + } + return this; + } +} diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java b/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java new file mode 100644 index 0000000000..0d68593a32 --- /dev/null +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/ToJavaEnum.java @@ -0,0 +1,52 @@ +package com.rusefi; + +import com.rusefi.enum_reader.Value; +import com.rusefi.util.SystemOut; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class ToJavaEnum { + public static void main(String[] args) throws IOException { + InvokeReader invokeReader = new InvokeReader(args).invoke(); + String outputPath = invokeReader.getOutputPath(); + + EnumsReader enumsReader = new EnumsReader(); + + for (String inputFile : invokeReader.getInputFiles()) { + File f = new File(invokeReader.getInputPath() + File.separator + inputFile); + SystemOut.println("Reading enums from " + f); + + enumsReader.read(new FileReader(f)); + } + + for (Map.Entry> e : enumsReader.getEnums().entrySet()) { + String java = generate(e.getKey(), e.getValue()); + + String fullFileName = outputPath + File.separator + e.getKey() + ".java"; + BufferedWriter br = new BufferedWriter(new FileWriter(fullFileName)); + br.write(java); + br.close(); + } + } + + public static String generate(String key, Map values) { + StringBuilder sb = new StringBuilder("package com.rusefi.enums;\n"); + sb.append("//auto-generated by ToJavaEnum.java\n\n\n\n"); + sb.append("public enum " + key + " {\n"); + + List sorted = EnumsReader.getSortedByOrder(values); + + for (Value value : sorted) { + sb.append("\t" + value.getName() + ",\n"); + } + + sb.append("}\n"); + return sb.toString(); + } +} diff --git a/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java b/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java index 11328b4650..80edfe5236 100644 --- a/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java +++ b/java_tools/enum_to_string/src/test/java/com/rusefi/EnumToStringTest.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; +import java.util.Map; import static com.rusefi.EnumsReader.isKeyValueLine; import static org.junit.Assert.assertEquals; @@ -94,5 +95,26 @@ public class EnumToStringTest { "\tGPIO_HEX,\n" + "}brain_pin_e; // hello"); EnumsReader enumsReader = new EnumsReader().read(reader); + Map brain_pin_e = enumsReader.getEnums().get("brain_pin_e"); + assertEquals(2, brain_pin_e.get("GPIO_HEX").getIntValue()); + + List listByOrdinal = EnumsReader.getSortedByOrder(brain_pin_e); + assertEquals(0, listByOrdinal.get(0).getIntValue()); + + for (Map.Entry> e : enumsReader.getEnums().entrySet()) { + + String a = new ToJavaEnum().generate(e.getKey(), e.getValue()); + + assertEquals("package com.rusefi.enums;\n" + + "//auto-generated by ToJavaEnum.java\n" + + "\n" + + "\n" + + "\n" + + "public enum brain_pin_e {\n" + + "\tGPIO_UNASSIGNED,\n" + + "\tGPIO_INVALID,\n" + + "\tGPIO_HEX,\n" + + "}\n", a); + } } }