Rename fields to enhance `nitrous_control_state` view #6783

This commit is contained in:
kifir 2024-12-06 21:44:36 +02:00 committed by kifir23917
parent c2581cc7a6
commit 7f73b9b1f6
12 changed files with 61 additions and 64 deletions

View File

@ -123,9 +123,7 @@ angle_t getRunningAdvance(float rpm, float engineLoad) {
) { ) {
return engineConfiguration->torqueReductionIgnitionRetard; return engineConfiguration->torqueReductionIgnitionRetard;
} }
if (engineConfiguration->nitrousControlEnabled if (engineConfiguration->nitrousControlEnabled && engine->module<NitrousController>()->isNitrousCondition) {
&& engine->module<NitrousController>()->isNitrousConditionSatisfied
) {
advanceAngle -= engineConfiguration->nitrousIgnitionRetard; advanceAngle -= engineConfiguration->nitrousIgnitionRetard;
} }
#endif /* EFI_LAUNCH_CONTROL */ #endif /* EFI_LAUNCH_CONTROL */

View File

@ -1,12 +1,12 @@
struct_no_prefix nitrous_control_state_s struct_no_prefix nitrous_control_state_s
bit isArmed bit isNitrousArmed
bit isNitrousSpeedConditionSatisfied bit isNitrousSpeedCondition
bit isTpsConditionSatisfied bit isNitrousTpsCondition
bit isCltConditionSatisfied bit isNitrousCltCondition
bit isMapConditionSatisfied bit isNitrousMapCondition
bit isAfrConditionSatisfied bit isNitrousAfrCondition
bit isNitrousRpmConditionSatisfied bit isNitrousRpmCondition
bit isNitrousConditionSatisfied bit isNitrousCondition
end_struct end_struct

View File

@ -16,19 +16,19 @@ void NitrousController::onSlowCallback() {
updateMapConditionSatisfied(); updateMapConditionSatisfied();
updateAfrConditionSatisfied(); updateAfrConditionSatisfied();
updateRpmConditionSatisfied(); updateRpmConditionSatisfied();
isNitrousConditionSatisfied = ( isNitrousCondition = (
isArmed && isTpsConditionSatisfied && isNitrousSpeedConditionSatisfied && isCltConditionSatisfied isNitrousArmed && isNitrousSpeedCondition && isNitrousTpsCondition && isNitrousCltCondition
&& isMapConditionSatisfied && isAfrConditionSatisfied && isNitrousRpmConditionSatisfied && isNitrousMapCondition && isNitrousAfrCondition && isNitrousRpmCondition
); );
} else { } else {
isNitrousConditionSatisfied = false; isNitrousCondition = false;
} }
enginePins.nitrousRelay.setValue(isNitrousConditionSatisfied); enginePins.nitrousRelay.setValue(isNitrousCondition);
} }
float NitrousController::getFuelCoefficient() const { float NitrousController::getFuelCoefficient() const {
float result = 1.0f; float result = 1.0f;
if (engineConfiguration->nitrousControlEnabled && isNitrousConditionSatisfied) { if (engineConfiguration->nitrousControlEnabled && isNitrousCondition) {
result += engineConfiguration->nitrousFuelAdderPercent / 100.0f; result += engineConfiguration->nitrousFuelAdderPercent / 100.0f;
} }
return result; return result;
@ -37,15 +37,15 @@ float NitrousController::getFuelCoefficient() const {
void NitrousController::updateArmingState() { void NitrousController::updateArmingState() {
switch (engineConfiguration->nitrousControlArmingMethod) { switch (engineConfiguration->nitrousControlArmingMethod) {
case DIGITAL_SWITCH_INPUT: { case DIGITAL_SWITCH_INPUT: {
isArmed = checkTriggerPinState(); isNitrousArmed = checkTriggerPinState();
break; break;
} }
case LUA_GAUGE: { case LUA_GAUGE: {
isArmed = checkLuaGauge(); isNitrousArmed = checkLuaGauge();
break; break;
} }
default: { // Unexpected value!!! default: { // Unexpected value!!!
isArmed = false; isNitrousArmed = false;
break; break;
} }
} }
@ -54,37 +54,36 @@ void NitrousController::updateArmingState() {
void NitrousController::updateSpeedConditionSatisfied() { void NitrousController::updateSpeedConditionSatisfied() {
if (engineConfiguration->nitrousMinimumVehicleSpeed != 0) { if (engineConfiguration->nitrousMinimumVehicleSpeed != 0) {
const expected<float> speed = Sensor::get(SensorType::VehicleSpeed); const expected<float> speed = Sensor::get(SensorType::VehicleSpeed);
isNitrousSpeedConditionSatisfied = isNitrousSpeedCondition = speed.Valid && (engineConfiguration->nitrousMinimumVehicleSpeed <= speed.Value);
speed.Valid && (engineConfiguration->nitrousMinimumVehicleSpeed <= speed.Value);
} else { } else {
isNitrousSpeedConditionSatisfied = true; isNitrousSpeedCondition = true;
} }
} }
void NitrousController::updateTpsConditionSatisfied() { void NitrousController::updateTpsConditionSatisfied() {
if (engineConfiguration->nitrousMinimumTps != 0) { if (engineConfiguration->nitrousMinimumTps != 0) {
const expected<float> tps = Sensor::get(SensorType::DriverThrottleIntent); const expected<float> tps = Sensor::get(SensorType::DriverThrottleIntent);
isTpsConditionSatisfied = tps.Valid && (engineConfiguration->nitrousMinimumTps <= tps.Value); isNitrousTpsCondition = tps.Valid && (engineConfiguration->nitrousMinimumTps <= tps.Value);
} else { } else {
isTpsConditionSatisfied = true; isNitrousTpsCondition = true;
} }
} }
void NitrousController::updateCltConditionSatisfied() { void NitrousController::updateCltConditionSatisfied() {
if (engineConfiguration->nitrousMinimumClt != 0) { if (engineConfiguration->nitrousMinimumClt != 0) {
const expected<float> clt = Sensor::get(SensorType::Clt); const expected<float> clt = Sensor::get(SensorType::Clt);
isCltConditionSatisfied = clt.Valid && (engineConfiguration->nitrousMinimumClt <= clt.Value); isNitrousCltCondition = clt.Valid && (engineConfiguration->nitrousMinimumClt <= clt.Value);
} else { } else {
isCltConditionSatisfied = true; isNitrousCltCondition = true;
} }
} }
void NitrousController::updateMapConditionSatisfied() { void NitrousController::updateMapConditionSatisfied() {
if (engineConfiguration->nitrousMaximumMap != 0) { if (engineConfiguration->nitrousMaximumMap != 0) {
const expected<float> map = Sensor::get(SensorType::Map); const expected<float> map = Sensor::get(SensorType::Map);
isMapConditionSatisfied = map.Valid && (map.Value <= engineConfiguration->nitrousMaximumMap); isNitrousMapCondition = map.Valid && (map.Value <= engineConfiguration->nitrousMaximumMap);
} else { } else {
isMapConditionSatisfied = true; isNitrousMapCondition = true;
} }
} }
@ -93,12 +92,12 @@ void NitrousController::updateAfrConditionSatisfied() {
const expected<float> lambda1 = Sensor::get(SensorType::Lambda1); const expected<float> lambda1 = Sensor::get(SensorType::Lambda1);
if (lambda1.Valid) { if (lambda1.Valid) {
const float afr = lambda1.Value * STOICH_RATIO; const float afr = lambda1.Value * STOICH_RATIO;
isAfrConditionSatisfied = (afr <= static_cast<float>(engineConfiguration->nitrousMaximumAfr)); isNitrousAfrCondition = (afr <= static_cast<float>(engineConfiguration->nitrousMaximumAfr));
} else { } else {
isAfrConditionSatisfied = false; isNitrousAfrCondition = false;
} }
} else { } else {
isAfrConditionSatisfied = true; isNitrousAfrCondition = true;
} }
} }
@ -115,12 +114,12 @@ void NitrousController::updateRpmConditionSatisfied() {
engineConfiguration->nitrousDeactivationRpm, engineConfiguration->nitrousDeactivationRpm,
engineConfiguration->nitrousDeactivationRpmWindow engineConfiguration->nitrousDeactivationRpmWindow
)) { )) {
isNitrousRpmConditionSatisfied = false; isNitrousRpmCondition = false;
} else { } else {
isNitrousRpmConditionSatisfied = (engineConfiguration->nitrousActivationRpm <= rpm); isNitrousRpmCondition = (engineConfiguration->nitrousActivationRpm <= rpm);
} }
} else { } else {
isNitrousRpmConditionSatisfied = false; isNitrousRpmCondition = false;
} }
} }

View File

@ -31,43 +31,43 @@ void NitrousTestBase::armNitrousControl() {
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, true); setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, true);
periodicSlowCallback(); periodicSlowCallback();
EXPECT_TRUE(getModule<NitrousController>().isArmed); EXPECT_TRUE(getModule<NitrousController>().isNitrousArmed);
} }
void NitrousTestBase::satisfySpeedCondition() { void NitrousTestBase::satisfySpeedCondition() {
updateVehicleSpeed(TEST_MIN_VEHICLE_SPEED, &TestBase::periodicSlowCallback); updateVehicleSpeed(TEST_MIN_VEHICLE_SPEED, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isNitrousSpeedConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousSpeedCondition);
} }
void NitrousTestBase::satisfyTpsCondition() { void NitrousTestBase::satisfyTpsCondition() {
updateApp(TEST_MIN_TPS, &TestBase::periodicSlowCallback); updateApp(TEST_MIN_TPS, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isTpsConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousTpsCondition);
} }
void NitrousTestBase::satisfyCltCondition() { void NitrousTestBase::satisfyCltCondition() {
updateClt(TEST_MIN_CLT, &TestBase::periodicSlowCallback); updateClt(TEST_MIN_CLT, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isCltConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousCltCondition);
} }
void NitrousTestBase::satisfyMapCondition() { void NitrousTestBase::satisfyMapCondition() {
updateMap(TEST_MAX_MAP, &TestBase::periodicSlowCallback); updateMap(TEST_MAX_MAP, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isMapConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousMapCondition);
} }
void NitrousTestBase::satisfyAfrCondition() { void NitrousTestBase::satisfyAfrCondition() {
updateLambda1(TEST_LAMBDA1, &TestBase::periodicSlowCallback); updateLambda1(TEST_LAMBDA1, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isAfrConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousAfrCondition);
} }
void NitrousTestBase::satisfyRpmCondition() { void NitrousTestBase::satisfyRpmCondition() {
updateRpm(TEST_ACTIVATION_RPM, &TestBase::periodicSlowCallback); updateRpm(TEST_ACTIVATION_RPM, &TestBase::periodicSlowCallback);
EXPECT_TRUE(getModule<NitrousController>().isNitrousRpmConditionSatisfied); EXPECT_TRUE(getModule<NitrousController>().isNitrousRpmCondition);
} }
void NitrousTestBase::activateNitrousControl() { void NitrousTestBase::activateNitrousControl() {
@ -84,43 +84,43 @@ void NitrousTestBase::unarmNitrousControl() {
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false); setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
periodicSlowCallback(); periodicSlowCallback();
EXPECT_FALSE(getModule<NitrousController>().isArmed); EXPECT_FALSE(getModule<NitrousController>().isNitrousArmed);
} }
void NitrousTestBase::unsatisfySpeedCondition() { void NitrousTestBase::unsatisfySpeedCondition() {
updateVehicleSpeed(TEST_MIN_VEHICLE_SPEED - EPS5D, &TestBase::periodicSlowCallback); updateVehicleSpeed(TEST_MIN_VEHICLE_SPEED - EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isNitrousSpeedConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousSpeedCondition);
} }
void NitrousTestBase::unsatisfyTpsCondition() { void NitrousTestBase::unsatisfyTpsCondition() {
updateApp(TEST_MIN_TPS - EPS5D, &TestBase::periodicSlowCallback); updateApp(TEST_MIN_TPS - EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isTpsConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousTpsCondition);
} }
void NitrousTestBase::unsatisfyCltCondition() { void NitrousTestBase::unsatisfyCltCondition() {
updateClt(TEST_MIN_CLT - EPS5D, &TestBase::periodicSlowCallback); updateClt(TEST_MIN_CLT - EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isCltConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousCltCondition);
} }
void NitrousTestBase::unsatisfyMapCondition() { void NitrousTestBase::unsatisfyMapCondition() {
updateMap(TEST_MAX_MAP + EPS5D, &TestBase::periodicSlowCallback); updateMap(TEST_MAX_MAP + EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isMapConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousMapCondition);
} }
void NitrousTestBase::unsatisfyAfrCondition() { void NitrousTestBase::unsatisfyAfrCondition() {
updateLambda1(TEST_LAMBDA1 + EPS5D, &TestBase::periodicSlowCallback); updateLambda1(TEST_LAMBDA1 + EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isAfrConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousAfrCondition);
} }
void NitrousTestBase::unsatisfyRpmCondition() { void NitrousTestBase::unsatisfyRpmCondition() {
updateRpm(TEST_ACTIVATION_RPM - EPS5D, &TestBase::periodicSlowCallback); updateRpm(TEST_ACTIVATION_RPM - EPS5D, &TestBase::periodicSlowCallback);
EXPECT_FALSE(getModule<NitrousController>().isNitrousRpmConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousRpmCondition);
} }
void NitrousTestBase::deactivateNitrousControl() { void NitrousTestBase::deactivateNitrousControl() {
@ -134,6 +134,6 @@ void NitrousTestBase::deactivateNitrousControl() {
} }
void NitrousTestBase::checkNitrousCondition(const bool expected, const char* const context) { void NitrousTestBase::checkNitrousCondition(const bool expected, const char* const context) {
EXPECT_EQ(getModule<NitrousController>().isNitrousConditionSatisfied, expected) << context; EXPECT_EQ(getModule<NitrousController>().isNitrousCondition, expected) << context;
EXPECT_EQ(enginePins.nitrousRelay.getLogicValue(), expected) << context; EXPECT_EQ(enginePins.nitrousRelay.getLogicValue(), expected) << context;
} }

View File

@ -28,7 +28,7 @@ namespace {
void NitrousAfrConditionTest::checkAfrCondition(const std::vector<AfrConditionTestData>& testData) { void NitrousAfrConditionTest::checkAfrCondition(const std::vector<AfrConditionTestData>& testData) {
for (const AfrConditionTestData& item: testData) { for (const AfrConditionTestData& item: testData) {
updateLambda1(item.lambda1, &TestBase::periodicSlowCallback); updateLambda1(item.lambda1, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isAfrConditionSatisfied, item.expectedAfrCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousAfrCondition, item.expectedAfrCondition)
<< item.context; << item.context;
} }
} }

View File

@ -28,7 +28,7 @@ namespace {
void NitrousArmingTest::checkArmingAfterPeriodicFastCallback(const bool shouldBeArmed, const char* const context) { void NitrousArmingTest::checkArmingAfterPeriodicFastCallback(const bool shouldBeArmed, const char* const context) {
periodicSlowCallback(); periodicSlowCallback();
EXPECT_EQ(getModule<NitrousController>().isArmed, shouldBeArmed) << context; EXPECT_EQ(getModule<NitrousController>().isNitrousArmed, shouldBeArmed) << context;
} }
TEST_F(NitrousArmingTest, checkDefault) { TEST_F(NitrousArmingTest, checkDefault) {

View File

@ -25,7 +25,7 @@ namespace {
void NitrousCltConditionTest::checkCltCondition(const std::vector<CltConditionTestData>& testData) { void NitrousCltConditionTest::checkCltCondition(const std::vector<CltConditionTestData>& testData) {
for (const CltConditionTestData& item: testData) { for (const CltConditionTestData& item: testData) {
updateClt(item.clt, &TestBase::periodicSlowCallback); updateClt(item.clt, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isCltConditionSatisfied, item.expectedCltCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousCltCondition, item.expectedCltCondition)
<< item.context; << item.context;
} }
} }

View File

@ -17,13 +17,13 @@ namespace {
setUpTestConfiguration(); setUpTestConfiguration();
EXPECT_FALSE(getModule<NitrousController>().isArmed); EXPECT_FALSE(getModule<NitrousController>().isNitrousArmed);
EXPECT_FALSE(getModule<NitrousController>().isNitrousSpeedConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousSpeedCondition);
EXPECT_FALSE(getModule<NitrousController>().isTpsConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousTpsCondition);
EXPECT_FALSE(getModule<NitrousController>().isCltConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousCltCondition);
EXPECT_FALSE(getModule<NitrousController>().isMapConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousMapCondition);
EXPECT_FALSE(getModule<NitrousController>().isAfrConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousAfrCondition);
EXPECT_FALSE(getModule<NitrousController>().isNitrousRpmConditionSatisfied); EXPECT_FALSE(getModule<NitrousController>().isNitrousRpmCondition);
checkNitrousCondition(false, "No conditions are satisfied"); checkNitrousCondition(false, "No conditions are satisfied");

View File

@ -23,7 +23,7 @@ namespace {
void NitrousMapConditionTest::checkMapCondition(const std::vector<MapConditionTestData>& testData) { void NitrousMapConditionTest::checkMapCondition(const std::vector<MapConditionTestData>& testData) {
for (const MapConditionTestData& item: testData) { for (const MapConditionTestData& item: testData) {
updateMap(item.map, &TestBase::periodicSlowCallback); updateMap(item.map, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isMapConditionSatisfied, item.expectedMapCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousMapCondition, item.expectedMapCondition)
<< item.context; << item.context;
} }
} }

View File

@ -46,7 +46,7 @@ namespace {
void NitrousRpmConditionTest::checkRpmCondition(const std::vector<RpmConditionTestData>& testData) { void NitrousRpmConditionTest::checkRpmCondition(const std::vector<RpmConditionTestData>& testData) {
for (const RpmConditionTestData& item: testData) { for (const RpmConditionTestData& item: testData) {
updateRpm(item.rpm, &TestBase::periodicSlowCallback); updateRpm(item.rpm, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isNitrousRpmConditionSatisfied, item.expectedRpmCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousRpmCondition, item.expectedRpmCondition)
<< item.context; << item.context;
} }
} }

View File

@ -25,7 +25,7 @@ namespace {
void NitrousSpeedConditionTest::checkSpeedCondition(const std::vector<SpeedConditionTestData>& testData) { void NitrousSpeedConditionTest::checkSpeedCondition(const std::vector<SpeedConditionTestData>& testData) {
for (const SpeedConditionTestData& item: testData) { for (const SpeedConditionTestData& item: testData) {
updateVehicleSpeed(item.speed, &TestBase::periodicSlowCallback); updateVehicleSpeed(item.speed, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isNitrousSpeedConditionSatisfied, item.expectedSpeedCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousSpeedCondition, item.expectedSpeedCondition)
<< item.context; << item.context;
} }
} }

View File

@ -25,7 +25,7 @@ namespace {
void NitrousTpsConditionTest::checkTpsCondition(const std::vector<TpsConditionTestData>& testData) { void NitrousTpsConditionTest::checkTpsCondition(const std::vector<TpsConditionTestData>& testData) {
for (const TpsConditionTestData& item: testData) { for (const TpsConditionTestData& item: testData) {
updateApp(item.tps, &TestBase::periodicSlowCallback); updateApp(item.tps, &TestBase::periodicSlowCallback);
EXPECT_EQ(getModule<NitrousController>().isTpsConditionSatisfied, item.expectedTpsCondition) EXPECT_EQ(getModule<NitrousController>().isNitrousTpsCondition, item.expectedTpsCondition)
<< item.context; << item.context;
} }
} }