refactoring: better dependency control

This commit is contained in:
rusefi 2020-06-25 21:50:44 -04:00
parent 227bab7a95
commit 54dba3887f
13 changed files with 34 additions and 131 deletions

View File

@ -2,7 +2,6 @@ package com.rusefi;
import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.config.generated.Fields; import com.rusefi.config.generated.Fields;
import com.rusefi.io.LinkManager;
import com.rusefi.tracing.Entry; import com.rusefi.tracing.Entry;
import com.rusefi.tracing.JsonOutput; import com.rusefi.tracing.JsonOutput;
import com.rusefi.ui.MessagesView; import com.rusefi.ui.MessagesView;
@ -40,13 +39,13 @@ public class BenchTestPane {
content.add(createMILTest()); content.add(createMILTest());
content.add(createIdleTest()); content.add(createIdleTest());
content.add(createDizzyTest()); content.add(createDizzyTest());
content.add(new CommandControl("Reboot", "", "Reboot") { content.add(new CommandControl(uiContext, "Reboot", "", "Reboot") {
@Override @Override
protected String getCommand() { protected String getCommand() {
return Fields.CMD_REBOOT; return Fields.CMD_REBOOT;
} }
}.getContent()); }.getContent());
content.add(new CommandControl("Reboot to DFU", "", "Reboot to DFU") { content.add(new CommandControl(uiContext,"Reboot to DFU", "", "Reboot to DFU") {
@Override @Override
protected String getCommand() { protected String getCommand() {
return Fields.CMD_REBOOT_DFU; return Fields.CMD_REBOOT_DFU;
@ -86,7 +85,7 @@ public class BenchTestPane {
} }
private Component createMILTest() { private Component createMILTest() {
CommandControl panel = new CommandControl("MIL", "check_engine.jpg", TEST) { CommandControl panel = new CommandControl(uiContext,"MIL", "check_engine.jpg", TEST) {
@NotNull @NotNull
protected String getCommand() { protected String getCommand() {
return "milbench"; return "milbench";
@ -96,7 +95,7 @@ public class BenchTestPane {
} }
private Component createIdleTest() { private Component createIdleTest() {
CommandControl panel = new CommandControl("Idle Valve", "idle_valve.png", TEST) { CommandControl panel = new CommandControl(uiContext,"Idle Valve", "idle_valve.png", TEST) {
@NotNull @NotNull
protected String getCommand() { protected String getCommand() {
return "idlebench"; return "idlebench";
@ -127,7 +126,7 @@ public class BenchTestPane {
private Component createSparkTest() { private Component createSparkTest() {
final JComboBox<Integer> indexes = createIndexCombo(); final JComboBox<Integer> indexes = createIndexCombo();
CommandControl panel = new CommandControl("Spark #", "spark.jpg", TEST, indexes) { CommandControl panel = new CommandControl(uiContext,"Spark #", "spark.jpg", TEST, indexes) {
@Override @Override
protected String getCommand() { protected String getCommand() {
return "sparkbench2 1000 " + indexes.getSelectedItem() + " 5 333 3"; return "sparkbench2 1000 " + indexes.getSelectedItem() + " 5 333 3";
@ -138,7 +137,7 @@ public class BenchTestPane {
private Component createInjectorTest() { private Component createInjectorTest() {
final JComboBox<Integer> indexes = createIndexCombo(); final JComboBox<Integer> indexes = createIndexCombo();
CommandControl panel = new CommandControl("Injector #", "injector.png", TEST, indexes) { CommandControl panel = new CommandControl(uiContext,"Injector #", "injector.png", TEST, indexes) {
@Override @Override
protected String getCommand() { protected String getCommand() {
return "fuelbench2 1000 " + indexes.getSelectedItem() + " 5 333 3"; return "fuelbench2 1000 " + indexes.getSelectedItem() + " 5 333 3";

View File

@ -1,38 +0,0 @@
package com.rusefi;
import com.rusefi.io.CommandQueue;
import com.rusefi.io.LinkManager;
/**
* Andrey Belomutskiy, (c) 2013-2020
* 2/22/2015
*/
public class CmdLine {
public static void main(String[] args) {
if (args.length == 0 || args.length > 2) {
System.out.println("CmdLine COMMAND [PORT]");
return;
}
String command = args[0];
if (args.length == 1) {
String port = LinkManager.getDefaultPort();
if (port == null)
return;
executeCommand(command, port);
} else {
executeCommand(command, args[1]);
}
}
private static void executeCommand(String command, String port) {
System.out.println("Sending " + command);
System.out.println("Sending to " + port);
LinkManager linkManager = new LinkManager();
IoUtil.realHardwareConnect(linkManager, port);
IoUtil.sendCommand(command, CommandQueue.getInstance());
System.out.println("Done!");
System.exit(-1);
}
}

View File

@ -2,6 +2,7 @@ package com.rusefi;
import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.autoupdate.AutoupdateUtil;
import com.rusefi.io.CommandQueue; import com.rusefi.io.CommandQueue;
import com.rusefi.ui.UIContext;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.putgemin.VerticalFlowLayout; import org.putgemin.VerticalFlowLayout;
@ -18,8 +19,10 @@ abstract class CommandControl {
public static final String SET = "Set"; public static final String SET = "Set";
protected final JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0)); protected final JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 5, 0));
final JButton test; final JButton test;
private final UIContext uiContext;
public CommandControl(String labelText, String iconFileName, String buttonText, JComponent... components) { public CommandControl(UIContext uiContext, String labelText, String iconFileName, String buttonText, JComponent... components) {
this.uiContext = uiContext;
ImageIcon icon = AutoupdateUtil.loadIcon(iconFileName); ImageIcon icon = AutoupdateUtil.loadIcon(iconFileName);
JPanel rightVerticalPanel = new JPanel(new VerticalFlowLayout()); JPanel rightVerticalPanel = new JPanel(new VerticalFlowLayout());
rightVerticalPanel.add(new JLabel(labelText)); rightVerticalPanel.add(new JLabel(labelText));
@ -40,7 +43,7 @@ abstract class CommandControl {
@NotNull @NotNull
protected ActionListener createButtonListener() { protected ActionListener createButtonListener() {
return e -> CommandQueue.getInstance().write(getCommand()); return e -> uiContext.getCommandQueue().write(getCommand());
} }
protected abstract String getCommand(); protected abstract String getCommand();

View File

@ -4,6 +4,7 @@ import com.rusefi.core.MessagesCentral;
import com.rusefi.core.Sensor; import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral; import com.rusefi.core.SensorCentral;
import com.rusefi.file.TableGenerator; import com.rusefi.file.TableGenerator;
import com.rusefi.io.CommandQueue;
import com.rusefi.models.Point3D; import com.rusefi.models.Point3D;
import com.rusefi.models.Range; import com.rusefi.models.Range;
import com.rusefi.models.XYData; import com.rusefi.models.XYData;
@ -189,7 +190,7 @@ public class EcuStimulator {
int actual; int actual;
int attempt = 0; int attempt = 0;
do { do {
RpmCommand.requestRpmChange(rpm); RpmCommand.requestRpmChange(rpm, null);
sleepRuntime(50); sleepRuntime(50);
actual = RpmModel.getInstance().getValue(); actual = RpmModel.getInstance().getValue();
} while (attempt++ < 10 && Math.abs(rpm - actual) >= 100); } while (attempt++ < 10 && Math.abs(rpm - actual) >= 100);

View File

@ -29,7 +29,7 @@ public class MessagesPane {
public MessagesPane(UIContext uiContext, final Node config) { public MessagesPane(UIContext uiContext, final Node config) {
JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0)); JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
command = AnyCommand.createArea(config, config.getProperty(AnyCommand.KEY), true, false); command = AnyCommand.createArea(uiContext, config, config.getProperty(AnyCommand.KEY), true, false);
final MessagesPanel upperPanel = new MessagesPanel(command.getContent()); final MessagesPanel upperPanel = new MessagesPanel(command.getContent());
upperPanel.loadFont(config); upperPanel.loadFont(config);

View File

@ -48,7 +48,8 @@ public class Wizard {
@Override @Override
public Component getContent() { public Component getContent() {
CommandQueue.getInstance().write(command, CommandQueue.DEFAULT_TIMEOUT, new InvocationConfirmationListener() { CommandQueue instance = null;
instance.write(command, CommandQueue.DEFAULT_TIMEOUT, new InvocationConfirmationListener() {
@Override @Override
public void onCommandConfirmation() { public void onCommandConfirmation() {
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {

View File

@ -51,11 +51,11 @@ public class EtbCommandsPanel {
content.add(testParameters); content.add(testParameters);
content.add(AnyCommand.createArea(new Node(), CMD_ETB_DUTY + " " + "10", false, false).getContent()); content.add(AnyCommand.createArea(uiContext, new Node(), CMD_ETB_DUTY + " " + "10", false, false).getContent());
JPanel mockPpsPanel = new JPanel(new VerticalFlowLayout()); JPanel mockPpsPanel = new JPanel(new VerticalFlowLayout());
mockPpsPanel.setBorder(BorderFactory.createTitledBorder("Mock PPS")); mockPpsPanel.setBorder(BorderFactory.createTitledBorder("Mock PPS"));
mockPpsPanel.add(DetachedSensor.createMockVoltageSlider(Sensor.PPS)); mockPpsPanel.add(DetachedSensor.createMockVoltageSlider(uiContext.getCommandQueue(), Sensor.PPS));
content.add(mockPpsPanel); content.add(mockPpsPanel);

View File

@ -31,12 +31,14 @@ public class AnyCommand {
public static final String KEY = "last_value"; public static final String KEY = "last_value";
private static final String DECODE_RPN = "decode_rpn"; private static final String DECODE_RPN = "decode_rpn";
private final UIContext uiContext;
private final JTextComponent text; private final JTextComponent text;
private JPanel content = new JPanel(new FlowLayout(FlowLayout.LEFT)); private JPanel content = new JPanel(new FlowLayout(FlowLayout.LEFT));
private boolean reentrant; private boolean reentrant;
private Listener listener; private Listener listener;
private AnyCommand(final JTextComponent text, final Node config, String defaultCommand, final boolean listenToCommands, boolean withCommandCaption) { private AnyCommand(UIContext uiContext, final JTextComponent text, final Node config, String defaultCommand, final boolean listenToCommands, boolean withCommandCaption) {
this.uiContext = uiContext;
this.text = text; this.text = text;
installCtrlEnterAction(); installCtrlEnterAction();
text.setText(defaultCommand); text.setText(defaultCommand);
@ -55,7 +57,7 @@ public class AnyCommand {
}); });
content.add(go); content.add(go);
CommandQueue.getInstance().addListener(command -> { uiContext.getCommandQueue().addListener(command -> {
if (listenToCommands && !reentrant) if (listenToCommands && !reentrant)
text.setText(command); text.setText(command);
}); });
@ -123,7 +125,7 @@ public class AnyCommand {
listener.onSend(); listener.onSend();
int timeout = CommandQueue.getTimeout(cmd); int timeout = CommandQueue.getTimeout(cmd);
reentrant = true; reentrant = true;
CommandQueue.getInstance().write(cmd.toLowerCase(), timeout); uiContext.getCommandQueue().write(cmd.toLowerCase(), timeout);
reentrant = false; reentrant = false;
} }
@ -260,7 +262,7 @@ public class AnyCommand {
public static AnyCommand createField(UIContext uiContext, Node config, String defaultCommand, boolean listenToCommands, boolean withCommandCaption) { public static AnyCommand createField(UIContext uiContext, Node config, String defaultCommand, boolean listenToCommands, boolean withCommandCaption) {
final JTextField text = new JTextFieldWithWidth(200); final JTextField text = new JTextFieldWithWidth(200);
final AnyCommand command = new AnyCommand(text, config, defaultCommand, listenToCommands, withCommandCaption); final AnyCommand command = new AnyCommand(uiContext, text, config, defaultCommand, listenToCommands, withCommandCaption);
text.addActionListener(new ActionListener() { text.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -292,7 +294,7 @@ public class AnyCommand {
return command; return command;
} }
public static AnyCommand createArea(Node config, String defaultCommand, boolean listenToCommands, boolean withCommandCaption) { public static AnyCommand createArea(UIContext uiContext, Node config, String defaultCommand, boolean listenToCommands, boolean withCommandCaption) {
final JTextArea text = new JTextArea(3, 20) { final JTextArea text = new JTextArea(3, 20) {
@Override @Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
@ -302,6 +304,6 @@ public class AnyCommand {
}; };
// text.setMax // text.setMax
return new AnyCommand(text, config, defaultCommand, listenToCommands, withCommandCaption); return new AnyCommand(uiContext, text, config, defaultCommand, listenToCommands, withCommandCaption);
} }
} }

View File

@ -1,50 +0,0 @@
package com.rusefi.ui.widgets;
import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral;
import com.rusefi.io.CommandQueue;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* This panel turns ON/OFF some rusefi configuration property
* <p/>
* 7/11/13
* Andrey Belomutskiy, (c) 2013-2020
*/
public class BooleanFlagControlPanel {
private final JPanel content = new JPanel(new MigLayout());
protected final JCheckBox checkBox;
public BooleanFlagControlPanel(String labelCaption, String checkboxCaption) {
content.add(new JLabel(labelCaption));
checkBox = new JCheckBox(checkboxCaption);
content.add(checkBox);
}
public JComponent getControl() {
return content;
}
protected void installCommand(final String command) {
checkBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int mode = checkBox.isSelected() ? 1 : 0;
CommandQueue.getInstance().write(command + mode);
}
});
}
protected void installStatusReader(final Sensor statusSensor) {
SensorCentral.getInstance().addListener(statusSensor, new SensorCentral.SensorListener() {
@Override
public void onSensorUpdate(double value) {
checkBox.setSelected(value > 0);
}
});
}
}

View File

@ -6,7 +6,6 @@ import com.rusefi.io.CommandQueue;
import com.rusefi.io.IMethodInvocation; import com.rusefi.io.IMethodInvocation;
import com.rusefi.io.InvocationConfirmationListener; import com.rusefi.io.InvocationConfirmationListener;
import com.rusefi.io.LinkManager; import com.rusefi.io.LinkManager;
import com.rusefi.ui.GaugesPanel;
import com.rusefi.ui.UIContext; import com.rusefi.ui.UIContext;
import com.rusefi.ui.storage.Node; import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.UiUtils; import com.rusefi.ui.util.UiUtils;
@ -109,7 +108,7 @@ public class DetachedSensor {
mockControlPanel.removeAll(); mockControlPanel.removeAll();
boolean isMockable = isMockable(); boolean isMockable = isMockable();
if (isMockable) { if (isMockable) {
Component mockComponent = createMockVoltageSlider(sensor); Component mockComponent = createMockVoltageSlider(uiContext.getCommandQueue(), sensor);
mockControlPanel.add(mockComponent); mockControlPanel.add(mockComponent);
} }
UiUtils.trueLayout(content); UiUtils.trueLayout(content);
@ -122,7 +121,7 @@ public class DetachedSensor {
return MOCKABLE.contains(sensor) && LinkManager.isSimulationMode; return MOCKABLE.contains(sensor) && LinkManager.isSimulationMode;
} }
public static Component createMockVoltageSlider(final Sensor sensor) { public static Component createMockVoltageSlider(CommandQueue commandQueue, final Sensor sensor) {
final JSlider slider = new JSlider(0, _5_VOLTS_WITH_DECIMAL); final JSlider slider = new JSlider(0, _5_VOLTS_WITH_DECIMAL);
slider.setLabelTable(SLIDER_LABELS); slider.setLabelTable(SLIDER_LABELS);
slider.setPaintLabels(true); slider.setPaintLabels(true);
@ -157,7 +156,6 @@ public class DetachedSensor {
slider.addChangeListener(e -> { slider.addChangeListener(e -> {
double value = slider.getValue() / 10.0; double value = slider.getValue() / 10.0;
CommandQueue commandQueue = CommandQueue.getInstance();
pendingValue.set(value); pendingValue.set(value);
/* /*

View File

@ -84,7 +84,8 @@ public class PotCommand {
public static void requestPotChange(int channel, int resistance) { public static void requestPotChange(int channel, int resistance) {
if (resistance < 0 || resistance > 10000) if (resistance < 0 || resistance > 10000)
throw new IllegalArgumentException("resistance: " + resistance); throw new IllegalArgumentException("resistance: " + resistance);
CommandQueue.getInstance().write("pot " + channel + " " + resistance); CommandQueue commandQueue = null;
commandQueue.write("pot " + channel + " " + resistance);
} }
public static int getPotResistance(double vout, double vRef) { public static int getPotResistance(double vout, double vRef) {

View File

@ -3,15 +3,13 @@ package com.rusefi.ui.widgets;
import com.rusefi.io.CommandQueue; import com.rusefi.io.CommandQueue;
import javax.swing.*; import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
/** /**
* Date: 3/17/13 * Date: 3/17/13
* Andrey Belomutskiy, (c) 2013-2020 * Andrey Belomutskiy, (c) 2013-2020
*/ */
public class RpmCommand extends JPanel { public class RpmCommand extends JPanel {
/*
public RpmCommand() { public RpmCommand() {
setBorder(BorderFactory.createLineBorder(Color.ORANGE)); setBorder(BorderFactory.createLineBorder(Color.ORANGE));
setLayout(new FlowLayout(FlowLayout.LEFT)); setLayout(new FlowLayout(FlowLayout.LEFT));
@ -36,11 +34,11 @@ public class RpmCommand extends JPanel {
}); });
add(spinner); add(spinner);
} }
*/
public static void requestRpmChange(int rpm) { public static void requestRpmChange(int rpm, CommandQueue commandQueue) {
/** /**
* @see * @see
*/ */
CommandQueue.getInstance().write("rpm " + rpm); commandQueue.write("rpm " + rpm);
} }
} }

View File

@ -1,12 +0,0 @@
package com.rusefi.ui.widgets;
/**
* Date: 1/14/13
* Andrey Belomutskiy, (c) 2013-2020
*/
public class WaveInfoPanel extends BooleanFlagControlPanel {
public WaveInfoPanel(final int index) {
super("wave" + index, "active on low");
installCommand("set_logic_input_mode " + index + " ");
}
}