From 98e886e00b9baf32c86ebaf6b7e0a4b839ba901d Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Nov 2022 20:36:03 -0500 Subject: [PATCH] mock invalid & current state of ETB error counter --- firmware/controllers/sensors/sensor.cpp | 18 ++++++++++++++++++ firmware/controllers/sensors/sensor.h | 3 +++ .../tests/actuators/test_etb_integrated.cpp | 17 ++++++++++++++--- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/firmware/controllers/sensors/sensor.cpp b/firmware/controllers/sensors/sensor.cpp index 6639ed5b31..d6c5a88c07 100644 --- a/firmware/controllers/sensors/sensor.cpp +++ b/firmware/controllers/sensors/sensor.cpp @@ -11,9 +11,15 @@ public: return m_sensor; } + void setInvalidMockValue() { + m_useMock = true; + m_valid = false; + } + void setMockValue(float value, bool mockRedundant) { m_mockValue = value; m_useMock = true; + m_valid = true; m_mockRedundant = mockRedundant; } @@ -47,6 +53,9 @@ public: SensorResult get() const { // Check if mock if (m_useMock) { + if (!m_valid) { + return unexpected; + } return m_mockValue; } @@ -111,6 +120,7 @@ public: private: bool m_useMock = false; + bool m_valid = false; bool m_mockRedundant = false; float m_mockValue; Sensor* m_sensor = nullptr; @@ -185,6 +195,14 @@ void Sensor::unregister() { return entry ? entry->hasSensor() : false; } +void Sensor::setInvalidMockValue(SensorType type) { + auto entry = getEntryForType(type); + + if (entry) { + entry->setInvalidMockValue(); + } +} + /*static*/ void Sensor::setMockValue(SensorType type, float value, bool mockRedundant) { auto entry = getEntryForType(type); diff --git a/firmware/controllers/sensors/sensor.h b/firmware/controllers/sensors/sensor.h index 744775b2a3..31ebd7a646 100644 --- a/firmware/controllers/sensors/sensor.h +++ b/firmware/controllers/sensors/sensor.h @@ -113,6 +113,9 @@ public: */ static void setMockValue(SensorType type, float value, bool mockRedundant = false); + + static void setInvalidMockValue(SensorType type); + /* * Mock a value for a particular sensor. */ diff --git a/unit_tests/tests/actuators/test_etb_integrated.cpp b/unit_tests/tests/actuators/test_etb_integrated.cpp index eb6c65f285..c70397e28b 100644 --- a/unit_tests/tests/actuators/test_etb_integrated.cpp +++ b/unit_tests/tests/actuators/test_etb_integrated.cpp @@ -12,8 +12,6 @@ static EtbController * initEtbIntegratedTest() { engineConfiguration->throttlePedalPositionAdcChannel = EFI_ADC_3; engineConfiguration->throttlePedalPositionSecondAdcChannel = EFI_ADC_3; - Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 40); - Sensor::setMockValue(SensorType::AcceleratorPedalSecondary, 40); Sensor::setMockValue(SensorType::Tps1, 25.0f, true); @@ -26,6 +24,9 @@ TEST(etb, integrated) { EngineTestHelper eth(TEST_ENGINE); // we have a distractor so cannot move EngineTestHelper into utility method EtbController *etb = initEtbIntegratedTest(); + Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 40); + Sensor::setMockValue(SensorType::AcceleratorPedalSecondary, 40); + etb->update(); ASSERT_EQ(engine->outputChannels.etbTarget, 40); @@ -51,8 +52,18 @@ TEST(etb, integratedTpsJitter) { ASSERT_FALSE(isTps1Error()); ASSERT_FALSE(isTps2Error()); - ASSERT_FALSE(isPedalError()); + ASSERT_TRUE(isPedalError()); etb->update(); + Sensor::setInvalidMockValue(SensorType::AcceleratorPedal); + ASSERT_TRUE(isPedalError()); + etb->update(); + + ASSERT_EQ(1, etb->etbInputErrorCounter); + + Sensor::setInvalidMockValue(SensorType::Tps1); + etb->update(); + + ASSERT_EQ(1, etb->etbInputErrorCounter); }