refactoring: better dependency control

This commit is contained in:
rusefi 2020-06-25 21:05:06 -04:00
parent 9c3ea2f17b
commit ac051fb916
12 changed files with 67 additions and 60 deletions

View File

@ -87,7 +87,7 @@ public class SensorSnifferPane {
upperPanel.add(pauseButton);
upperPanel.add(new RpmLabel(uiContext,2).getContent());
command = AnyCommand.createField(config, true, false);
command = AnyCommand.createField(uiContext, config, true, false);
upperPanel.add(command.getContent());
upperPanel.add(new URLLabel(EngineSnifferPanel.HELP_TEXT, HELP_URL));

View File

@ -2,6 +2,7 @@ package com.rusefi.etb;
import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral;
import com.rusefi.ui.UIContext;
import org.jetbrains.annotations.NotNull;
import static com.rusefi.Timeouts.SECOND;
@ -20,7 +21,7 @@ public class StandardTestSequence {
);
}
public static TestSequenceStep addSequence(TestSequenceStep first_step, Runnable onEachStep, TestSequenceStep.Condition condition) {
public static TestSequenceStep addSequence(UIContext uiContext, TestSequenceStep first_step, Runnable onEachStep, TestSequenceStep.Condition condition) {
TestSequenceStep secondStep = new TestSequenceStep(SECOND, EtbTarget.Condition.YES) {
@Override
protected void doJob() {
@ -28,39 +29,39 @@ public class StandardTestSequence {
}
};
TestSequenceStep result = first_step.addNext(secondStep)
.addNext(10 * SECOND, 4 /*position*/, onEachStep, condition)
.addNext(5 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 8, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(5 * SECOND, 10, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 8, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(1 * SECOND, 10, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 7, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 5, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 3, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 1, /*position*/onEachStep, condition)
.addNext(3 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 30, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 50, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 70, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 95, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 50, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 70, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(10 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 4 /*position*/, onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 8, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(uiContext, 5 * SECOND, 10, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 8, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(uiContext, 1 * SECOND, 10, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 7, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 5, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 3, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 2, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 1, /*position*/onEachStep, condition)
.addNext(uiContext, 3 * SECOND, 0, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 6, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 30, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 50, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 70, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 95, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 50, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 70, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 4, /*position*/onEachStep, condition)
.addNext(uiContext, 10 * SECOND, 0, /*position*/onEachStep, condition)
;
return result;
}

View File

@ -2,6 +2,7 @@ package com.rusefi.etb;
import com.rusefi.FileLog;
import com.rusefi.core.MessagesCentral;
import com.rusefi.ui.UIContext;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@ -45,7 +46,7 @@ public abstract class TestSequenceStep {
protected abstract void doJob();
public TestSequenceStep addNext(long duration, double position, Runnable onEachStep, Condition condition) {
public TestSequenceStep addNext(UIContext uiContext, long duration, double position, Runnable onEachStep, Condition condition) {
return addNext(new EtbTarget(duration, position, onEachStep, condition));
}

View File

@ -213,7 +213,7 @@ public class GaugesPanel {
leftUpperPanel.add(createPauseButton());
leftUpperPanel.add(createSaveImageButton());
leftUpperPanel.add(new RpmLabel(uiContext, 2).getContent());
AnyCommand command = AnyCommand.createField(config, false, false);
AnyCommand command = AnyCommand.createField(uiContext, config, false, false);
leftUpperPanel.add(command.getContent());
return leftUpperPanel;
}

View File

@ -59,7 +59,7 @@ public class MainFrame {
if (ConnectionStatusLogic.INSTANCE.getValue() == ConnectionStatusValue.CONNECTED) {
long unixGmtTime = System.currentTimeMillis() / 1000L;
long withOffset = unixGmtTime + TimeZone.getDefault().getOffset(System.currentTimeMillis()) / 1000;
CommandQueue.getInstance().write("set " +
consoleUI.uiContext.getCommandQueue().write("set " +
Fields.CMD_DATE +
" " + withOffset, CommandQueue.DEFAULT_TIMEOUT,
InvocationConfirmationListener.VOID, false);

View File

@ -110,7 +110,7 @@ public class EngineSnifferPanel {
upperPanel.add(new RpmLabel(uiContext,2).getContent());
if (!uiContext.getLinkManager().isLogViewer()) {
command = AnyCommand.createField(config, "chartsize " + EFI_DEFAULT_CHART_SIZE, true, true);
command = AnyCommand.createField(uiContext, config, "chartsize " + EFI_DEFAULT_CHART_SIZE, true, true);
upperPanel.add(command.getContent());
}

View File

@ -14,8 +14,10 @@ import java.awt.event.ActionEvent;
*/
public class CalibrationPanel {
private final JPanel content = new JPanel(new VerticalFlowLayout());
private final UIContext uiContext;
public CalibrationPanel(UIContext uiContext) {
this.uiContext = uiContext;
content.setBorder(BorderFactory.createTitledBorder("Calibration"));
content.add(createCommandButton("Grab TPS#1 fully closed", "calibrate_tps_1_closed"));
content.add(createCommandButton("Grab TPS#1 Wide Open", "calibrate_tps_1_wot"));
@ -30,7 +32,7 @@ public class CalibrationPanel {
button.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
CommandQueue.getInstance().write(command);
uiContext.getCommandQueue().write(command);
}
});
return button;

View File

@ -2,6 +2,7 @@ package com.rusefi.ui.etb;
import com.rusefi.config.generated.Fields;
import com.rusefi.io.CommandQueue;
import com.rusefi.ui.UIContext;
import org.putgemin.VerticalFlowLayout;
import javax.swing.*;
@ -24,10 +25,10 @@ public class DirectDrivePanel {
private final JButton reset = new JButton("Cancel Direct Drive");
private double directDriverValue;
public DirectDrivePanel() {
public DirectDrivePanel(UIContext uiContext) {
content.setBorder(BorderFactory.createTitledBorder("Direct Drive"));
CommandQueue.getInstance().addListener(command -> {
uiContext.getCommandQueue().addListener(command -> {
if (command.startsWith(CMD_ETB_DUTY + " ")) {
command = command.substring((CMD_ETB_DUTY + " ").length());
directDriverValue = parseDouble(command, Double.NaN);
@ -43,7 +44,7 @@ public class DirectDrivePanel {
@Override
public void actionPerformed(ActionEvent e) {
double newValue = getCurrent() + getIncrement();
CommandQueue.getInstance().write(CMD_ETB_DUTY + " " + newValue);
uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + newValue);
}
});
upDownPanel.add(more);
@ -53,7 +54,7 @@ public class DirectDrivePanel {
@Override
public void actionPerformed(ActionEvent e) {
double newValue = getCurrent() - getIncrement();
CommandQueue.getInstance().write(CMD_ETB_DUTY + " " + newValue);
uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + newValue);
}
});
@ -61,7 +62,7 @@ public class DirectDrivePanel {
reset.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
CommandQueue.getInstance().write(CANCEL_DIRECT_DRIVE_COMMAND);
uiContext.getCommandQueue().write(CANCEL_DIRECT_DRIVE_COMMAND);
}
});

View File

@ -24,11 +24,11 @@ public class EtbCommandsPanel {
private final JPanel content = new JPanel(new VerticalFlowLayout());
public EtbCommandsPanel(UIContext uiContext) {
content.add(new DirectDrivePanel().getContent());
content.add(new DirectDrivePanel(uiContext).getContent());
JPanel testParameters = new JPanel(new VerticalFlowLayout());
testParameters.setBorder(BorderFactory.createTitledBorder("Try PID settings"));
EtbTestSequence etbTestSequence = new EtbTestSequence();
EtbTestSequence etbTestSequence = new EtbTestSequence(uiContext);
testParameters.add(etbTestSequence.getButton());
testParameters.add(UiUtils.wrap(etbTestSequence.getCancelButton()));
testParameters.add(etbTestSequence.getResult());

View File

@ -41,7 +41,7 @@ public class EtbMonteCarloSequence {
executor.execute(new Runnable() {
@Override
public void run() {
CommandQueue.getInstance().write(CANCEL_DIRECT_DRIVE_COMMAND);
uiContext.getCommandQueue().write(CANCEL_DIRECT_DRIVE_COMMAND);
sleep(3 * SECOND);
// 30000 data points at 100Hz should be 300 seconds worth of data
StandardTestSequence.metric.start(/* buffer size: */durationSeconds * frequencyHz, /*period, ms: */ 1000 / frequencyHz);
@ -63,11 +63,11 @@ public class EtbMonteCarloSequence {
":iFactor:" + iFactor +
":dFactor:" + dFactor;
MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, stats);
CommandQueue.getInstance().write("etbreset");
CommandQueue.getInstance().write("set etb_o " + offset);
CommandQueue.getInstance().write("set etb_p " + pFactor);
CommandQueue.getInstance().write("set etb_i " + iFactor);
CommandQueue.getInstance().write("set etb_d " + dFactor);
uiContext.getCommandQueue().write("etbreset");
uiContext.getCommandQueue().write("set etb_o " + offset);
uiContext.getCommandQueue().write("set etb_p " + pFactor);
uiContext.getCommandQueue().write("set etb_i " + iFactor);
uiContext.getCommandQueue().write("set etb_d " + dFactor);
MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class,
uiContext.sensorLogger.getSecondsSinceFileStart() + " running " + stats);
@ -96,7 +96,7 @@ public class EtbMonteCarloSequence {
MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class,"Running " + state + ", current=" + value);
});
TestSequenceStep last = StandardTestSequence.addSequence(firstStep, onEachStep, condition);
TestSequenceStep last = StandardTestSequence.addSequence(uiContext, firstStep, onEachStep, condition);
last.addNext(new TestSequenceStep(5 * SECOND, EtbTarget.Condition.YES) {
@Override
protected void doJob() {
@ -134,6 +134,6 @@ public class EtbMonteCarloSequence {
}
private void stopETB() {
CommandQueue.getInstance().write(CMD_ETB_DUTY + " " + 0);
uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + 0);
}
}

View File

@ -5,6 +5,7 @@ import com.rusefi.core.Sensor;
import com.rusefi.etb.EtbTarget;
import com.rusefi.etb.StandardTestSequence;
import com.rusefi.etb.TestSequenceStep;
import com.rusefi.ui.UIContext;
import javax.swing.*;
import java.awt.event.ActionEvent;
@ -41,7 +42,7 @@ public class EtbTestSequence {
private final JButton cancelButton = new JButton("Cancel");
private boolean isCancelled;
public EtbTestSequence() {
public EtbTestSequence(UIContext uiContext) {
cancelButton.setEnabled(false);
button.addActionListener(e -> {
@ -70,7 +71,7 @@ public class EtbTestSequence {
});
TestSequenceStep firstStep = new EtbTarget(10 * SECOND, 4, /*position*/onEachStep, TestSequenceStep.Condition.YES);
TestSequenceStep result = StandardTestSequence.addSequence(firstStep, onEachStep, new TestSequenceStep.Condition() {
TestSequenceStep result = StandardTestSequence.addSequence(uiContext, firstStep, onEachStep, new TestSequenceStep.Condition() {
@Override
public boolean shouldRunTask() {
if (isCancelled)

View File

@ -7,6 +7,7 @@ import com.rusefi.InfixConverter;
import com.rusefi.core.MessagesCentral;
import com.rusefi.io.CommandQueue;
import com.rusefi.ui.RecentCommands;
import com.rusefi.ui.UIContext;
import com.rusefi.ui.storage.Node;
import com.rusefi.ui.util.JTextFieldWithWidth;
@ -252,11 +253,11 @@ public class AnyCommand {
void onSend();
}
public static AnyCommand createField(Node config, boolean listenToCommands, boolean withCommandCaption) {
return createField(config, config.getProperty(KEY), listenToCommands, withCommandCaption);
public static AnyCommand createField(UIContext uiContext, Node config, boolean listenToCommands, boolean withCommandCaption) {
return createField(uiContext, config, config.getProperty(KEY), listenToCommands, withCommandCaption);
}
public static AnyCommand createField(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 AnyCommand command = new AnyCommand(text, config, defaultCommand, listenToCommands, withCommandCaption);