diff --git a/firmware/controllers/algo/fuel/injector_model.cpp b/firmware/controllers/algo/fuel/injector_model.cpp index e5d680a4b3..9151a4d599 100644 --- a/firmware/controllers/algo/fuel/injector_model.cpp +++ b/firmware/controllers/algo/fuel/injector_model.cpp @@ -32,7 +32,7 @@ expected InjectorModel::getAbsoluteRailPressure() const { } } -float InjectorModel::getInjectorFlowRatio() const { +float InjectorModel::getInjectorFlowRatio() { // Compensation disabled, use reference flow. if (engineConfiguration->injectorCompensationMode == ICM_None) { return 1.0f; @@ -53,15 +53,15 @@ float InjectorModel::getInjectorFlowRatio() const { return 1.0f; } - float pressureDelta = absRailPressure.Value - map.Value; + pressureDelta = absRailPressure.Value - map.Value; // Somehow pressure delta is less than 0, assume failed sensor and return default flow if (pressureDelta <= 0) { return 1.0f; } - // todo: live data model - float pressureRatio = pressureDelta / referencePressure; + pressureRatio = pressureDelta / referencePressure; + // todo: live data model? float flowRatio = sqrtf(pressureRatio); #if EFI_TUNER_STUDIO @@ -73,7 +73,7 @@ float InjectorModel::getInjectorFlowRatio() const { return flowRatio; } -float InjectorModel::getInjectorMassFlowRate() const { +float InjectorModel::getInjectorMassFlowRate() { // TODO: injector flow dependent upon temperature/ethanol content? auto injectorVolumeFlow = engineConfiguration->injector.flow; diff --git a/firmware/controllers/algo/fuel/injector_model.h b/firmware/controllers/algo/fuel/injector_model.h index c873601168..d1aef5c97b 100644 --- a/firmware/controllers/algo/fuel/injector_model.h +++ b/firmware/controllers/algo/fuel/injector_model.h @@ -1,6 +1,7 @@ #pragma once #include "expected.h" +#include "injector_model_generated.h" struct IInjectorModel : public EngineModule { virtual void prepare() = 0; @@ -8,22 +9,21 @@ struct IInjectorModel : public EngineModule { virtual float getFuelMassForDuration(floatms_t duration) const = 0; }; -class InjectorModelBase : public IInjectorModel { +class InjectorModelBase : public IInjectorModel, public injector_model_s { public: void prepare() override; floatms_t getInjectionDuration(float fuelMassGram) const override; float getFuelMassForDuration(floatms_t duration) const override; virtual floatms_t getDeadtime() const = 0; - virtual float getInjectorMassFlowRate() const = 0; - virtual float getInjectorFlowRatio() const = 0; + virtual float getInjectorMassFlowRate() = 0; + virtual float getInjectorFlowRatio() = 0; virtual expected getAbsoluteRailPressure() const = 0; virtual float correctShortPulse(float baseDuration) const = 0; virtual void postState(float deadTime) const { (void)deadTime; }; private: - float m_deadtime = 0; float m_massFlowRate = 0; }; @@ -31,8 +31,8 @@ class InjectorModel : public InjectorModelBase { public: void postState(float deadtime) const override; floatms_t getDeadtime() const override; - float getInjectorMassFlowRate() const override; - float getInjectorFlowRatio() const override; + float getInjectorMassFlowRate() override; + float getInjectorFlowRatio() override; expected getAbsoluteRailPressure() const override; // Small pulse correction logic diff --git a/firmware/controllers/algo/fuel/injector_model.txt b/firmware/controllers/algo/fuel/injector_model.txt index 4fc24083f4..c35c41c4f7 100644 --- a/firmware/controllers/algo/fuel/injector_model.txt +++ b/firmware/controllers/algo/fuel/injector_model.txt @@ -1,4 +1,4 @@ -struct_no_prefix main_relay_s +struct_no_prefix injector_model_s float m_deadtime float pressureDelta float pressureRatio diff --git a/firmware/controllers/algo/fuel/injector_model_generated.h b/firmware/controllers/algo/fuel/injector_model_generated.h new file mode 100644 index 0000000000..566a92f09a --- /dev/null +++ b/firmware/controllers/algo/fuel/injector_model_generated.h @@ -0,0 +1,24 @@ +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/algo/fuel/injector_model.txt Sun Dec 26 12:40:58 EST 2021 +// by class com.rusefi.output.CHeaderConsumer +// begin +#pragma once +#include "rusefi_types.h" +// start of injector_model_s +struct injector_model_s { + /** + * offset 0 + */ + float m_deadtime = (float)0; + /** + * offset 4 + */ + float pressureDelta = (float)0; + /** + * offset 8 + */ + float pressureRatio = (float)0; + /** total size 12*/ +}; + +// end +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/algo/fuel/injector_model.txt Sun Dec 26 12:40:58 EST 2021 diff --git a/firmware/gen_live_documentation.sh b/firmware/gen_live_documentation.sh index e3990fe1f7..1563fb7e96 100755 --- a/firmware/gen_live_documentation.sh +++ b/firmware/gen_live_documentation.sh @@ -2,6 +2,9 @@ rm gen_live_documentation.log +bash gen_live_documentation_one_file.sh injector_model InjectorModel.java controllers/algo/fuel +[ $? -eq 0 ] || { echo "ERROR generating"; exit 1; } + bash gen_live_documentation_one_file.sh launch_control_state LaunchControl.java controllers/algo [ $? -eq 0 ] || { echo "ERROR generating"; exit 1; } diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/InjectorModel.java b/java_console/models/src/main/java/com/rusefi/config/generated/InjectorModel.java new file mode 100644 index 0000000000..65ebd00f56 --- /dev/null +++ b/java_console/models/src/main/java/com/rusefi/config/generated/InjectorModel.java @@ -0,0 +1,17 @@ +package com.rusefi.config.generated; + +// this file was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) controllers/algo/fuel/injector_model.txt Sun Dec 26 12:40:21 EST 2021 + +// by class com.rusefi.output.FileJavaFieldsConsumer +import com.rusefi.config.*; + +public class InjectorModel { + public static final Field M_DEADTIME = Field.create("M_DEADTIME", 0, FieldType.FLOAT); + public static final Field PRESSUREDELTA = Field.create("PRESSUREDELTA", 4, FieldType.FLOAT); + public static final Field PRESSURERATIO = Field.create("PRESSURERATIO", 8, FieldType.FLOAT); + public static final Field[] VALUES = { + M_DEADTIME, + PRESSUREDELTA, + PRESSURERATIO, + }; +} diff --git a/unit_tests/tests/ignition_injection/test_injector_model.cpp b/unit_tests/tests/ignition_injection/test_injector_model.cpp index 025e51c9d2..59a9c9bfc6 100644 --- a/unit_tests/tests/ignition_injection/test_injector_model.cpp +++ b/unit_tests/tests/ignition_injection/test_injector_model.cpp @@ -7,8 +7,8 @@ using ::testing::StrictMock; class MockInjectorModel : public InjectorModelBase { public: MOCK_METHOD(floatms_t, getDeadtime, (), (const, override)); - MOCK_METHOD(float, getInjectorMassFlowRate, (), (const, override)); - MOCK_METHOD(float, getInjectorFlowRatio, (), (const, override)); + MOCK_METHOD(float, getInjectorMassFlowRate, (), (override)); + MOCK_METHOD(float, getInjectorFlowRatio, (), (override)); MOCK_METHOD(expected, getAbsoluteRailPressure, (), (const, override)); MOCK_METHOD(float, correctShortPulse, (float baseDuration), (const, override)); }; @@ -97,7 +97,7 @@ TEST(InjectorModel, Deadtime) { } struct TesterGetFlowRate : public InjectorModel { - MOCK_METHOD(float, getInjectorFlowRatio, (), (const, override)); + MOCK_METHOD(float, getInjectorFlowRatio, (), (override)); }; struct TesterGetRailPressure : public InjectorModel {