diff --git a/firmware/controllers/algo/antilag_system.cpp b/firmware/controllers/algo/antilag_system.cpp index 0807516b2e..45deda1ad0 100644 --- a/firmware/controllers/algo/antilag_system.cpp +++ b/firmware/controllers/algo/antilag_system.cpp @@ -59,6 +59,12 @@ bool AntilagSystemBase::isALSMaxThrottleIntentCondition() const { return engineConfiguration->ALSMaxTPS > throttleIntent; } +bool AntilagSystemBase::isInsideALSTimerCondition() { + auto ALStime = ALStimer.getElapsedSeconds(); + + return ALStime < engineConfiguration->ALSMaxDuration; +} + bool AntilagSystemBase::isAntilagConditionMet(int rpm) { @@ -68,19 +74,23 @@ bool AntilagSystemBase::isAntilagConditionMet(int rpm) { ALSMaxCLTCondition = isALSMaxCLTCondition(); ALSMaxThrottleIntentCondition = isALSMaxThrottleIntentCondition(); ALSSwitchCondition = isInsideALSSwitchCondition(); + ALSTimerCondition = isInsideALSTimerCondition(); return ALSMinRPMCondition && ALSMaxRPMCondition && ALSMinCLTCondition && ALSMaxCLTCondition && ALSMaxThrottleIntentCondition && - ALSSwitchCondition; + ALSSwitchCondition && + ALSTimerCondition; } void AntilagSystemBase::update() { int rpm = Sensor::getOrZero(SensorType::Rpm); isAntilagCondition = engineConfiguration->antiLagEnabled && isAntilagConditionMet(rpm); + if (!ALSMinRPMCondition) {ALStimer.reset();} + #if EFI_ANTILAG_SYSTEM fuelALSCorrection = getFuelALSCorrection(rpm); #endif // EFI_ANTILAG_SYSTEM diff --git a/firmware/controllers/algo/antilag_system.h b/firmware/controllers/algo/antilag_system.h index 179ec50174..6006591db0 100644 --- a/firmware/controllers/algo/antilag_system.h +++ b/firmware/controllers/algo/antilag_system.h @@ -22,6 +22,7 @@ public: bool isALSMaxCLTCondition() const; bool isALSMaxThrottleIntentCondition() const; bool isInsideALSSwitchCondition(); + bool isInsideALSTimerCondition(); /* enabled and all conditions above */ bool isAntilagConditionMet(int rpm); };