Skip to content

Commit c1eb9db

Browse files
committed
Implement isNitrousConditionSatisfied rusefi#6783
1 parent 31c67cc commit c1eb9db

File tree

4 files changed

+153
-0
lines changed

4 files changed

+153
-0
lines changed

firmware/controllers/algo/nitrous_control_state.txt

+1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ bit isCltConditionSatisfied
66
bit isMapConditionSatisfied
77
bit isAfrConditionSatisfied
88
bit isNitrousRpmConditionSatisfied
9+
bit isNitrousConditionSatisfied
910

1011
end_struct

firmware/controllers/algo/nitrous_controller.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ void NitrousController::update() {
1515
updateMapConditionSatisfied();
1616
updateAfrConditionSatisfied();
1717
updateRpmConditionSatisfied();
18+
isNitrousConditionSatisfied = (
19+
isArmed && isTpsConditionSatisfied && isCltConditionSatisfied && isMapConditionSatisfied
20+
&& isAfrConditionSatisfied && isNitrousRpmConditionSatisfied
21+
);
22+
} else {
23+
isNitrousConditionSatisfied = false;
1824
}
1925
}
2026

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
//
2+
// Created by kifir on 12/2/24.
3+
//
4+
5+
#include "pch.h"
6+
7+
#include "util/test_base.h"
8+
9+
namespace {
10+
class NitrousConditionTest : public TestBase {
11+
protected:
12+
static constexpr switch_input_pin_e TEST_NITROUS_CONTROL_ARMING_PIN = Gpio::A13;
13+
static constexpr int TEST_MIN_TPS = 34;
14+
static constexpr uint8_t TEST_MIN_CLT = 51;
15+
static constexpr int TEST_MAX_MAP = 45;
16+
17+
static constexpr float TEST_MAXIMUM_AFR = 12.3;
18+
static constexpr float TEST_LAMBDA1 = TEST_MAXIMUM_AFR / STOICH_RATIO;
19+
20+
static constexpr uint16_t TEST_ACTIVATION_RPM = 239;
21+
static constexpr uint16_t TEST_DEACTIVATION_RPM = 932;
22+
static constexpr uint16_t TEST_DEACTIVATION_RPM_WINDOW = 17;
23+
24+
void SetUp() override;
25+
26+
void satisfyAllConditions();
27+
private:
28+
void armNitrousControl();
29+
void satisfyTpsCondition();
30+
void satisfyCltCondition();
31+
void satisfyMapCondition();
32+
void satisfyAfrCondition();
33+
void satisfyRpmCondition();
34+
};
35+
36+
void NitrousConditionTest::SetUp() {
37+
TestBase::SetUp();
38+
39+
setUpEngineConfiguration(EngineConfig()
40+
.setNitrousControlEnabled({ true })
41+
.setNitrousControlArmingMethod({ DIGITAL_SWITCH_INPUT })
42+
.setNitrousControlTriggerPin({ TEST_NITROUS_CONTROL_ARMING_PIN })
43+
.setNitrousMinimumTps({ TEST_MIN_TPS })
44+
.setNitrousMinimumClt({ TEST_MIN_CLT })
45+
.setNitrousMaximumMap({ TEST_MAX_MAP })
46+
.setNitrousMaximumAfr({ TEST_MAXIMUM_AFR })
47+
.setNitrousActivationRpm({ TEST_ACTIVATION_RPM })
48+
.setNitrousDeactivationRpm({ TEST_DEACTIVATION_RPM })
49+
.setNitrousDeactivationRpmWindow({ TEST_DEACTIVATION_RPM_WINDOW })
50+
);
51+
52+
satisfyAllConditions();
53+
}
54+
55+
void NitrousConditionTest::satisfyAllConditions() {
56+
armNitrousControl();
57+
satisfyTpsCondition();
58+
satisfyCltCondition();
59+
satisfyMapCondition();
60+
satisfyAfrCondition();
61+
satisfyRpmCondition();
62+
63+
EXPECT_TRUE(engine->nitrousController.isNitrousRpmConditionSatisfied);
64+
}
65+
66+
void NitrousConditionTest::armNitrousControl() {
67+
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, true);
68+
periodicFastCallback();
69+
70+
EXPECT_TRUE(engine->nitrousController.isArmed);
71+
}
72+
73+
void NitrousConditionTest::satisfyTpsCondition() {
74+
updateApp(TEST_MIN_TPS);
75+
76+
EXPECT_TRUE(engine->nitrousController.isTpsConditionSatisfied);
77+
}
78+
79+
void NitrousConditionTest::satisfyCltCondition() {
80+
updateClt(TEST_MIN_CLT);
81+
82+
EXPECT_TRUE(engine->nitrousController.isCltConditionSatisfied);
83+
}
84+
85+
void NitrousConditionTest::satisfyMapCondition() {
86+
updateMap(TEST_MAX_MAP);
87+
88+
EXPECT_TRUE(engine->nitrousController.isMapConditionSatisfied);
89+
}
90+
91+
void NitrousConditionTest::satisfyAfrCondition() {
92+
updateLambda1(TEST_LAMBDA1);
93+
94+
EXPECT_TRUE(engine->nitrousController.isAfrConditionSatisfied);
95+
}
96+
97+
void NitrousConditionTest::satisfyRpmCondition() {
98+
updateRpm(TEST_ACTIVATION_RPM);
99+
100+
EXPECT_TRUE(engine->nitrousController.isNitrousRpmConditionSatisfied);
101+
}
102+
103+
TEST_F(NitrousConditionTest, checkWithoutArmedNitrousControl) {
104+
setMockState(TEST_NITROUS_CONTROL_ARMING_PIN, false);
105+
periodicFastCallback();
106+
107+
EXPECT_FALSE(engine->nitrousController.isArmed);
108+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
109+
}
110+
111+
TEST_F(NitrousConditionTest, checkWithoutSatisfiedTpsCondition) {
112+
updateApp(TEST_MIN_TPS - EPS5D);
113+
114+
EXPECT_FALSE(engine->nitrousController.isTpsConditionSatisfied);
115+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
116+
}
117+
118+
TEST_F(NitrousConditionTest, checkWithoutSatisfiedCltCondition) {
119+
updateClt(TEST_MIN_CLT - EPS5D);
120+
121+
EXPECT_FALSE(engine->nitrousController.isCltConditionSatisfied);
122+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
123+
}
124+
125+
TEST_F(NitrousConditionTest, checkWithoutSatisfiedMapCondition) {
126+
updateMap(TEST_MAX_MAP + EPS5D);
127+
128+
EXPECT_FALSE(engine->nitrousController.isMapConditionSatisfied);
129+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
130+
}
131+
132+
TEST_F(NitrousConditionTest, checkWithoutSatisfiedAfrCondition) {
133+
updateLambda1(TEST_LAMBDA1 + EPS5D);
134+
135+
EXPECT_FALSE(engine->nitrousController.isAfrConditionSatisfied);
136+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
137+
}
138+
139+
TEST_F(NitrousConditionTest, checkWithoutSatisfiedRpmCondition) {
140+
updateRpm(TEST_ACTIVATION_RPM - EPS5D);
141+
142+
EXPECT_FALSE(engine->nitrousController.isNitrousRpmConditionSatisfied);
143+
EXPECT_FALSE(engine->nitrousController.isNitrousConditionSatisfied);
144+
}
145+
}

unit_tests/tests/tests.mk

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ TESTS_SRC_CPP = \
7777
tests/nitrous_control/test_nitrous_map_condition.cpp \
7878
tests/nitrous_control/test_nitrous_afr_condition.cpp \
7979
tests/nitrous_control/test_nitrous_rpm_condition.cpp \
80+
tests/nitrous_control/test_nitrous_condition.cpp \
8081
tests/test_fft.cpp \
8182
tests/lua/test_lua_basic.cpp \
8283
tests/lua/test_bit_range_msb.cpp \

0 commit comments

Comments
 (0)