diff --git a/firmware/controllers/algo/launch_control.cpp b/firmware/controllers/algo/launch_control.cpp index 838966ff6f..6a81155a1f 100644 --- a/firmware/controllers/algo/launch_control.cpp +++ b/firmware/controllers/algo/launch_control.cpp @@ -73,22 +73,30 @@ bool LaunchControlBase::isInsideTpsCondition() const { return engineConfiguration->launchTpsThreshold < tps.Value; } +LaunchCondition LaunchControlBase::calculateRPMLaunchCondition(const int rpm) const { + const int launchRpm = engineConfiguration->launchRpm; + if (rpm < launchRpm) { + return LaunchCondition::NotMet; + } else { + return LaunchCondition::Launch; + } +} + /** * Condition is true as soon as we are above LaunchRpm */ -LaunchCondition LaunchControlBase::isInsideRPMCondition(int rpm) const { - int launchRpm = engineConfiguration->launchRpm; - return (launchRpm < rpm) ? LaunchCondition::Launch : LaunchCondition::NotMet; +bool LaunchControlBase::isInsideRPMCondition(const int rpm) const { + const LaunchCondition rpmLaunchCondition = calculateRPMLaunchCondition(rpm); + return rpmLaunchCondition == LaunchCondition::Launch; } -LaunchCondition LaunchControlBase::isLaunchConditionMet(int rpm) { - LaunchCondition rpmLaunchCondition = isInsideRPMCondition(rpm); +bool LaunchControlBase::isLaunchConditionMet(const int rpm) { activateSwitchCondition = isInsideSwitchCondition(); - rpmCondition = (rpmLaunchCondition == LaunchCondition::Launch); + rpmCondition = isInsideRPMCondition(rpm); speedCondition = isInsideSpeedCondition(); tpsCondition = isInsideTpsCondition(); - return ((speedCondition && activateSwitchCondition && tpsCondition) == true) ? rpmLaunchCondition : LaunchCondition::NotMet; + return speedCondition && activateSwitchCondition && rpmCondition && tpsCondition; } LaunchControlBase::LaunchControlBase() { @@ -107,7 +115,7 @@ void LaunchControlBase::update() { } int rpm = Sensor::getOrZero(SensorType::Rpm); - combinedConditions = isLaunchConditionMet(rpm) == LaunchCondition::Launch; + combinedConditions = isLaunchConditionMet(rpm); //and still recalculate in case user changed the values retardThresholdRpm = engineConfiguration->launchRpm diff --git a/firmware/controllers/algo/launch_control.h b/firmware/controllers/algo/launch_control.h index 6591448d4a..9d74b683e0 100644 --- a/firmware/controllers/algo/launch_control.h +++ b/firmware/controllers/algo/launch_control.h @@ -27,8 +27,9 @@ public: bool isInsideSpeedCondition() const; bool isInsideTpsCondition() const; bool isInsideSwitchCondition(); - LaunchCondition isInsideRPMCondition(int rpm) const; - LaunchCondition isLaunchConditionMet(int rpm); + LaunchCondition calculateRPMLaunchCondition(int rpm) const; + bool isInsideRPMCondition(int rpm) const; + bool isLaunchConditionMet(int rpm); bool isLaunchSparkRpmRetardCondition() const; bool isLaunchFuelRpmRetardCondition() const; diff --git a/unit_tests/tests/test_launch.cpp b/unit_tests/tests/test_launch.cpp index 0ee3dde814..542e39e8cc 100644 --- a/unit_tests/tests/test_launch.cpp +++ b/unit_tests/tests/test_launch.cpp @@ -78,9 +78,9 @@ TEST(LaunchControl, RPMCondition) { engineConfiguration->launchRpm = 3000; - EXPECT_EQ(dut.isInsideRPMCondition(2900), LaunchCondition::NotMet); + EXPECT_EQ(dut.calculateRPMLaunchCondition(2900), LaunchCondition::NotMet); - EXPECT_EQ(dut.isInsideRPMCondition(3100), LaunchCondition::Launch); + EXPECT_EQ(dut.calculateRPMLaunchCondition(3100), LaunchCondition::Launch); } TEST(LaunchControl, SwitchInputCondition) { @@ -141,13 +141,13 @@ TEST(LaunchControl, CombinedCondition) { Sensor::setMockValue(SensorType::VehicleSpeed, 10.0); Sensor::setMockValue(SensorType::Rpm, 1200); - EXPECT_EQ(dut.isLaunchConditionMet(1200), LaunchCondition::NotMet); + EXPECT_FALSE(dut.isLaunchConditionMet(1200)); - Sensor::setMockValue(SensorType::Rpm, 3200); - EXPECT_EQ(dut.isLaunchConditionMet(3200), LaunchCondition::Launch); + Sensor::setMockValue(SensorType::Rpm, 3200); + EXPECT_TRUE(dut.isLaunchConditionMet(3200)); Sensor::setMockValue(SensorType::VehicleSpeed, 40.0); - EXPECT_EQ(dut.isLaunchConditionMet(3200), LaunchCondition::NotMet); + EXPECT_FALSE(dut.isLaunchConditionMet(3200)); }