15#define NO_PIN_PERIOD 500
17#if defined(HAS_OS_ACCESS)
18#error "Unexpected OS ACCESS HERE"
39 pid_s*
const pidParams
102#if EFI_ENGINE_CONTROL
112 target += result.Value;
119 if (temperatureAdder.has_value()) {
120 target += temperatureAdder.value();
144#if EFI_ENGINE_CONTROL
154 openLoop += result.Value;
161 openLoop += gearAdder;
194 return m_pid.
getOutput(target, manifoldPressure, FAST_CALLBACK_PERIOD_MS / 1000.0f);
203 if (cltBoostMultiplier.has_value()) {
204 result *= cltBoostMultiplier.value();
207 if (iatBoostMultiplier.has_value()) {
208 result *= iatBoostMultiplier.value();
216 if (iatBoostAdder.has_value()) {
217 if (result.has_value()) {
218 result.value() += iatBoostAdder.value();
220 result = iatBoostAdder;
231 if (temperature.Valid) {
232 const std::optional<float> boostCorrection = correctionCurve.
getValue(temperature.Value);
233 if (boostCorrection.has_value()) {
234 return std::make_optional<float>(boostCorrection.value());
269#if EFI_ELECTRONIC_THROTTLE_BODY
312 for (
int loadIndex = 0; loadIndex < BOOST_LOAD_COUNT; loadIndex++) {
313 for (
int rpmIndex = 0; rpmIndex < BOOST_RPM_COUNT; rpmIndex++) {
354 bool hasAnyEtbWastegate =
false;
void setDefaultBoostParameters()
bool isBoostControlSolenoidMode()
const ValueProvider3D * m_closedLoopTargetMap
const ValueProvider2D * m_cltBoostCorrMap
expected< percent_t > getClosedLoop(float target, float manifoldPressure) override
void setOutput(expected< percent_t > outputValue) override
const ValueProvider2D * m_iatBoostCorrMap
float getBoostControlDutyCycleWithTemperatureCorrections(const float rpm, const float driverIntent) const
percent_t getClosedLoopImpl(float target, float manifoldPressure)
std::optional< float > getBoostControlTargetTemperatureAdder() const
void setDefaultConfiguration() override
std::optional< float > getBoostTemperatureCorrection(const SensorType sensorType, const ValueProvider2D &correctionCurve) const
const ValueProvider2D * m_iatBoostAdderMap
const ValueProvider3D * m_openLoopMap
expected< percent_t > getOpenLoop(float target) override
const ValueProvider2D * m_cltBoostAdderMap
expected< float > getSetpoint() override
void onConfigurationChange(engine_configuration_s const *previousConfig) override
expected< float > observePlant() override
void init(IPwm *const pmw, const ValueProvider3D *const openLoopMap, const ValueProvider3D *const closedLoopTargetMap, const ValueProvider2D &cltMultiplierProvider, const ValueProvider2D &iatMultiplierProvider, const ValueProvider2D &cltAdderProvider, const ValueProvider2D &iatAdderProvider, pid_s *const pidParams)
void onFastCallback() override
SingleTimerExecutor scheduler
TunerStudioOutputChannels outputChannels
constexpr auto & module()
RegisteredOutputPin boostPin
bool isSame(const pid_s *parameters) const
void postState(pid_status_s &pidStatus) const
void initPidClass(pid_s *parameters)
float getOutput(float target, float input)
virtual SensorResult get() const =0
static float getOrZero(SensorType type)
virtual std::optional< float > getValue(float x) const =0
virtual float getValue(float xColumn, float yRow) const =0
void setEtbWastegatePosition(percent_t pos)
static EngineAccessor engine
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
BlendResult calculateBlend(blend_table_s &cfg, float rpm, float load)
expected< float > readGppwmChannel(gppwm_channel_e channel)
static ProxySensor driverIntent(SensorType::DriverThrottleIntent)
UNUSED(samplingTimeSeconds)
@ OBD_PCM_Processor_Fault
bool isBrainPinValid(brain_pin_e brainPin)
void startSimplePwm(SimplePwm *state, const char *msg, Scheduler *executor, OutputPin *output, float frequency, float dutyCycle, pwm_gen_callback *callback)
expected< float > SensorResult
virtual void setSimplePwmDutyCycle(float dutyCycle)=0
scaled_channel< int16_t, 30, 1 > boostControlTarget
bool isBelowClosedLoopThreshold
scaled_channel< int16_t, 100, 1 > boostOutput
scaled_channel< int8_t, 2, 1 > boostControllerClosedLoopPart
scaled_channel< int16_t, 2, 1 > luaTargetAdd
output_pin_e boostControlPin
uint8_t boostControlSafeDutyCycle
dc_function_e etbFunctions[ETB_COUNT]
uint8_t boostControlMinTps
bool isBoostControlEnabled
pin_output_mode_e boostControlPinMode
scaled_channel< uint8_t, 2, 1 > boostCutPressureHyst
gppwm_channel_e boostOpenLoopYAxis
uint16_t minimumBoostClosedLoopMap
scaled_channel< int8_t, 2, 1 > gearBasedOpenLoopBoostAdder[TCU_GEAR_COUNT]
uint16_t boostControlMinRpm
uint16_t boostControlMinMap
scaled_channel< int16_t, 10, 1 > boostClosedLoopBlendYAxis[BOOST_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > boostClosedLoopBlendParameter[BOOST_BLEND_COUNT]
scaled_channel< uint8_t, 2, 1 > boostClosedLoopBlendBias[BOOST_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > boostOpenLoopBlendParameter[BOOST_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > boostClosedLoopBlendOutput[BOOST_BLEND_COUNT]
scaled_channel< uint8_t, 2, 1 > boostOpenLoopBlendBias[BOOST_BLEND_COUNT]
int8_t boostOpenLoopBlendOutput[BOOST_BLEND_COUNT]
scaled_channel< int16_t, 10, 1 > boostOpenLoopBlendYAxis[BOOST_BLEND_COUNT]
float iatBoostCorr[BOOST_CURVE_SIZE]
blend_table_s boostOpenLoopBlends[BOOST_BLEND_COUNT]
float cltBoostCorr[BOOST_CURVE_SIZE]
float cltBoostAdderBins[BOOST_CURVE_SIZE]
float iatBoostAdder[BOOST_CURVE_SIZE]
uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT]
float iatBoostAdderBins[BOOST_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
float cltBoostAdder[BOOST_CURVE_SIZE]
scaled_channel< uint8_t, 1, 2 > boostTableClosedLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
float cltBoostCorrBins[BOOST_CURVE_SIZE]
scaled_channel< uint8_t, 2, 1 > boostTableOpenLoop[BOOST_LOAD_COUNT][BOOST_RPM_COUNT]
float iatBoostCorrBins[BOOST_CURVE_SIZE]
uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT]
blend_table_s boostClosedLoopBlends[BOOST_BLEND_COUNT]
void setRpmTableBin(TValue(&array)[TSize])
void setLinearCurve(TValue(&array)[TSize], float from, float to, float precision=0.01f)