From 0635060e4f8617bac3d457a936660d4ed72ece63 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 16 Oct 2021 17:49:02 -0400 Subject: [PATCH] refactoring - auto-generating names --- .../sensors/auto_generated_sensor.cpp | 90 +++++++++++++++++++ .../sensors/auto_generated_sensor.h | 8 ++ firmware/controllers/sensors/sensor.cpp | 65 +------------- firmware/controllers/sensors/sensor_type.h | 3 - firmware/controllers/sensors/sensors.mk | 1 + firmware/gen_enum_to_string.sh | 14 +++ 6 files changed, 116 insertions(+), 65 deletions(-) create mode 100644 firmware/controllers/sensors/auto_generated_sensor.cpp create mode 100644 firmware/controllers/sensors/auto_generated_sensor.h diff --git a/firmware/controllers/sensors/auto_generated_sensor.cpp b/firmware/controllers/sensors/auto_generated_sensor.cpp new file mode 100644 index 0000000000..249e4faa18 --- /dev/null +++ b/firmware/controllers/sensors/auto_generated_sensor.cpp @@ -0,0 +1,90 @@ +#include "global.h" +#include "sensor_type.h" +// was generated automatically by rusEFI tool from sensor_type.h // by enum2string.jar tool on Sat Oct 16 17:24:03 EDT 2021 +// see also gen_config_and_enums.bat + + + +const char *getSensorType(SensorType value){ +switch(value) { +case AcceleratorPedal: + return "AcceleratorPedal"; +case AcceleratorPedalPrimary: + return "AcceleratorPedalPrimary"; +case AcceleratorPedalSecondary: + return "AcceleratorPedalSecondary"; +case Aux1: + return "Aux1"; +case Aux2: + return "Aux2"; +case Aux3: + return "Aux3"; +case Aux4: + return "Aux4"; +case AuxTemp1: + return "AuxTemp1"; +case AuxTemp2: + return "AuxTemp2"; +case BarometricPressure: + return "BarometricPressure"; +case BatteryVoltage: + return "BatteryVoltage"; +case Clt: + return "Clt"; +case DriverThrottleIntent: + return "DriverThrottleIntent"; +case FuelEthanolPercent: + return "FuelEthanolPercent"; +case FuelLevel: + return "FuelLevel"; +case FuelPressureHigh: + return "FuelPressureHigh"; +case FuelPressureInjector: + return "FuelPressureInjector"; +case FuelPressureLow: + return "FuelPressureLow"; +case Iat: + return "Iat"; +case IdlePosition: + return "IdlePosition"; +case Invalid: + return "Invalid"; +case Lambda1: + return "Lambda1"; +case Lambda2: + return "Lambda2"; +case Maf: + return "Maf"; +case Map: + return "Map"; +case MapFast: + return "MapFast"; +case MapSlow: + return "MapSlow"; +case OilPressure: + return "OilPressure"; +case PlaceholderLast: + return "PlaceholderLast"; +case Rpm: + return "Rpm"; +case Tps1: + return "Tps1"; +case Tps1Primary: + return "Tps1Primary"; +case Tps1Secondary: + return "Tps1Secondary"; +case Tps2: + return "Tps2"; +case Tps2Primary: + return "Tps2Primary"; +case Tps2Secondary: + return "Tps2Secondary"; +case TurbochargerSpeed: + return "TurbochargerSpeed"; +case VehicleSpeed: + return "VehicleSpeed"; +case WastegatePosition: + return "WastegatePosition"; + } + return NULL; +} diff --git a/firmware/controllers/sensors/auto_generated_sensor.h b/firmware/controllers/sensors/auto_generated_sensor.h new file mode 100644 index 0000000000..b51fb104d0 --- /dev/null +++ b/firmware/controllers/sensors/auto_generated_sensor.h @@ -0,0 +1,8 @@ +// was generated automatically by rusEFI tool from sensor_type.h // by enum2string.jar tool on Sat Oct 16 17:24:03 EDT 2021 +// see also gen_config_and_enums.bat + + + +#include "sensor_type.h" +#pragma once +const char *getSensorType(SensorType value); diff --git a/firmware/controllers/sensors/sensor.cpp b/firmware/controllers/sensors/sensor.cpp index 2a32841988..af260bc869 100644 --- a/firmware/controllers/sensors/sensor.cpp +++ b/firmware/controllers/sensors/sensor.cpp @@ -1,62 +1,5 @@ #include "pch.h" - -static const char* const s_sensorNames[] = { - "Invalid", - "CLT", - "IAT", - "RPM", - "MAP", - "MAF", - - "Oil Pressure", - - "Fuel Pressure (LP)", - "Fuel Pressure (HP)", - "Fuel Pressure (injector)", - - "TPS 1", - "TPS 1 Primary", - "TPS 1 Secondary", - - "TPS 2", - "TPS 2 Primary", - "TPS 2 Secondary", - - "Acc Pedal", - "Acc Pedal Primary", - "Acc Pedal Secondary", - - "Driver Acc Intent", - - "Aux Temp 1", - "Aux Temp 2", - - "Lambda 1", - "Lambda 2", - - "Wastegate Position", - "Idle Valve Position", - - "Flex Fuel", - - "Battery Voltage", - - "Barometric Pressure", - - "Fuel Level %", - - "Aux 1", - "Aux 2", - "Aux 3", - "Aux 4", - - "Vehicle speed", - - "Turbo speed", - - "MAP (fast)", - "MAP (slow)", -}; +#include "auto_generated_sensor.h" // This struct represents one sensor in the registry. // It stores whether the sensor should use a mock value, @@ -171,8 +114,6 @@ private: static SensorRegistryEntry s_sensorRegistry[static_cast(SensorType::PlaceholderLast)] = {}; -static_assert(efi::size(s_sensorNames) == efi::size(s_sensorRegistry)); - bool Sensor::Register() { return s_sensorRegistry[getIndex()].Register(this); } @@ -263,7 +204,7 @@ bool Sensor::Register() { } /*static*/ const char* Sensor::getSensorName(SensorType type) { - return s_sensorNames[static_cast(type)]; + return getSensorType(type); } /*static*/ bool Sensor::s_inhibitSensorTimeouts = false; @@ -276,7 +217,7 @@ bool Sensor::Register() { /*static*/ void Sensor::showAllSensorInfo() { for (size_t i = 1; i < efi::size(s_sensorRegistry); i++) { auto& entry = s_sensorRegistry[i]; - const char* name = s_sensorNames[i]; + const char* name = getSensorType((SensorType)i); entry.showInfo(name); } diff --git a/firmware/controllers/sensors/sensor_type.h b/firmware/controllers/sensors/sensor_type.h index 1101b4c984..27aaabd925 100644 --- a/firmware/controllers/sensors/sensor_type.h +++ b/firmware/controllers/sensors/sensor_type.h @@ -13,9 +13,6 @@ /** ************************************** * SEE sensor.h ON HOW TO ADD NEW SENSOR TYPES - * While changing SensorType make sure to change s_sensorNames - * TODO: SensorType to s_sensorNames mapping has to be done by code generation! We already have relevant tools - * maybe we just need a better naming convention? ************************************** */ typedef enum __attribute__ ((__packed__)) { diff --git a/firmware/controllers/sensors/sensors.mk b/firmware/controllers/sensors/sensors.mk index 91020f5070..49e9ae4d8e 100644 --- a/firmware/controllers/sensors/sensors.mk +++ b/firmware/controllers/sensors/sensors.mk @@ -3,6 +3,7 @@ CONTROLLERS_SENSORS_SRC = CONTROLLERS_SENSORS_SRC_CPP = $(PROJECT_DIR)/controllers/sensors/thermistors.cpp \ $(PROJECT_DIR)/controllers/sensors/allsensors.cpp \ + $(PROJECT_DIR)/controllers/sensors/auto_generated_sensor.cpp \ $(PROJECT_DIR)/controllers/sensors/map.cpp \ $(PROJECT_DIR)/controllers/sensors/maf.cpp \ $(PROJECT_DIR)/controllers/sensors/tps.cpp \ diff --git a/firmware/gen_enum_to_string.sh b/firmware/gen_enum_to_string.sh index de2f8ae4e6..6e0352e796 100755 --- a/firmware/gen_enum_to_string.sh +++ b/firmware/gen_enum_to_string.sh @@ -12,12 +12,16 @@ java -DSystemOut.name=gen_enum_to_string \ -generatedFile codes \ -enumInputFile controllers/algo/obd_error_codes.h +[ $? -eq 0 ] || { echo "ERROR generating obd_error_codes"; exit 1; } + java -DSystemOut.name=gen_enum_to_string \ -jar ../java_tools/enum2string.jar \ -outputPath controllers/algo \ -generatedFile commonenum \ -enumInputFile controllers/algo/rusefi_enums.h +[ $? -eq 0 ] || { echo "ERROR generating enums"; exit 1; } + # TODO: rearrange enums so that we have WAY less duplicated generated code? at the moment too many enums are generated 4 times java -DSystemOut.name=gen_enum_to_string \ @@ -25,6 +29,16 @@ java -DSystemOut.name=gen_enum_to_string \ -outputPath controllers/algo \ -enumInputFile controllers/algo/rusefi_hw_enums.h \ +[ $? -eq 0 ] || { echo "ERROR generating hw_enums"; exit 1; } + +java -DSystemOut.name=gen_enum_to_string \ + -jar ../java_tools/enum2string.jar \ + -outputPath controllers/sensors \ + -generatedFile sensor \ + -enumInputFile controllers/sensors/sensor_type.h + +[ $? -eq 0 ] || { echo "ERROR generating sensors"; exit 1; } + pwd cd config/boards/kinetis/config bash kinetis_gen_enum_to_string.sh