From 1921835f39be0196021bc6c3b0fa716e6c362fc9 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 16 Nov 2017 18:17:51 -0500 Subject: [PATCH] #494 --- .../ui/src/com/rusefi/BenchTestPane.java | 2 + .../rusefi/ui/widgets/EtbTestSequence.java | 75 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 java_console/ui/src/com/rusefi/ui/widgets/EtbTestSequence.java diff --git a/java_console/ui/src/com/rusefi/BenchTestPane.java b/java_console/ui/src/com/rusefi/BenchTestPane.java index 245db0611b..a00653c22b 100644 --- a/java_console/ui/src/com/rusefi/BenchTestPane.java +++ b/java_console/ui/src/com/rusefi/BenchTestPane.java @@ -3,6 +3,7 @@ package com.rusefi; import com.rusefi.io.CommandQueue; import com.rusefi.ui.MessagesView; import com.rusefi.ui.util.UiUtils; +import com.rusefi.ui.widgets.EtbTestSequence; import org.jetbrains.annotations.NotNull; import org.putgemin.VerticalFlowLayout; @@ -24,6 +25,7 @@ public class BenchTestPane { content.add(createMILTest()); content.add(createIdleTest()); content.add(createDizzyTest()); + content.add(UiUtils.wrap(new EtbTestSequence().getButton())); content.add(new MessagesView().messagesScroll); } diff --git a/java_console/ui/src/com/rusefi/ui/widgets/EtbTestSequence.java b/java_console/ui/src/com/rusefi/ui/widgets/EtbTestSequence.java new file mode 100644 index 0000000000..21c2892276 --- /dev/null +++ b/java_console/ui/src/com/rusefi/ui/widgets/EtbTestSequence.java @@ -0,0 +1,75 @@ +package com.rusefi.ui.widgets; + +import com.rusefi.FileLog; +import com.rusefi.io.CommandQueue; + +import javax.swing.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * https://github.com/rusefi/rusefi/issues/494 + *

+ * Here we initiate a sequence of commands which would change target electronic throttle position so that we can + * see how far the result would be how soon. + *

+ * 11/16/2017 + * (c) Andrey Belomutskiy + */ +public class EtbTestSequence { + private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); + + private final static long SECOND = 1000; + + private final JButton button = new JButton("ETB Test"); + + private static EtbTarget FIRST_STEP = new EtbTarget(SECOND, 0) + .addNext(5 * SECOND, 30) + .addNext(10 * SECOND, 50); + + public EtbTestSequence() { + button.addActionListener(e -> FIRST_STEP.execute(executor)); + } + + public JButton getButton() { + return button; + } + + static class EtbTarget { + final long duration; + /** + * 0-100 percent open + */ + final double position; + + EtbTarget next; + + public EtbTarget(long duration, double position) { + this.duration = duration; + this.position = position; + } + + public EtbTarget addNext(long duration, double position) { + next = new EtbTarget(duration, position); + return next; + } + + public void execute(ScheduledExecutorService executor) { + CommandQueue.getInstance().write("set mock_pedal_position " + position); + if (next != null) { + FileLog.MAIN.logLine("Scheduling " + next); + executor.schedule(() -> next.execute(executor), + duration, TimeUnit.MILLISECONDS); + } + } + + @Override + public String toString() { + return "EtbTarget{" + + "duration=" + duration + + ", position=" + position + + '}'; + } + } +}