remove specs_s struct, flatten config

This commit is contained in:
Matthew Kennedy 2023-03-27 00:58:18 -07:00
parent 98bcd3222b
commit f090a97b0b
68 changed files with 209 additions and 211 deletions

View File

@ -133,8 +133,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -179,8 +179,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -184,8 +184,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -137,8 +137,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 2;
engineConfiguration->specs.firingOrder = FO_1_2;
engineConfiguration->cylindersCount = 2;
engineConfiguration->firingOrder = FO_1_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -108,8 +108,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -133,8 +133,8 @@ void setBoardDefaultConfiguration() {
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_VAG);
strcpy(engineConfiguration->engineCode, "base");
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -173,9 +173,9 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->specs.displacement = 2.295f;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->displacement = 2.295f;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK
engineConfiguration->crankingInjectionMode = IM_SEQUENTIAL;

View File

@ -179,9 +179,9 @@ void setBoardDefaultConfiguration() {
engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->specs.displacement = 1.998;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->displacement = 1.998;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_Hyundai);
strcpy(engineConfiguration->engineCode, "Theta II");
engineConfiguration->globalTriggerAngleOffset = 90;

View File

@ -109,8 +109,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -125,8 +125,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -122,8 +122,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -111,8 +111,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK

View File

@ -195,8 +195,8 @@ void setBoardDefaultConfiguration() {
// Don't enable expansion header SPI by default
engineConfiguration->is_enabled_spi_3 = false;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;

View File

@ -17,8 +17,8 @@ static bool is469 = false;
static void setPrometheusDefaults() {
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS; // IM_WASTED_SPARK
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
@ -26,7 +26,7 @@ static void setPrometheusDefaults() {
engineConfiguration->globalTriggerAngleOffset = 114; // the end of 19th tooth?
engineConfiguration->specs.displacement = 1.645;
engineConfiguration->displacement = 1.645;
engineConfiguration->injector.flow = 200;
engineConfiguration->cranking.baseFuel = 25; // ???

View File

@ -161,8 +161,8 @@ void setBoardDefaultConfiguration() {
// "required" hardware is done - set some reasonable defaults
setupDefaultSensorInputs();
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->cylindersCount = 8;
engineConfiguration->firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->enableSoftwareKnock = true;

View File

@ -23,13 +23,13 @@ void setGy6139qmbDefaultEngineConfiguration() {
setTargetRpmCurve(2000);
engineConfiguration->analogInputDividerCoefficient = 1;
engineConfiguration->globalTriggerAngleOffset = 45;
engineConfiguration->specs.displacement = 0.072; // 72cc
engineConfiguration->specs.cylindersCount = 1;
engineConfiguration->displacement = 0.072; // 72cc
engineConfiguration->cylindersCount = 1;
setCrankOperationMode();
// this is related to 'setDefaultBaseEngine' having 'skippedWheelOnCam = true' which is a weird fact by itself
engineConfiguration->skippedWheelOnCam = false;
engineConfiguration->specs.firingOrder = FO_1;
engineConfiguration->firingOrder = FO_1;
/**
* We treat the trigger as 8-1 toothed wheel

View File

@ -89,11 +89,11 @@ void m73engine() {
// 13641435991 injector
engineConfiguration->injector.flow = 180; // cc/min, who knows if this number is real - no good source of info
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.displacement = 5.4;
engineConfiguration->cylindersCount = 12;
engineConfiguration->displacement = 5.4;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_BMW);
strcpy(engineConfiguration->engineCode, "M73");
engineConfiguration->specs.firingOrder = FO_1_7_5_11_3_9_6_12_2_8_4_10;
engineConfiguration->firingOrder = FO_1_7_5_11_3_9_6_12_2_8_4_10;
engineConfiguration->fuelAlgorithm = LM_ALPHA_N;
engineConfiguration->canNbcType = CAN_BUS_NBC_NONE;

View File

@ -72,9 +72,9 @@ void setEngineBMW_M73_microRusEfi() {
strcpy(engineConfiguration->vehicleName, "microRusEFIx2");
engineConfiguration->globalTriggerAngleOffset = 90;
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->specs.displacement = 5.4 / 2;
engineConfiguration->specs.firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->cylindersCount = 6;
engineConfiguration->displacement = 5.4 / 2;
engineConfiguration->firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->ignitionMode = IM_ONE_COIL;

View File

@ -19,11 +19,11 @@ void setCamaro4() {
setAlgorithm(LM_SPEED_DENSITY);
engineConfiguration->specs.displacement = 5.7;
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->displacement = 5.7;
engineConfiguration->cylindersCount = 8;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_GM);
engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->triggerInputPins[0] = Gpio::A5;
engineConfiguration->triggerInputPins[1] = Gpio::C6;

View File

@ -21,9 +21,9 @@ void setCitroenBerlingoTU3JPConfiguration() {
setCrankOperationMode();
engineConfiguration->trigger.type = TT_TOOTHED_WHEEL_60_2;
engineConfiguration->globalTriggerAngleOffset = 114;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 1.360;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 1.360;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
engineConfiguration->injectionMode = IM_BATCH;
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;

View File

@ -143,7 +143,7 @@ void setFrankensoConfiguration() {
/**
* We want to initialize all outputs for test
*/
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->cylindersCount = 12;
#else /* EFI_PWM_TESTER */
engineConfiguration->injectionPins[4] = Gpio::Unassigned;
engineConfiguration->injectionPins[5] = Gpio::Unassigned;
@ -174,8 +174,8 @@ void setFrankensoBoardTestConfiguration() {
engineConfiguration->triggerSimulatorFrequency = 300;
engineConfiguration->cranking.rpm = 100;
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.firingOrder = FO_1_7_5_11_3_9_6_12_2_8_4_10;
engineConfiguration->cylindersCount = 12;
engineConfiguration->firingOrder = FO_1_7_5_11_3_9_6_12_2_8_4_10;
// set ignition_mode 1
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
@ -351,8 +351,8 @@ void setL9779TestConfiguration() {
// todo: remove this? this was used to play with "secret" red boards prior to MRE reality
// set engine_type 59
void setTle8888TestConfiguration() {
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->cylindersCount = 8;
engineConfiguration->firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
engineConfiguration->crankingInjectionMode = IM_SEQUENTIAL;
@ -482,8 +482,8 @@ static void mreBoardOldTest() {
// TPS tps1_1AdcChannel EFI_ADC_13
engineConfiguration->specs.cylindersCount = 10;
engineConfiguration->specs.firingOrder = FO_1_10_9_4_3_6_5_8_7_2;
engineConfiguration->cylindersCount = 10;
engineConfiguration->firingOrder = FO_1_10_9_4_3_6_5_8_7_2;
// red LED #1
engineConfiguration->ignitionPins[1 - 1] = Gpio::D4;
@ -584,8 +584,8 @@ end
* set engine_type 42
*/
void proteusBoardTest() {
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
engineConfiguration->cylindersCount = 12;
engineConfiguration->firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
engineConfiguration->triggerSimulatorFrequency = 600;
engineConfiguration->injector.flow = 4.6; // longer blink
@ -670,8 +670,8 @@ void mreBCM() {
void mreBoardNewTest() {
mreBoardOldTest();
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->specs.firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
engineConfiguration->cylindersCount = 12;
engineConfiguration->firingOrder = FO_1_2_3_4_5_6_7_8_9_10_11_12;
engineConfiguration->injector.flow = 5; // longer blink
@ -783,8 +783,8 @@ void setBoschHDEV_5_injectors() {
* set engine_type 107
*/
void setRotary() {
engineConfiguration->specs.cylindersCount = 2;
engineConfiguration->specs.firingOrder = FO_1_2;
engineConfiguration->cylindersCount = 2;
engineConfiguration->firingOrder = FO_1_2;
engineConfiguration->trigger.type = TT_36_2_2_2;
// todo: fix UI to make this possible via TS

View File

@ -53,7 +53,7 @@ void setDodgeNeon1995EngineConfiguration() {
// set ignition_mode 2
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
// set_firing_order 2
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->firingOrder = FO_1_3_4_2;
// set global_trigger_offset_angle 497
engineConfiguration->globalTriggerAngleOffset = 497;
@ -111,8 +111,8 @@ void setDodgeNeonNGCEngineConfiguration() {
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
engineConfiguration->specs.displacement = 1.996;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->displacement = 1.996;
engineConfiguration->cylindersCount = 4;
/**
* 77C

View File

@ -20,9 +20,9 @@ void setDodgeRam1996() {
engineConfiguration->map.sensor.type = MT_DODGE_NEON_2003;
//Base engine setting
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.firingOrder = FO_1_8_4_3_6_5_7_2;
engineConfiguration->specs.displacement = 5.2;
engineConfiguration->cylindersCount = 8;
engineConfiguration->firingOrder = FO_1_8_4_3_6_5_7_2;
engineConfiguration->displacement = 5.2;
// set global_trigger_offset_angle -50
engineConfiguration->globalTriggerAngleOffset = -50;

View File

@ -19,12 +19,12 @@
* @brief Default values for persistent properties
*/
void setFordInline6() {
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->cylindersCount = 6;
setCamOperationMode();
engineConfiguration->ignitionMode = IM_ONE_COIL;
engineConfiguration->specs.firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
engineConfiguration->injectionMode = IM_BATCH;
engineConfiguration->twoWireBatchInjection = true;

View File

@ -59,12 +59,12 @@ void setFordAspireEngineConfiguration() {
// engineConfiguration->ignitionPinMode = OM_INVERTED;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 1.3;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 1.3;
// Denso 195500-2110
engineConfiguration->injector.flow = 119.8;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->globalTriggerAngleOffset = 175;
setDefaultAspireMaps();

View File

@ -71,7 +71,7 @@ void setFordEscortGt() {
setDensoTODO(config);
engineConfiguration->globalFuelCorrection = 0.75;
engineConfiguration->specs.displacement = 1.839;
engineConfiguration->displacement = 1.839;
setAlgorithm(LM_SPEED_DENSITY);
static const uint16_t veRpmBins[] =

View File

@ -19,10 +19,10 @@ void setGmLs4() {
engineConfiguration->injectorCompensationMode = ICM_FixedRailPressure;
engineConfiguration->injector.flow = 440;
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->cylindersCount = 8;
setLeftRightBanksNeedBetterName();
engineConfiguration->specs.firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->specs.displacement = 6.2;
engineConfiguration->firingOrder = FO_1_8_7_2_6_5_4_3;
engineConfiguration->displacement = 6.2;
engineConfiguration->etbIdleThrottleRange = 15;

View File

@ -36,10 +36,10 @@ void setHonda600() {
// set global_trigger_offset_angle 540
engineConfiguration->globalTriggerAngleOffset = 540;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->cranking.rpm = 800;
// engineConfiguration->ignitionMode = IM_WASTED_SPARK; //IM_INDIVIDUAL_COILS;

View File

@ -12,9 +12,9 @@
#endif // HW_PROTEUS
void setHondaK() {
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 2.4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 2.4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->engineSyncCam = SC_Exhaust_First;
engineConfiguration->trigger.type = TT_HONDA_K_CRANK_12_1;
engineConfiguration->globalTriggerAngleOffset = 675;

View File

@ -109,8 +109,8 @@ void common079721_2351() {
engineConfiguration->engineChartSize = 300;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->fuelPumpPin = Gpio::Unassigned; // fuel pump is not controlled by ECU on this engine
@ -142,7 +142,7 @@ void common079721_2351() {
*/
void setFrankensteinMiata1996() {
commonMiataNa();
engineConfiguration->specs.displacement = 1.839;
engineConfiguration->displacement = 1.839;
#if IGN_LOAD_COUNT == DEFAULT_IGN_LOAD_COUNT
copyTable(config->ignitionTable, miataNA8_maf_advance_table);

View File

@ -74,9 +74,9 @@ static const uint8_t mapBased16IgnitionTable[16][16] = {
void miataNAcommonEngineSettings() {
// Base engine
engineConfiguration->specs.displacement = 1.6;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->displacement = 1.6;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->rpmHardLimit = 7200;
@ -331,7 +331,7 @@ void setMiata94_MAP_MRE() {
#endif /* BOARD_TLE8888_COUNT */
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->specs.displacement = 1.8;
engineConfiguration->displacement = 1.8;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA);
strcpy(engineConfiguration->engineCode, "94");
@ -348,7 +348,7 @@ void setHellenNA94() {
*/
engineConfiguration->injector.flow = 254;
engineConfiguration->specs.displacement = 1.8;
engineConfiguration->displacement = 1.8;
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->map.sensor.type = MT_MPX4250;

View File

@ -48,7 +48,7 @@ static void commonNA8() {
engineConfiguration->crankingTimingAngle = 6;
engineConfiguration->ignitionDwellForCrankingMs = 4;
engineConfiguration->specs.displacement = 1.839;
engineConfiguration->displacement = 1.839;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_MAZDA);
strcpy(engineConfiguration->engineCode, "NA8");

View File

@ -237,9 +237,9 @@ static void setMazdaMiataNbInjectorLag() {
*/
static void setCommonMazdaNB() {
// Base engine
engineConfiguration->specs.displacement = 1.839;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->displacement = 1.839;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->rpmHardLimit = 7200;

View File

@ -31,14 +31,14 @@ void setHellenMercedes128_4_cyl() {
// is this M104 or M112 or both?
void setHellenMercedes128_6_cyl() {
common();
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->cylindersCount = 6;
// 1-4-2-5-3-6 M104
engineConfiguration->specs.firingOrder = FO_1_4_3_6_2_5; // M112
engineConfiguration->firingOrder = FO_1_4_3_6_2_5; // M112
}
// M113
void setHellenMercedes128_8_cyl() {
common();
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.firingOrder = FO_1_5_4_2_6_3_7_8;
engineConfiguration->cylindersCount = 8;
engineConfiguration->firingOrder = FO_1_5_4_2_6_3_7_8;
}

View File

@ -17,12 +17,12 @@ void setMitsubishiConfiguration() {
engineConfiguration->trigger.type = TT_MITSUBISHI_4G93; // same trigger as 4G63?
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 1.800;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 1.800;
// set ignition_mode 2
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->firingOrder = FO_1_3_4_2;
// set global_trigger_offset_angle 671
engineConfiguration->globalTriggerAngleOffset = 671;

View File

@ -15,9 +15,9 @@
void setHellen121nissanQR() {
engineConfiguration->trigger.type = TT_NISSAN_QR25;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->specs.displacement = 2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->displacement = 2;
strcpy(engineConfiguration->engineCode, "QR");
engineConfiguration->camInputs[1 * CAMS_PER_BANK] = Gpio::Unassigned;
@ -38,9 +38,9 @@ void setHellen121nissanVQ() {
setNissanMAF0031(config);
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->specs.firingOrder = FO_1_2_3_4_5_6;
engineConfiguration->specs.displacement = 4;
engineConfiguration->cylindersCount = 6;
engineConfiguration->firingOrder = FO_1_2_3_4_5_6;
engineConfiguration->displacement = 4;
strcpy(engineConfiguration->engineCode, "VQ");
engineConfiguration->vvtMode[0] = VVT_NISSAN_VQ;
@ -72,7 +72,7 @@ void setHellen121nissanAltimaN16() {
// https://en.wikipedia.org/wiki/Nissan_QG_engine
// https://en.wikipedia.org/wiki/N-VCT
setHellen121nissanQR();
engineConfiguration->specs.displacement = 1.8;
engineConfiguration->displacement = 1.8;
strcpy(engineConfiguration->engineCode, "N16");
}

View File

@ -14,11 +14,11 @@
void setSachs() {
engineConfiguration->specs.displacement = 0.1; // 100cc
engineConfiguration->specs.cylindersCount = 1;
engineConfiguration->displacement = 0.1; // 100cc
engineConfiguration->cylindersCount = 1;
setTwoStrokeOperationMode();
engineConfiguration->specs.firingOrder = FO_1;
engineConfiguration->firingOrder = FO_1;
engineConfiguration->engineChartSize = 400;
setEgoSensor(ES_Innovate_MTX_L);

View File

@ -40,11 +40,11 @@ void setSubaruEJ18_MRE() {
// engineConfiguration->isDoubleSolenoidIdle = true;
engineConfiguration->specs.displacement = 1.8;
engineConfiguration->displacement = 1.8;
strcpy(engineConfiguration->engineMake, ENGINE_MAKE_SUBARU);
strcpy(engineConfiguration->engineCode, "EJ18");
engineConfiguration->specs.firingOrder = FO_1_3_2_4;
engineConfiguration->firingOrder = FO_1_3_2_4;
engineConfiguration->injectionMode = IM_SEQUENTIAL;
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
@ -67,9 +67,9 @@ void setSubaruEG33Defaults() {
engineConfiguration->trigger.type = TT_SUBARU_SVX;
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->cylindersCount = 6;
setLeftRightBanksNeedBetterName();
engineConfiguration->specs.firingOrder = FO_1_6_3_2_5_4;
engineConfiguration->firingOrder = FO_1_6_3_2_5_4;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
@ -80,7 +80,7 @@ void setSubaruEG33Defaults() {
engineConfiguration->fuelAlgorithm = LM_REAL_MAF;
engineConfiguration->specs.displacement = 3.30;
engineConfiguration->displacement = 3.30;
engineConfiguration->injector.flow = 250;
engineConfiguration->cranking.baseFuel = 5; // ???

View File

@ -26,9 +26,9 @@
static void common2jz() {
setFrankensoConfiguration(); // default pinout
engineConfiguration->specs.displacement = 3.0;
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->specs.firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->displacement = 3.0;
engineConfiguration->cylindersCount = 6;
engineConfiguration->firingOrder = FO_1_5_3_6_2_4;
// set ignition_mode 1
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;

View File

@ -32,8 +32,8 @@ void setVwAba() {
//Base engine setting
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 2.0;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 2.0;
engineConfiguration->injector.flow = 320; // 30lb/h
// set algorithm 3
setAlgorithm(LM_SPEED_DENSITY);
@ -61,27 +61,27 @@ void setVwAba() {
}
void setHellen121Vag_5_cyl() {
engineConfiguration->specs.cylindersCount = 5;
engineConfiguration->specs.displacement = 2.5;
engineConfiguration->specs.firingOrder = FO_1_2_4_5_3;
engineConfiguration->cylindersCount = 5;
engineConfiguration->displacement = 2.5;
engineConfiguration->firingOrder = FO_1_2_4_5_3;
}
void setHellen121Vag_vr6_cyl() {
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->specs.firingOrder = FO_1_5_3_6_2_4;
engineConfiguration->cylindersCount = 6;
engineConfiguration->firingOrder = FO_1_5_3_6_2_4;
}
void setHellen121Vag_v6_cyl() {
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->specs.displacement = 2.7;
engineConfiguration->cylindersCount = 6;
engineConfiguration->displacement = 2.7;
engineConfiguration->camInputs[1 * CAMS_PER_BANK] = Gpio::A7; // 87a
engineConfiguration->specs.firingOrder = FO_1_4_3_6_2_5;
engineConfiguration->firingOrder = FO_1_4_3_6_2_5;
}
void setHellen121Vag_8_cyl() {
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->specs.displacement = 4.2;
engineConfiguration->specs.firingOrder = FO_1_5_4_8_6_3_7_2;
engineConfiguration->cylindersCount = 8;
engineConfiguration->displacement = 4.2;
engineConfiguration->firingOrder = FO_1_5_4_8_6_3_7_2;
}

View File

@ -26,8 +26,8 @@ static void commonPassatB6() {
engineConfiguration->idlePidRpmDeadZone = 500;
engineConfiguration->idleMode = IM_AUTO;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->firingOrder = FO_1_3_4_2;
engineConfiguration->isPhaseSyncRequiredForIgnition = true;
engineConfiguration->disableEtbWhenEngineStopped = true;

View File

@ -164,7 +164,7 @@ static void printEngineSnifferPinMappings() {
printOutPin(PROTOCOL_WA_CHANNEL_2, engineConfiguration->logicAnalyzerPins[1]);
#endif /* EFI_LOGIC_ANALYZER */
int cylCount = minI(engineConfiguration->specs.cylindersCount, MAX_CYLINDER_COUNT);
int cylCount = minI(engineConfiguration->cylindersCount, MAX_CYLINDER_COUNT);
for (int i = 0; i < cylCount; i++) {
printOutPin(enginePins.coils[i].getShortName(), engineConfiguration->ignitionPins[i]);
printOutPin(enginePins.trailingCoils[i].getShortName(), engineConfiguration->trailingCoilPins[i]);

View File

@ -56,7 +56,7 @@ AirmassResult MafAirmass::getAirmassImpl(float massAirFlow, int rpm) const {
// Now we have to divide among cylinders - on a 4 stroke, half of the cylinders happen every revolution
// This math is floating point to work properly on engines with odd cylinder count
float halfCylCount = engineConfiguration->specs.cylindersCount / 2.0f;
float halfCylCount = engineConfiguration->cylindersCount / 2.0f;
mass_t cylinderAirmass = airPerRevolution / halfCylCount;

View File

@ -36,7 +36,7 @@ AirmassResult SpeedDensityAirmass::getAirmass(float rpm, float map) {
float SpeedDensityAirmass::getAirflow(float rpm, float map) {
auto airmassResult = getAirmass(rpm, map);
float massPerCycle = airmassResult.CylinderAirmass * engineConfiguration->specs.cylindersCount;
float massPerCycle = airmassResult.CylinderAirmass * engineConfiguration->cylindersCount;
if (!engineConfiguration->twoStroke) {
// 4 stroke engines only do a half cycle per rev

View File

@ -24,6 +24,6 @@ mass_t idealGasLaw(float volume, float pressure, float temperature) {
}
/*static*/ mass_t SpeedDensityBase::getAirmassImpl(float ve, float manifoldPressure, float temperature) {
mass_t cycleAir = ve * idealGasLaw(engineConfiguration->specs.displacement, manifoldPressure, temperature);
return cycleAir / engineConfiguration->specs.cylindersCount;
mass_t cycleAir = ve * idealGasLaw(engineConfiguration->displacement, manifoldPressure, temperature);
return cycleAir / engineConfiguration->cylindersCount;
}

View File

@ -15,16 +15,16 @@ static void setDefaultAlternatorParameters() {
/* Cylinder to bank mapping */
void setLeftRightBanksNeedBetterName() {
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
engineConfiguration->cylinderBankSelect[i] = i % 2;
}
}
void setDefaultBaseEngine() {
// Base Engine Settings
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->specs.displacement = 2;
engineConfiguration->specs.firingOrder = FO_1_3_4_2;
engineConfiguration->cylindersCount = 4;
engineConfiguration->displacement = 2;
engineConfiguration->firingOrder = FO_1_3_4_2;
// todo: extract constant in instant_rpm_calculator.h?
engineConfiguration->instantRpmRange = 90;

View File

@ -167,7 +167,7 @@ void EngineState::periodicFastCallback() {
}
// Now apply that to per-cylinder fueling and timing
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
uint8_t bankIndex = engineConfiguration->cylinderBankSelect[i];
auto bankTrim =engine->stftCorrection[bankIndex];
auto cylinderTrim = getCylinderFuelTrim(i, rpm, fuelLoad);

View File

@ -66,7 +66,7 @@ public:
*/
int sparkId = 0;
/**
* [0, specs.cylindersCount)
* [0, cylindersCount)
*/
int cylinderIndex = 0;
int8_t cylinderNumber = 0;

View File

@ -188,7 +188,7 @@ static float getBaseFuelMass(int rpm) {
engine->engineState.fuelingLoad = airmass.EngineLoadPercent;
engine->engineState.ignitionLoad = engine->fuelComputer.getLoadOverride(airmass.EngineLoadPercent, engineConfiguration->ignOverrideMode);
auto gramPerCycle = airmass.CylinderAirmass * engineConfiguration->specs.cylindersCount;
auto gramPerCycle = airmass.CylinderAirmass * engineConfiguration->cylindersCount;
auto gramPerMs = rpm == 0 ? 0 : gramPerCycle / getEngineCycleDuration(rpm);
// convert g/s -> kg/h
@ -243,7 +243,7 @@ int getNumberOfInjections(injection_mode_e mode) {
switch (mode) {
case IM_SIMULTANEOUS:
case IM_SINGLE_POINT:
return engineConfiguration->specs.cylindersCount;
return engineConfiguration->cylindersCount;
case IM_BATCH:
return 2;
case IM_SEQUENTIAL:
@ -259,7 +259,7 @@ float getInjectionModeDurationMultiplier() {
switch (mode) {
case IM_SIMULTANEOUS: {
auto cylCount = engineConfiguration->specs.cylindersCount;
auto cylCount = engineConfiguration->cylindersCount;
if (cylCount == 0) {
// we can end up here during configuration reset
@ -430,8 +430,8 @@ float getCrankingFuel(float baseFuel) {
* Should we bother caching 'getStandardAirCharge' result or can we afford to run the math every time we calculate fuel?
*/
float getStandardAirCharge() {
float totalDisplacement = engineConfiguration->specs.displacement;
float cylDisplacement = totalDisplacement / engineConfiguration->specs.cylindersCount;
float totalDisplacement = engineConfiguration->displacement;
float cylDisplacement = totalDisplacement / engineConfiguration->cylindersCount;
// Calculation of 100% VE air mass in g/cyl - 1 cylinder filling at 1.204/L
// 101.325kpa, 20C

View File

@ -139,7 +139,7 @@ static void pinbench(float startdelay, float ontime, float offtime, int iteratio
/*==========================================================================*/
static void doRunFuelInjBench(size_t humanIndex, float delay, float onTime, float offTime, int count) {
if (humanIndex < 1 || humanIndex > engineConfiguration->specs.cylindersCount) {
if (humanIndex < 1 || humanIndex > engineConfiguration->cylindersCount) {
efiPrintf("Invalid index: %d", humanIndex);
return;
}
@ -148,7 +148,7 @@ static void doRunFuelInjBench(size_t humanIndex, float delay, float onTime, floa
}
static void doRunSparkBench(size_t humanIndex, float delay, float onTime, float offTime, int count) {
if (humanIndex < 1 || humanIndex > engineConfiguration->specs.cylindersCount) {
if (humanIndex < 1 || humanIndex > engineConfiguration->cylindersCount) {
efiPrintf("Invalid index: %d", humanIndex);
return;
}

View File

@ -476,8 +476,8 @@ void commonInitEngineController() {
// Returns false if there's an obvious problem with the loaded configuration
bool validateConfig() {
if (engineConfiguration->specs.cylindersCount > MAX_CYLINDER_COUNT) {
firmwareError(OBD_PCM_Processor_Fault, "Invalid cylinder count: %d", engineConfiguration->specs.cylindersCount);
if (engineConfiguration->cylindersCount > MAX_CYLINDER_COUNT) {
firmwareError(OBD_PCM_Processor_Fault, "Invalid cylinder count: %d", engineConfiguration->cylindersCount);
return false;
}

View File

@ -153,7 +153,7 @@ bool FuelSchedule::addFuelEventsForCylinder(int i) {
injectorIndex = getCylinderId(i) - 1;
} else if (mode == IM_BATCH) {
// Loop over the first half of the firing order twice
injectorIndex = i % (engineConfiguration->specs.cylindersCount / 2);
injectorIndex = i % (engineConfiguration->cylindersCount / 2);
} else {
firmwareError(CUSTOM_OBD_UNEXPECTED_INJECTION_MODE, "Unexpected injection mode %d", mode);
injectorIndex = 0;
@ -168,7 +168,7 @@ bool FuelSchedule::addFuelEventsForCylinder(int i) {
// Compute the position of this cylinder's twin in the firing order
// Each injector gets fired as a primary (the same as sequential), but also
// fires the injector 360 degrees later in the firing order.
int secondOrder = (i + (engineConfiguration->specs.cylindersCount / 2)) % engineConfiguration->specs.cylindersCount;
int secondOrder = (i + (engineConfiguration->cylindersCount / 2)) % engineConfiguration->cylindersCount;
int secondIndex = getCylinderId(secondOrder) - 1;
secondOutput = &enginePins.injectors[secondIndex];
} else {
@ -188,7 +188,7 @@ bool FuelSchedule::addFuelEventsForCylinder(int i) {
}
void FuelSchedule::addFuelEvents() {
for (size_t cylinderIndex = 0; cylinderIndex < engineConfiguration->specs.cylindersCount; cylinderIndex++) {
for (size_t cylinderIndex = 0; cylinderIndex < engineConfiguration->cylindersCount; cylinderIndex++) {
bool result = addFuelEventsForCylinder(cylinderIndex);
if (!result) {
@ -207,7 +207,7 @@ void FuelSchedule::onTriggerTooth(int rpm, efitick_t nowNt, float currentPhase,
return;
}
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
elements[i].onTriggerTooth(rpm, nowNt, currentPhase, nextPhase);
}
}

View File

@ -70,7 +70,7 @@ angle_t HpfpLobe::findNextLobe() {
// As a percent of the full pump stroke
float HpfpQuantity::calcFuelPercent(int rpm) {
float fuel_requested_cc_per_cycle =
engine->engineState.injectionMass[0] * (1.f / fuelDensity) * engineConfiguration->specs.cylindersCount;
engine->engineState.injectionMass[0] * (1.f / fuelDensity) * engineConfiguration->cylindersCount;
float fuel_requested_cc_per_lobe = fuel_requested_cc_per_cycle / engineConfiguration->hpfpCamLobes;
return 100.f *
fuel_requested_cc_per_lobe / engineConfiguration->hpfpPumpVolume +

View File

@ -175,8 +175,8 @@ void refreshMapAveragingPreCalc() {
angle_t offsetAngle = engine->triggerCentral.triggerFormDetails.eventAngles[engineConfiguration->mapAveragingSchedulingAtIndex];
efiAssertVoid(CUSTOM_ERR_MAP_AVG_OFFSET, !cisnan(offsetAngle), "offsetAngle");
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
angle_t cylinderOffset = getEngineCycle(getEngineRotationState()->getOperationMode()) * i / engineConfiguration->specs.cylindersCount;
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
angle_t cylinderOffset = getEngineCycle(getEngineRotationState()->getOperationMode()) * i / engineConfiguration->cylindersCount;
efiAssertVoid(CUSTOM_ERR_MAP_CYL_OFFSET, !cisnan(cylinderOffset), "cylinderOffset");
// part of this formula related to specific cylinder offset is never changing - we can
// move the loop into start-up calculation and not have this loop as part of periodic calculation
@ -187,7 +187,7 @@ void refreshMapAveragingPreCalc() {
}
engine->engineState.mapAveragingDuration = interpolate2d(rpm, c->samplingWindowBins, c->samplingWindow);
} else {
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
engine->engineState.mapAveragingStart[i] = NAN;
}
engine->engineState.mapAveragingDuration = NAN;
@ -217,7 +217,7 @@ void mapAveragingTriggerCallback(
}
// todo: this could be pre-calculated
int samplingCount = engineConfiguration->measureMapOnlyInOneCylinder ? 1 : engineConfiguration->specs.cylindersCount;
int samplingCount = engineConfiguration->measureMapOnlyInOneCylinder ? 1 : engineConfiguration->cylindersCount;
for (int i = 0; i < samplingCount; i++) {
angle_t samplingStart = engine->engineState.mapAveragingStart[i];

View File

@ -65,11 +65,11 @@ static int getIgnitionPinForIndex(int cylinderIndex, ignition_mode_e ignitionMod
case IM_ONE_COIL:
return 0;
case IM_WASTED_SPARK: {
if (engineConfiguration->specs.cylindersCount == 1) {
if (engineConfiguration->cylindersCount == 1) {
// we do not want to divide by zero
return 0;
}
return cylinderIndex % (engineConfiguration->specs.cylindersCount / 2);
return cylinderIndex % (engineConfiguration->cylindersCount / 2);
}
case IM_INDIVIDUAL_COILS:
return cylinderIndex;
@ -108,7 +108,7 @@ static void prepareCylinderIgnitionSchedule(angle_t dwellAngleDuration, floatms_
// If wasted spark, find the paired coil in addition to "main" output for this cylinder
if (ignitionMode == IM_WASTED_SPARK) {
int secondIndex = index + engineConfiguration->specs.cylindersCount / 2;
int secondIndex = index + engineConfiguration->cylindersCount / 2;
int secondCoilIndex = ID2INDEX(getCylinderId(secondIndex));
secondOutput = &enginePins.coils[secondCoilIndex];
assertPinAssigned(secondOutput);
@ -394,9 +394,9 @@ void initializeIgnitionActions() {
list->isReady = false;
return;
}
efiAssertVoid(CUSTOM_ERR_6592, engineConfiguration->specs.cylindersCount > 0, "cylindersCount");
efiAssertVoid(CUSTOM_ERR_6592, engineConfiguration->cylindersCount > 0, "cylindersCount");
for (size_t cylinderIndex = 0; cylinderIndex < engineConfiguration->specs.cylindersCount; cylinderIndex++) {
for (size_t cylinderIndex = 0; cylinderIndex < engineConfiguration->cylindersCount; cylinderIndex++) {
list->elements[cylinderIndex].cylinderIndex = cylinderIndex;
prepareCylinderIgnitionSchedule(dwellAngle, sparkDwell, &list->elements[cylinderIndex]);
}
@ -417,7 +417,7 @@ static void prepareIgnitionSchedule() {
float maxAllowedDwellAngle = (int) (getEngineCycle(operationMode) / 2); // the cast is about making Coverity happy
if (getCurrentIgnitionMode() == IM_ONE_COIL) {
maxAllowedDwellAngle = getEngineCycle(operationMode) / engineConfiguration->specs.cylindersCount / 1.1;
maxAllowedDwellAngle = getEngineCycle(operationMode) / engineConfiguration->cylindersCount / 1.1;
}
if (engine->ignitionState.dwellAngle == 0) {
@ -459,7 +459,7 @@ void onTriggerEventSparkLogic(int rpm, efitick_t edgeTimestamp, float currentPha
// scheduleSimpleMsg(&logger, "eventId spark ", eventIndex);
if (engine->ignitionEvents.isReady) {
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
IgnitionEvent *event = &engine->ignitionEvents.elements[i];
if (!isPhaseInRange(event->dwellAngle, currentPhase, nextPhase)) {
@ -499,9 +499,9 @@ void onTriggerEventSparkLogic(int rpm, efitick_t edgeTimestamp, float currentPha
int getNumberOfSparks(ignition_mode_e mode) {
switch (mode) {
case IM_ONE_COIL:
return engineConfiguration->specs.cylindersCount;
return engineConfiguration->cylindersCount;
case IM_TWO_COILS:
return engineConfiguration->specs.cylindersCount / 2;
return engineConfiguration->cylindersCount / 2;
case IM_INDIVIDUAL_COILS:
return 1;
case IM_WASTED_SPARK:

View File

@ -21,7 +21,7 @@ static bool noFiringUntilVvtSync(vvt_mode_e vvtMode) {
// Odd cylinder count engines don't work properly with wasted spark, so wait for full sync (so that sequential works)
// See https://github.com/rusefi/rusefi/issues/4195 for the issue to properly support this case
if (engineConfiguration->specs.cylindersCount > 1 && engineConfiguration->specs.cylindersCount % 2 == 1) {
if (engineConfiguration->cylindersCount > 1 && engineConfiguration->cylindersCount % 2 == 1) {
return true;
}

View File

@ -166,7 +166,7 @@ static const uint8_t order_1_14_9_4_7_12_15_6_13_8_3_16_11_2_5_10[] = {1, 14, 9,
static size_t getFiringOrderLength() {
switch (engineConfiguration->specs.firingOrder) {
switch (engineConfiguration->firingOrder) {
case FO_1:
return 1;
// 2 cylinder
@ -227,14 +227,14 @@ static size_t getFiringOrderLength() {
return 16;
default:
firmwareError(CUSTOM_OBD_UNKNOWN_FIRING_ORDER, "Invalid firing order: %d", engineConfiguration->specs.firingOrder);
firmwareError(CUSTOM_OBD_UNKNOWN_FIRING_ORDER, "Invalid firing order: %d", engineConfiguration->firingOrder);
}
return 1;
}
static const uint8_t* getFiringOrderTable()
{
switch (engineConfiguration->specs.firingOrder) {
switch (engineConfiguration->firingOrder) {
case FO_1:
return order_1;
// 2 cylinder
@ -319,7 +319,7 @@ static const uint8_t* getFiringOrderTable()
return order_1_14_9_4_7_12_15_6_13_8_3_16_11_2_5_10;
default:
firmwareError(CUSTOM_OBD_UNKNOWN_FIRING_ORDER, "Invalid firing order: %d", engineConfiguration->specs.firingOrder);
firmwareError(CUSTOM_OBD_UNKNOWN_FIRING_ORDER, "Invalid firing order: %d", engineConfiguration->firingOrder);
}
return NULL;
@ -336,7 +336,7 @@ size_t getCylinderId(size_t index) {
firmwareError(CUSTOM_FIRING_LENGTH, "fol %d", firingOrderLength);
return 1;
}
if (engineConfiguration->specs.cylindersCount != firingOrderLength) {
if (engineConfiguration->cylindersCount != firingOrderLength) {
// May 2020 this somehow still happens with functional tests, maybe race condition?
firmwareError(CUSTOM_OBD_WRONG_FIRING_ORDER, "Wrong cyl count for firing order, expected %d cylinders", firingOrderLength);
return 1;
@ -384,7 +384,7 @@ ignition_mode_e getCurrentIgnitionMode() {
#if EFI_SHAFT_POSITION_INPUT
// In spin-up cranking mode we don't have full phase sync info yet, so wasted spark mode is better
// However, only do this on even cylinder count engines: odd cyl count doesn't fire at all
if (ignitionMode == IM_INDIVIDUAL_COILS && (engineConfiguration->specs.cylindersCount % 2 == 0)) {
if (ignitionMode == IM_INDIVIDUAL_COILS && (engineConfiguration->cylindersCount % 2 == 0)) {
bool missingPhaseInfoForSequential =
!engine->triggerCentral.triggerState.hasSynchronizedPhase();
@ -421,7 +421,7 @@ void prepareOutputSignals() {
angle_t getCylinderAngle(uint8_t cylinderIndex, uint8_t cylinderNumber) {
// base = position of this cylinder in the firing order.
// We get a cylinder every n-th of an engine cycle where N is the number of cylinders
auto base = engine->engineState.engineCycle * cylinderIndex / engineConfiguration->specs.cylindersCount;
auto base = engine->engineState.engineCycle * cylinderIndex / engineConfiguration->cylindersCount;
// Plus or minus any adjustment if this is an odd-fire engine
auto adjustment = engineConfiguration->timing_offset_cylinder[cylinderNumber];

View File

@ -47,7 +47,7 @@ float IFuelComputer::getTChargeCoefficient(int rpm, float tps) {
constexpr floatms_t gramsPerMsToKgPerHour = (3600.0f * 1000.0f) / 1000.0f;
// We're actually using an 'old' airMass calculated for the previous cycle, but it's ok, we're not having any self-excitaton issues
floatms_t airMassForEngine = sdAirMassInOneCylinder * engineConfiguration->specs.cylindersCount;
floatms_t airMassForEngine = sdAirMassInOneCylinder * engineConfiguration->cylindersCount;
// airMass is in grams per 1 cycle for 1 cyl. Convert it to airFlow in kg/h for the engine.
// And if the engine is stopped (0 rpm), then airFlow is also zero (avoiding NaN division)
floatms_t airFlow = (rpm == 0) ? 0 : airMassForEngine * gramsPerMsToKgPerHour / getEngineCycleDuration(rpm);

View File

@ -65,7 +65,7 @@ static void setAlgorithmInt(int value) {
}
static void setFiringOrder(int value) {
engineConfiguration->specs.firingOrder = (firing_order_e) value;
engineConfiguration->firingOrder = (firing_order_e) value;
}
static void setRpmHardLimit(int value) {
@ -500,7 +500,7 @@ static void enableOrDisable(const char *param, bool isEnabled) {
engineConfiguration->isCylinderCleanupEnabled = isEnabled;
} else {
efiPrintf("unexpected [%s]", param);
return; // well, MISRA would not like this 'return' here :(
return;
}
efiPrintf("[%s] %s", param, isEnabled ? "enabled" : "disabled");
}

View File

@ -292,7 +292,7 @@ void EnginePins::startAuxValves() {
void EnginePins::startIgnitionPins() {
#if EFI_PROD_CODE
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
NamedOutputPin *trailingOutput = &enginePins.trailingCoils[i];
if (isPinOrModeChanged(trailingCoilPins[i], ignitionPinMode)) {
trailingOutput->initPin(trailingOutput->name, engineConfiguration->trailingCoilPins[i], engineConfiguration->ignitionPinMode);
@ -309,7 +309,7 @@ void EnginePins::startIgnitionPins() {
void EnginePins::startInjectionPins() {
#if EFI_PROD_CODE
// todo: should we move this code closer to the injection logic?
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
NamedOutputPin *output = &enginePins.injectors[i];
if (isPinOrModeChanged(injectionPins[i], injectionPinMode)) {
output->initPin(output->name, engineConfiguration->injectionPins[i],

View File

@ -13,14 +13,14 @@ extern bool printFuelDebug;
void startSimultaneousInjection(void*) {
efitick_t nowNt = getTimeNowNt();
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
enginePins.injectors[i].open(nowNt);
}
}
void endSimultaneousInjectionOnlyTogglePins() {
efitick_t nowNt = getTimeNowNt();
for (size_t i = 0; i < engineConfiguration->specs.cylindersCount; i++) {
for (size_t i = 0; i < engineConfiguration->cylindersCount; i++) {
enginePins.injectors[i].close(nowNt);
}
}

View File

@ -459,7 +459,6 @@ ThermistorConf iat;
int launchTimingRetard;;"deg", 1, 0, -180, 180, 2
float knockBandCustom;We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override;"kHz", 1, 0, 0, 20, 2
struct_no_prefix specs_s
uint16_t autoscale displacement;Engine displacement in litres;"L", 0.001, 0, 0, 65, 3
uint32_t cylindersCount;Number of cylinder the engine has.;"", 1, 0, 1, @@MAX_CYLINDER_COUNT@@, 0
@ -472,10 +471,9 @@ uint32_t cylindersCount;Number of cylinder the engine has.;"", 1, 0, 1, @@MAX_CY
custom firing_order_e 1 bits, U08, @OFFSET@, [0:5], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1-2-3-4-5-6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "1-2-3-4-5-6-7-8", "1-5-4-8-6-3-7-2", "1-4-3-6-2-5", "1-8-7-3-6-5-4-2", "1-6-2-4-3-5", "1-6-5-4-3-2", "1-4-5-2-3-6", "fo32", "fo33", "fo34", "fo35", "fo36", "fo37"
firing_order_e firingOrder;
end_struct
specs_s specs
float cylinderBore;Cylinder diameter in mm.;"mm", 1, 0, 0, 20000, 2
float cylinderBore;Cylinder diameter in mm.;"mm", 1, 0, 0, 20000, 2
#define engine_load_mode_e_enum "Speed Density", "MAF Air Charge", "Alpha-N", "Lua"

View File

@ -355,7 +355,7 @@ void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e inject
Engine *engine = &eth->engine;
engineConfiguration->isIgnitionEnabled = false; // let's focus on injection
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
// a bit of flexibility - the mode may be changed by some tests
engineConfiguration->injectionMode = injectionMode;
// set cranking mode (it's used by getCurrentInjectionMode())

View File

@ -13,25 +13,25 @@ TEST(FuelMath, getStandardAirCharge) {
EngineTestHelper eth(TEST_ENGINE);
// Miata 1839cc 4cyl
engineConfiguration->specs.displacement = 1.839f;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->displacement = 1.839f;
engineConfiguration->cylindersCount = 4;
EXPECT_FLOAT_EQ(0.5535934f, getStandardAirCharge());
// LS 5.3 liter v8
engineConfiguration->specs.displacement = 5.327f;
engineConfiguration->specs.cylindersCount = 8;
engineConfiguration->displacement = 5.327f;
engineConfiguration->cylindersCount = 8;
EXPECT_FLOAT_EQ(0.80179232f, getStandardAirCharge());
// Chainsaw - single cylinder 32cc
engineConfiguration->specs.displacement = 0.032f;
engineConfiguration->specs.cylindersCount = 1;
engineConfiguration->displacement = 0.032f;
engineConfiguration->cylindersCount = 1;
EXPECT_FLOAT_EQ(0.038531788f, getStandardAirCharge());
// Leopard 1 47.666 liter v12
engineConfiguration->specs.displacement = 47.666f;
engineConfiguration->specs.cylindersCount = 12;
engineConfiguration->displacement = 47.666f;
engineConfiguration->cylindersCount = 12;
EXPECT_FLOAT_EQ(4.782959f, getStandardAirCharge());
}
@ -39,8 +39,8 @@ TEST(FuelMath, getStandardAirCharge) {
TEST(AirmassModes, AlphaNNormal) {
EngineTestHelper eth(TEST_ENGINE);
// 4 cylinder 4 liter = easy math
engineConfiguration->specs.displacement = 4.0f;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->displacement = 4.0f;
engineConfiguration->cylindersCount = 4;
StrictMock<MockVp3d> veTable;

View File

@ -56,8 +56,8 @@ TEST(ignition, trailingSpark) {
.WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f}));
setupSimpleTestEngineWithMafAndTT_ONE_trigger(&eth);
engineConfiguration->specs.cylindersCount = 1;
engineConfiguration->specs.firingOrder = FO_1;
engineConfiguration->cylindersCount = 1;
engineConfiguration->firingOrder = FO_1;
engineConfiguration->isInjectionEnabled = false;
engineConfiguration->isIgnitionEnabled = true;

View File

@ -53,7 +53,7 @@ TEST(HPFP, Lobe) {
TEST(HPFP, InjectionReplacementFuel) {
EngineTestHelper eth(TEST_ENGINE);
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->hpfpCamLobes = 4;
engine->engineState.injectionMass[0] = 0.05 /* cc/cyl */ * fuelDensity;
engineConfiguration->hpfpPumpVolume = 0.2; // cc/lobe
@ -71,11 +71,11 @@ TEST(HPFP, InjectionReplacementFuel) {
EXPECT_FLOAT_EQ(math.calcFuelPercent(1000), 50 * 1.333333333f);
// More cylinders!
engineConfiguration->specs.cylindersCount = 6;
engineConfiguration->cylindersCount = 6;
EXPECT_FLOAT_EQ(math.calcFuelPercent(1000), 50 * 2.); // Ooops we maxed out
// Compensation testing
engineConfiguration->specs.cylindersCount =
engineConfiguration->cylindersCount =
engineConfiguration->hpfpCamLobes; // Make math easier
for (int i = 0; i < HPFP_COMPENSATION_SIZE; i++) {
// one bin every 1000 RPM
@ -106,7 +106,7 @@ TEST(HPFP, InjectionReplacementFuel) {
TEST(HPFP, PI) {
EngineTestHelper eth(TEST_ENGINE);
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->hpfpCamLobes = 4;
engine->engineState.injectionMass[0] = 0.05 /* cc/cyl */ * fuelDensity;
engineConfiguration->hpfpPumpVolume = 0.2; // cc/lobe
@ -163,7 +163,7 @@ TEST(HPFP, PI) {
TEST(HPFP, Angle) {
EngineTestHelper eth(TEST_ENGINE);
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->hpfpCamLobes = 4;
engine->engineState.injectionMass[0] = 0.05 /* cc/cyl */ * fuelDensity;
engineConfiguration->hpfpPumpVolume = 0.2; // cc/lobe
@ -209,7 +209,7 @@ TEST(HPFP, Angle) {
TEST(HPFP, Schedule) {
EngineTestHelper eth(TEST_ENGINE);
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->hpfpCamLobes = 4;
engineConfiguration->hpfpPumpVolume = 0.2; // cc/lobe

View File

@ -12,7 +12,7 @@ TEST(HPFP, IntegratedSchedule) {
engineConfiguration->hpfpValvePin = Gpio::A2; // arbitrary
});
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->hpfpCamLobes = 3;
engineConfiguration->hpfpPumpVolume = 0.2; // cc/lobe

View File

@ -969,7 +969,7 @@ TEST(big, testSparkReverseOrderBug319) {
engine->tdcMarkEnabled = false;
engineConfiguration->isInjectionEnabled = false;
engineConfiguration->specs.cylindersCount = 4;
engineConfiguration->cylindersCount = 4;
engineConfiguration->ignitionMode = IM_INDIVIDUAL_COILS;
setConstantDwell(45);