diff --git a/firmware/controllers/algo/defaults/default_ignition.cpp b/firmware/controllers/algo/defaults/default_ignition.cpp index 66c216cdab..bea9bf6e41 100644 --- a/firmware/controllers/algo/defaults/default_ignition.cpp +++ b/firmware/controllers/algo/defaults/default_ignition.cpp @@ -98,6 +98,9 @@ void setDefaultIgnition() { // Dwell table setConstantDwell(4); + setLinearCurve(engineConfiguration->dwellVoltageCorrVoltBins, 8, 12, 0.1); + setLinearCurve(engineConfiguration->dwellVoltageCorrValues, 1, 1, 1); + // Multispark setDefaultMultisparkParameters(); diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 41ae2e6a98..94a51a7541 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -600,13 +600,11 @@ bool validateConfig() { ensureArrayIsAscending("Ignition IAT corr RPM", config->ignitionIatCorrRpmBins); } - if (config->mapEstimateTpsBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Map estimate TPS", config->mapEstimateTpsBins); - } + ensureArrayIsAscendingOrDefault("Map estimate TPS", config->mapEstimateTpsBins); + ensureArrayIsAscendingOrDefault("Map estimate RPM", config->mapEstimateRpmBins); - if (config->mapEstimateRpmBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Map estimate RPM", config->mapEstimateRpmBins); - } + ensureArrayIsAscendingOrDefault("Dwell Correction Voltage", engineConfiguration->dwellVoltageCorrVoltBins); + ensureArrayIsAscendingOrDefault("Dwell Correction Values", engineConfiguration->dwellVoltageCorrValues); ensureArrayIsAscending("MAF decoding", config->mafDecodingBins); @@ -618,18 +616,10 @@ bool validateConfig() { // Idle tables ensureArrayIsAscending("Idle target RPM", engineConfiguration->cltIdleRpmBins); ensureArrayIsAscending("Idle warmup mult", config->cltIdleCorrBins); - if (engineConfiguration->iacCoastingBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Idle coasting position", engineConfiguration->iacCoastingBins); - } - if (config->idleVeRpmBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Idle VE RPM", config->idleVeRpmBins); - } - if (config->idleVeLoadBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Idle VE Load", config->idleVeLoadBins); - } - if (config->idleAdvanceBins[1] != 0) { // only validate map if not all zeroes default - ensureArrayIsAscending("Idle timing", config->idleAdvanceBins); - } + ensureArrayIsAscendingOrDefault("Idle coasting position", engineConfiguration->iacCoastingBins); + ensureArrayIsAscendingOrDefault("Idle VE RPM", config->idleVeRpmBins); + ensureArrayIsAscendingOrDefault("Idle VE Load", config->idleVeLoadBins); + ensureArrayIsAscendingOrDefault("Idle timing", config->idleAdvanceBins); for (size_t index = 0; index < efi::size(engineConfiguration->vrThreshold); index++) { auto& cfg = engineConfiguration->vrThreshold[index]; diff --git a/firmware/util/math/interpolation.h b/firmware/util/math/interpolation.h index aaf38302aa..9e3ae9af90 100644 --- a/firmware/util/math/interpolation.h +++ b/firmware/util/math/interpolation.h @@ -37,6 +37,14 @@ void ensureArrayIsAscending(const char* msg, const TValue (&values)[TSize]) { } } +template +void ensureArrayIsAscendingOrDefault(const char* msg, const TValue (&values)[TSize]) { + if (values[1] == 0) { + return; // looks like default empty array, do not check + } + ensureArrayIsAscending(msg, values); +} + namespace priv { struct BinResult {