77 return InjectorNonlinearMode::INJ_None;
92 float baroKpa = baro.Value;
94 if (!baro || baro.Value > 120 || baro.Value < 50) {
95 baroKpa = STD_ATMOSPHERE;
99 case ICM_FixedRailPressure:
103 - map.value_or(STD_ATMOSPHERE);
104 case ICM_SensedRailPressure: {
118 case FPM_Differential:
126 return fps.Value + baroKpa - map.Value;
133 return fps.Value - map.Value;
135 }
default:
return unexpected;
142 if (compensationMode == ICM_None || compensationMode == ICM_HPFP_Manual_Compensation) {
148 if (referencePressure < 50) {
150 criticalError(
"Impossible fuel reference pressure: %f", referencePressure);
178 return interpolate3d(
187 if (fuelMassGram <= 0) {
199 if (fuelMassGram <= 0) {
256 case INJ_PolynomialAdder:
276 for (
size_t i = 0; i < efi::size(is); i++) {
281 return baseDuration + adder;
floatms_t getBaseDurationImpl(float fuelMassGram) const
float getFuelMassForDuration(floatms_t duration) const override
virtual float getInjectorFlowRatio()=0
virtual float getBaseFlowRate() const =0
virtual float getSmallPulseFlowRate() const =0
float m_smallPulseBreakPoint
virtual floatms_t correctInjectionPolynomial(float floatms_t) const
float m_smallPulseFlowRate
virtual float getSmallPulseBreakPoint() const =0
virtual InjectorNonlinearMode getNonlinearMode() const =0
floatms_t getInjectionDuration(float fuelMassGram) const override
expected< float > getFuelPressure() const override
InjectorModelWithConfig(const injector_s *const cfg)
void updateState() override
const injector_s *const m_cfg
virtual float getFuelReferencePressure() const =0
virtual injector_compensation_mode_e getInjectorCompensationMode() const =0
float getBaseFlowRate() const override
float getInjectorFlowRatio() override
floatms_t getInjectionDuration(float fuelMassGram) const override
expected< float > getFuelDifferentialPressure() const override
floatms_t getDeadtime() const override
virtual bool hasSensor() const
virtual SensorResult get() const =0
static constexpr persistent_config_s * config
static constexpr engine_configuration_s * engineConfiguration
bool warning(ObdCode code, const char *fmt,...)
constexpr float fuelDensity
constexpr float convertToGramsPerSecond(float ccPerMinute)
@ OBD_Fuel_Pressure_Sensor_Missing
injector_compensation_mode_e
virtual floatms_t getDeadtime() const =0
float getSmallPulseBreakPoint() const override
float getSmallPulseFlowRate() const override
float getFuelReferencePressure() const final
InjectorNonlinearMode getNonlinearMode() const override
injector_compensation_mode_e getInjectorCompensationMode() const final
InjectorNonlinearMode getNonlinearMode() const override
float getFuelReferencePressure() const final
float getSmallPulseFlowRate() const override
float getSmallPulseBreakPoint() const override
injector_compensation_mode_e getInjectorCompensationMode() const final
float fuelReferencePressure
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseSlope
float injectorCorrectionPolynomial[8]
injector_compensation_mode_e secondaryInjectorCompensationMode
scaled_channel< uint16_t, 1000, 1 > applyNonlinearBelowPulse
float secondaryInjectorFuelReferencePressure
scaled_channel< uint16_t, 1000, 1 > fordInjectorSmallPulseBreakPoint
bool useInjectorFlowLinearizationTable
injector_compensation_mode_e injectorCompensationMode
InjectorNonlinearMode injectorNonlinearMode
bool injectorFlowAsMassFlow
fuel_pressure_sensor_mode_e fuelPressureSensorMode
float pressureCorrectionReference
scaled_channel< int16_t, 100, 1 > battLagCorrBattBins[VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint32_t, 10, 1 > battLagCorrPressBins[VBAT_INJECTOR_CURVE_PRESSURE_SIZE]
scaled_channel< int16_t, 100, 1 > battLagCorrTable[VBAT_INJECTOR_CURVE_PRESSURE_SIZE][VBAT_INJECTOR_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > injectorFlowLinearizationPressureBins[FLOW_LINEARIZATION_PRESSURE_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearization[FLOW_LINEARIZATION_PRESSURE_SIZE][FLOW_LINEARIZATION_MASS_SIZE]
scaled_channel< uint16_t, 100, 1 > injectorFlowLinearizationFuelMassBins[FLOW_LINEARIZATION_MASS_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensation[HPFP_FUEL_MASS_COMPENSATION_SIZE][HPFP_FUEL_MASS_COMPENSATION_SIZE]