From cfa7ad97412af781bb61763770ff0d90d4a4b65a Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 2 Aug 2024 00:45:54 -0400 Subject: [PATCH] AE is engine module --- firmware/console/binary/live_data.cpp | 2 +- .../controllers/algo/accel_enrichment.cpp | 20 +++---- firmware/controllers/algo/accel_enrichment.h | 6 +-- firmware/controllers/algo/engine.cpp | 2 +- firmware/controllers/algo/engine.h | 5 +- firmware/controllers/algo/engine_types.h | 2 +- firmware/controllers/algo/fuel_math.cpp | 2 +- firmware/controllers/engine_controller.cpp | 7 +-- .../controllers/trigger/trigger_central.cpp | 2 +- unit_tests/tests/test_accel_enrichment.cpp | 52 +++++++++---------- 10 files changed, 43 insertions(+), 57 deletions(-) diff --git a/firmware/console/binary/live_data.cpp b/firmware/console/binary/live_data.cpp index 9f95afe7c2..597d5287a6 100644 --- a/firmware/console/binary/live_data.cpp +++ b/firmware/console/binary/live_data.cpp @@ -113,7 +113,7 @@ const engine_state_s* getLiveData(size_t) { template<> const tps_accel_state_s* getLiveData(size_t) { - return &engine->tpsAccelEnrichment; + return &engine->module().unmock(); } template<> diff --git a/firmware/controllers/algo/accel_enrichment.cpp b/firmware/controllers/algo/accel_enrichment.cpp index 302cba08f8..565cdb592c 100644 --- a/firmware/controllers/algo/accel_enrichment.cpp +++ b/firmware/controllers/algo/accel_enrichment.cpp @@ -181,29 +181,21 @@ TpsAccelEnrichment::TpsAccelEnrichment() { cb.setSize(4); } -#if ! EFI_UNIT_TEST +void TpsAccelEnrichment::onConfigurationChange(engine_configuration_s const* /*previousConfig*/) { + constexpr float slowCallbackPeriodSecond = SLOW_CALLBACK_PERIOD_MS / 1000.0f; + int length = engineConfiguration->tpsAccelLookback / slowCallbackPeriodSecond; -static void setTpsAccelLen(int length) { if (length < 1) { efiPrintf("setTpsAccelLen: Length should be positive [%d]", length); return; } - engine->tpsAccelEnrichment.setLength(length); + + setLength(length); } -void updateAccelParameters() { - constexpr float slowCallbackPeriodSecond = SLOW_CALLBACK_PERIOD_MS / 1000.0f; - setTpsAccelLen(engineConfiguration->tpsAccelLookback / slowCallbackPeriodSecond); -} - -#endif /* ! EFI_UNIT_TEST */ - - void initAccelEnrichment() { tpsTpsMap.initTable(config->tpsTpsAccelTable, config->tpsTpsAccelToRpmBins, config->tpsTpsAccelFromRpmBins); -#if ! EFI_UNIT_TEST - updateAccelParameters(); -#endif /* ! EFI_UNIT_TEST */ + engine->module()->onConfigurationChange(nullptr); } diff --git a/firmware/controllers/algo/accel_enrichment.h b/firmware/controllers/algo/accel_enrichment.h index 1f653a6520..083d431367 100644 --- a/firmware/controllers/algo/accel_enrichment.h +++ b/firmware/controllers/algo/accel_enrichment.h @@ -16,10 +16,12 @@ typedef Map3D tps_tps_Map3D_t; -class TpsAccelEnrichment : public tps_accel_state_s { +class TpsAccelEnrichment : public tps_accel_state_s, public EngineModule { public: TpsAccelEnrichment(); + void onConfigurationChange(engine_configuration_s const* previousConfig) override; + int getMaxDeltaIndex(); float getMaxDelta(); @@ -38,5 +40,3 @@ public: }; void initAccelEnrichment(); - -void updateAccelParameters(); diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index 9dd6e4c553..dcd548a644 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -162,7 +162,7 @@ void Engine::periodicSlowCallback() { updateSlowSensors(); checkShutdown(); - tpsAccelEnrichment.onNewValue(Sensor::getOrZero(SensorType::Tps1)); + module()->onNewValue(Sensor::getOrZero(SensorType::Tps1)); updateVrThresholdPwm(); diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index e6cacf8db5..6e94467c16 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -167,6 +167,7 @@ public: #if EFI_BOOST_CONTROL BoostController, #endif // EFI_BOOST_CONTROL + TpsAccelEnrichment, EngineModule // dummy placeholder so the previous entries can all have commas > engineModules; @@ -218,8 +219,6 @@ public: void setConfig(); - LocalVersionHolder versionForConfigurationListeners; - AuxActor auxValves[AUX_DIGITAL_VALVE_COUNT][2]; #if EFI_UNIT_TEST @@ -280,8 +279,6 @@ public: */ int globalConfigurationVersion = 0; - TpsAccelEnrichment tpsAccelEnrichment; - #if EFI_SHAFT_POSITION_INPUT TriggerCentral triggerCentral; #endif // EFI_SHAFT_POSITION_INPUT diff --git a/firmware/controllers/algo/engine_types.h b/firmware/controllers/algo/engine_types.h index 4f4bdb63c9..c73181b5b2 100644 --- a/firmware/controllers/algo/engine_types.h +++ b/firmware/controllers/algo/engine_types.h @@ -223,7 +223,7 @@ enum class engine_type_e : uint16_t { */ typedef enum __attribute__ ((__packed__)) { DBG_0 = 0, - DBG_TPS_ACCEL = 1, + DBG_1 = 1, DBG_2 = 2, DBG_STEPPER_IDLE_CONTROL = 3, DBG_EL_ACCEL = 4, diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 805680a561..278f6d4040 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -328,7 +328,7 @@ float getInjectionMass(int rpm) { engine->module()->prepare(); } - float tpsAccelEnrich = engine->tpsAccelEnrichment.getTpsEnrichment(); + float tpsAccelEnrich = engine->module()->getTpsEnrichment(); efiAssert(ObdCode::CUSTOM_ERR_ASSERT, !std::isnan(tpsAccelEnrich), "NaN tpsAccelEnrich", 0); engine->engineState.tpsAccelEnrich = tpsAccelEnrich; diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 4b7beac703..82b5f77513 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -173,7 +173,8 @@ class EngineStateBlinkingTask : public PeriodicTimerController { static EngineStateBlinkingTask engineStateBlinkingTask; static void resetAccel() { - engine->tpsAccelEnrichment.resetAE(); + engine->module()->resetAE(); + #if EFI_ENGINE_CONTROL for (size_t i = 0; i < efi::size(engine->injectionEvents.elements); i++) { @@ -192,10 +193,6 @@ static void doPeriodicSlowCallback() { if (engine->rpmCalculator.isStopped()) { resetAccel(); } - - if (engine->versionForConfigurationListeners.isOld(engine->getGlobalConfigurationVersion())) { - updateAccelParameters(); - } #endif /* EFI_SHAFT_POSITION_INPUT */ engine->periodicSlowCallback(); diff --git a/firmware/controllers/trigger/trigger_central.cpp b/firmware/controllers/trigger/trigger_central.cpp index 18f606470f..36f79ebd38 100644 --- a/firmware/controllers/trigger/trigger_central.cpp +++ b/firmware/controllers/trigger/trigger_central.cpp @@ -882,7 +882,7 @@ void TriggerCentral::handleShaftSignal(trigger_event_e signal, efitick_t timesta #endif /* EFI_CDM_INTEGRATION */ if (engine->rpmCalculator.getCachedRpm() > 0 && triggerIndexForListeners == 0) { - engine->tpsAccelEnrichment.onEngineCycleTps(); + engine->module()->onEngineCycleTps(); } // Handle ignition and injection diff --git a/unit_tests/tests/test_accel_enrichment.cpp b/unit_tests/tests/test_accel_enrichment.cpp index 1c75c30547..bbe03c5ead 100644 --- a/unit_tests/tests/test_accel_enrichment.cpp +++ b/unit_tests/tests/test_accel_enrichment.cpp @@ -20,23 +20,23 @@ TEST(fuel, testTpsAccelEnrichmentMath) { engine->rpmCalculator.setRpmValue(600); engine->periodicFastCallback(); - engine->tpsAccelEnrichment.setLength(4); + engine->module()->setLength(4); - engine->tpsAccelEnrichment.onNewValue(0); - ASSERT_EQ( 0, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta"; - engine->tpsAccelEnrichment.onNewValue(10); - ASSERT_EQ( 10, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta#1"; - engine->tpsAccelEnrichment.onNewValue(30); - ASSERT_EQ( 20, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta#2"; + engine->module()->onNewValue(0); + ASSERT_EQ( 0, engine->module()->getMaxDelta()) << "maxDelta"; + engine->module()->onNewValue(10); + ASSERT_EQ( 10, engine->module()->getMaxDelta()) << "maxDelta#1"; + engine->module()->onNewValue(30); + ASSERT_EQ( 20, engine->module()->getMaxDelta()) << "maxDelta#2"; - engine->tpsAccelEnrichment.onNewValue(0); - ASSERT_EQ( 20, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta#3"; - engine->tpsAccelEnrichment.onNewValue(0); - ASSERT_EQ( 20, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta#4"; - engine->tpsAccelEnrichment.onNewValue(0); - ASSERT_EQ( 0, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta#5"; - engine->tpsAccelEnrichment.onNewValue(0); - ASSERT_EQ( 0, engine->tpsAccelEnrichment.getMaxDelta()) << "maxDelta"; + engine->module()->onNewValue(0); + ASSERT_EQ( 20, engine->module()->getMaxDelta()) << "maxDelta#3"; + engine->module()->onNewValue(0); + ASSERT_EQ( 20, engine->module()->getMaxDelta()) << "maxDelta#4"; + engine->module()->onNewValue(0); + ASSERT_EQ( 0, engine->module()->getMaxDelta()) << "maxDelta#5"; + engine->module()->onNewValue(0); + ASSERT_EQ( 0, engine->module()->getMaxDelta()) << "maxDelta"; } TEST(fuel, testTpsAccelEnrichmentScheduling) { @@ -58,25 +58,25 @@ TEST(fuel, testTpsAccelEnrichmentScheduling) { eth.fireTriggerEvents2(/* count */ 4, 25 /* ms */); ASSERT_EQ( 1200, Sensor::getOrZero(SensorType::Rpm)) << "RPM"; int expectedInvocationCounter = 1; - ASSERT_EQ(expectedInvocationCounter, engine->tpsAccelEnrichment.onUpdateInvocationCounter); + ASSERT_EQ(expectedInvocationCounter, engine->module()->onUpdateInvocationCounter); Sensor::setMockValue(SensorType::Tps1, 70); eth.fireTriggerEvents2(/* count */ 1, 25 /* ms */); float expectedAEValue = 7; // it does not matter how many times we invoke 'getTpsEnrichment' - state does not change - for (int i = 0; i <20;i++) { - ASSERT_NEAR(expectedAEValue, engine->tpsAccelEnrichment.getTpsEnrichment(), EPS4D); + for (int i = 0; i < 20; i++) { + ASSERT_NEAR(expectedAEValue, engine->module()->getTpsEnrichment(), EPS4D); } expectedInvocationCounter++; - ASSERT_EQ(expectedInvocationCounter, engine->tpsAccelEnrichment.onUpdateInvocationCounter); + ASSERT_EQ(expectedInvocationCounter, engine->module()->onUpdateInvocationCounter); eth.engine.periodicFastCallback(); eth.engine.periodicFastCallback(); eth.engine.periodicFastCallback(); - ASSERT_EQ(expectedInvocationCounter, engine->tpsAccelEnrichment.onUpdateInvocationCounter); + ASSERT_EQ(expectedInvocationCounter, engine->module()->onUpdateInvocationCounter); } static void doFractionalTpsIteration(int period, int divisor, int numCycles, std::vector &tpsEnrich) { @@ -85,12 +85,12 @@ static void doFractionalTpsIteration(int period, int divisor, int numCycles, std // split into 2 portions engineConfiguration->tpsAccelFractionDivisor = divisor; - engine->tpsAccelEnrichment.resetAE(); - engine->tpsAccelEnrichment.onNewValue(0); + engine->module()->resetAE(); + engine->module()->onNewValue(0); for (int i = 0; i < numCycles; i++) { - engine->tpsAccelEnrichment.onNewValue(10); - engine->tpsAccelEnrichment.onEngineCycleTps(); - tpsEnrich[i] = engine->tpsAccelEnrichment.getTpsEnrichment(); + engine->module()->onNewValue(10); + engine->module()->onEngineCycleTps(); + tpsEnrich[i] = engine->module()->getTpsEnrichment(); } } @@ -116,7 +116,7 @@ TEST(fuel, testAccelEnrichmentFractionalTps) { engine->rpmCalculator.setRpmValue(600); engine->periodicFastCallback(); - engine->tpsAccelEnrichment.setLength(2); + engine->module()->setLength(2); const int numCycles = 4;