From a3b29f9011d6e938f145909fe2710e332c0ed485 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 20 Jul 2020 23:11:48 -0700 Subject: [PATCH 1/8] use ign load for ign --- firmware/console/status_loop.cpp | 2 +- firmware/controllers/algo/engine2.cpp | 12 +++++++----- firmware/controllers/algo/fuel_math.cpp | 8 +++----- firmware/controllers/algo/fuel_math.h | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index c6539cd435..1d63ea8d7e 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -297,7 +297,7 @@ static void showFuelInfo2(float rpm, float engineLoad) { scheduleMsg(&logger2, "algo=%s/pump=%s", getEngine_load_mode_e(engineConfiguration->fuelAlgorithm), boolToString(enginePins.fuelPumpRelay.getLogicValue())); - scheduleMsg(&logger2, "injection phase=%.2f/global fuel correction=%.2f", getInjectionOffset(rpm), engineConfiguration->globalFuelCorrection); + scheduleMsg(&logger2, "injection phase=%.2f/global fuel correction=%.2f", getInjectionOffset(rpm, getFuelingLoad()), engineConfiguration->globalFuelCorrection); scheduleMsg(&logger2, "baro correction=%.2f", engine->engineState.baroCorrection); diff --git a/firmware/controllers/algo/engine2.cpp b/firmware/controllers/algo/engine2.cpp index 477b536dc3..838dc931d6 100644 --- a/firmware/controllers/algo/engine2.cpp +++ b/firmware/controllers/algo/engine2.cpp @@ -174,10 +174,6 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { baroCorrection = getBaroCorrection(PASS_ENGINE_PARAMETER_SIGNATURE); - injectionOffset = getInjectionOffset(rpm PASS_ENGINE_PARAMETER_SUFFIX); - float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); - timingAdvance = getAdvance(rpm, engineLoad PASS_ENGINE_PARAMETER_SUFFIX); - multispark.count = getMultiSparkCount(rpm PASS_ENGINE_PARAMETER_SUFFIX); if (engineConfiguration->fuelAlgorithm == LM_SPEED_DENSITY) { @@ -203,10 +199,16 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } currentBaroCorrectedVE = baroCorrection * currentRawVE * PERCENT_DIV; } else { - baseTableFuel = getBaseTableFuel(rpm, engineLoad); + baseTableFuel = getBaseTableFuel(rpm, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); } ENGINE(injectionDuration) = getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); + + float fuelLoad = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); + injectionOffset = getInjectionOffset(rpm, fuelLoad PASS_ENGINE_PARAMETER_SUFFIX); + + float ignitionLoad = getIgnitionLoad(PASS_ENGINE_PARAMETER_SIGNATURE); + timingAdvance = getAdvance(rpm, ignitionLoad PASS_ENGINE_PARAMETER_SUFFIX); #endif // EFI_ENGINE_CONTROL } diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index c744702a62..5900d0c6c7 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -260,18 +260,16 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { return tpsAccelEnrich + baseFuel; } -angle_t getInjectionOffset(float rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { +angle_t getInjectionOffset(float rpm, float load DECLARE_ENGINE_PARAMETER_SUFFIX) { if (cisnan(rpm)) { return 0; // error already reported } - float engineLoad = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); - - if (cisnan(engineLoad)) { + if (cisnan(load)) { return 0; // error already reported } - angle_t value = fuelPhaseMap.getValue(rpm, engineLoad); + angle_t value = fuelPhaseMap.getValue(rpm, load); if (cisnan(value)) { // we could be here while resetting configuration for example diff --git a/firmware/controllers/algo/fuel_math.h b/firmware/controllers/algo/fuel_math.h index 4bd979900a..d0b52aebff 100644 --- a/firmware/controllers/algo/fuel_math.h +++ b/firmware/controllers/algo/fuel_math.h @@ -27,7 +27,7 @@ AirmassResult getRealMafAirmass(float airMass, int rpm DECLARE_ENGINE_PARAMETER_ floatms_t getBaseTableFuel(int rpm, float engineLoad); float getBaroCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); int getNumberOfInjections(injection_mode_e mode DECLARE_ENGINE_PARAMETER_SUFFIX); -angle_t getInjectionOffset(float rpm DECLARE_ENGINE_PARAMETER_SUFFIX); +angle_t getInjectionOffset(float rpm, float load DECLARE_ENGINE_PARAMETER_SUFFIX); float getIatFuelCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); floatms_t getInjectorLag(float vBatt DECLARE_ENGINE_PARAMETER_SUFFIX); float getCltFuelCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); From 2cad639bf168990a211d8fdb6047d3191fd2f285 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Mon, 20 Jul 2020 23:13:50 -0700 Subject: [PATCH 2/8] update ts --- firmware/tunerstudio/rusefi.input | 32 +------------------------------ 1 file changed, 1 insertion(+), 31 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index fc82f23e5e..b37da867dc 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -24,8 +24,6 @@ ; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. enable2ndByteCanID = false -;#unset tuneByMAF - [SettingGroups] ; the referenceName will over-ride previous, so if you are creating a ; settingGroup with a reference name of lambdaSensor, it will replace the @@ -33,16 +31,6 @@ enable2ndByteCanID = false ; folder. If is is an undefined referenceName, it will be added. ; keyword = referenceName, DisplayName - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 signature = @@TS_SIGNATURE@@ @@ -146,11 +134,7 @@ enable2ndByteCanID = false [VeAnalyze] ; tableName, lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition -#if tuneByMAF - veAnalyzeMap = fuelTableMAFTbl, afrTableTbl, AFRValue, egoCorrection, { 1 } -#else veAnalyzeMap = veTableTbl, afrTableTbl, AFRValue, egoCorrection, { 1 } -#endif lambdaTargetTables = afrTableTbl, afrTSCustom ; filter = Name, "DisplayName", outputChannel, operator, defaultVal, userAdjustable @@ -802,14 +786,7 @@ enable2ndByteCanID = false table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1 ; constant, variable xBins = ignitionRpmBins, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - + yBins = ignitionLoadBins, ignitionLoad zBins = ignitionTable ; gridHeight = 2.0 gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. @@ -837,11 +814,7 @@ enable2ndByteCanID = false table = veTableTbl, veTableMap, "VE Table", 1 ; constant, variable xBins = veRpmBins, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else yBins = veLoadBins, fuelingLoad -#endif zBins = veTable ; gridHeight = 2.0 gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. @@ -1600,12 +1573,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Mode", injectionMode, {isInjectionEnabled == 1} field = "#Batch injection with individual wiring" field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif dialog = ignitionOutputs, "Ignition Outputs" field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} From dbd2827f41b38fb8c775273264927de56a2e8e66 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 00:07:49 -0700 Subject: [PATCH 3/8] now unused table --- firmware/integration/rusefi_config.txt | 3 +-- firmware/tunerstudio/rusefi.input | 11 ----------- firmware/util/containers/table_helper.h | 5 ----- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 5dcf9c94ec..c443ec0b74 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -188,7 +188,6 @@ custom baro_corr_table_t 4*@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@ array, F32, custom ignition_table_t 4*@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@ array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -20, 90, 2 -custom ignition_tps_table_t 2*@@IGN_RPM_COUNT@@x@@IGN_TPS_COUNT@@ array, S16, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_TPS_COUNT@@],"deg", 0.01, 0, -20, 90, 2 custom angle_table_t 4*@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@ array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -720, 720, 2 custom pedal_to_tps_t @@PEDAL_TO_TPS_SIZE@@x@@PEDAL_TO_TPS_SIZE@@ array, U08, @OFFSET@, [@@PEDAL_TO_TPS_SIZE@@x@@PEDAL_TO_TPS_SIZE@@],"%", 1, 0, 0, 100, 0 @@ -1226,7 +1225,7 @@ float[CRANKING_ADVANCE_CURVE_SIZE] crankingAdvance ;+Optional timing advance float[CLT_CURVE_SIZE] iacCoastingBins;CLT-based idle position for coasting (used in Auto-PID Idle mode);"C", 1, 0, -100.0, 250.0, 2 float[CLT_CURVE_SIZE] iacCoasting; CLT-based idle position for coasting (used in Auto-PID Idle mode);"%", 1, 0, 0.0, 100.0, 2 -ignition_tps_table_t ignitionTpsTable; +uint8_t[512] unused3288;;"units", 1, 0, -20, 100, 0 float[IGN_TPS_COUNT] ignitionTpsBins;;"TPS", 1, 0.0, 0, 100.0, 2 float tChargeAirCoefMin;;"Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index b37da867dc..6dafa6c56f 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -791,17 +791,7 @@ enable2ndByteCanID = false ; gridHeight = 2.0 gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - zBins = ignitionTpsTable - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1 ; constant, variable xBins = ignitionIatCorrRpmBins, RPMValue @@ -1266,7 +1256,6 @@ menuDialog = main subMenu = std_separator subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} subMenu = std_separator # corrections diff --git a/firmware/util/containers/table_helper.h b/firmware/util/containers/table_helper.h index bc2842f7ca..46a9262a50 100644 --- a/firmware/util/containers/table_helper.h +++ b/firmware/util/containers/table_helper.h @@ -147,14 +147,9 @@ void copy2DTable(const vType source[LOAD_BIN_SIZE][RPM_BIN_SIZE], vType destinat * AFR value is packed into uint8_t with a multiplier of 10 */ #define AFR_STORAGE_MULT 10 -/** - * TPS-based Advance value is packed into int16_t with a multiplier of 100 - */ -#define ADVANCE_TPS_STORAGE_MULT 100 typedef Map3D afr_Map3D_t; typedef Map3D ign_Map3D_t; -typedef Map3D ign_tps_Map3D_t; typedef Map3D fuel_Map3D_t; typedef Map3D baroCorr_Map3D_t; typedef Map3D pedal2tps_t; From 0aa42762d959b8b9455eeb852eb946a88eece428 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 00:08:41 -0700 Subject: [PATCH 4/8] remove --- firmware/controllers/algo/advance_map.cpp | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/firmware/controllers/algo/advance_map.cpp b/firmware/controllers/algo/advance_map.cpp index d48901fbf3..ed5f51d78f 100644 --- a/firmware/controllers/algo/advance_map.cpp +++ b/firmware/controllers/algo/advance_map.cpp @@ -35,7 +35,6 @@ EXTERN_ENGINE; static ign_Map3D_t advanceMap("advance"); // This coeff in ctor parameter is sufficient for int16<->float conversion! -static ign_tps_Map3D_t advanceTpsMap("advanceTps", 1.0 / ADVANCE_TPS_STORAGE_MULT); static ign_Map3D_t iatAdvanceCorrectionMap("iat corr"); // Init PID later (make it compatible with unit-tests) @@ -84,14 +83,7 @@ static angle_t getRunningAdvance(int rpm, float engineLoad DECLARE_ENGINE_PARAME efiAssert(CUSTOM_ERR_ASSERT, !cisnan(engineLoad), "invalid el", NAN); - float advanceAngle; - if (CONFIG(useTPSAdvanceTable)) { - // TODO: what do we do about multi-TPS? - float tps = Sensor::get(SensorType::Tps1).value_or(0); - advanceAngle = advanceTpsMap.getValue(rpm, tps); - } else { - advanceAngle = advanceMap.getValue((float) rpm, engineLoad); - } + float advanceAngle = advanceMap.getValue((float) rpm, engineLoad); // get advance from the separate table for Idle if (CONFIG(useSeparateAdvanceForIdle)) { @@ -297,8 +289,6 @@ void initTimingMap(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // We init both tables in RAM because here we're at a very early stage, with no config settings loaded. advanceMap.init(config->ignitionTable, config->ignitionLoadBins, config->ignitionRpmBins); - advanceTpsMap.init(CONFIG(ignitionTpsTable), CONFIG(ignitionTpsBins), - config->ignitionRpmBins); iatAdvanceCorrectionMap.init(config->ignitionIatCorrTable, config->ignitionIatCorrLoadBins, config->ignitionIatCorrRpmBins); // init timing PID From 50873aae4c90d5549185d56d0d1ee2f59e3ed650 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 00:10:05 -0700 Subject: [PATCH 5/8] we want fuelingload there --- firmware/controllers/algo/engine2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/algo/engine2.cpp b/firmware/controllers/algo/engine2.cpp index 838dc931d6..fe830640af 100644 --- a/firmware/controllers/algo/engine2.cpp +++ b/firmware/controllers/algo/engine2.cpp @@ -199,7 +199,7 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } currentBaroCorrectedVE = baroCorrection * currentRawVE * PERCENT_DIV; } else { - baseTableFuel = getBaseTableFuel(rpm, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); + baseTableFuel = getBaseTableFuel(rpm, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE)); } ENGINE(injectionDuration) = getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); From 47bd4e54b03625999b9d630efa50167ce2b80495 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 11:54:32 -0700 Subject: [PATCH 6/8] fix for test --- firmware/controllers/algo/engine2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/algo/engine2.cpp b/firmware/controllers/algo/engine2.cpp index fe830640af..838dc931d6 100644 --- a/firmware/controllers/algo/engine2.cpp +++ b/firmware/controllers/algo/engine2.cpp @@ -199,7 +199,7 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } currentBaroCorrectedVE = baroCorrection * currentRawVE * PERCENT_DIV; } else { - baseTableFuel = getBaseTableFuel(rpm, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE)); + baseTableFuel = getBaseTableFuel(rpm, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); } ENGINE(injectionDuration) = getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); From 26a3efe20497c61792fea78c03c32b2a9c6b8676 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 14:07:58 -0700 Subject: [PATCH 7/8] always show that option --- firmware/tunerstudio/rusefi.input | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 6dafa6c56f..8284ae0653 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -1583,7 +1583,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "#Wasted spark with individual coils" field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2} field = "Timing Mode", timingMode, {isIgnitionEnabled == 1} - field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} + field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1} field = "#Use fixed timing while validating with a timing gun" field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} From 3f293e573c2b41a3c3a4b6cb4441c43a32c4e2e1 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 21 Jul 2020 14:13:29 -0700 Subject: [PATCH 8/8] cleanup --- firmware/controllers/algo/engine2.cpp | 2 -- firmware/controllers/algo/engine_state.h | 4 ---- firmware/controllers/algo/fuel_math.cpp | 2 +- 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/firmware/controllers/algo/engine2.cpp b/firmware/controllers/algo/engine2.cpp index 838dc931d6..a8205974ae 100644 --- a/firmware/controllers/algo/engine2.cpp +++ b/firmware/controllers/algo/engine2.cpp @@ -198,8 +198,6 @@ void EngineState::periodicFastCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { currentRawVE = interpolateClamped(0.0f, idleVe, CONFIG(idlePidDeactivationTpsThreshold), currentRawVE, tps.Value); } currentBaroCorrectedVE = baroCorrection * currentRawVE * PERCENT_DIV; - } else { - baseTableFuel = getBaseTableFuel(rpm, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); } ENGINE(injectionDuration) = getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX); diff --git a/firmware/controllers/algo/engine_state.h b/firmware/controllers/algo/engine_state.h index 50361ab441..6299bfb3ea 100644 --- a/firmware/controllers/algo/engine_state.h +++ b/firmware/controllers/algo/engine_state.h @@ -66,10 +66,6 @@ public: float fuelingLoad = 0; float ignitionLoad = 0; - /** - * pre-calculated value from simple fuel lookup - */ - floatms_t baseTableFuel = 0; /** * Raw fuel injection duration produced by current fuel algorithm, without any correction */ diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 5900d0c6c7..0c5e69da55 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -251,7 +251,7 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { // TODO: independently selectable ignition load mode ENGINE(engineState.ignitionLoad) = tps; - baseFuel = engine->engineState.baseTableFuel; + baseFuel = getBaseTableFuel(rpm, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); efiAssert(CUSTOM_ERR_ASSERT, !cisnan(baseFuel), "NaN bt baseFuel", 0); }