diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index c7f1a174a2..201e1e7fee 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -57,6 +57,10 @@ static Logging *logger; EXTERN_ENGINE; +#if EFI_UNIT_TEST + Engine *unitTestEngine; +#endif + static bool prettyClose = false; static bool shouldResetPid = false; @@ -74,7 +78,12 @@ PidCic idlePid; class PidWithOverrides : public Pid { public: float getOffset() const override { -#if EFI_FSIO && ! EFI_UNIT_TEST +#if EFI_UNIT_TEST + Engine *engine = unitTestEngine; + EXPAND_Engine; +#endif + +#if EFI_FSIO if (engineConfiguration->useFSIO12ForIdleOffset) { return ENGINE(fsioState.fsioIdleOffset); } @@ -83,7 +92,11 @@ public: } float getMinValue() const override { -#if EFI_FSIO && ! EFI_UNIT_TEST +#if EFI_UNIT_TEST + Engine *engine = unitTestEngine; + EXPAND_Engine; +#endif +#if EFI_FSIO if (engineConfiguration->useFSIO13ForIdleMinValue) { return ENGINE(fsioState.fsioIdleMinValue); } @@ -95,6 +108,11 @@ public: PidWithOverrides idlePid; #endif /* EFI_IDLE_PID_CIC */ + +float getIdlePidOffset() { + return idlePid.getOffset(); +} + // todo: extract interface for idle valve hardware, with solenoid and stepper implementations? static SimplePwm idleSolenoidOpen("idle open"); static SimplePwm idleSolenoidClose("idle close"); diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index 9818f65287..05ed33acd0 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -36,4 +36,4 @@ void stopIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE); void initIdleHardware(DECLARE_ENGINE_PARAMETER_SIGNATURE); bool isIdleHardwareRestartNeeded(); void onConfigurationChangeIdleCallback(engine_configuration_s *previousConfiguration); - +float getIdlePidOffset(); diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index e032b6e343..d1e5d67dc7 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -19,9 +19,13 @@ extern IdleController idleControllerInstance; extern int timeNowUs; +extern Engine *unitTestEngine; + TEST(idle, fsioPidParameters) { WITH_ENGINE_TEST_HELPER(MIATA_NA6_MAP); + unitTestEngine = engine; + engineConfiguration->idleRpmPid.offset = 40; engineConfiguration->idleRpmPid2.offset = 50; @@ -39,14 +43,14 @@ TEST(idle, fsioPidParameters) { ASSERT_EQ(1, getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); eth.engine.periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); - ASSERT_EQ(40, ENGINE(fsioState.fsioIdleOffset)); + ASSERT_EQ(40, getIdlePidOffset()); ASSERT_EQ(30, ENGINE(fsioState.fsioIdleMinValue)); setMockVoltage(engineConfiguration->acSwitchAdc, 5 PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(0, getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); eth.engine.periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); - ASSERT_EQ(50, ENGINE(fsioState.fsioIdleOffset)); + ASSERT_EQ(50, getIdlePidOffset()); ASSERT_EQ(60, ENGINE(fsioState.fsioIdleMinValue));