diff --git a/firmware/controllers/engine_controller.h b/firmware/controllers/engine_controller.h index 549f439067..2617bf8a9a 100644 --- a/firmware/controllers/engine_controller.h +++ b/firmware/controllers/engine_controller.h @@ -30,7 +30,7 @@ void setMockAfrVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockMafVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockIatVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); void setMockCltVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX); -void setMockState(brain_pin_e pin, bool state DECLARE_ENGINE_PARAMETER_SUFFIX); +void setMockState(brain_pin_e pin, bool state); void printCurrentState(Logging *logging, int seconds, const char *engineTypeName, const char *firmwareBuildId); diff --git a/firmware/controllers/engine_controller_misc.cpp b/firmware/controllers/engine_controller_misc.cpp index 5d92a8b9b4..61e5a63d47 100644 --- a/firmware/controllers/engine_controller_misc.cpp +++ b/firmware/controllers/engine_controller_misc.cpp @@ -75,8 +75,8 @@ void setMockVBattVoltage(float voltage DECLARE_ENGINE_PARAMETER_SUFFIX) { setMockVoltage(engineConfiguration->vbattAdcChannel, voltage PASS_ENGINE_PARAMETER_SUFFIX); } -void setMockState(brain_pin_e pin, bool state DECLARE_ENGINE_PARAMETER_SUFFIX) { -#if ! EFI_PROD_CODE +void setMockState(brain_pin_e pin, bool state) { +#if EFI_UNIT_TEST mockPinStates[static_cast(pin)] = state; #endif } diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index db520898be..237988273b 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -11,6 +11,7 @@ #include "efi_gpio.h" #include "drivers/gpio/gpio_ext.h" #include "perf_trace.h" +#include "engine_controller.h" #if EFI_GPIO_HARDWARE #include "pin_repository.h" @@ -75,19 +76,17 @@ bool RegisteredOutputPin::isPinConfigurationChanged() { pin_output_mode_e newMode = *(pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset])); return curPin != newPin || curMode != newMode; #else - return false; + return true; #endif // EFI_PROD_CODE } -void RegisteredOutputPin::init() { -#if EFI_PROD_CODE +void RegisteredOutputPin::init(DECLARE_ENGINE_PARAMETER_SIGNATURE) { brain_pin_e newPin = *(brain_pin_e *) ((void *) (&((char*) engineConfiguration)[pinOffset])); pin_output_mode_e *newMode = (pin_output_mode_e *) ((void *) (&((char*) engineConfiguration)[pinModeOffset])); if (isPinConfigurationChanged()) { this->initPin(registrationName, newPin, newMode); } -#endif // EFI_PROD_CODE } void RegisteredOutputPin::unregister() { @@ -176,6 +175,7 @@ EnginePins::EnginePins() : if ((outputPin)->currentLogicValue != (logicValue)) { \ (outputPin)->currentLogicValue = (logicValue); \ } \ + setMockState((outputPin)->brainPin, logicValue); \ } #endif /* EFI_PROD_CODE */ @@ -228,7 +228,7 @@ void EnginePins::startPins(DECLARE_ENGINE_PARAMETER_SIGNATURE) { RegisteredOutputPin * pin = registeredOutputHead; while (pin != nullptr) { - pin->init(); + pin->init(PASS_ENGINE_PARAMETER_SIGNATURE); pin = pin->next; } } @@ -471,6 +471,10 @@ void OutputPin::initPin(const char *msg, brain_pin_e brainPin) { } void OutputPin::initPin(const char *msg, brain_pin_e brainPin, const pin_output_mode_e *outputMode) { +#if EFI_UNIT_TEST + this->brainPin = brainPin; +#endif + #if EFI_GPIO_HARDWARE && EFI_PROD_CODE if (brainPin == GPIO_UNASSIGNED) return; diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index 2b189861cd..d729336dd6 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -35,7 +35,7 @@ TEST(idle, fsioPidParameters) { applyFsioExpression(QUOTE(MAGIC_OFFSET_FOR_IDLE_MIN_VALUE), "ac_on_switch 0 cfg_acIdleExtraMin if" PASS_ENGINE_PARAMETER_SUFFIX); ASSERT_EQ(1, hasAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); - setMockState(engineConfiguration->acSwitch, true PASS_ENGINE_PARAMETER_SUFFIX); + setMockState(engineConfiguration->acSwitch, true); timeNowUs += MS2US(15); ASSERT_TRUE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); @@ -43,7 +43,7 @@ TEST(idle, fsioPidParameters) { ASSERT_EQ(40, getIdlePidOffset(PASS_ENGINE_PARAMETER_SIGNATURE)); ASSERT_EQ(30, getIdlePidMinValue(PASS_ENGINE_PARAMETER_SIGNATURE)); - setMockState(engineConfiguration->acSwitch, false PASS_ENGINE_PARAMETER_SUFFIX); + setMockState(engineConfiguration->acSwitch, false); timeNowUs += MS2US(15); ASSERT_FALSE(getAcToggle(PASS_ENGINE_PARAMETER_SIGNATURE)); diff --git a/unit_tests/tests/test_start_stop.cpp b/unit_tests/tests/test_start_stop.cpp index b59f6b3b8e..6ff7e02c6d 100644 --- a/unit_tests/tests/test_start_stop.cpp +++ b/unit_tests/tests/test_start_stop.cpp @@ -11,9 +11,18 @@ TEST(start, startStop) { WITH_ENGINE_TEST_HELPER(BMW_M73_PROTEUS); // this is a pull-up, so 'true' on start-up - setMockState(engineConfiguration->startStopButtonPin, true PASS_ENGINE_PARAMETER_SUFFIX); + setMockState(engineConfiguration->startStopButtonPin, true); - ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), 0); + ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), false); slowStartStopButtonCallback(PASS_ENGINE_PARAMETER_SIGNATURE); + ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), false); + + + eth.smartMoveTimeForwardSeconds(10); + // inverted since pull-up + setMockState(engineConfiguration->startStopButtonPin, false); + slowStartStopButtonCallback(PASS_ENGINE_PARAMETER_SIGNATURE); + ASSERT_EQ(efiReadPin(engineConfiguration->starterControlPin), true); + }