44 return stftDisabledSettings;
49 return stftDisabledTuning;
54 return stftDisabledRPM;
59 return stftDisabledCrankingDelay;
64 if (!
clt.Valid ||
clt.Value < cfg.minClt) {
65 return stftDisabledClt;
81 if (!afr || afr < cfg.minAfr || afr > cfg.maxAfr) {
82 return stftDisabledAfrOurOfRange;
87 if (timeSinceDfco < engineConfiguration->noFuelTrimAfterDfcoTime) {
88 return stftDisabledDFCO;
93 if (timeSinceAccel < engineConfiguration->noFuelTrimAfterAccelTime) {
94 return stftDisabledTpsAccel;
100 if (timeSinceFuelCut < 2) {
101 return stftDisabledFuelCut;
108 for (
size_t bank = 0; bank < FT_BANK_COUNT; bank++) {
109 for (
size_t bin = 0; bin < STFT_CELL_COUNT; bin++) {
122 for (
size_t bank = 0; bank < FT_BANK_COUNT; bank++) {
132 for (
size_t bank = 0; bank < FT_BANK_COUNT; bank++) {
144 result.
banks[bank] = cell.getAdjustment();
168 const bool result =
false;
bool gt(float lhs, float rhs)
bool lt(float lhs, float rhs)
FuelComputer fuelComputer
RpmCalculator rpmCalculator
TunerStudioOutputChannels outputChannels
constexpr auto & module()
virtual SensorResult get() const =0
static float getOrZero(SensorType type)
FuelingBank banks[FT_BANK_COUNT]
stft_state_e getLearningState(SensorType sensor)
bool needsDelayedShutoff() override
Deadband< 2 > loadDeadband
Deadband< 2 > overrunDeadband
void init(stft_s *stftCfg)
void onSlowCallback() override
size_t computeStftBin(float rpm, float load, stft_s &cfg)
Deadband< 25 > idleDeadband
SensorType getSensorForBankIndex(size_t index)
ClosedLoopFuelResult getCorrection(float rpm, float fuelLoad)
stft_state_e getCorrectionState()
bool checkIfTuningVeNow()
bool checkIfTuningVeNow()
static EngineAccessor engine
static constexpr engine_configuration_s * engineConfiguration
static Lps25Sensor sensor(device)
static CCM_OPTIONAL FunctionalSensor clt(SensorType::Clt, MS2NT(10))
float banks[FT_BANK_COUNT]
ClosedLoopFuelCellImpl cells[STFT_CELL_COUNT]
bool stftIgnoreErrorMagnitude
bool fuelClosedLoopCorrectionEnabled
float timeSinceCrankingInSecs
stft_state_e stftCorrectionState
uint8_t stftLearningBinIdx
stft_state_e stftLearningState[FT_BANK_COUNT]
float stftInputError[FT_BANK_COUNT]
uint8_t stftCorrectionBinIdx
scaled_channel< uint8_t, 10, 1 > deadband
scaled_channel< uint8_t, 1, 50 > maxIdleRegionRpm
stft_cell_cfg_s cellCfgs[STFT_CELL_COUNT]