From 33df88d3f7f7d67843a6ad95b83e30952bb0d24d Mon Sep 17 00:00:00 2001 From: Andrey Date: Fri, 21 Jan 2022 00:21:45 -0500 Subject: [PATCH] fixing NOISY_RPM handling via Sensor framework --- firmware/controllers/engine_cycle/main_trigger_callback.cpp | 2 +- firmware/controllers/engine_cycle/rpm_calculator.cpp | 4 +--- firmware/controllers/engine_cycle/rpm_calculator.h | 3 --- unit_tests/tests/trigger/test_cam_vvt_input.cpp | 2 +- 4 files changed, 3 insertions(+), 8 deletions(-) diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index 68e60bf14b..f06823694d 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -384,7 +384,7 @@ void mainTriggerCallback(uint32_t trgEventIndex, efitick_t edgeTimestamp) { return; } - int rpm = GET_RPM(); + int rpm = engine->rpmCalculator.getRpm(); if (rpm == 0) { // this happens while we just start cranking diff --git a/firmware/controllers/engine_cycle/rpm_calculator.cpp b/firmware/controllers/engine_cycle/rpm_calculator.cpp index 300d553638..95f149e6fe 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.cpp +++ b/firmware/controllers/engine_cycle/rpm_calculator.cpp @@ -111,12 +111,10 @@ void RpmCalculator::assignRpmValue(float floatRpmValue) { // TODO: RPM should eventually switch to floating point across the ECU rpmValue = efiRound(floatRpmValue, 1); + setValidValue(floatRpmValue, 0); // 0 for current time since RPM sensor never times out if (rpmValue <= 0) { oneDegreeUs = NAN; - setValidValue(0, 0); // 0 for current time since RPM sensor never times out } else { - setValidValue(floatRpmValue, 0); // 0 for current time since RPM sensor never times out - // here it's really important to have more precise float RPM value, see #796 oneDegreeUs = getOneDegreeTimeUs(floatRpmValue); if (previousRpmValue == 0) { diff --git a/firmware/controllers/engine_cycle/rpm_calculator.h b/firmware/controllers/engine_cycle/rpm_calculator.h index c4e5cc6b3c..3616c5a113 100644 --- a/firmware/controllers/engine_cycle/rpm_calculator.h +++ b/firmware/controllers/engine_cycle/rpm_calculator.h @@ -153,9 +153,6 @@ private: Timer engineStartTimer; }; -// Just a getter for rpmValue -#define GET_RPM() ( engine->rpmCalculator.getRpm() ) - #define isValidRpm(rpm) ((rpm) > 0 && (rpm) < UNREALISTIC_RPM) void rpmShaftPositionCallback(trigger_event_e ckpSignalType, uint32_t index, efitick_t edgeTimestamp); diff --git a/unit_tests/tests/trigger/test_cam_vvt_input.cpp b/unit_tests/tests/trigger/test_cam_vvt_input.cpp index 13614e9e2d..ac621e9286 100644 --- a/unit_tests/tests/trigger/test_cam_vvt_input.cpp +++ b/unit_tests/tests/trigger/test_cam_vvt_input.cpp @@ -72,7 +72,7 @@ TEST(trigger, testNoisyInput) { eth.firePrimaryTriggerRise(); eth.firePrimaryTriggerFall(); // error condition since events happened too quick while time does not move - ASSERT_EQ(NOISY_RPM, GET_RPM()) << "testNoisyInput RPM should be noisy"; + ASSERT_EQ(NOISY_RPM, Sensor::getOrZero(SensorType::Rpm)) << "testNoisyInput RPM should be noisy"; ASSERT_EQ( 2, unitTestWarningCodeState.recentWarnings.getCount()) << "warningCounter#testNoisyInput"; ASSERT_EQ(CUSTOM_SYNC_COUNT_MISMATCH, unitTestWarningCodeState.recentWarnings.get(0)) << "@0";