diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index f79b5d0a00..2d76d49615 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -261,8 +261,8 @@ void Engine::OnTriggerStateDecodingError() { TRIGGER_WAVEFORM(expectedEventCount[0]), TRIGGER_WAVEFORM(expectedEventCount[1]), TRIGGER_WAVEFORM(expectedEventCount[2])); - triggerCentral.triggerState.lastDecodingErrorTime = getTimeNowNt(); - triggerCentral.triggerState.someSortOfTriggerError = true; + triggerCentral.triggerState.setTriggerErrorState(); + triggerCentral.triggerState.totalTriggerErrorCounter++; if (CONFIG(verboseTriggerSynchDetails) || (triggerCentral.triggerState.someSortOfTriggerError && !CONFIG(silentTriggerError))) { @@ -295,8 +295,7 @@ void Engine::OnTriggerInvalidIndex(int currentIndex) { // let's not show a warning if we are just starting to spin if (GET_RPM_VALUE != 0) { warning(CUSTOM_SYNC_ERROR, "sync error: index #%d above total size %d", currentIndex, triggerCentral.triggerShape.getSize()); - triggerCentral.triggerState.lastDecodingErrorTime = getTimeNowNt(); - triggerCentral.triggerState.someSortOfTriggerError = true; + triggerCentral.triggerState.setTriggerErrorState(); } } diff --git a/firmware/controllers/trigger/trigger_decoder.cpp b/firmware/controllers/trigger/trigger_decoder.cpp index bcd2bdd06a..c6ffb037c9 100644 --- a/firmware/controllers/trigger/trigger_decoder.cpp +++ b/firmware/controllers/trigger/trigger_decoder.cpp @@ -82,6 +82,11 @@ void TriggerState::resetTriggerState() { isFirstEvent = true; } +void TriggerState::setTriggerErrorState() { + lastDecodingErrorTime = getTimeNowNt(); + someSortOfTriggerError = true; +} + void TriggerState::resetCurrentCycleState() { memset(currentCycle.eventCount, 0, sizeof(currentCycle.eventCount)); memset(currentCycle.timeOfPreviousEventNt, 0, sizeof(currentCycle.timeOfPreviousEventNt)); diff --git a/firmware/controllers/trigger/trigger_decoder.h b/firmware/controllers/trigger/trigger_decoder.h index 5a049d17f9..25ded30b57 100644 --- a/firmware/controllers/trigger/trigger_decoder.h +++ b/firmware/controllers/trigger/trigger_decoder.h @@ -87,6 +87,8 @@ public: bool shaft_is_synchronized; efitick_t mostRecentSyncTime; + void setTriggerErrorState(); + efitick_t lastDecodingErrorTime; // the boolean flag is a performance optimization so that complex comparison is avoided if no error bool someSortOfTriggerError; diff --git a/unit_tests/tests/test_trigger_noiseless.cpp b/unit_tests/tests/test_trigger_noiseless.cpp index cd009ef492..ae8eedae63 100644 --- a/unit_tests/tests/test_trigger_noiseless.cpp +++ b/unit_tests/tests/test_trigger_noiseless.cpp @@ -21,7 +21,6 @@ #include "trigger_universal.h" extern bool printTriggerDebug; -extern float actualSynchGap; static void fireEvent(EngineTestHelper *eth, bool isRise) { // mostly we fire only rise events (useOnlyRisingEdgeForTrigger=true).