diff --git a/java_console/models/src/com/rusefi/autotune/FuelAutoLogic.java b/java_console/models/src/com/rusefi/autotune/FuelAutoLogic.java new file mode 100644 index 0000000000..d00eb7a6fb --- /dev/null +++ b/java_console/models/src/com/rusefi/autotune/FuelAutoLogic.java @@ -0,0 +1,12 @@ +package com.rusefi.autotune; + +import java.util.Collection; + +/** + * (c) Andrey Belomutskiy 2013-2016 + * 2/18/2016. + */ +public interface FuelAutoLogic { + // void MainWindow::calckGBC(double STEP) + FuelAutoTune.Result process(boolean smooth, Collection dataECU, double STEP, double targetAFR, float[][] kgbcINIT); +} diff --git a/java_console/models/src/com/rusefi/autotune/FuelAutoTune.java b/java_console/models/src/com/rusefi/autotune/FuelAutoTune.java index 1adc70ce28..4bb98b147c 100644 --- a/java_console/models/src/com/rusefi/autotune/FuelAutoTune.java +++ b/java_console/models/src/com/rusefi/autotune/FuelAutoTune.java @@ -8,7 +8,9 @@ import java.util.Collection; * 1/5/2016 * (c) Andrey Belomutskiy 2013-2016 */ -public class FuelAutoTune { +public enum FuelAutoTune implements FuelAutoLogic { + INSTANCE; + // todo: eliminate this // Fields.FUEL_RPM_COUNT // Fields.FUEL_LOAD_COUNT @@ -85,18 +87,9 @@ public class FuelAutoTune { } } - private static float[][] deepCopy(float[][] input) { - if (input == null) - return null; - float[][] result = new float[input.length][]; - for (int r = 0; r < input.length; r++) { - result[r] = input[r].clone(); - } - return result; - } - // void MainWindow::calckGBC(double STEP) - public static Result process(boolean smooth, Collection dataECU, double STEP, double targetAFR, float[][] kgbcINIT) { + @Override + public Result process(boolean smooth, Collection dataECU, double STEP, double targetAFR, float[][] kgbcINIT) { float kgbcSQ[][] = new float[SIZE][SIZE]; double kgbcSQsum = 0; double kgbcSQsumLast; @@ -115,7 +108,7 @@ public class FuelAutoTune { bkGBC[data.PRESS_RT_32()][data.RPM_RT_32()]++; } - float result[][] = deepCopy(kgbcINIT); + float result[][] = MathUtil.deepCopy(kgbcINIT); // double addGbcTwatRES[] = new double[TEMP_CORR]; // double addGbcTwatINIT[] = new double[TEMP_CORR]; @@ -169,7 +162,7 @@ public class FuelAutoTune { countDeviation(dataECU, kgbcSQ, result, kgbcINIT, targetAFR); - kgbcSQsum = sumArray(kgbcSQ); + kgbcSQsum = MathUtil.sumArray(kgbcSQ); if (smooth) { kgbcSQsum = smooth(kgbcSQsum, ksq, ke, kg, result); @@ -231,16 +224,6 @@ public class FuelAutoTune { } } - private static double sumArray(float[][] kgbcSQ) { - double kgbcSQsum = 0; - for (int i = 0; i < SIZE; i++) { - for (int j = 0; j < SIZE; j++) { - kgbcSQsum += kgbcSQ[i][j]; - } - } - return kgbcSQsum; - } - private static double smooth(double kgbcSQsum, double ksq, double ke, double kg, float[][] kgbcRES) { double e; double g; diff --git a/java_console/models/src/com/rusefi/autotune/MathUtil.java b/java_console/models/src/com/rusefi/autotune/MathUtil.java new file mode 100644 index 0000000000..9f76d586d5 --- /dev/null +++ b/java_console/models/src/com/rusefi/autotune/MathUtil.java @@ -0,0 +1,30 @@ +package com.rusefi.autotune; + +/** + * (c) Andrey Belomutskiy 2013-2016 + * 2/18/2016. + */ +public class MathUtil { + private MathUtil() { + } + + static float[][] deepCopy(float[][] input) { + if (input == null) + return null; + float[][] result = new float[input.length][]; + for (int r = 0; r < input.length; r++) { + result[r] = input[r].clone(); + } + return result; + } + + static double sumArray(float[][] array2) { + double result = 0; + for (float[] array1 : array2) { + for (float element : array1) { + result += element; + } + } + return result; + } +} diff --git a/java_console/models/src/com/rusefi/autotune/test/FuelAutoTuneTest.java b/java_console/models/src/com/rusefi/autotune/test/FuelAutoTuneTest.java index c5bd043a6b..dfd2cd0f54 100644 --- a/java_console/models/src/com/rusefi/autotune/test/FuelAutoTuneTest.java +++ b/java_console/models/src/com/rusefi/autotune/test/FuelAutoTuneTest.java @@ -19,7 +19,7 @@ public class FuelAutoTuneTest { dataPoints.add(FuelAutoTune.stDataOnline.valueOf(13, 1200, 80)); { - FuelAutoTune.Result r = FuelAutoTune.process(false, dataPoints, 0.1, 13, createVeTable()); + FuelAutoTune.Result r = FuelAutoTune.INSTANCE.process(false, dataPoints, 0.1, 13, createVeTable()); printNotDefault(r.getKgbcRES(), 1); } @@ -32,7 +32,7 @@ public class FuelAutoTuneTest { dataPoints.add(FuelAutoTune.stDataOnline.valueOf(16, 1500 + i, 90)); { - FuelAutoTune.Result r = FuelAutoTune.process(false, dataPoints, 0.01, 13, createVeTable()); + FuelAutoTune.Result r = FuelAutoTune.INSTANCE.process(false, dataPoints, 0.01, 13, createVeTable()); printNotDefault(r.getKgbcRES(), 1); } @@ -40,7 +40,7 @@ public class FuelAutoTuneTest { dataPoints.add(FuelAutoTune.stDataOnline.valueOf(15, 1500 + i, 90)); { - FuelAutoTune.Result r = FuelAutoTune.process(false, dataPoints, 0.01, 13, createVeTable()); + FuelAutoTune.Result r = FuelAutoTune.INSTANCE.process(false, dataPoints, 0.01, 13, createVeTable()); printNotDefault(r.getKgbcRES(), 1); } diff --git a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java index 146e218d94..98f4250d07 100644 --- a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java +++ b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java @@ -199,7 +199,7 @@ public class FuelTunePane { writeDataPoints(data); // todo: move this away from AWT thread - FuelAutoTune.Result a = FuelAutoTune.process(false, data, 0.1, 14.7, veTable); + FuelAutoTune.Result a = FuelAutoTune.INSTANCE.process(false, data, 0.1, 14.7, veTable); float[][] result = a.getKgbcRES(); logMap("result", result);