Live Docs progress: consuming data from multiple structures

This commit is contained in:
rusefi 2019-09-01 15:24:44 -04:00
parent 33cc21225c
commit abf2406621
9 changed files with 66 additions and 55 deletions

View File

@ -1,10 +1,7 @@
package com.rusefi.ldmp;
import com.rusefi.config.Field;
import com.rusefi.config.generated.EngineState;
import com.rusefi.config.generated.Fields;
import com.rusefi.config.generated.PidState;
import com.rusefi.config.generated.TriggerState;
import com.rusefi.config.generated.*;
import com.rusefi.ui.livedocs.LiveDataContext;
import org.jetbrains.annotations.NotNull;
@ -15,12 +12,19 @@ import java.util.Objects;
public enum StateDictionary {
INSTANCE;
public static final int NONE = -1;
private Map<Integer, Field[]> map = new HashMap<>();
StateDictionary() {
register(Fields.LDS_ETB_PID_STATE_INDEX, PidState.VALUES);
register(Fields.LDS_CLT_STATE_INDEX, ThermistorState.VALUES); // 0
register(Fields.LDS_IAT_STATE_INDEX, ThermistorState.VALUES);
register(Fields.LDS_SPEED_DENSITY_STATE_INDEX, EngineState.VALUES);
register(Fields.LDS_ENGINE_STATE_INDEX, EngineState.VALUES); // 3
register(Fields.LDS_FUEL_TRIM_STATE_INDEX, EngineState.VALUES);
register(Fields.LDS_TPS_TPS_ENEICHMENT_STATE_INDEX, EngineState.VALUES); // 5
register(Fields.LDS_TRIGGER_STATE_INDEX, TriggerState.VALUES);
register(Fields.LDS_ENGINE_STATE_INDEX, EngineState.VALUES);
register(Fields.LDS_ETB_PID_STATE_INDEX, PidState.VALUES); // 7
register(Fields.LDS_IDLE_PID_STATE_INDEX, PidState.VALUES);
}
private void register(int ldsIndex, Field[] values) {
@ -30,6 +34,11 @@ public enum StateDictionary {
public Field[] getValue(String state) {
String indexFieldName = getContextIndexFieldName(state);
LiveDataContext indexValue = getStateContext(indexFieldName);
return getFields(indexFieldName, indexValue);
}
@NotNull
public Field[] getFields(String indexFieldName, LiveDataContext indexValue) {
Field[] result = map.get(indexValue.getId());
if (result == null) {
throw new IllegalStateException("Nothing for " + indexFieldName + "/" + indexValue);

View File

@ -1,17 +1,14 @@
package com.rusefi.ui.livedocs;
import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.config.Field;
public abstract class LiveDocHolder {
private final LiveDataContext id;
private final RefreshActionsMap actions;
private final Field[] values;
public LiveDocHolder(LiveDataContext id, com.rusefi.ui.livedocs.RefreshActionsMap actions, Field[] values) {
public LiveDocHolder(LiveDataContext id, RefreshActionsMap actions) {
this.id = id;
this.actions = actions;
this.values = values;
}
public RefreshActionsMap getActions() {
@ -29,10 +26,6 @@ public abstract class LiveDocHolder {
return id;
}
public int getStructSize() {
return Field.getStructureSize(values);
}
@Override
public String toString() {
return "LiveDocHolder{" +

View File

@ -1,6 +1,8 @@
package com.rusefi.ui.livedocs;
import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.config.Field;
import com.rusefi.ldmp.StateDictionary;
import java.util.ArrayList;
import java.util.List;
@ -36,7 +38,8 @@ public enum LiveDocsRegistry {
private void refresh(BinaryProtocol binaryProtocol, LiveDocHolder holder, LiveDataContext context) {
int liveDocRequestId = context.getId();
int size = holder.getStructSize();
Field[] values = StateDictionary.INSTANCE.getFields("refresh", context);
int size = Field.getStructureSize(values);
byte packet[] = new byte[5];
packet[0] = COMMAND_GET_STRUCT;

View File

@ -3,10 +3,7 @@ package com.rusefi.ui.livedocs;
import com.opensr5.ConfigurationImage;
import com.rusefi.binaryprotocol.BinaryProtocol;
import com.rusefi.config.Field;
import com.rusefi.config.generated.EngineState;
import com.rusefi.config.generated.Fields;
import com.rusefi.config.generated.ThermistorState;
import com.rusefi.config.generated.TriggerState;
import com.rusefi.core.Sensor;
import com.rusefi.core.SensorCentral;
import com.rusefi.ldmp.*;
@ -35,14 +32,20 @@ public class LiveDocPanel {
private static final int MAGIC_DETACHED_GAUGE_SIZE = 200;
private static final int LIVE_DATA_PRECISION = 2;
@NotNull
static JPanel createPanel(String title, String settingsInstancePrefix, final int defaultContextId, Field[] values, Request[] content) {
static JPanel createPanel(String title, String settingsInstancePrefix, Request[] content) {
return createPanel(title, settingsInstancePrefix, content, StateDictionary.NONE);
}
@NotNull
static JPanel createPanel(String title, String settingsInstancePrefix, Request[] content, final int defaultContextId) {
LiveDataContext defaultContext = new LiveDataContext(defaultContextId);
ActionPanel ap = createComponents(title, content, values, settingsInstancePrefix, defaultContext);
ActionPanel ap = createComponents(title, content, settingsInstancePrefix, defaultContext);
JPanel panel = ap.getPanel();
LiveDocHolder holder = new LiveDocHolder(defaultContext, ap.getRefreshActions(), values) {
LiveDocHolder holder = new LiveDocHolder(defaultContext, ap.getRefreshActions()) {
@Override
public boolean isVisible() {
boolean isVisible = !panel.getVisibleRect().isEmpty();
@ -59,7 +62,7 @@ public class LiveDocPanel {
return c.isVisible() && (parent == null || isRecursivelyVisible(parent));
}
private static ActionPanel createComponents(String title, Request[] content, Field[] values, String settingsInstancePrefix, LiveDataContext defaultContext) {
private static ActionPanel createComponents(String title, Request[] content, String settingsInstancePrefix, LiveDataContext defaultContext) {
ActionPanel result = new ActionPanel(title);
for (Request r : content) {
@ -73,7 +76,7 @@ public class LiveDocPanel {
} else if (r instanceof FieldRequest) {
FieldRequest request = (FieldRequest) r;
LiveDataContext context = getFieldContext(defaultContext, request.getStateContext());
Field field = getField(values, request);
Field field = getField(defaultContext, request);
JLabel label = new JLabel("*");
label.setIcon(UiUtils.loadIcon("livedocs/variable.png"));
label.setToolTipText("Variable " + field.getName());
@ -127,7 +130,7 @@ public class LiveDocPanel {
} else if (r instanceof IfRequest) {
IfRequest request = (IfRequest) r;
IfConditionPanel panel = createIfRequestPanel(request, values, defaultContext);
IfConditionPanel panel = createIfRequestPanel(request, defaultContext);
result.actionsListAddAll(panel.getActionsList());
@ -148,10 +151,10 @@ public class LiveDocPanel {
}
}
private static Field getField(Field[] defaultContext, FieldRequest request) {
private static Field getField(LiveDataContext defaultContext, FieldReference request) {
Field[] context;
if (request.getStateContext().isEmpty()) {
context = defaultContext;
context = StateDictionary.INSTANCE.getFields("create", defaultContext);
} else {
context = StateDictionary.INSTANCE.getValue(request.getStateContext());
}
@ -166,17 +169,17 @@ public class LiveDocPanel {
return "Configuration " + dialogField.getUiName() + " (" + configurationFieldName + ")";
}
private static IfConditionPanel createIfRequestPanel(IfRequest request, Field[] values, LiveDataContext defaultContext) {
Field conditionField = Field.findField(values, "", request.getVariable());
private static IfConditionPanel createIfRequestPanel(IfRequest request, LiveDataContext defaultContext) {
Field conditionField = getField(defaultContext, request);
JPanel result = new JPanel(new VerticalFlowLayout());
JLabel conditionLabel = new JLabel(request.getVariable());
JLabel conditionLabel = new JLabel(request.getField());
result.add(conditionLabel);
ActionPanel trueAP = createComponents("", request.trueBlock.toArray(new Request[0]), values, "", defaultContext);
ActionPanel falseAP = createComponents("", request.falseBlock.toArray(new Request[0]), values, "", defaultContext);
ActionPanel trueAP = createComponents("", request.trueBlock.toArray(new Request[0]), "", defaultContext);
ActionPanel falseAP = createComponents("", request.falseBlock.toArray(new Request[0]), "", defaultContext);
result.add(trueAP.getPanel());
result.add(falseAP.getPanel());
@ -190,7 +193,7 @@ public class LiveDocPanel {
@Override
public void refresh(BinaryProtocol bp, byte[] response) {
int value = (int) conditionField.getValue(new ConfigurationImage(response));
conditionLabel.setText(request.getVariable() + " is " + (value == 1 ? "TRUE" : "FALSE"));
conditionLabel.setText(request.getField() + " is " + (value == 1 ? "TRUE" : "FALSE"));
JPanel active;
JPanel passive;
if (value == 1) {
@ -214,18 +217,13 @@ public class LiveDocPanel {
public static JPanel createLiveDocumentationPanel() {
JPanel liveDocs = new JPanel(new MigLayout(LAYOUT));
liveDocs.add(createPanel("Fuel", "", Fields.LDS_ENGINE_STATE_INDEX,
EngineState.VALUES, FuelMathMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Fuel", "", FuelMathMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("tCharge", "", Fields.LDS_ENGINE_STATE_INDEX,
EngineState.VALUES, SpeedDensityMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("tCharge", "", SpeedDensityMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Idle", "", Fields.LDS_ENGINE_STATE_INDEX,
EngineState.VALUES, IdleThreadMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Idle", "", IdleThreadMeta.CONTENT), CONSTRAINTS);
// todo: fix the defect - we request ETB structure but decode it as EngineState
liveDocs.add(createPanel("ETB", "", Fields.LDS_ETB_PID_STATE_INDEX,
EngineState.VALUES, ElectronicThrottleMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("ETB", "", ElectronicThrottleMeta.CONTENT), CONSTRAINTS);
return liveDocs;
}
@ -233,17 +231,15 @@ public class LiveDocPanel {
public static JPanel createSensorsLiveDataPanel() {
JPanel liveDocs = new JPanel(new MigLayout(LAYOUT));
liveDocs.add(createPanel("Coolant Sensor", "CLT", Fields.LDS_CLT_STATE_INDEX,
ThermistorState.VALUES, ThermistorsMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Coolant Sensor", "CLT", ThermistorsMeta.CONTENT, Fields.LDS_CLT_STATE_INDEX
), CONSTRAINTS);
liveDocs.add(createPanel("Intake Air Sensor", "IAT", Fields.LDS_IAT_STATE_INDEX,
ThermistorState.VALUES, ThermistorsMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Intake Air Sensor", "IAT", ThermistorsMeta.CONTENT, Fields.LDS_IAT_STATE_INDEX
), CONSTRAINTS);
liveDocs.add(createPanel("Throttle Position Sensor", "", Fields.LDS_ENGINE_STATE_INDEX,
EngineState.VALUES, TpsMeta.TPS_SECTION), CONSTRAINTS);
liveDocs.add(createPanel("Throttle Position Sensor", "", TpsMeta.TPS_SECTION), CONSTRAINTS);
liveDocs.add(createPanel("Trigger", "", Fields.LDS_TRIGGER_STATE_INDEX,
TriggerState.VALUES, TriggerDecoderMeta.CONTENT), CONSTRAINTS);
liveDocs.add(createPanel("Trigger", "", TriggerDecoderMeta.CONTENT), CONSTRAINTS);
return liveDocs;
}

View File

@ -1,6 +1,5 @@
package com.rusefi.ui.livedocs;
import com.rusefi.config.generated.ThermistorState;
import com.rusefi.ldmp.generated.ThermistorsMeta;
import com.rusefi.ui.livedocs.controls.Toolbox;
import com.rusefi.ui.util.FrameHelper;
@ -21,8 +20,8 @@ public class LiveDocsSandbox {
comment.setForeground(Color.blue);
JPanel panels = new JPanel(new MigLayout("fillx, gap 0, insets 0"));
panels.add(LiveDocPanel.createPanel("Coolant Sensor", "CLT", LDS_CLT_STATE_INDEX, ThermistorState.VALUES, ThermistorsMeta.CONTENT), "wrap");
panels.add(LiveDocPanel.createPanel("Intake Air Sensor", "IAT", LDS_IAT_STATE_INDEX, ThermistorState.VALUES, ThermistorsMeta.CONTENT), "wrap");
panels.add(LiveDocPanel.createPanel("Coolant Sensor", "CLT", ThermistorsMeta.CONTENT, LDS_CLT_STATE_INDEX), "wrap");
panels.add(LiveDocPanel.createPanel("Intake Air Sensor", "IAT", ThermistorsMeta.CONTENT, LDS_IAT_STATE_INDEX), "wrap");
panels.add(getTChargePanel(), "wrap, grow");

Binary file not shown.

View File

@ -0,0 +1,7 @@
package com.rusefi.ldmp;
public interface FieldReference {
String getStateContext();
String getField();
}

View File

@ -7,7 +7,7 @@ import static com.rusefi.ConfigDefinition.EOL;
/**
* (c) Andrey Belomutskiy 2013-2019
*/
public class FieldRequest extends Request {
public class FieldRequest extends Request implements FieldReference {
private final String stateContext;
private final String field;
@ -16,10 +16,12 @@ public class FieldRequest extends Request {
this.field = field;
}
@Override
public String getStateContext() {
return stateContext;
}
@Override
public String getField() {
return field;
}

View File

@ -6,7 +6,7 @@ import java.util.List;
import static com.rusefi.ConfigDefinition.EOL;
public class IfRequest extends Request {
public class IfRequest extends Request implements FieldReference {
private final String stateContext;
private final String variable;
public List<Request> trueBlock = new ArrayList<>();
@ -23,6 +23,7 @@ public class IfRequest extends Request {
this.falseBlock.addAll(Arrays.asList(falseBlock));
}
@Override
public String getStateContext() {
return stateContext;
}
@ -36,7 +37,8 @@ public class IfRequest extends Request {
'}';
}
public String getVariable() {
@Override
public String getField() {
return variable;
}