521 {
523 return false;
524 }
526 return false;
527 }
529 criticalError("Broken ETB min/max %d %d",
532 return false;
533 }
534
538 return false;
539 }
540#if EFI_PROD_CODE && (BOARD_MC33810_COUNT > 0)
544 }
548 }
550 if (maxConfiguredCorr * maxConfiguredDwell > maxAllowedDwell) {
551 criticalError("Dwell=%.2f/corr=%.2f while 33810 limit %d", maxConfiguredDwell, maxConfiguredCorr, maxAllowedDwell);
552 }
553
554#endif
557 return false;
558 }
559
562
563#if EFI_ENGINE_CONTROL
564
565 {
568
571
574
577
580
582
585
588
591
593
596 }
597
598
599 {
601
606
609
612 }
613
616#endif
617
624
625
626
628
629
634
635
643
646
648 continue;
649 }
651 }
652
653#if EFI_BOOST_CONTROL
654
658#endif
659
660#if EFI_ANTILAG_SYSTEM
661
666#endif
667
668#if EFI_ELECTRONIC_THROTTLE_BODY
669
672#endif
673
680
683
684 }
685
686
690 }
691
692#if CAM_INPUTS_COUNT != 1
696 }
697#endif
698
701 }
702
703 return true;
704}
void defaultsOrFixOnBurn()
void ensureArrayIsAscendingOrDefault(const char *msg, const TValue(&values)[TSize])
void ensureArrayIsAscending(const char *msg, const TValue(&values)[TSize])
static constexpr persistent_config_s * config
PUBLIC_API_WEAK bool validateBoardConfig()
static bool validateGdi()
int getMc33810maxDwellTimer(mc33810maxDwellTimer_e value)
bool isBrainPinValid(brain_pin_e brainPin)
uint8_t tractionControlSpeedBins[TRACTION_CONTROL_ETB_DROP_SPEED_SIZE]
vr_threshold_s vrThreshold[VR_THRESHOLD_COUNT]
bool enableOilPressureProtect
mc33810maxDwellTimer_e mc33810maxDwellTimer
uint8_t etbMaximumPosition
scaled_channel< uint16_t, 100, 1 > tractionControlSlipBins[TRACTION_CONTROL_ETB_DROP_SLIP_SIZE]
brain_input_pin_e camInputs[CAM_INPUTS_COUNT]
scaled_channel< uint8_t, 10, 1 > etbMinimumPosition
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< uint8_t, 2, 1 > hpfpLobeProfileQuantityBins[HPFP_LOBE_PROFILE_SIZE]
uint16_t injectorStagingRpmBins[INJ_STAGING_COUNT]
scaled_channel< int16_t, 1, 1 > cltIdleRpmBins[CLT_CURVE_SIZE]
uint16_t alsIgnRetardLoadBins[ALS_SIZE]
uint16_t veLoadBins[VE_LOAD_COUNT]
scaled_channel< uint8_t, 1, 100 > iacCoastingRpmBins[CLT_CURVE_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpFuelMassCompensationFuelPressure[HPFP_FUEL_MASS_COMPENSATION_SIZE]
uint16_t injectorStagingLoadBins[INJ_STAGING_COUNT]
uint16_t alsFuelAdjustmentLoadBins[ALS_SIZE]
uint8_t pedalToTpsPedalBins[PEDAL_TO_TPS_SIZE]
uint16_t ignTrimRpmBins[IGN_TRIM_SIZE]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE]
float cltIdleCorrBins[CLT_IDLE_TABLE_CLT_SIZE]
float crankingFuelBins[CRANKING_CURVE_SIZE]
uint16_t injPhaseRpmBins[INJ_PHASE_RPM_COUNT]
float mafDecodingBins[MAF_DECODING_COUNT]
scaled_channel< uint16_t, 1000, 1 > fuelLevelBins[FUEL_LEVEL_TABLE_COUNT]
uint8_t idleVeLoadBins[IDLE_VE_SIZE]
uint16_t injPhaseLoadBins[INJ_PHASE_LOAD_COUNT]
uint16_t sparkDwellRpmBins[DWELL_CURVE_SIZE]
uint16_t ignitionLoadBins[IGN_LOAD_COUNT]
uint16_t fuelTrimRpmBins[FUEL_TRIM_SIZE]
uint8_t hpfpDeadtimeVoltsBins[HPFP_DEADTIME_SIZE]
uint16_t lambdaRpmBins[FUEL_RPM_COUNT]
scaled_channel< uint8_t, 1, 50 > hpfpTargetRpmBins[HPFP_TARGET_SIZE]
float scriptCurve6Bins[SCRIPT_CURVE_8]
scaled_channel< uint8_t, 50, 1 > dwellVoltageCorrValues[DWELL_CURVE_SIZE]
uint16_t boostOpenLoopLoadBins[BOOST_LOAD_COUNT]
uint16_t vvtTable1RpmBins[VVT_TABLE_SIZE]
float scriptCurve4Bins[SCRIPT_CURVE_8]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE]
uint16_t vvtTable2RpmBins[VVT_TABLE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[MAP_EST_LOAD_COUNT]
float scriptCurve5Bins[SCRIPT_CURVE_8]
scaled_channel< uint8_t, 1, 100 > boostRpmBins[BOOST_RPM_COUNT]
float tpsTpsAccelFromRpmBins[TPS_TPS_ACCEL_TABLE]
uint16_t ignitionRpmBins[IGN_RPM_COUNT]
float scriptCurve2Bins[SCRIPT_CURVE_16]
int8_t ignitionIatCorrTempBins[IAT_IGN_CORR_COUNT]
scaled_channel< int16_t, 1, 1 > ignitionCltCorrTempBins[CLT_TIMING_CURVE_SIZE]
uint16_t fuelTrimLoadBins[FUEL_TRIM_SIZE]
uint16_t alsIgnRetardrpmBins[ALS_SIZE]
float cltFuelCorrBins[CLT_FUEL_CURVE_SIZE]
float cltBoostCorrBins[BOOST_CURVE_SIZE]
scaled_channel< uint8_t, 1, 100 > rpmIdleCorrBins[CLT_IDLE_TABLE_RPM_SIZE]
float scriptCurve3Bins[SCRIPT_CURVE_8]
scaled_channel< uint8_t, 1, 100 > pedalToTpsRpmBins[PEDAL_TO_TPS_RPM_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_SIZE]
scaled_channel< uint8_t, 1, 50 > idleAdvanceBins[IDLE_ADVANCE_CURVE_SIZE]
float scriptCurve1Bins[SCRIPT_CURVE_16]
float iatBoostCorrBins[BOOST_CURVE_SIZE]
int16_t crankingCycleFuelCltBins[CRANKING_CYCLE_CLT_SIZE]
float iatFuelCorrBins[IAT_CURVE_SIZE]
uint16_t veRpmBins[VE_RPM_COUNT]
uint16_t boostClosedLoopLoadBins[BOOST_LOAD_COUNT]
uint16_t vvtTable2LoadBins[VVT_TABLE_SIZE]
scaled_channel< uint8_t, 1, 5 > ignitionIatCorrLoadBins[IAT_IGN_CORR_LOAD_COUNT]
float crankingCycleBins[CRANKING_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > hpfpFuelMassCompensationFuelMass[HPFP_FUEL_MASS_COMPENSATION_SIZE]
float tpsTpsAccelToRpmBins[TPS_TPS_ACCEL_TABLE]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT]
float crankingTpsBins[CRANKING_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
scaled_channel< uint8_t, 1, 5 > ignitionCltCorrLoadBins[CLT_TIMING_CURVE_SIZE]
uint16_t ignTrimLoadBins[IGN_TRIM_SIZE]
uint16_t alsFuelAdjustmentrpmBins[ALS_SIZE]
uint16_t lambdaLoadBins[FUEL_LOAD_COUNT]