diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 20d5cd196a..24b5cd488c 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -202,7 +202,9 @@ void setIdleMode(idle_mode_e value DECLARE_ENGINE_PARAMETER_SUFFIX) { showIdleInfo(); } -static void applyIACposition(percent_t position) { +#endif // EFI_UNIT_TEST + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX) { /** * currently idle level is an percent value (0-100 range), and PWM takes a float in the 0..1 range * todo: unify? @@ -216,8 +218,8 @@ static void applyIACposition(percent_t position) { } #if EFI_ELECTRONIC_THROTTLE_BODY - setEtbIdlePosition(position); -#endif + setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ELECTRONIC_THROTTLE_BODY #if ! EFI_UNIT_TEST } if (CONFIG(useStepperIdle)) { iacMotor.setTargetPosition(duty * engineConfiguration->idleStepperTotalSteps); @@ -239,11 +241,13 @@ static void applyIACposition(percent_t position) { } } +#if ! EFI_UNIT_TEST + percent_t getIdlePosition(void) { return engine->engineState.idle.currentIdlePosition; } -void setIdleValvePosition(int positionPercent) { +void setManualIdleValvePosition(int positionPercent) { if (positionPercent < 1 || positionPercent > 99) return; scheduleMsg(logger, "setting idle valve position %d", positionPercent); diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index 0f6e6bee39..b8a94fa45f 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -20,7 +20,10 @@ public: }; percent_t getIdlePosition(void); -void setIdleValvePosition(int positionPercent); + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX); +void setManualIdleValvePosition(int positionPercent); + void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); void setDefaultIdleParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE); void startIdleBench(void); diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index fc4cdff7b3..e06e6f91d1 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -1261,7 +1261,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"can_vss", setCanVss}, #endif /* EFI_CAN_SUPPORT */ #if EFI_IDLE_CONTROL - {"idle_position", setIdleValvePosition}, + {"idle_position", setManualIdleValvePosition}, {"idle_rpm", setTargetIdleRpm}, {"idle_dt", setIdleDT}, #endif /* EFI_IDLE_CONTROL */ diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index 9f48a11887..2552f2d68c 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -10,6 +10,7 @@ #include "dc_motor.h" #include "engine_controller.h" #include "sensor.h" +#include "idle_thread.h" #include "mocks.h" @@ -101,16 +102,23 @@ TEST(etb, initializationDcMotorIdleValveMode) { EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); +// todo: make this work! EXPECT_CALL(mocks[0], setIdlePosition(33.0f)); // We do not expect throttle #2 to be initialized doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); + + + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); } TEST(etb, idlePlumbing) { StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + engineConfiguration->useETBforIdleControl = true; + + Sensor::setMockValue(SensorType::AcceleratorPedal, 50.0f); for (int i = 0; i < ETB_COUNT; i++) { engine->etbControllers[i] = &mocks[i]; @@ -118,7 +126,7 @@ TEST(etb, idlePlumbing) { EXPECT_CALL(mocks[i], setIdlePosition(33.0f)); } - setEtbIdlePosition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); } TEST(etb, testSetpointOnlyPedal) {