From ffc4e97ba5fc6d2e182bfd793c53c7554d32276c Mon Sep 17 00:00:00 2001 From: rusefillc Date: Wed, 20 Oct 2021 21:42:09 -0400 Subject: [PATCH] enum reader progress --- .../sensors/auto_generated_sensor.cpp | 88 +++++++++--------- firmware/controllers/sensors/sensor_type.h | 4 +- java_tools/enum2string.jar | Bin 84215 -> 85256 bytes .../main/java/com/rusefi/EnumToString.java | 14 ++- .../src/main/java/com/rusefi/EnumsReader.java | 40 ++++++-- .../src/main/java/com/rusefi/ToJavaEnum.java | 6 +- .../java/com/rusefi/EnumToStringTest.java | 71 +++++++++++++- 7 files changed, 159 insertions(+), 64 deletions(-) diff --git a/firmware/controllers/sensors/auto_generated_sensor.cpp b/firmware/controllers/sensors/auto_generated_sensor.cpp index e01f5ef9af..8c2abd4fba 100644 --- a/firmware/controllers/sensors/auto_generated_sensor.cpp +++ b/firmware/controllers/sensors/auto_generated_sensor.cpp @@ -1,97 +1,97 @@ #include "global.h" #include "sensor_type.h" -// was generated automatically by rusEFI tool from sensor_type.h // by enum2string.jar tool on Tue Oct 19 23:51:48 UTC 2021 +// was generated automatically by rusEFI tool from sensor_type.h // by enum2string.jar tool on Wed Oct 20 21:25:07 EDT 2021 // see also gen_config_and_enums.bat const char *getSensorType(SensorType value){ switch(value) { -case AcceleratorPedal: +case SensorType::AcceleratorPedal: return "AcceleratorPedal"; -case AcceleratorPedalPrimary: +case SensorType::AcceleratorPedalPrimary: return "AcceleratorPedalPrimary"; -case AcceleratorPedalSecondary: +case SensorType::AcceleratorPedalSecondary: return "AcceleratorPedalSecondary"; -case Aux1: +case SensorType::Aux1: return "Aux1"; -case Aux2: +case SensorType::Aux2: return "Aux2"; -case Aux3: +case SensorType::Aux3: return "Aux3"; -case Aux4: +case SensorType::Aux4: return "Aux4"; -case Aux5: +case SensorType::Aux5: return "Aux5"; -case Aux6: +case SensorType::Aux6: return "Aux6"; -case Aux7: +case SensorType::Aux7: return "Aux7"; -case Aux8: +case SensorType::Aux8: return "Aux8"; -case AuxTemp1: +case SensorType::AuxTemp1: return "AuxTemp1"; -case AuxTemp2: +case SensorType::AuxTemp2: return "AuxTemp2"; -case BarometricPressure: +case SensorType::BarometricPressure: return "BarometricPressure"; -case BatteryVoltage: +case SensorType::BatteryVoltage: return "BatteryVoltage"; -case Clt: +case SensorType::Clt: return "Clt"; -case DriverThrottleIntent: +case SensorType::DriverThrottleIntent: return "DriverThrottleIntent"; -case FuelEthanolPercent: +case SensorType::FuelEthanolPercent: return "FuelEthanolPercent"; -case FuelLevel: +case SensorType::FuelLevel: return "FuelLevel"; -case FuelPressureHigh: +case SensorType::FuelPressureHigh: return "FuelPressureHigh"; -case FuelPressureInjector: +case SensorType::FuelPressureInjector: return "FuelPressureInjector"; -case FuelPressureLow: +case SensorType::FuelPressureLow: return "FuelPressureLow"; -case Iat: +case SensorType::Iat: return "Iat"; -case IdlePosition: +case SensorType::IdlePosition: return "IdlePosition"; -case Invalid: +case SensorType::Invalid: return "Invalid"; -case Lambda1: +case SensorType::Lambda1: return "Lambda1"; -case Lambda2: +case SensorType::Lambda2: return "Lambda2"; -case Maf: +case SensorType::Maf: return "Maf"; -case Map: +case SensorType::Map: return "Map"; -case MapFast: +case SensorType::MapFast: return "MapFast"; -case MapSlow: +case SensorType::MapSlow: return "MapSlow"; -case OilPressure: +case SensorType::OilPressure: return "OilPressure"; -case PlaceholderLast: +case SensorType::PlaceholderLast: return "PlaceholderLast"; -case Rpm: +case SensorType::Rpm: return "Rpm"; -case Tps1: +case SensorType::Tps1: return "Tps1"; -case Tps1Primary: +case SensorType::Tps1Primary: return "Tps1Primary"; -case Tps1Secondary: +case SensorType::Tps1Secondary: return "Tps1Secondary"; -case Tps2: +case SensorType::Tps2: return "Tps2"; -case Tps2Primary: +case SensorType::Tps2Primary: return "Tps2Primary"; -case Tps2Secondary: +case SensorType::Tps2Secondary: return "Tps2Secondary"; -case TurbochargerSpeed: +case SensorType::TurbochargerSpeed: return "TurbochargerSpeed"; -case VehicleSpeed: +case SensorType::VehicleSpeed: return "VehicleSpeed"; -case WastegatePosition: +case SensorType::WastegatePosition: return "WastegatePosition"; } return NULL; diff --git a/firmware/controllers/sensors/sensor_type.h b/firmware/controllers/sensors/sensor_type.h index 17b0a72fa2..cef185e609 100644 --- a/firmware/controllers/sensors/sensor_type.h +++ b/firmware/controllers/sensors/sensor_type.h @@ -15,7 +15,7 @@ * SEE sensor.h ON HOW TO ADD NEW SENSOR TYPES ************************************** */ -typedef enum __attribute__ ((__packed__)) { +enum class SensorType : unsigned char { Invalid, // we need indeces for Lua consumers. At the moment we still do not expose constants into Lua :( Clt, // 1 Iat, @@ -85,4 +85,4 @@ typedef enum __attribute__ ((__packed__)) { // Leave me at the end! PlaceholderLast, -} SensorType; +}; diff --git a/java_tools/enum2string.jar b/java_tools/enum2string.jar index ff79711da564fb7fdbb1dfa7c7f4ef530ed8da92..d3f6648aecb1ab0cab068e9bee69ced54b2b33c5 100644 GIT binary patch delta 9732 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 YF{})rdm?}&fTa6Sa`_Su4P8k82SJbu1poj5 delta 8739 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 KU4Fo87yl1BPBiKO diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java index a15adef6f3..f6d6ab9e9e 100644 --- a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumToString.java @@ -83,23 +83,29 @@ public class EnumToString { public EnumToString outputData(EnumsReader enumsReader) { SystemOut.println("Preparing output for " + enumsReader.getEnums().size() + " enums\n"); - for (Map.Entry> e : enumsReader.getEnums().entrySet()) { + for (Map.Entry e : enumsReader.getEnums().entrySet()) { String enumName = e.getKey(); - cppFileContent.append(makeCode(enumName, e.getValue().values())); + EnumsReader.EnumState enumState = e.getValue(); + cppFileContent.append(makeCode(enumName, enumState)); headerFileContent.append(getMethodSignature(enumName) + ";\n"); } SystemOut.println("EnumToString: " + headerFileContent.length() + " bytes of content\n"); return this; } - private static String makeCode(String enumName, Collection values) { + private static String makeCode(String enumName, EnumsReader.EnumState enumState) { StringBuilder sb = new StringBuilder(); + Collection values = enumState.values.values(); sb.append(getMethodSignature(enumName) + "{\n"); sb.append("switch(value) {\n"); for (Value e : values) { - sb.append("case " + e.getName() + ":\n"); + sb.append("case "); + if (enumState.isEnumClass) { + sb.append(enumState.enumName).append("::"); + } + sb.append(e.getName() + ":\n"); sb.append(" return \"" + e.getName() + "\";\n"); } diff --git a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumsReader.java b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumsReader.java index 4e8a97bb31..d862eae1b3 100644 --- a/java_tools/enum_to_string/src/main/java/com/rusefi/EnumsReader.java +++ b/java_tools/enum_to_string/src/main/java/com/rusefi/EnumsReader.java @@ -9,9 +9,10 @@ import java.io.*; import java.util.*; public class EnumsReader { + public static final String ENUMCLASS_PREFIX = "enumclass"; private final Map currentValues = new TreeMap<>(); - private final Map> enums = new TreeMap<>(); + private final Map enums = new TreeMap<>(); @NotNull static List getSortedByOrder(Map brain_pin_e) { @@ -20,7 +21,7 @@ public class EnumsReader { return new ArrayList<>(byOrdinal); } - public Map> getEnums() { + public Map getEnums() { return enums; } @@ -32,6 +33,8 @@ public class EnumsReader { boolean isInsideEnum = false; BufferedReader reader = new BufferedReader(in); String line; + String enumName = null; + boolean isEnumClass = false; boolean withAutoValue = false; @@ -40,18 +43,31 @@ public class EnumsReader { line = line.replaceAll("//.+", ""); if (line.startsWith("typedefenum{") || line.startsWith("typedefenum__attribute__")) { - SystemOut.println(" EnumsReader: Entering enum"); + SystemOut.println(" EnumsReader: Entering legacy enum"); currentValues.clear(); withAutoValue = false; isInsideEnum = true; + enumName = null; + isEnumClass = false; + } else if (line.startsWith(ENUMCLASS_PREFIX)) { + SystemOut.println(" EnumsReader: Entering fancy enum class"); + currentValues.clear(); + withAutoValue = false; + isInsideEnum = true; + isEnumClass = true; + int colonIndex = line.indexOf(":"); + if (colonIndex == -1) + throw new IllegalStateException("color and Type not located in " + line); + enumName = line.substring(ENUMCLASS_PREFIX.length(), colonIndex); } 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"); + if (enumName == null) + enumName = line.substring(1, line.length() - 1); + SystemOut.println(" EnumsReader: Ending enum " + enumName + " found " + currentValues.size() + " values"); if (withAutoValue) validateValues(currentValues); - enums.put(line, new TreeMap<>(currentValues)); + enums.put(enumName, new EnumState(currentValues, enumName, isEnumClass)); } else { if (isInsideEnum) { if (isKeyValueLine(line)) { @@ -91,4 +107,16 @@ public class EnumsReader { static boolean isKeyValueLine(String line) { return removeSpaces(line).matches("[a-zA-Z_$][a-zA-Z\\d_$]*(=(0x[0-9a-fA-F]+|(-)?[0-9]+|([-a-zA-Z\\d_])*))*,?"); } + + public static class EnumState { + public Map values; + public final String enumName; + public final boolean isEnumClass; + + public EnumState(Map currentValues, String enumName, boolean isEnumClass) { + values = new TreeMap<>(currentValues); + this.enumName = enumName; + this.isEnumClass = isEnumClass; + } + } } 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 index 0d68593a32..ade58e73dc 100644 --- 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 @@ -25,7 +25,7 @@ public class ToJavaEnum { enumsReader.read(new FileReader(f)); } - for (Map.Entry> e : enumsReader.getEnums().entrySet()) { + for (Map.Entry e : enumsReader.getEnums().entrySet()) { String java = generate(e.getKey(), e.getValue()); String fullFileName = outputPath + File.separator + e.getKey() + ".java"; @@ -35,12 +35,12 @@ public class ToJavaEnum { } } - public static String generate(String key, Map values) { + public static String generate(String key, EnumsReader.EnumState enumState) { 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); + List sorted = EnumsReader.getSortedByOrder(enumState.values); for (Value value : sorted) { sb.append("\t" + value.getName() + ",\n"); 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 80edfe5236..9b890872c3 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 @@ -43,7 +43,7 @@ public class EnumToStringTest { EnumsReader enumsReader = new EnumsReader().read(reader); EnumToString enumToString = process(enumsReader); - List values = new ArrayList<>(enumsReader.getEnums().get("brain_pin_e").values()); + List values = new ArrayList<>(enumsReader.getEnums().get("brain_pin_e").values.values()); assertEquals(3, values.size()); Value first = values.get(0); assertEquals("GPIO_HEX", first.getName()); @@ -86,6 +86,26 @@ public class EnumToStringTest { "}\n", enumToString.getCppFileContent()); } + @Test + public void parsePackedFancyEnum() throws IOException { + final StringReader reader = new StringReader( + "enum class myEnum : uint8_t {\n" + + "\tGPIO_UNASSIGNED = 0,\n" + + "\tGPIO_INVALID = 1,\n" + + "} brain_pin_e ;"); + EnumsReader enumsReader = new EnumsReader().read(reader); + EnumToString enumToString = process(enumsReader); + assertEquals("const char *getMyEnum(myEnum value){\n" + + "switch(value) {\n" + + "case myEnum::GPIO_INVALID:\n" + + " return \"GPIO_INVALID\";\n" + + "case myEnum::GPIO_UNASSIGNED:\n" + + " return \"GPIO_UNASSIGNED\";\n" + + " }\n" + + " return NULL;\n" + + "}\n", enumToString.getCppFileContent()); + } + @Test public void parseEnumWithoutExplicitValues() throws IOException { final StringReader reader = new StringReader( @@ -95,13 +115,13 @@ 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()); + EnumsReader.EnumState brain_pin_e = enumsReader.getEnums().get("brain_pin_e"); + assertEquals(2, brain_pin_e.values.get("GPIO_HEX").getIntValue()); - List listByOrdinal = EnumsReader.getSortedByOrder(brain_pin_e); + List listByOrdinal = EnumsReader.getSortedByOrder(brain_pin_e.values); assertEquals(0, listByOrdinal.get(0).getIntValue()); - for (Map.Entry> e : enumsReader.getEnums().entrySet()) { + for (Map.Entry e : enumsReader.getEnums().entrySet()) { String a = new ToJavaEnum().generate(e.getKey(), e.getValue()); @@ -117,4 +137,45 @@ public class EnumToStringTest { "}\n", a); } } + + @Test + public void testTwoEnums() throws IOException { + final StringReader reader = new StringReader( + "typedef enum {\n" + + " AUTOTUNER_OFF = 0,\n" + + " STEADY_STATE_AT_BASELINE = 1,\n" + + "} PidAutoTune_AutoTunerState;\n" + + "\n" + + "typedef enum {\n" + + "\tINIT = 0,\n" + + "\tTPS_THRESHOLD = 1,\n" + + "\t/**\n" + + "\t * Live Docs reads 4 byte value so we want 4 byte enum\n" + + "\t */\n" + + "\tForce_4bytes_size_idle_state_e = ENUM_32_BITS,\n" + + "} idle_state_e;\n"); + + EnumsReader enumsReader = new EnumsReader().read(reader); + EnumToString enumToString = process(enumsReader); + assertEquals("const char *getPidAutoTune_AutoTunerState(PidAutoTune_AutoTunerState value){\n" + + "switch(value) {\n" + + "case AUTOTUNER_OFF:\n" + + " return \"AUTOTUNER_OFF\";\n" + + "case STEADY_STATE_AT_BASELINE:\n" + + " return \"STEADY_STATE_AT_BASELINE\";\n" + + " }\n" + + " return NULL;\n" + + "}\n" + + "const char *getIdle_state_e(idle_state_e value){\n" + + "switch(value) {\n" + + "case Force_4bytes_size_idle_state_e:\n" + + " return \"Force_4bytes_size_idle_state_e\";\n" + + "case INIT:\n" + + " return \"INIT\";\n" + + "case TPS_THRESHOLD:\n" + + " return \"TPS_THRESHOLD\";\n" + + " }\n" + + " return NULL;\n" + + "}\n", enumToString.getCppFileContent()); + } }