diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index f1c764c8ac..94169f3e35 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -81,6 +81,8 @@ protected: trigger_type_e getType() const override; }; +#define DEFAULT_MOCK_SPEED -1 + class Engine final : public TriggerStateListener { public: DECLARE_ENGINE_PTR; @@ -104,6 +106,12 @@ public: GearControllerBase *gearController; + + float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour + + efitick_t vssLastSignalTimeNt = 0; + efitick_t vssDiff = 0; + efitick_t mostRecentSparkEvent; efitick_t mostRecentTimeBetweenSparkEvents; efitick_t mostRecentIgnitionEvent; diff --git a/firmware/hw_layer/vehicle_speed.cpp b/firmware/hw_layer/vehicle_speed.cpp index 16694eae76..068df71e38 100644 --- a/firmware/hw_layer/vehicle_speed.cpp +++ b/firmware/hw_layer/vehicle_speed.cpp @@ -7,9 +7,6 @@ #include "vehicle_speed.h" -#define DEFAULT_MOCK_SPEED -1 - -static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour #if EFI_VEHICLE_SPEED @@ -19,18 +16,12 @@ static float mockVehicleSpeed = DEFAULT_MOCK_SPEED; // in kilometers per hour #include "pin_repository.h" #include "can_vss.h" - -// todo: move from static into Engine GOD object in order for tests reset -static efitick_t lastSignalTimeNt = 0; -static efitick_t vssDiff = 0; - - /** * @return vehicle speed, in kilometers per hour */ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - if (mockVehicleSpeed != DEFAULT_MOCK_SPEED) - return mockVehicleSpeed; + if (engine->mockVehicleSpeed != DEFAULT_MOCK_SPEED) + return engine->mockVehicleSpeed; #if EFI_CAN_SUPPORT if (CONFIG(enableCanVss)) { return getVehicleCanSpeed(); @@ -39,18 +30,18 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) { if (!hasVehicleSpeedSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) return 0; efitick_t nowNt = getTimeNowNt(); - if (nowNt - lastSignalTimeNt > NT_PER_SECOND) + if (nowNt - engine->vssLastSignalTimeNt > NT_PER_SECOND) return 0; // previous signal time is too long ago - we are stopped - return engineConfiguration->vehicleSpeedCoef * NT_PER_SECOND / vssDiff; + return engineConfiguration->vehicleSpeedCoef * NT_PER_SECOND / engine->vssDiff; } // todo: make this method public and invoke this method from test void vsCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { engine->engineState.vssEventCounter++; efitick_t nowNt = getTimeNowNt(); - vssDiff = nowNt - lastSignalTimeNt; - lastSignalTimeNt = nowNt; + engine->vssDiff = nowNt - engine->vssLastSignalTimeNt; + engine->vssLastSignalTimeNt = nowNt; } #if ! EFI_UNIT_TEST @@ -67,7 +58,7 @@ static void speedInfo(void) { engineConfiguration->vehicleSpeedCoef, engine->engineState.vssEventCounter, getVehicleSpeed(PASS_ENGINE_PARAMETER_SIGNATURE)); - efiPrintf("vss diff %d", vssDiff); + efiPrintf("vss diff %d", engine->vssDiff); } #endif // EFI_UNIT_TEST @@ -136,7 +127,7 @@ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE) { -void setMockVehicleSpeed(float speedKPH) { - mockVehicleSpeed = speedKPH; +void setMockVehicleSpeed(float speedKPH DECLARE_ENGINE_PARAMETER_SUFFIX) { + engine->mockVehicleSpeed = speedKPH; } diff --git a/firmware/hw_layer/vehicle_speed.h b/firmware/hw_layer/vehicle_speed.h index fb300806bf..c5b93fa4d3 100644 --- a/firmware/hw_layer/vehicle_speed.h +++ b/firmware/hw_layer/vehicle_speed.h @@ -14,7 +14,7 @@ */ float getVehicleSpeed(DECLARE_ENGINE_PARAMETER_SIGNATURE); void initVehicleSpeed(); -void setMockVehicleSpeed(float speedKPH); +void setMockVehicleSpeed(float speedKPH DECLARE_ENGINE_PARAMETER_SUFFIX); bool hasVehicleSpeedSensor(DECLARE_ENGINE_PARAMETER_SIGNATURE); void stopVSSPins(void); void startVSSPins(void); diff --git a/unit_tests/tests/test_dynoview.cpp b/unit_tests/tests/test_dynoview.cpp index 35d73a2e5b..736c42d389 100644 --- a/unit_tests/tests/test_dynoview.cpp +++ b/unit_tests/tests/test_dynoview.cpp @@ -30,11 +30,11 @@ TEST(DynoView, VSS_T1) { engineConfiguration->vehicleWeight = 900; eth.moveTimeForwardMs(50); - setMockVehicleSpeed(18.0); + setMockVehicleSpeed(18.0 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(ICU); eth.moveTimeForwardAndInvokeEventsSec(20); - setMockVehicleSpeed(126.0); + setMockVehicleSpeed(126.0 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(ICU); ASSERT_EQ(1.5, dut.getAcceleration()); @@ -50,7 +50,7 @@ TEST(DynoView, algo) { engineConfiguration->vehicleWeight = 900; //to capture vss - setMockVehicleSpeed(35*3.6); + setMockVehicleSpeed(35*3.6 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(ICU); dut.setAcceleration(1.5); @@ -76,12 +76,12 @@ TEST(DynoView, VSS_fast) { engine->rpmCalculator.mockRpm = 2200; eth.moveTimeForwardMs(50); - setMockVehicleSpeed(50.0); + setMockVehicleSpeed(50.0 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(CAN); //delay 50ms eth.moveTimeForwardMs(50); - setMockVehicleSpeed(50.252); + setMockVehicleSpeed(50.252 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(CAN); ASSERT_EQ(1259, dut.getEngineForce()); @@ -100,12 +100,12 @@ TEST(DynoView, VSS_Torque) { engine->rpmCalculator.mockRpm = 2200; eth.moveTimeForwardMs(50); - setMockVehicleSpeed(80.0); + setMockVehicleSpeed(80.0 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(CAN); //delay 50ms eth.moveTimeForwardMs(50); - setMockVehicleSpeed(80.504); + setMockVehicleSpeed(80.504 PASS_ENGINE_PARAMETER_SUFFIX); dut.update(CAN); ASSERT_EQ(242, dut.getEngineTorque()); diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index 375b8dea96..374cf1a8e1 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -425,7 +425,7 @@ TEST(idle_v2, IntegrationManual) { float expectedClt = 37; Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::Clt, expectedClt); - setMockVehicleSpeed(15); + setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX); ENGINE(rpmCalculator.mockRpm) = 950; // Target of 1000 rpm @@ -460,7 +460,7 @@ TEST(idle_v2, IntegrationAutomatic) { float expectedClt = 37; Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::Clt, expectedClt); - setMockVehicleSpeed(15); + setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX); ENGINE(rpmCalculator.mockRpm) = 950; // Target of 1000 rpm @@ -498,7 +498,7 @@ TEST(idle_v2, IntegrationClamping) { float expectedClt = 37; Sensor::setMockValue(SensorType::DriverThrottleIntent, expectedTps.Value); Sensor::setMockValue(SensorType::Clt, expectedClt); - setMockVehicleSpeed(15); + setMockVehicleSpeed(15 PASS_ENGINE_PARAMETER_SUFFIX); ENGINE(rpmCalculator.mockRpm) = 950; // Target of 1000 rpm diff --git a/unit_tests/tests/test_launch.cpp b/unit_tests/tests/test_launch.cpp index b1b7b23628..e54ffee1e8 100644 --- a/unit_tests/tests/test_launch.cpp +++ b/unit_tests/tests/test_launch.cpp @@ -37,10 +37,10 @@ TEST(LaunchControl, VSSCondition) { engineConfiguration->launchActivationMode = ALWAYS_ACTIVE_LAUNCH; engineConfiguration->launchSpeedTreshold = 30; engineConfiguration->launchDisableBySpeed = 1; - setMockVehicleSpeed(10); + setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX); EXPECT_TRUE(dut.isInsideSpeedCondition()); - setMockVehicleSpeed(40); + setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX); EXPECT_FALSE(dut.isInsideSpeedCondition()); } @@ -116,7 +116,7 @@ TEST(LaunchControl, CombinedCondition) { //valid TPS Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f); - setMockVehicleSpeed(10); + setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX); engine->rpmCalculator.mockRpm = 1200; EXPECT_FALSE(dut.isLaunchConditionMet(1200)); @@ -124,7 +124,7 @@ TEST(LaunchControl, CombinedCondition) { engine->rpmCalculator.mockRpm = 3200; EXPECT_TRUE(dut.isLaunchConditionMet(3200)); - setMockVehicleSpeed(40); + setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX); EXPECT_FALSE(dut.isLaunchConditionMet(3200)); } @@ -148,7 +148,7 @@ TEST(LaunchControl, CompleteRun) { //valid TPS Sensor::setMockValue(SensorType::DriverThrottleIntent, 20.0f); - setMockVehicleSpeed(10); + setMockVehicleSpeed(10 PASS_ENGINE_PARAMETER_SUFFIX); engine->rpmCalculator.mockRpm = 1200; //update condition check @@ -186,7 +186,7 @@ TEST(LaunchControl, CompleteRun) { EXPECT_TRUE(spark); EXPECT_FALSE(fuel); - setMockVehicleSpeed(40); + setMockVehicleSpeed(40 PASS_ENGINE_PARAMETER_SUFFIX); updateLaunchConditions(PASS_ENGINE_PARAMETER_SIGNATURE); spark = false; fuel = false;