519 {
521 return false;
522 }
523#if defined(HW_HELLEN_UAEFI)
524
526#endif
528 return false;
529 }
531 criticalError("Broken ETB min/max %d %d",
534 return false;
535 }
536
540 return false;
541 }
542#if EFI_PROD_CODE && (BOARD_MC33810_COUNT > 0)
546 }
550 }
552 if (maxConfiguredCorr * maxConfiguredDwell > maxAllowedDwell) {
553 criticalError("Dwell=%.2f/corr=%.2f while 33810 limit %d", maxConfiguredDwell, maxConfiguredCorr, maxAllowedDwell);
554 }
555
556#endif
559 return false;
560 }
561
564
565#if EFI_ENGINE_CONTROL
566
567 {
570
573
576
579
582
584
587
590
593
595
598 }
599
600
601 {
603
608
611
614 }
615
618#endif
619
626
627
628
630
631
636
637
645
648
650 continue;
651 }
653 }
654
655#if EFI_BOOST_CONTROL
656
660#endif
661
662#if EFI_ANTILAG_SYSTEM
663
668#endif
669
670#if EFI_ELECTRONIC_THROTTLE_BODY
671
674#endif
675
682
685
686 }
687
688
692 }
693
694#if CAM_INPUTS_COUNT != 1
698 }
699#endif
700
703 }
704
705 return true;
706}
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]
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 alsIgnRetardrpmBins[ALS_RPM_SIZE]
uint16_t vvtTable2RpmBins[VVT_TABLE_RPM_SIZE]
uint16_t ignTrimRpmBins[IGN_TRIM_SIZE]
scaled_channel< uint8_t, 1, 50 > hpfpCompensationRpmBins[HPFP_COMPENSATION_RPM_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 alsFuelAdjustmentrpmBins[ALS_RPM_SIZE]
uint16_t lambdaRpmBins[FUEL_RPM_COUNT]
scaled_channel< uint8_t, 1, 10 > idleVeRpmBins[IDLE_VE_SIZE_RPM]
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]
float scriptCurve4Bins[SCRIPT_CURVE_8]
scaled_channel< uint8_t, 1, 50 > tpsTspCorrValuesBins[TPS_TPS_ACCEL_CLT_CORR_TABLE]
uint16_t vvtTable1LoadBins[VVT_TABLE_SIZE]
scaled_channel< uint16_t, 100, 1 > mapEstimateTpsBins[MAP_EST_LOAD_COUNT]
scaled_channel< uint8_t, 1, 5 > ignitionCltCorrLoadBins[CLT_TIMING_LOAD_AXIS_SIZE]
scaled_channel< int16_t, 1, 1 > ignitionCltCorrTempBins[CLT_TIMING_TEMP_AXIS_SIZE]
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]
uint16_t fuelTrimLoadBins[FUEL_TRIM_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 > 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]
uint16_t injectorStagingRpmBins[INJ_STAGING_RPM_SIZE]
scaled_channel< uint16_t, 10, 1 > hpfpTargetLoadBins[HPFP_TARGET_SIZE]
scaled_channel< uint8_t, 1, 100 > minimumOilPressureBins[8]
uint16_t vvtTable1RpmBins[VVT_TABLE_RPM_SIZE]
uint16_t mapEstimateRpmBins[MAP_EST_RPM_COUNT]
float crankingTpsBins[CRANKING_CURVE_SIZE]
scaled_channel< uint16_t, 100, 1 > sparkDwellValues[DWELL_CURVE_SIZE]
uint16_t ignTrimLoadBins[IGN_TRIM_SIZE]
uint16_t lambdaLoadBins[FUEL_LOAD_COUNT]