auto-sync

This commit is contained in:
rusEfi 2015-05-12 19:04:46 -04:00
parent 2d393151f6
commit 64e3e2e488
18 changed files with 219 additions and 220 deletions

View File

@ -198,7 +198,7 @@ void Engine::periodicFastCallback(DECLARE_ENGINE_PARAMETER_F) {
/** /**
* *0.01 because of https://sourceforge.net/p/rusefi/tickets/153/ * *0.01 because of https://sourceforge.net/p/rusefi/tickets/153/
*/ */
engine->engineState.currentVE = veMap.getValue(map, rpm) * 0.01; engine->engineState.currentVE = engine->engineState.baroCorrection * veMap.getValue(map, rpm) * 0.01;
engine->engineState.targerAFR = afrMap.getValue(map, rpm); engine->engineState.targerAFR = afrMap.getValue(map, rpm);
} else { } else {
float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F); float engineLoad = getEngineLoadT(PASS_ENGINE_PARAMETER_F);

View File

@ -3,14 +3,14 @@ package com.rusefi;
import com.rusefi.core.Sensor; import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral; import com.rusefi.core.SensorCentral;
import com.rusefi.waves.WaveChart; import com.rusefi.waves.EngineChart;
import com.rusefi.waves.WaveReport; import com.rusefi.waves.EngineReport;
import static com.rusefi.TestingUtils.nextChart; import static com.rusefi.TestingUtils.nextChart;
import static com.rusefi.IoUtil.sendCommand; import static com.rusefi.IoUtil.sendCommand;
import static com.rusefi.IoUtil.sleep; import static com.rusefi.IoUtil.sleep;
import static com.rusefi.TestingUtils.*; import static com.rusefi.TestingUtils.*;
import static com.rusefi.waves.WaveReport.isCloseEnough; import static com.rusefi.waves.EngineReport.isCloseEnough;
/** /**
* rusEfi firmware simulator functional test suite * rusEfi firmware simulator functional test suite
@ -50,20 +50,20 @@ public class AutoTest {
setEngineType(25); setEngineType(25);
sendCommand("chart 1"); sendCommand("chart 1");
String msg = "BMW"; String msg = "BMW";
WaveChart chart; EngineChart chart;
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
chart = nextChart(); chart = nextChart();
double x = 173.988; double x = 173.988;
assertWave(msg, chart, WaveChart.SPARK_1, 0.0199666, x, x + 180, x + 360, x + 540); assertWave(msg, chart, EngineChart.SPARK_1, 0.0199666, x, x + 180, x + 360, x + 540);
IoUtil.changeRpm(1200); IoUtil.changeRpm(1200);
chart = nextChart(); chart = nextChart();
x = 688.464; x = 688.464;
assertWave(msg, chart, WaveChart.SPARK_1, 0.0597999999, x, x + 180, x + 360, x + 540); assertWave(msg, chart, EngineChart.SPARK_1, 0.0597999999, x, x + 180, x + 360, x + 540);
assertWave(msg, chart, WaveChart.MAP_AVERAGING, 0.139, 17.784); assertWave(msg, chart, EngineChart.MAP_AVERAGING, 0.139, 17.784);
} }
private static void testMitsu() { private static void testMitsu() {
@ -93,75 +93,75 @@ public class AutoTest {
setEngineType(28); setEngineType(28);
String msg = "mazda 626 default cranking"; String msg = "mazda 626 default cranking";
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
WaveChart chart; EngineChart chart;
chart = nextChart(); chart = nextChart();
double x = 102; double x = 102;
assertWave(msg, chart, WaveChart.SPARK_1, 0.1944, x, x + 180, x + 360, x + 540); assertWave(msg, chart, EngineChart.SPARK_1, 0.1944, x, x + 180, x + 360, x + 540);
} }
private static void test2003DodgeNeon() { private static void test2003DodgeNeon() {
setEngineType(23); setEngineType(23);
WaveChart chart; EngineChart chart;
String msg = "2003 Neon cranking "; String msg = "2003 Neon cranking ";
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
chart = nextChart(); chart = nextChart();
double x = 100; double x = 100;
assertWave(true, msg, chart, WaveChart.SPARK_1, 0.194433, 0.01, WaveReport.RATIO, x + 180, x + 540); assertWave(true, msg, chart, EngineChart.SPARK_1, 0.194433, 0.01, EngineReport.RATIO, x + 180, x + 540);
assertWaveNull(msg, chart, WaveChart.SPARK_2); assertWaveNull(msg, chart, EngineChart.SPARK_2);
assertWave(true, msg, chart, WaveChart.SPARK_3, 0.194433, 0.01, WaveReport.RATIO, x, x + 360); assertWave(true, msg, chart, EngineChart.SPARK_3, 0.194433, 0.01, EngineReport.RATIO, x, x + 360);
assertWaveNull(msg, chart, WaveChart.SPARK_4); assertWaveNull(msg, chart, EngineChart.SPARK_4);
x = 176.856; x = 176.856;
// todo: why is width precision so low here? is that because of loaded Windows with 1ms precision? // todo: why is width precision so low here? is that because of loaded Windows with 1ms precision?
double widthRatio = 0.25; double widthRatio = 0.25;
assertWave(true, msg, chart, WaveChart.INJECTOR_1, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540); assertWave(true, msg, chart, EngineChart.INJECTOR_1, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540);
assertWave(true, msg, chart, WaveChart.INJECTOR_2, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540); assertWave(true, msg, chart, EngineChart.INJECTOR_2, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540);
assertWave(true, msg, chart, WaveChart.INJECTOR_3, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540); assertWave(true, msg, chart, EngineChart.INJECTOR_3, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540);
assertWave(true, msg, chart, WaveChart.INJECTOR_4, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540); assertWave(true, msg, chart, EngineChart.INJECTOR_4, 0.006266666666, 0.01, widthRatio, x, x + 180, x + 360, x + 540);
msg = "2003 Neon running"; msg = "2003 Neon running";
IoUtil.changeRpm(2000); IoUtil.changeRpm(2000);
chart = nextChart(); chart = nextChart();
x = 113.28; x = 113.28;
assertWave(true, msg, chart, WaveChart.SPARK_1, 0.13299999999999998, 0.005, WaveReport.RATIO, x + 180, x + 540); assertWave(true, msg, chart, EngineChart.SPARK_1, 0.13299999999999998, 0.005, EngineReport.RATIO, x + 180, x + 540);
assertWaveNull(msg, chart, WaveChart.SPARK_2); assertWaveNull(msg, chart, EngineChart.SPARK_2);
assertWave(true, msg, chart, WaveChart.SPARK_3, 0.13299999999999998, 0.005, WaveReport.RATIO, x, x + 360); assertWave(true, msg, chart, EngineChart.SPARK_3, 0.13299999999999998, 0.005, EngineReport.RATIO, x, x + 360);
assertWaveNull(msg, chart, WaveChart.SPARK_4); assertWaveNull(msg, chart, EngineChart.SPARK_4);
x = 168.12; x = 168.12;
assertWave(true, msg, chart, WaveChart.INJECTOR_1, 0.03333333333333302, 0.01, 0.1, x + 360); assertWave(true, msg, chart, EngineChart.INJECTOR_1, 0.03333333333333302, 0.01, 0.1, x + 360);
assertWave(true, msg, chart, WaveChart.INJECTOR_2, 0.03333333333333302, 0.01, 0.1, x + 180); assertWave(true, msg, chart, EngineChart.INJECTOR_2, 0.03333333333333302, 0.01, 0.1, x + 180);
assertWave(true, msg, chart, WaveChart.INJECTOR_3, 0.03333333333333302, 0.01, 0.1, x + 540); assertWave(true, msg, chart, EngineChart.INJECTOR_3, 0.03333333333333302, 0.01, 0.1, x + 540);
assertWave(true, msg, chart, WaveChart.INJECTOR_4, 0.03333333333333302, 0.01, 0.1, x); assertWave(true, msg, chart, EngineChart.INJECTOR_4, 0.03333333333333302, 0.01, 0.1, x);
} }
private static void testMazdaProtege() { private static void testMazdaProtege() {
setEngineType(14); setEngineType(14);
WaveChart chart; EngineChart chart;
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
String msg = "ProtegeLX cranking"; String msg = "ProtegeLX cranking";
chart = nextChart(); chart = nextChart();
double x = 107; double x = 107;
assertWave(msg, chart, WaveChart.SPARK_1, 0.194433, x, x + 180, x + 360, x + 540); assertWave(msg, chart, EngineChart.SPARK_1, 0.194433, x, x + 180, x + 360, x + 540);
x = 0; x = 0;
assertWaveFall(msg, chart, WaveChart.INJECTOR_1, 0.004666666666, x, x + 180, x + 360, x + 540); assertWaveFall(msg, chart, EngineChart.INJECTOR_1, 0.004666666666, x, x + 180, x + 360, x + 540);
assertWaveFall(msg, chart, WaveChart.INJECTOR_2, 0.004666666666, x, x + 180, x + 360, x + 540); assertWaveFall(msg, chart, EngineChart.INJECTOR_2, 0.004666666666, x, x + 180, x + 360, x + 540);
msg = "ProtegeLX running"; msg = "ProtegeLX running";
IoUtil.changeRpm(2000); IoUtil.changeRpm(2000);
chart = nextChart(); chart = nextChart();
x = 127.92; x = 127.92;
assertWave(msg, chart, WaveChart.SPARK_1, 0.13333333333333333, x, x + 180, x + 360, x + 540); assertWave(msg, chart, EngineChart.SPARK_1, 0.13333333333333333, x, x + 180, x + 360, x + 540);
x = 0; x = 0;
assertWaveFall(msg, chart, WaveChart.INJECTOR_1, 0.09766666666666689, x + 180, x + 540); assertWaveFall(msg, chart, EngineChart.INJECTOR_1, 0.09766666666666689, x + 180, x + 540);
assertWaveFall(msg, chart, WaveChart.INJECTOR_2, 0.09766666666666689, x, x + 360); assertWaveFall(msg, chart, EngineChart.INJECTOR_2, 0.09766666666666689, x, x + 360);
} }
private static void test1995DodgeNeon() { private static void test1995DodgeNeon() {
setEngineType(2); setEngineType(2);
WaveChart chart; EngineChart chart;
sendComplexCommand("set_whole_fuel_map 3"); sendComplexCommand("set_whole_fuel_map 3");
sendComplexCommand("set_ignition_mode 1"); sendComplexCommand("set_ignition_mode 1");
/** /**
@ -172,16 +172,16 @@ public class AutoTest {
String msg = "1995 Neon"; String msg = "1995 Neon";
double x = -70; double x = -70;
assertWaveFall(msg, chart, WaveChart.INJECTOR_4, 0.133, x + 540); assertWaveFall(msg, chart, EngineChart.INJECTOR_4, 0.133, x + 540);
assertWaveFall(msg, chart, WaveChart.INJECTOR_2, 0.133, x + 720); assertWaveFall(msg, chart, EngineChart.INJECTOR_2, 0.133, x + 720);
assertWaveFall(msg, chart, WaveChart.INJECTOR_1, 0.133, x + 180); assertWaveFall(msg, chart, EngineChart.INJECTOR_1, 0.133, x + 180);
assertWaveFall(msg, chart, WaveChart.INJECTOR_3, 0.133, x + 360); assertWaveFall(msg, chart, EngineChart.INJECTOR_3, 0.133, x + 360);
x = 115.92; x = 115.92;
assertWave(msg, chart, WaveChart.SPARK_4, 0.13333, x + 540); assertWave(msg, chart, EngineChart.SPARK_4, 0.13333, x + 540);
assertWave(msg, chart, WaveChart.SPARK_2, 0.13333, x); assertWave(msg, chart, EngineChart.SPARK_2, 0.13333, x);
assertWave(msg, chart, WaveChart.SPARK_1, 0.13333, x + 180); assertWave(msg, chart, EngineChart.SPARK_1, 0.13333, x + 180);
assertWave(msg, chart, WaveChart.SPARK_3, 0.13333, x + 360); assertWave(msg, chart, EngineChart.SPARK_3, 0.13333, x + 360);
// switching to Speed Density // switching to Speed Density
if (!TestingUtils.isRealHardware) if (!TestingUtils.isRealHardware)
@ -189,44 +189,44 @@ public class AutoTest {
sendComplexCommand("set_algorithm 3"); sendComplexCommand("set_algorithm 3");
chart = nextChart(); chart = nextChart();
x = -70; x = -70;
assertWaveFall(msg, chart, WaveChart.INJECTOR_4, 0.463, x + 540); assertWaveFall(msg, chart, EngineChart.INJECTOR_4, 0.463, x + 540);
} }
private static void testFordFiesta() { private static void testFordFiesta() {
setEngineType(4); setEngineType(4);
WaveChart chart; EngineChart chart;
IoUtil.changeRpm(2000); IoUtil.changeRpm(2000);
chart = nextChart(); chart = nextChart();
String msg = "Fiesta"; String msg = "Fiesta";
double x = 312; double x = 312;
assertWave("wasted spark #1 with Fiesta", chart, WaveChart.SPARK_1, 0.1333333, x, x + 360); assertWave("wasted spark #1 with Fiesta", chart, EngineChart.SPARK_1, 0.1333333, x, x + 360);
assertWaveNull(chart, WaveChart.SPARK_2); assertWaveNull(chart, EngineChart.SPARK_2);
assertWave("wasted spark #3 with Fiesta", chart, WaveChart.SPARK_3, 0.1333333, x + 180, x + 540); assertWave("wasted spark #3 with Fiesta", chart, EngineChart.SPARK_3, 0.1333333, x + 180, x + 540);
assertWaveNull(msg, chart, WaveChart.SPARK_4); assertWaveNull(msg, chart, EngineChart.SPARK_4);
} }
private static void testFord6() { private static void testFord6() {
setEngineType(7); setEngineType(7);
WaveChart chart; EngineChart chart;
IoUtil.changeRpm(2000); IoUtil.changeRpm(2000);
chart = nextChart(); chart = nextChart();
String msg = "ford 6"; String msg = "ford 6";
double x = 12.84; double x = 12.84;
assertWave(msg, chart, WaveChart.SPARK_1, 0.01666, x, x + 120, x + 240, x + 360, x + 480, x + 600); assertWave(msg, chart, EngineChart.SPARK_1, 0.01666, x, x + 120, x + 240, x + 360, x + 480, x + 600);
assertWaveNull(msg, chart, WaveChart.TRIGGER_2); assertWaveNull(msg, chart, EngineChart.TRIGGER_2);
sendComplexCommand("set_trigger_type 1"); // TT_FORD_ASPIRE sendComplexCommand("set_trigger_type 1"); // TT_FORD_ASPIRE
chart = nextChart(); chart = nextChart();
assertTrue(msg, chart.get(WaveChart.TRIGGER_2) != null); assertTrue(msg, chart.get(EngineChart.TRIGGER_2) != null);
} }
private static void testFordAspire() { private static void testFordAspire() {
setEngineType(3); setEngineType(3);
String msg; String msg;
WaveChart chart; EngineChart chart;
// todo: interesting changeRpm(100); // todo: interesting changeRpm(100);
sendComplexCommand("set_cranking_rpm 500"); sendComplexCommand("set_cranking_rpm 500");
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
@ -234,13 +234,13 @@ public class AutoTest {
double x; double x;
chart = nextChart(); chart = nextChart();
x = 55; x = 55;
assertWave("aspire default cranking ", chart, WaveChart.SPARK_1, 0.1944, x, x + 180, x + 360, x + 540); assertWave("aspire default cranking ", chart, EngineChart.SPARK_1, 0.1944, x, x + 180, x + 360, x + 540);
IoUtil.changeRpm(600); IoUtil.changeRpm(600);
chart = nextChart(); chart = nextChart();
x = 76; x = 76;
assertWave("aspire default running ", chart, WaveChart.SPARK_1, 0.04, x, x + 180, x + 360, x + 540); assertWave("aspire default running ", chart, EngineChart.SPARK_1, 0.04, x, x + 180, x + 360, x + 540);
IoUtil.changeRpm(200); IoUtil.changeRpm(200);
@ -249,25 +249,25 @@ public class AutoTest {
chart = nextChart(); chart = nextChart();
x = 55; x = 55;
assertWave("aspire cranking", chart, WaveChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540); assertWave("aspire cranking", chart, EngineChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540);
sendCommand("set_cranking_timing_angle -40"); sendCommand("set_cranking_timing_angle -40");
chart = nextChart(); chart = nextChart();
x = 64; x = 64;
assertWave("aspire", chart, WaveChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540); assertWave("aspire", chart, EngineChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540);
sendCommand("set_cranking_timing_angle 149"); sendCommand("set_cranking_timing_angle 149");
sendCommand("set_cranking_charge_angle 40"); sendCommand("set_cranking_charge_angle 40");
chart = nextChart(); chart = nextChart();
x = 80; x = 80;
assertWave("aspire", chart, WaveChart.SPARK_1, 40.0 / 360, x, x + 180, x + 360, x + 540); assertWave("aspire", chart, EngineChart.SPARK_1, 40.0 / 360, x, x + 180, x + 360, x + 540);
sendCommand("set_cranking_charge_angle 65"); sendCommand("set_cranking_charge_angle 65");
IoUtil.changeRpm(600); IoUtil.changeRpm(600);
sendComplexCommand("set_cranking_rpm 700"); sendComplexCommand("set_cranking_rpm 700");
chart = nextChart(); chart = nextChart();
x = 55; x = 55;
assertWave("cranking@600", chart, WaveChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540); assertWave("cranking@600", chart, EngineChart.SPARK_1, 0.18, x, x + 180, x + 360, x + 540);
IoUtil.changeRpm(2000); IoUtil.changeRpm(2000);
sendCommand("set_whole_fuel_map 1.57"); sendCommand("set_whole_fuel_map 1.57");
@ -276,13 +276,13 @@ public class AutoTest {
msg = "aspire running"; msg = "aspire running";
assertWaveFall(msg, chart, WaveChart.INJECTOR_1, 0.086, 238.75); assertWaveFall(msg, chart, EngineChart.INJECTOR_1, 0.086, 238.75);
assertWaveFall(msg, chart, WaveChart.INJECTOR_2, 0.086, 53.04); assertWaveFall(msg, chart, EngineChart.INJECTOR_2, 0.086, 53.04);
assertWaveFall(msg, chart, WaveChart.INJECTOR_3, 0.086, 417.04); assertWaveFall(msg, chart, EngineChart.INJECTOR_3, 0.086, 417.04);
assertWaveFall(msg, chart, WaveChart.INJECTOR_4, 0.086, 594.04); assertWaveFall(msg, chart, EngineChart.INJECTOR_4, 0.086, 594.04);
x = 22.32; x = 22.32;
assertWave(chart, WaveChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540); assertWave(chart, EngineChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540);
sendCommand("set_fuel_map 2200 4 15.66"); sendCommand("set_fuel_map 2200 4 15.66");
sendCommand("set_fuel_map 2000 4 15.66"); sendCommand("set_fuel_map 2000 4 15.66");
@ -294,31 +294,31 @@ public class AutoTest {
sendComplexCommand("set_global_trigger_offset_angle 175"); sendComplexCommand("set_global_trigger_offset_angle 175");
chart = nextChart(); chart = nextChart();
assertWaveFall(msg + " fuel", chart, WaveChart.INJECTOR_1, 0.555, 238.75); assertWaveFall(msg + " fuel", chart, EngineChart.INJECTOR_1, 0.555, 238.75);
assertWaveFall(msg + " fuel", chart, WaveChart.INJECTOR_2, 0.555, 53.04); assertWaveFall(msg + " fuel", chart, EngineChart.INJECTOR_2, 0.555, 53.04);
assertWaveFall(msg + " fuel", chart, WaveChart.INJECTOR_3, 0.555, 417.04); assertWaveFall(msg + " fuel", chart, EngineChart.INJECTOR_3, 0.555, 417.04);
assertWaveFall(msg + " fuel", chart, WaveChart.INJECTOR_4, 0.555, 594.04); assertWaveFall(msg + " fuel", chart, EngineChart.INJECTOR_4, 0.555, 594.04);
x = 45; x = 45;
assertWave(chart, WaveChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540); assertWave(chart, EngineChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540);
assertWaveNull(chart, WaveChart.SPARK_2); assertWaveNull(chart, EngineChart.SPARK_2);
sendComplexCommand("set_global_trigger_offset_angle 130"); sendComplexCommand("set_global_trigger_offset_angle 130");
sendComplexCommand("set_injection_offset 369"); sendComplexCommand("set_injection_offset 369");
chart = nextChart(); chart = nextChart();
x = 585; x = 585;
assertWave(chart, WaveChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540); assertWave(chart, EngineChart.SPARK_1, 0.133, x, x + 180, x + 360, x + 540);
// let's enable more channels dynamically // let's enable more channels dynamically
sendComplexCommand("set_ignition_mode 1"); sendComplexCommand("set_ignition_mode 1");
chart = nextChart(); chart = nextChart();
assertWave("Switching Aspire into INDIVIDUAL_COILS mode", chart, WaveChart.SPARK_2, 0.133, x); assertWave("Switching Aspire into INDIVIDUAL_COILS mode", chart, EngineChart.SPARK_2, 0.133, x);
assertWave(chart, WaveChart.SPARK_3, 0.133, x + 360); assertWave(chart, EngineChart.SPARK_3, 0.133, x + 360);
sendCommand("set_whole_timing_map 520"); sendCommand("set_whole_timing_map 520");
chart = nextChart(); chart = nextChart();
x = 64.8; x = 64.8;
assertWave(chart, WaveChart.SPARK_2, 0.133, x); assertWave(chart, EngineChart.SPARK_2, 0.133, x);
// switching to Speed Density // switching to Speed Density
@ -332,15 +332,15 @@ public class AutoTest {
assertEquals(1, SensorCentral.getInstance().getValue(Sensor.MAP)); assertEquals(1, SensorCentral.getInstance().getValue(Sensor.MAP));
//assertEquals(1, SensorCentral.getInstance().getValue(Sensor.)); //assertEquals(1, SensorCentral.getInstance().getValue(Sensor.));
x = 8.88; x = 8.88;
assertWaveFall(msg + " fuel SD #1", chart, WaveChart.INJECTOR_1, 0.329, x + 180); assertWaveFall(msg + " fuel SD #1", chart, EngineChart.INJECTOR_1, 0.329, x + 180);
assertWaveFall(msg + " fuel SD #2", chart, WaveChart.INJECTOR_2, 0.329, x); assertWaveFall(msg + " fuel SD #2", chart, EngineChart.INJECTOR_2, 0.329, x);
assertWaveFall(msg + " fuel SD #3", chart, WaveChart.INJECTOR_3, 0.329, x + 360); assertWaveFall(msg + " fuel SD #3", chart, EngineChart.INJECTOR_3, 0.329, x + 360);
assertWaveFall(msg + " fuel SD #4", chart, WaveChart.INJECTOR_4, 0.329, x + 540); assertWaveFall(msg + " fuel SD #4", chart, EngineChart.INJECTOR_4, 0.329, x + 540);
// above hard limit // above hard limit
IoUtil.changeRpm(10000); IoUtil.changeRpm(10000);
chart = nextChart(); chart = nextChart();
assertWaveNull("hard limit check", chart, WaveChart.INJECTOR_1); assertWaveNull("hard limit check", chart, EngineChart.INJECTOR_1);
} }
private static void assertEquals(double expected, double actual) { private static void assertEquals(double expected, double actual) {
@ -356,11 +356,11 @@ public class AutoTest {
sendCommand(command, COMPLEX_COMMAND_RETRY, Timeouts.CMD_TIMEOUT); sendCommand(command, COMPLEX_COMMAND_RETRY, Timeouts.CMD_TIMEOUT);
} }
private static void assertWaveNull(WaveChart chart, String key) { private static void assertWaveNull(EngineChart chart, String key) {
assertWaveNull("", chart, key); assertWaveNull("", chart, key);
} }
private static void assertWaveNull(String msg, WaveChart chart, String key) { private static void assertWaveNull(String msg, EngineChart chart, String key) {
assertNull(msg + "chart for " + key, chart.get(key)); assertNull(msg + "chart for " + key, chart.get(key));
} }

View File

@ -12,7 +12,7 @@ import jssc.SerialPortList;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static com.rusefi.waves.WaveReport.isCloseEnough; import static com.rusefi.waves.EngineReport.isCloseEnough;
/** /**
* @author Andrey Belomutskiy * @author Andrey Belomutskiy

View File

@ -2,17 +2,17 @@ package com.rusefi;
import com.rusefi.core.EngineState; import com.rusefi.core.EngineState;
import com.rusefi.io.LinkManager; import com.rusefi.io.LinkManager;
import com.rusefi.waves.EngineChart;
import com.rusefi.waves.EngineReport;
import com.rusefi.waves.RevolutionLog; import com.rusefi.waves.RevolutionLog;
import com.rusefi.waves.WaveChart; import com.rusefi.waves.EngineChartParser;
import com.rusefi.waves.WaveChartParser;
import com.rusefi.waves.WaveReport;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import static com.rusefi.waves.WaveReport.isCloseEnough; import static com.rusefi.waves.EngineReport.isCloseEnough;
/** /**
* @author Andrey Belomutskiy * @author Andrey Belomutskiy
@ -58,23 +58,23 @@ public class TestingUtils {
fail("Not true"); fail("Not true");
} }
static void assertWave(WaveChart chart, String key, double width, double... expectedAngles) { static void assertWave(EngineChart chart, String key, double width, double... expectedAngles) {
assertWave("", chart, key, width, expectedAngles); assertWave("", chart, key, width, expectedAngles);
} }
static void assertWave(String msg, WaveChart chart, String key, double width, double... expectedAngles) { static void assertWave(String msg, EngineChart chart, String key, double width, double... expectedAngles) {
assertWave(true, msg, chart, key, width, WaveReport.RATIO, WaveReport.RATIO, expectedAngles); assertWave(true, msg, chart, key, width, EngineReport.RATIO, EngineReport.RATIO, expectedAngles);
} }
static void assertWaveFall(WaveChart chart, String key, double width, double... expectedAngles) { static void assertWaveFall(EngineChart chart, String key, double width, double... expectedAngles) {
assertWaveFall("", chart, key, width, expectedAngles); assertWaveFall("", chart, key, width, expectedAngles);
} }
static void assertWaveFall(String msg, WaveChart chart, String key, double width, double... expectedAngles) { static void assertWaveFall(String msg, EngineChart chart, String key, double width, double... expectedAngles) {
assertWave(false, msg, chart, key, width, WaveReport.RATIO, WaveReport.RATIO, expectedAngles); assertWave(false, msg, chart, key, width, EngineReport.RATIO, EngineReport.RATIO, expectedAngles);
} }
static void assertWave(boolean rise, String msg, WaveChart chart, String key, double expectedWidth, double angleRatio, double widthRatio, double... expectedAngles) { static void assertWave(boolean rise, String msg, EngineChart chart, String key, double expectedWidth, double angleRatio, double widthRatio, double... expectedAngles) {
if (isRealHardware) if (isRealHardware)
return; return;
RevolutionLog revolutionLog = chart.getRevolutionsLog(); RevolutionLog revolutionLog = chart.getRevolutionsLog();
@ -83,9 +83,9 @@ public class TestingUtils {
StringBuilder events = chart.get(key); StringBuilder events = chart.get(key);
assertTrue(msg + " Events not null for " + key, events != null); assertTrue(msg + " Events not null for " + key, events != null);
List<WaveReport.UpDown> wr = WaveReport.parse(events.toString()); List<EngineReport.UpDown> wr = EngineReport.parse(events.toString());
assertTrue(msg + " waves for " + key, !wr.isEmpty()); assertTrue(msg + " waves for " + key, !wr.isEmpty());
for (WaveReport.UpDown ud : wr) { for (EngineReport.UpDown ud : wr) {
int eventTime = rise ? ud.upTime : ud.downTime; int eventTime = rise ? ud.upTime : ud.downTime;
double angleByTime = revolutionLog.getCrankAngleByTime(eventTime); double angleByTime = revolutionLog.getCrankAngleByTime(eventTime);
assertCloseEnough(msg + " angle for " + key + "@" + eventTime, fixAngle(angleByTime), angleRatio, expectedAngles); assertCloseEnough(msg + " angle for " + key + "@" + eventTime, fixAngle(angleByTime), angleRatio, expectedAngles);
@ -104,13 +104,13 @@ public class TestingUtils {
assertTrue(msg, value == null); assertTrue(msg, value == null);
} }
static WaveChart nextChart() { static EngineChart nextChart() {
return WaveChartParser.unpackToMap(getNextWaveChart()); return EngineChartParser.unpackToMap(getNextWaveChart());
} }
static String getNextWaveChart() { static String getNextWaveChart() {
IoUtil.sendCommand("reset_wave_chart"); IoUtil.sendCommand("reset_wave_chart");
String result = getWaveChart(); String result = getEngineChart();
FileLog.MAIN.logLine("current chart: " + result); FileLog.MAIN.logLine("current chart: " + result);
return result; return result;
} }
@ -120,24 +120,24 @@ public class TestingUtils {
* *
* @return next wave chart in the I/O pipeline * @return next wave chart in the I/O pipeline
*/ */
private static String getWaveChart() { private static String getEngineChart() {
final CountDownLatch waveChartLatch = new CountDownLatch(1); final CountDownLatch engineChartLatch = new CountDownLatch(1);
final AtomicReference<String> result = new AtomicReference<>(); final AtomicReference<String> result = new AtomicReference<>();
FileLog.MAIN.logLine("waiting for next chart"); FileLog.MAIN.logLine("waiting for next chart");
LinkManager.engineState.replaceStringValueAction(WaveReport.WAVE_CHART, new EngineState.ValueCallback<String>() { LinkManager.engineState.replaceStringValueAction(EngineReport.ENGINE_CHART, new EngineState.ValueCallback<String>() {
@Override @Override
public void onUpdate(String value) { public void onUpdate(String value) {
waveChartLatch.countDown(); engineChartLatch.countDown();
result.set(value); result.set(value);
} }
}); });
int timeout = 60; int timeout = 60;
long waitStartTime = System.currentTimeMillis(); long waitStartTime = System.currentTimeMillis();
IoUtil.wait(waveChartLatch, timeout); IoUtil.wait(engineChartLatch, timeout);
FileLog.MAIN.logLine("got next chart in " + (System.currentTimeMillis() - waitStartTime) + "ms for engine_type " + AutoTest.currentEngineType); FileLog.MAIN.logLine("got next chart in " + (System.currentTimeMillis() - waitStartTime) + "ms for engine_type " + AutoTest.currentEngineType);
LinkManager.engineState.replaceStringValueAction(WaveReport.WAVE_CHART, (EngineState.ValueCallback<String>) EngineState.ValueCallback.VOID); LinkManager.engineState.replaceStringValueAction(EngineReport.ENGINE_CHART, (EngineState.ValueCallback<String>) EngineState.ValueCallback.VOID);
if (result.get() == null) if (result.get() == null)
throw new IllegalStateException("Chart timeout: " + timeout); throw new IllegalStateException("Chart timeout: " + timeout);
return result.get(); return result.get();

View File

@ -3,7 +3,6 @@ package com.rusefi.core;
import com.rusefi.FileLog; import com.rusefi.FileLog;
import com.rusefi.SensorConversion; import com.rusefi.SensorConversion;
import com.rusefi.io.LinkManager; import com.rusefi.io.LinkManager;
import com.rusefi.waves.WaveReport;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.swing.*; import javax.swing.*;

View File

@ -2,7 +2,7 @@ package com.rusefi.core;
import com.rusefi.CyclicBuffer; import com.rusefi.CyclicBuffer;
import com.rusefi.SensorConversion; import com.rusefi.SensorConversion;
import com.rusefi.waves.WaveReport; import com.rusefi.waves.EngineReport;
/** /**
* 7/26/13 * 7/26/13
@ -59,7 +59,7 @@ public class SensorStats {
SensorCentral.getInstance().addListener(input1, new SensorCentral.SensorListener() { SensorCentral.getInstance().addListener(input1, new SensorCentral.SensorListener() {
@Override @Override
public void onSensorUpdate(double value) { public void onSensorUpdate(double value) {
double valueMs = 1.0 * (value - SensorCentral.getInstance().getValue(input2)) / WaveReport.SYS_TICKS_PER_MS; double valueMs = 1.0 * (value - SensorCentral.getInstance().getValue(input2)) / EngineReport.SYS_TICKS_PER_MS;
SensorCentral.getInstance().setValue(valueMs, destination); SensorCentral.getInstance().setValue(valueMs, destination);
} }
}); });

View File

@ -3,16 +3,16 @@ package com.rusefi.waves;
import java.util.Map; import java.util.Map;
/** /**
* A collection of {@link WaveReport} * A collection of {@link EngineReport}
* <p/> * <p/>
* <p/> * <p/>
* *
* @see WaveChartParser * @see EngineChartParser
* <p/> * <p/>
* Date: 3/17/14 * Date: 3/17/14
* (c) Andrey Belomutskiy * (c) Andrey Belomutskiy
*/ */
public class WaveChart { public class EngineChart {
// todo: merge with NameUtil // todo: merge with NameUtil
public static final String INJECTOR_1 = "i1"; public static final String INJECTOR_1 = "i1";
public static final String INJECTOR_2 = "i2"; public static final String INJECTOR_2 = "i2";
@ -33,7 +33,7 @@ public class WaveChart {
public final Map<String, StringBuilder> map; public final Map<String, StringBuilder> map;
public WaveChart(Map<String, StringBuilder> map) { public EngineChart(Map<String, StringBuilder> map) {
this.map = map; this.map = map;
} }
@ -48,7 +48,7 @@ public class WaveChart {
@Override @Override
public String toString() { public String toString() {
return "WaveChart{" + return "EngineChart{" +
"size=" + map.size() + "size=" + map.size() +
'}'; '}';
} }

View File

@ -9,13 +9,13 @@ import java.util.Map;
* 1/26/14 * 1/26/14
* Andrey Belomutskiy (c) 2012-2014 * Andrey Belomutskiy (c) 2012-2014
*/ */
public class WaveChartParser { public class EngineChartParser {
private static final String DELI = "!"; private static final String DELI = "!";
/** /**
* This method unpacks a mixed-key message into a Map of messages by key * This method unpacks a mixed-key message into a Map of messages by key
*/ */
public static WaveChart unpackToMap(String value) { public static EngineChart unpackToMap(String value) {
if (value == null) if (value == null)
throw new NullPointerException("value"); throw new NullPointerException("value");
FileLog.MAIN.logLine(": " + value); FileLog.MAIN.logLine(": " + value);
@ -40,6 +40,6 @@ public class WaveChartParser {
sb.append(signal).append(DELI).append(val).append(DELI); sb.append(signal).append(DELI).append(val).append(DELI);
index += 3; index += 3;
} }
return new WaveChart(map); return new EngineChart(map);
} }
} }

View File

@ -15,9 +15,9 @@ import java.util.List;
* *
* @see com.rusefi.AnalogChartPanel.AnalogChart * @see com.rusefi.AnalogChartPanel.AnalogChart
*/ */
public class WaveReport implements TimeAxisTranslator { public class EngineReport implements TimeAxisTranslator {
public static final String WAVE_CHART = "wave_chart"; public static final String ENGINE_CHART = "wave_chart";
public static final WaveReport MOCK = new WaveReport(Collections.singletonList(new UpDown(0, -1, 1, -1))); public static final EngineReport MOCK = new EngineReport(Collections.singletonList(new UpDown(0, -1, 1, -1)));
/** /**
* number of ChibiOS systicks per ms * number of ChibiOS systicks per ms
*/ */
@ -34,11 +34,11 @@ public class WaveReport implements TimeAxisTranslator {
*/ */
private int minTime; private int minTime;
public WaveReport(String report) { public EngineReport(String report) {
this(parse(report)); this(parse(report));
} }
public WaveReport(List<UpDown> list) { public EngineReport(List<UpDown> list) {
this.list = list; this.list = list;
if (!list.isEmpty()) { if (!list.isEmpty()) {
minTime = list.get(0).upTime; minTime = list.get(0).upTime;
@ -137,7 +137,7 @@ public class WaveReport implements TimeAxisTranslator {
@Override @Override
public String toString() { public String toString() {
return "WaveReport{" + return "EngineReport{" +
"size=" + list.size() + "size=" + list.size() +
", maxTime=" + maxTime + ", maxTime=" + maxTime +
", minTime=" + minTime + ", minTime=" + minTime +

View File

@ -61,7 +61,7 @@ public class RevolutionLog {
double diff = time - entry.getKey(); double diff = time - entry.getKey();
Integer rpm = entry.getValue(); Integer rpm = entry.getValue();
double timeForRevolution = 60000 * WaveReport.SYS_TICKS_PER_MS / rpm; double timeForRevolution = 60000 * EngineReport.SYS_TICKS_PER_MS / rpm;
return 360.0 * diff / timeForRevolution; return 360.0 * diff / timeForRevolution;
} }

View File

@ -0,0 +1,64 @@
package com.rusefi.waves.test;
import com.rusefi.waves.EngineChart;
import com.rusefi.waves.EngineReport;
import com.rusefi.waves.RevolutionLog;
import com.rusefi.waves.EngineChartParser;
import org.junit.Test;
import java.util.List;
import static com.rusefi.waves.EngineReport.isCloseEnough;
import static junit.framework.Assert.*;
/**
* 1/26/14
* Andrey Belomutskiy (c) 2012-2014
*/
public class EngineChartParserTest {
@Test
public void testMultiParser() {
EngineChart result = EngineChartParser.unpackToMap("");
assertTrue(result.getMap().isEmpty());
result = EngineChartParser.unpackToMap("wave_chart,c1!u_154!0!c1!d_155!11!c1!u_156!24!spa5!u!36!c1!d_157!39!c1!u_158!49!c1!d_159!61!c1!u_160!74!c1!d_161!86!c1!u_162!99!c1!d_163!111!c1!u_164!124!");
assertEquals(3, result.getMap().size());
String crankReport = result.get("c1").toString();
List<EngineReport.UpDown> list = EngineReport.parse(crankReport);
assertEquals(4, list.size());
EngineReport.UpDown upDown = list.get(0);
assertEquals(24, upDown.upTime);
assertEquals(156, upDown.upIndex);
assertEquals(39, upDown.downTime);
assertEquals(157, upDown.downIndex);
}
@Test
public void testDutyCycle() {
EngineChart result = EngineChartParser.unpackToMap("r!1199!64224414!crank2!u!64225149_3!Injector 2!u!64225149!Spark 1!u!64225249!Injector 2!d!64225303!Spark 1!d!64225649!crank2!d!64226105_4!crank!d!64226980_5!crank2!u!64227730_6!Injector 1!u!64227730!Spark 1!u!64227830!Injector 1!d!64227884!Spark 1!d!64228230!crank2!d!64228678_7!crank2!u!64230212_8!Injector 3!u!64230212!Spark 1!u!64230312!Injector 3!d!64230366!Spark 1!d!64230712!crank2!d!64231156_9!crank!u!64231982_0!crank2!u!64232672_1!Injector 4!u!64232672!Spark 1!u!64232772!Injector 4!d!64232826!Spark 1!d!64233172!crank2!d!64233626_2!r!1200!64234412!crank2!u!64235150_3!Injector 2!u!64235150!Spark 1!u!64235250!Injector 2!d!64235304!Spark 1!d!64235650!crank2!d!64236106_4!crank!d!64236981_5!crank2!u!64237730_6!Injector 1!u!64237730!Spark 1!u!64237830!Injector 1!d!64237884!Spark 1!d!64238230!crank2!d!64238677_7!crank2!u!64240213_8!Injector 3!u!64240213!Spark 1!u!64240313!Injector 3!d!64240367!Spark 1!d!64240713!crank2!d!64241158_9!crank!u!64241982_0!crank2!u!64242674_1!Injector 4!u!64242674!Spark 1!u!64242774!Injector 4!d!64242828!Spark 1!d!64243174!crank2!d!64243625_2!r!1200!64244412!crank2!u!64245149_3!Injector 2!u!64245149!Spark 1!u!64245249!Injector 2!d!64245303!Spark 1!d!64245649!crank2!d!64246106_4!crank!d!64246980_5!crank2!u!64247728_6!Injector 1!u!64247728!Spark 1!u!64247828!Injector 1!d!64247882!Spark 1!d!64248228!crank2!d!64248679_7!crank2!u!64250212_8!Injector 3!u!64250212!Spark 1!u!64250312!Injector 3!d!64250366!Spark 1!d!64250712!crank2!d!64251158_9!crank!u!64251982_0!crank2!u!64252674_1!Injector 4!u!64252674!Spark 1!u!64252774!Injector 4!d!64252828!Spark 1!d!64253174!crank2!d!64253625_2!r!1200!64254412!crank2!u!64255150_3!Injector 2!u!64255150!Spark 1!u!64255250!Injector 2!d!64255304!Spark 1!d!64255650!crank2!d!64256106_4!crank!d!64256982_5!crank2!u!64257728_6!Injector 1!u!64257728!Spark 1!u!64257828!Injector 1!d!64257882!Spark 1!d!64258228!crank2!d!64258678_7!crank2!u!64260214_8!Injector 3!u!64260214!Spark 1!u!64260314!Injector 3!d!64260368!Spark 1!d!64260714!,");
assertFalse(result.getMap().isEmpty());
StringBuilder revolutions = result.get(RevolutionLog.TOP_DEAD_CENTER_MESSAGE);
RevolutionLog rl = RevolutionLog.parseRevolutions(revolutions);
StringBuilder inj1 = result.get("Injector 1");
EngineReport wr = new EngineReport(inj1.toString());
for (EngineReport.UpDown ud : wr.getList()) {
assertTrue(isCloseEnough(238.75, rl.getCrankAngleByTime(ud.upTime)));
assertTrue(ud.getDutyCycle(rl) + "", isCloseEnough(0.0307, ud.getDutyCycle(rl)));
}
}
@Test
public void testUpOnly() {
List<EngineReport.UpDown> list = EngineReport.parse("up!15500!u!25500!u!35500!u!45500!u!55500!u!65500!u!75500!u!85500!");
assertEquals(0, list.size());
}
}

View File

@ -1,6 +1,6 @@
package com.rusefi.waves.test; package com.rusefi.waves.test;
import com.rusefi.waves.WaveReport; import com.rusefi.waves.EngineReport;
import com.rusefi.waves.ZoomProvider; import com.rusefi.waves.ZoomProvider;
import org.junit.Test; import org.junit.Test;
@ -10,12 +10,12 @@ import static junit.framework.Assert.assertEquals;
* Date: 6/23/13 * Date: 6/23/13
* (c) Andrey Belomutskiy * (c) Andrey Belomutskiy
*/ */
public class WaveReportTest { public class EngineReportTest {
public static final String report = "u!14679!d!15991!u!16823!d!18134!u!18965!d!20278!u!21108!d!22420!u!23251!d!24563!u!25394!d!26706!u!27536!d!28850!u!29678!d!30991!u!31822!d!33134!u!33965!d!35277!u!36108!d!37420!u!38251!d!39563!u!40394!d!41706!u!42537!d!43849!"; public static final String report = "u!14679!d!15991!u!16823!d!18134!u!18965!d!20278!u!21108!d!22420!u!23251!d!24563!u!25394!d!26706!u!27536!d!28850!u!29678!d!30991!u!31822!d!33134!u!33965!d!35277!u!36108!d!37420!u!38251!d!39563!u!40394!d!41706!u!42537!d!43849!";
@Test @Test
public void testParse() { public void testParse() {
WaveReport wr = new WaveReport(report); EngineReport wr = new EngineReport(report);
assertEquals(14, wr.getList().size()); assertEquals(14, wr.getList().size());
assertEquals(14679, wr.getMinTime()); assertEquals(14679, wr.getMinTime());

View File

@ -1,64 +0,0 @@
package com.rusefi.waves.test;
import com.rusefi.waves.RevolutionLog;
import com.rusefi.waves.WaveChart;
import com.rusefi.waves.WaveChartParser;
import com.rusefi.waves.WaveReport;
import org.junit.Test;
import java.util.List;
import static com.rusefi.waves.WaveReport.isCloseEnough;
import static junit.framework.Assert.*;
/**
* 1/26/14
* Andrey Belomutskiy (c) 2012-2014
*/
public class WaveChartParserTest {
@Test
public void testMultiParser() {
WaveChart result = WaveChartParser.unpackToMap("");
assertTrue(result.getMap().isEmpty());
result = WaveChartParser.unpackToMap("wave_chart,c1!u_154!0!c1!d_155!11!c1!u_156!24!spa5!u!36!c1!d_157!39!c1!u_158!49!c1!d_159!61!c1!u_160!74!c1!d_161!86!c1!u_162!99!c1!d_163!111!c1!u_164!124!");
assertEquals(3, result.getMap().size());
String crankReport = result.get("c1").toString();
List<WaveReport.UpDown> list = WaveReport.parse(crankReport);
assertEquals(4, list.size());
WaveReport.UpDown upDown = list.get(0);
assertEquals(24, upDown.upTime);
assertEquals(156, upDown.upIndex);
assertEquals(39, upDown.downTime);
assertEquals(157, upDown.downIndex);
}
@Test
public void testDutyCycle() {
WaveChart result = WaveChartParser.unpackToMap("r!1199!64224414!crank2!u!64225149_3!Injector 2!u!64225149!Spark 1!u!64225249!Injector 2!d!64225303!Spark 1!d!64225649!crank2!d!64226105_4!crank!d!64226980_5!crank2!u!64227730_6!Injector 1!u!64227730!Spark 1!u!64227830!Injector 1!d!64227884!Spark 1!d!64228230!crank2!d!64228678_7!crank2!u!64230212_8!Injector 3!u!64230212!Spark 1!u!64230312!Injector 3!d!64230366!Spark 1!d!64230712!crank2!d!64231156_9!crank!u!64231982_0!crank2!u!64232672_1!Injector 4!u!64232672!Spark 1!u!64232772!Injector 4!d!64232826!Spark 1!d!64233172!crank2!d!64233626_2!r!1200!64234412!crank2!u!64235150_3!Injector 2!u!64235150!Spark 1!u!64235250!Injector 2!d!64235304!Spark 1!d!64235650!crank2!d!64236106_4!crank!d!64236981_5!crank2!u!64237730_6!Injector 1!u!64237730!Spark 1!u!64237830!Injector 1!d!64237884!Spark 1!d!64238230!crank2!d!64238677_7!crank2!u!64240213_8!Injector 3!u!64240213!Spark 1!u!64240313!Injector 3!d!64240367!Spark 1!d!64240713!crank2!d!64241158_9!crank!u!64241982_0!crank2!u!64242674_1!Injector 4!u!64242674!Spark 1!u!64242774!Injector 4!d!64242828!Spark 1!d!64243174!crank2!d!64243625_2!r!1200!64244412!crank2!u!64245149_3!Injector 2!u!64245149!Spark 1!u!64245249!Injector 2!d!64245303!Spark 1!d!64245649!crank2!d!64246106_4!crank!d!64246980_5!crank2!u!64247728_6!Injector 1!u!64247728!Spark 1!u!64247828!Injector 1!d!64247882!Spark 1!d!64248228!crank2!d!64248679_7!crank2!u!64250212_8!Injector 3!u!64250212!Spark 1!u!64250312!Injector 3!d!64250366!Spark 1!d!64250712!crank2!d!64251158_9!crank!u!64251982_0!crank2!u!64252674_1!Injector 4!u!64252674!Spark 1!u!64252774!Injector 4!d!64252828!Spark 1!d!64253174!crank2!d!64253625_2!r!1200!64254412!crank2!u!64255150_3!Injector 2!u!64255150!Spark 1!u!64255250!Injector 2!d!64255304!Spark 1!d!64255650!crank2!d!64256106_4!crank!d!64256982_5!crank2!u!64257728_6!Injector 1!u!64257728!Spark 1!u!64257828!Injector 1!d!64257882!Spark 1!d!64258228!crank2!d!64258678_7!crank2!u!64260214_8!Injector 3!u!64260214!Spark 1!u!64260314!Injector 3!d!64260368!Spark 1!d!64260714!,");
assertFalse(result.getMap().isEmpty());
StringBuilder revolutions = result.get(RevolutionLog.TOP_DEAD_CENTER_MESSAGE);
RevolutionLog rl = RevolutionLog.parseRevolutions(revolutions);
StringBuilder inj1 = result.get("Injector 1");
WaveReport wr = new WaveReport(inj1.toString());
for (WaveReport.UpDown ud : wr.getList()) {
assertTrue(isCloseEnough(238.75, rl.getCrankAngleByTime(ud.upTime)));
assertTrue(ud.getDutyCycle(rl) + "", isCloseEnough(0.0307, ud.getDutyCycle(rl)));
}
}
@Test
public void testUpOnly() {
List<WaveReport.UpDown> list = WaveReport.parse("up!15500!u!25500!u!35500!u!45500!u!55500!u!65500!u!75500!u!85500!");
assertEquals(0, list.size());
}
}

View File

@ -13,10 +13,10 @@ import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
import com.rusefi.ui.widgets.AnyCommand; import com.rusefi.ui.widgets.AnyCommand;
import com.rusefi.ui.util.URLLabel; import com.rusefi.ui.util.URLLabel;
import com.rusefi.waves.EngineChart;
import com.rusefi.waves.EngineReport;
import com.rusefi.waves.RevolutionLog; import com.rusefi.waves.RevolutionLog;
import com.rusefi.waves.WaveChart; import com.rusefi.waves.EngineChartParser;
import com.rusefi.waves.WaveChartParser;
import com.rusefi.waves.WaveReport;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@ -96,7 +96,7 @@ public class EngineSnifferPanel {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
for (UpDownImage image : images.values()) for (UpDownImage image : images.values())
image.setWaveReport(WaveReport.MOCK, null); image.setWaveReport(EngineReport.MOCK, null);
} }
}); });
@ -166,7 +166,7 @@ public class EngineSnifferPanel {
// createSecondaryImage("input2 E5"); // createSecondaryImage("input2 E5");
// //
LinkManager.engineState.registerStringValueAction(WaveReport.WAVE_CHART, new EngineState.ValueCallback<String>() { LinkManager.engineState.registerStringValueAction(EngineReport.ENGINE_CHART, new EngineState.ValueCallback<String>() {
@Override @Override
public void onUpdate(String value) { public void onUpdate(String value) {
if (isPaused) if (isPaused)
@ -188,7 +188,7 @@ public class EngineSnifferPanel {
} }
public void displayChart(String value) { public void displayChart(String value) {
WaveChart map = WaveChartParser.unpackToMap(value); EngineChart map = EngineChartParser.unpackToMap(value);
StringBuilder revolutions = map.get(RevolutionLog.TOP_DEAD_CENTER_MESSAGE); StringBuilder revolutions = map.get(RevolutionLog.TOP_DEAD_CENTER_MESSAGE);
@ -210,8 +210,8 @@ public class EngineSnifferPanel {
String report = sb == null ? "" : sb.toString(); String report = sb == null ? "" : sb.toString();
image.setRevolutions(revolutions); image.setRevolutions(revolutions);
List<WaveReport.UpDown> list = WaveReport.parse(report); List<EngineReport.UpDown> list = EngineReport.parse(report);
WaveReport wr = new WaveReport(list); EngineReport wr = new EngineReport(list);
image.setWaveReport(wr, revolutions); image.setWaveReport(wr, revolutions);
} }
/** /**

View File

@ -1,7 +1,7 @@
package com.rusefi.ui.engine; package com.rusefi.ui.engine;
import com.rusefi.waves.TimeAxisTranslator; import com.rusefi.waves.TimeAxisTranslator;
import com.rusefi.waves.WaveReport; import com.rusefi.waves.EngineReport;
import com.rusefi.waves.ZoomProvider; import com.rusefi.waves.ZoomProvider;
import com.rusefi.waves.RevolutionLog; import com.rusefi.waves.RevolutionLog;
@ -24,7 +24,7 @@ public class EngineSnifferStatusPanel {
private final JLabel timeLabel = new JLabel(); private final JLabel timeLabel = new JLabel();
private final JLabel angleLabel = new JLabel(); private final JLabel angleLabel = new JLabel();
private final JLabel rpmLabel = new JLabel(); private final JLabel rpmLabel = new JLabel();
private TimeAxisTranslator translator = WaveReport.MOCK; private TimeAxisTranslator translator = EngineReport.MOCK;
private RevolutionLog time2rpm = RevolutionLog.parseRevolutions(null); private RevolutionLog time2rpm = RevolutionLog.parseRevolutions(null);

View File

@ -7,7 +7,7 @@ import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
// todo: merge with WaveChart // todo: merge with EngineChart
public class NameUtil { public class NameUtil {
/** /**
* See also 'CRANK1' in rusEfi firmware code * See also 'CRANK1' in rusEfi firmware code

View File

@ -3,9 +3,9 @@ package com.rusefi.ui.engine;
import com.rusefi.core.Sensor; import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral; import com.rusefi.core.SensorCentral;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
import com.rusefi.waves.EngineReport;
import com.rusefi.waves.RevolutionLog; import com.rusefi.waves.RevolutionLog;
import com.rusefi.waves.TimeAxisTranslator; import com.rusefi.waves.TimeAxisTranslator;
import com.rusefi.waves.WaveReport;
import com.rusefi.waves.ZoomProvider; import com.rusefi.waves.ZoomProvider;
import javax.swing.*; import javax.swing.*;
@ -18,14 +18,14 @@ import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
/** /**
* This is a renderer of an individual {@link WaveReport} - this makes a simple Logical Analyzer * This is a renderer of an individual {@link EngineReport} - this makes a simple Logical Analyzer
* <p/> * <p/>
* <p/> * <p/>
* Date: 6/23/13 * Date: 6/23/13
* (c) Andrey Belomutskiy * (c) Andrey Belomutskiy
* *
* @see EngineSnifferPanel * @see EngineSnifferPanel
* @see WaveReport * @see EngineReport
*/ */
public class UpDownImage extends JPanel { public class UpDownImage extends JPanel {
private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss"); private static final SimpleDateFormat FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
@ -35,7 +35,7 @@ public class UpDownImage extends JPanel {
private long lastUpdateTime; private long lastUpdateTime;
private ZoomProvider zoomProvider = ZoomProvider.DEFAULT; private ZoomProvider zoomProvider = ZoomProvider.DEFAULT;
private WaveReport wr; private EngineReport wr;
private StringBuilder revolutions; private StringBuilder revolutions;
private final String name; private final String name;
private TimeAxisTranslator translator; private TimeAxisTranslator translator;
@ -50,7 +50,7 @@ public class UpDownImage extends JPanel {
}); });
public UpDownImage(final String name) { public UpDownImage(final String name) {
this(WaveReport.MOCK, name); this(EngineReport.MOCK, name);
setToolTip(); setToolTip();
} }
@ -62,7 +62,7 @@ public class UpDownImage extends JPanel {
this.zoomProvider = zoomProvider; this.zoomProvider = zoomProvider;
} }
public UpDownImage(WaveReport wr, String name) { public UpDownImage(EngineReport wr, String name) {
this.name = name; this.name = name;
setWaveReport(wr, null); setWaveReport(wr, null);
setOpaque(true); setOpaque(true);
@ -106,7 +106,7 @@ public class UpDownImage extends JPanel {
}; };
} }
public void setWaveReport(WaveReport wr, StringBuilder revolutions) { public void setWaveReport(EngineReport wr, StringBuilder revolutions) {
this.wr = wr; this.wr = wr;
propagateDwellIntoSensor(wr); propagateDwellIntoSensor(wr);
this.revolutions = revolutions; this.revolutions = revolutions;
@ -114,13 +114,13 @@ public class UpDownImage extends JPanel {
UiUtils.trueRepaint(this); UiUtils.trueRepaint(this);
} }
private void propagateDwellIntoSensor(WaveReport wr) { private void propagateDwellIntoSensor(EngineReport wr) {
Sensor sensor = NameUtil.name2sensor.get(name); Sensor sensor = NameUtil.name2sensor.get(name);
if (sensor == null) if (sensor == null)
return; return;
if (!wr.getList().isEmpty()) { if (!wr.getList().isEmpty()) {
WaveReport.UpDown last = wr.getList().get(wr.getList().size() - 1); EngineReport.UpDown last = wr.getList().get(wr.getList().size() - 1);
SensorCentral.getInstance().setValue(last.getDuration(), sensor); SensorCentral.getInstance().setValue(last.getDuration(), sensor);
} }
} }
@ -134,7 +134,7 @@ public class UpDownImage extends JPanel {
g.setColor(getBackground()); g.setColor(getBackground());
g.fillRect(0, 0, d.width, d.height); g.fillRect(0, 0, d.width, d.height);
for (WaveReport.UpDown upDown : wr.getList()) for (EngineReport.UpDown upDown : wr.getList())
paintUpDown(d, upDown, g); paintUpDown(d, upDown, g);
paintScaleLines(g2, d); paintScaleLines(g2, d);
@ -157,7 +157,7 @@ public class UpDownImage extends JPanel {
} }
g.drawString("Tick length: " + duration + "; count=" + wr.getList().size(), 5, ++line * LINE_SIZE); g.drawString("Tick length: " + duration + "; count=" + wr.getList().size(), 5, ++line * LINE_SIZE);
g.drawString("Total seconds: " + (duration / WaveReport.SYS_TICKS_PER_MS / 000.0), 5, ++line * LINE_SIZE); g.drawString("Total seconds: " + (duration / EngineReport.SYS_TICKS_PER_MS / 000.0), 5, ++line * LINE_SIZE);
g.drawString(FORMAT.format(new Date(lastUpdateTime)), 5, ++line * LINE_SIZE); g.drawString(FORMAT.format(new Date(lastUpdateTime)), 5, ++line * LINE_SIZE);
drawStartOfRevolution(g2, d); drawStartOfRevolution(g2, d);
@ -184,11 +184,11 @@ public class UpDownImage extends JPanel {
* This method draws a vertical line every millisecond * This method draws a vertical line every millisecond
*/ */
private void paintScaleLines(Graphics2D g2, Dimension d) { private void paintScaleLines(Graphics2D g2, Dimension d) {
int fromMs = translator.getMinTime() / WaveReport.mult; int fromMs = translator.getMinTime() / EngineReport.mult;
g2.setStroke(LONG_STROKE); g2.setStroke(LONG_STROKE);
g2.setColor(TIME_SCALE_COLOR); g2.setColor(TIME_SCALE_COLOR);
int toMs = translator.getMaxTime() / WaveReport.mult; int toMs = translator.getMaxTime() / EngineReport.mult;
if (toMs - fromMs > d.getWidth() / 5) { if (toMs - fromMs > d.getWidth() / 5) {
/** /**
@ -200,13 +200,13 @@ public class UpDownImage extends JPanel {
} }
for (int ms = fromMs; ms <= toMs; ms++) { for (int ms = fromMs; ms <= toMs; ms++) {
int tick = ms * WaveReport.mult; int tick = ms * EngineReport.mult;
int x = translator.timeToScreen(tick, d.width, zoomProvider); int x = translator.timeToScreen(tick, d.width, zoomProvider);
g2.drawLine(x, 0, x, d.height); g2.drawLine(x, 0, x, d.height);
} }
} }
private void paintUpDown(Dimension d, WaveReport.UpDown upDown, Graphics g) { private void paintUpDown(Dimension d, EngineReport.UpDown upDown, Graphics g) {
int x1 = translator.timeToScreen(upDown.upTime, d.width, zoomProvider); int x1 = translator.timeToScreen(upDown.upTime, d.width, zoomProvider);
int x2 = translator.timeToScreen(upDown.downTime, d.width, zoomProvider); int x2 = translator.timeToScreen(upDown.downTime, d.width, zoomProvider);
@ -226,7 +226,7 @@ public class UpDownImage extends JPanel {
g.drawLine(x2, y, x2, d.height); g.drawLine(x2, y, x2, d.height);
g.setColor(Color.red); g.setColor(Color.red);
String durationString = String.format(" %.2fms", upDown.getDuration() / WaveReport.SYS_TICKS_PER_MS); String durationString = String.format(" %.2fms", upDown.getDuration() / EngineReport.SYS_TICKS_PER_MS);
g.drawString(durationString, x1, (int) (0.5 * d.height)); g.drawString(durationString, x1, (int) (0.5 * d.height));

View File

@ -1,7 +1,7 @@
package com.rusefi.ui.engine.test; package com.rusefi.ui.engine.test;
import com.rusefi.waves.WaveReport; import com.rusefi.waves.EngineReport;
import com.rusefi.waves.test.WaveReportTest; import com.rusefi.waves.test.EngineReportTest;
import com.rusefi.ui.util.FrameHelper; import com.rusefi.ui.util.FrameHelper;
import com.rusefi.ui.engine.UpDownImage; import com.rusefi.ui.engine.UpDownImage;
@ -16,7 +16,7 @@ public class UpDownSandbox extends FrameHelper {
public UpDownSandbox() { public UpDownSandbox() {
WaveReport wr = new WaveReport(WaveReportTest.report); EngineReport wr = new EngineReport(EngineReportTest.report);
showFrame(new UpDownImage(wr, "test")); showFrame(new UpDownImage(wr, "test"));