From 08b2c99c3ed27688af8a8311ebbe25d7dae39032 Mon Sep 17 00:00:00 2001 From: rusefi Date: Wed, 24 Apr 2019 16:55:31 -0400 Subject: [PATCH] ETB quality instrumentation #494 --- java_console/ui/src/com/rusefi/Launcher.java | 2 +- .../com/rusefi/ui/etb/CalibrationPanel.java | 3 + .../src/com/rusefi/ui/etb/CommandsPanel.java | 11 +-- .../com/rusefi/ui/etb/DirectDrivePanel.java | 99 +++++++++++++++++++ 4 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 java_console/ui/src/com/rusefi/ui/etb/DirectDrivePanel.java diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 9d7a922ac9..6527305d21 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -45,7 +45,7 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; * @see EngineSnifferPanel */ public class Launcher { - public static final int CONSOLE_VERSION = 20190423; + public static final int CONSOLE_VERSION = 20190424; public static final boolean SHOW_STIMULATOR = false; private static final String TAB_INDEX = "main_tab"; protected static final String PORT_KEY = "port"; diff --git a/java_console/ui/src/com/rusefi/ui/etb/CalibrationPanel.java b/java_console/ui/src/com/rusefi/ui/etb/CalibrationPanel.java index 527f72149b..388bbc55b2 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/CalibrationPanel.java +++ b/java_console/ui/src/com/rusefi/ui/etb/CalibrationPanel.java @@ -5,6 +5,9 @@ import org.putgemin.VerticalFlowLayout; import javax.swing.*; +/** + * (c) Andrey Belomutskiy + */ public class CalibrationPanel { private final JPanel content = new JPanel(new VerticalFlowLayout()); diff --git a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java index 1802bf3367..fa96863a30 100644 --- a/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java +++ b/java_console/ui/src/com/rusefi/ui/etb/CommandsPanel.java @@ -1,7 +1,6 @@ package com.rusefi.ui.etb; import com.rusefi.ETBPane; -import com.rusefi.io.CommandQueue; import com.rusefi.ui.storage.Node; import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.widgets.AnyCommand; @@ -11,17 +10,9 @@ import javax.swing.*; public class CommandsPanel { private final JPanel content = new JPanel(new VerticalFlowLayout()); - private final JLabel currentOverride = new JLabel(); public CommandsPanel() { - content.add(currentOverride); - CommandQueue.getInstance().addListener(command -> { - if (command.startsWith(ETBPane.SET_ETB)) { - command = command.substring(ETBPane.SET_ETB.length()); - String finalCommand = command; - SwingUtilities.invokeLater(() -> currentOverride.setText("PWM override " + finalCommand)); - } - }); + content.add(new DirectDrivePanel().getContent()); JPanel spotsPane = new JPanel(new VerticalFlowLayout()); spotsPane.setBorder(BorderFactory.createTitledBorder("Magic Spots")); diff --git a/java_console/ui/src/com/rusefi/ui/etb/DirectDrivePanel.java b/java_console/ui/src/com/rusefi/ui/etb/DirectDrivePanel.java new file mode 100644 index 0000000000..94d4ab1aa4 --- /dev/null +++ b/java_console/ui/src/com/rusefi/ui/etb/DirectDrivePanel.java @@ -0,0 +1,99 @@ +package com.rusefi.ui.etb; + +import com.rusefi.ETBPane; +import com.rusefi.io.CommandQueue; +import org.putgemin.VerticalFlowLayout; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; + +/** + * Little panel to drive ETB duty cycle directly + * + * (c) Andrey Belomutskiy + * @see ETBPane#SET_ETB + */ +public class DirectDrivePanel { + private final JPanel content = new JPanel(new BorderLayout()); + private final JLabel currentOverride = new JLabel("NaN"); + private final JTextArea increment = new JTextArea("0.5"); + private final JButton reset = new JButton("Cancel Direct Drive"); + private double directDriverValue; + + public DirectDrivePanel() { + content.setBorder(BorderFactory.createTitledBorder("Direct Drive")); + + CommandQueue.getInstance().addListener(command -> { + if (command.startsWith(ETBPane.SET_ETB)) { + command = command.substring(ETBPane.SET_ETB.length()); + directDriverValue = parseDouble(command, Double.NaN); + SwingUtilities.invokeLater(() -> currentOverride.setText("PWM override " + directDriverValue)); + reset.setEnabled(!Double.isNaN(directDriverValue)); + } + }); + + JPanel upDownPanel = new JPanel(new GridLayout(2, 1)); + + JButton more = new JButton("More"); + more.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + double newValue = getCurrent() + getIncrement(); + CommandQueue.getInstance().write(ETBPane.SET_ETB + newValue); + } + }); + upDownPanel.add(more); + JButton less = new JButton("Less"); + upDownPanel.add(less); + less.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + double newValue = getCurrent() - getIncrement(); + CommandQueue.getInstance().write(ETBPane.SET_ETB + newValue); + } + }); + + JPanel leftPanel = new JPanel(new VerticalFlowLayout()); + reset.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + CommandQueue.getInstance().write(ETBPane.SET_ETB + "NaN"); + } + }); + + leftPanel.add(reset); + leftPanel.add(currentOverride); + leftPanel.add(new JLabel("Increment:")); + leftPanel.add(increment); + + content.add(leftPanel, BorderLayout.CENTER); + content.add(upDownPanel, BorderLayout.EAST); + } + + private double parseDouble(String text, double defaultValue) { + try { + return Double.parseDouble(text); + } catch (NumberFormatException e) { + return defaultValue; + } + } + + private double getIncrement() { + try { + double value = Double.parseDouble(increment.getText()); + return Double.isNaN(value) ? 0.5 : value; + } catch (NumberFormatException e) { + increment.setText("0.5"); + return 0.5; + } + } + + private double getCurrent() { + return Double.isNaN(directDriverValue) ? 0 : directDriverValue; + } + + public JPanel getContent() { + return content; + } +}