37 {
38 if (std::isnan(engineLoad)) {
40 return NAN;
41 }
42
44
45
47
53
55
56#if EFI_ANTILAG_SYSTEM
63 );
65 }
66#endif
67
68
71
76
77 advanceAngle += result.Value;
78 }
79
80
81#if EFI_IDLE_CONTROL
85
87 if (tps) {
88
89
90
91
93 advanceAngle =
interpolateClamped(idleThreshold / 2, idleAdvance, idleThreshold, advanceAngle, tps.Value);
94 }
95 }
96#endif
97
98#if EFI_IDLE_CONTROL
99
104 } else {
108 }
109#endif
110
111#if EFI_LAUNCH_CONTROL
118 if (smoothRetardStartRpm <= rpm) {
120
121 return interpolateClamped(smoothRetardStartRpm, advanceAngle, smoothRetardEndRpm, launchAngle, rpm);
122 } else {
123 return launchAngle;
124 }
125 }
127 return launchAngle;
128 }
129 }
132 ) {
134 }
137 }
138#endif
139
140#ifdef MODULE_VVL_CONTROLLER
142#endif
143
144 return advanceAngle;
145}
LaunchControlBase launchController
AntilagSystemBase antilagController
ShiftTorqueReductionController shiftTorqueReductionController
bool isIdlingOrTaper() const override
bool isCoastingAdvance() const override
static angle_t getInterpolatedIgnitionAngle(float rpm, float ignitionLoad)
static float getOrZero(SensorType type)
float getTorqueReductionIgnitionRetard()
float getTimingModifier() const
BlendResult calculateBlend(blend_table_s &cfg, float rpm, float load)
bool warning(ObdCode code, const char *fmt,...)
static Map3D< TRACTION_CONTROL_ETB_DROP_SLIP_SIZE, TRACTION_CONTROL_ETB_DROP_SPEED_SIZE, int8_t, uint16_t, uint8_t > tcTimingDropTable
static Map3D< TRACTION_CONTROL_ETB_DROP_SLIP_SIZE, TRACTION_CONTROL_ETB_DROP_SPEED_SIZE, int8_t, uint16_t, uint8_t > tcSparkSkipTable
scaled_channel< int16_t, 100, 1 > timingALSCorrection
float nitrousIgnitionRetard
bool launchControlEnabled
uint16_t launchCorrectionsEndRpm
bool nitrousControlEnabled
bool torqueReductionEnabled
bool useSeparateAdvanceForIdle
int16_t idlePidDeactivationTpsThreshold
float tractionControlSparkSkip
int16_t rpmForIgnitionTableDot
int16_t rpmForIgnitionIdleTableDot
scaled_channel< int16_t, 50, 1 > tractionAdvanceDrop
float loadForIgnitionTableDot
bool isPreLaunchCondition
scaled_channel< int16_t, 100, 1 > ignBlendOutput[IGN_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > ignBlendParameter[IGN_BLEND_COUNT]
scaled_channel< uint8_t, 2, 1 > ignBlendBias[IGN_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > ignBlendYAxis[IGN_BLEND_COUNT]
blend_table_s ignBlends[IGN_BLEND_COUNT]
uint16_t alsIgnRetardLoadBins[ALS_SIZE]
float idleAdvance[IDLE_ADVANCE_CURVE_SIZE]
scaled_channel< int16_t, 10, 1 > ALSTimingRetardTable[ALS_SIZE][ALS_RPM_SIZE]
uint16_t alsIgnRetardrpmBins[ALS_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
bool isFlatShiftConditionSatisfied