Live Data progress

This commit is contained in:
rusefi 2019-09-01 00:45:36 -04:00
parent 8be92bbdb7
commit e1a7ae0148
20 changed files with 81 additions and 56 deletions

View File

@ -520,6 +520,7 @@ void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX) {
initIdleHardware(PASS_ENGINE_PARAMETER_SIGNATURE); initIdleHardware(PASS_ENGINE_PARAMETER_SIGNATURE);
#endif /* EFI_UNIT_TEST */ #endif /* EFI_UNIT_TEST */
DISPLAY_STATE(Engine)
DISPLAY_TEXT(Idle_State); DISPLAY_TEXT(Idle_State);
engine->engineState.idle.DISPLAY_FIELD(idleState) = INIT; engine->engineState.idle.DISPLAY_FIELD(idleState) = INIT;
DISPLAY_TEXT(EOL); DISPLAY_TEXT(EOL);

View File

@ -41,6 +41,7 @@
#define DISPLAY_TAG(x) #define DISPLAY_TAG(x)
#define DISPLAY_TEXT(x) #define DISPLAY_TEXT(x)
#define DISPLAY_STATE(x)
#define DISPLAY_SENSOR(x) {} #define DISPLAY_SENSOR(x) {}
#define DISPLAY_IF(x) x #define DISPLAY_IF(x) x

View File

@ -487,6 +487,7 @@ void TriggerState::decodeTriggerEvent(trigger_event_e const signal, efitime_t no
bool isSynchronizationPoint; bool isSynchronizationPoint;
bool wasSynchronized = shaft_is_synchronized; bool wasSynchronized = shaft_is_synchronized;
DISPLAY_STATE(Trigger)
DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS1)); DISPLAY(DISPLAY_CONFIG(TRIGGERINPUTPINS1));
DISPLAY_TEXT(Trigger_1_Fall); DISPLAY_TEXT(Trigger_1_Fall);
DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS1)); DISPLAY(DISPLAY_FIELD(HWEVENTCOUNTERS1));

View File

@ -7,9 +7,9 @@ public class AccelEnrichmentMeta {
new ConfigRequest("wwaeTau"), new ConfigRequest("wwaeTau"),
new ConfigRequest("wwaeBeta"), new ConfigRequest("wwaeBeta"),
new TextRequest("Current_Wall_Fuel_Film"), new TextRequest("Current_Wall_Fuel_Film"),
new FieldRequest("wallFuel"), new FieldRequest("","wallFuel"),
new TextRequest("Fuel"), new TextRequest("Fuel"),
new FieldRequest("wallFuelCorrection"), new FieldRequest("","wallFuelCorrection"),
new TextRequest("ms"), new TextRequest("ms"),
}; };
} }

View File

@ -12,9 +12,9 @@ public class ElectronicThrottleMeta {
new SensorRequest("PPS"), new SensorRequest("PPS"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Output"), new TextRequest("Output"),
new FieldRequest("output"), new FieldRequest("","output"),
new TextRequest("iTerm"), new TextRequest("iTerm"),
new FieldRequest("iTerm"), new FieldRequest("","iTerm"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Settings"), new TextRequest("Settings"),
new ConfigRequest("ETB_PFACTOR"), new ConfigRequest("ETB_PFACTOR"),

View File

@ -7,40 +7,40 @@ public class FuelMathMeta {
new IfRequest("isCrankingState", new IfRequest("isCrankingState",
new Request[]{ new Request[]{
new TextRequest("Duration_coef"), new TextRequest("Duration_coef"),
new FieldRequest("cranking_durationCoefficient"), new FieldRequest("","cranking_durationCoefficient"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Coolant_coef"), new TextRequest("Coolant_coef"),
new FieldRequest("cranking_coolantTemperatureCoefficient"), new FieldRequest("","cranking_coolantTemperatureCoefficient"),
new SensorRequest("CLT"), new SensorRequest("CLT"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("TPS_coef"), new TextRequest("TPS_coef"),
new FieldRequest("cranking_tpsCoefficient"), new FieldRequest("","cranking_tpsCoefficient"),
new SensorRequest("TPS"), new SensorRequest("TPS"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Cranking_fuel"), new TextRequest("Cranking_fuel"),
new FieldRequest("cranking_fuel"), new FieldRequest("","cranking_fuel"),
}, },
new Request[]{ new Request[]{
new TextRequest("Base_fuel"), new TextRequest("Base_fuel"),
new FieldRequest("running_baseFuel"), new FieldRequest("","running_baseFuel"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Intake_coef"), new TextRequest("Intake_coef"),
new FieldRequest("running_intakeTemperatureCoefficient"), new FieldRequest("","running_intakeTemperatureCoefficient"),
new SensorRequest("IAT"), new SensorRequest("IAT"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Coolant_coef"), new TextRequest("Coolant_coef"),
new FieldRequest("running_coolantTemperatureCoefficient"), new FieldRequest("","running_coolantTemperatureCoefficient"),
new SensorRequest("CLT"), new SensorRequest("CLT"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Post_cranking_coef"), new TextRequest("Post_cranking_coef"),
new FieldRequest("running_postCrankingFuelCorrection"), new FieldRequest("","running_postCrankingFuelCorrection"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Running_fuel"), new TextRequest("Running_fuel"),
new FieldRequest("running_fuel"), new FieldRequest("","running_fuel"),
new TextRequest("eol"), new TextRequest("eol"),
new TextRequest("Injector_lag"), new TextRequest("Injector_lag"),
new FieldRequest("running_injectorLag"), new FieldRequest("","running_injectorLag"),
new SensorRequest("VBATT"), new SensorRequest("VBATT"),
}), }),
}; };

View File

@ -5,18 +5,18 @@ import com.rusefi.ldmp.*;
public class IdleThreadMeta { public class IdleThreadMeta {
public static final Request[] CONTENT = new Request[]{ public static final Request[] CONTENT = new Request[]{
new TextRequest("Idle_State"), new TextRequest("Idle_State"),
new FieldRequest("idleState"), new FieldRequest("Engine","idleState"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Base_Position"), new TextRequest("Base_Position"),
new FieldRequest("baseIdlePosition"), new FieldRequest("Engine","baseIdlePosition"),
new TextRequest("Position_with_Adjustments"), new TextRequest("Position_with_Adjustments"),
new FieldRequest("currentIdlePosition"), new FieldRequest("Engine","currentIdlePosition"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("EOL"), new TextRequest("EOL"),
new SensorRequest("TPS"), new SensorRequest("TPS"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Throttle_Up_State"), new TextRequest("Throttle_Up_State"),
new FieldRequest("throttlePedalUpState"), new FieldRequest("Engine","throttlePedalUpState"),
new ConfigRequest("throttlePedalUpPin"), new ConfigRequest("throttlePedalUpPin"),
}; };
} }

View File

@ -7,7 +7,7 @@ public class SpeedDensityMeta {
new IfRequest("isTChargeAirModel", new IfRequest("isTChargeAirModel",
new Request[]{ new Request[]{
new TextRequest("interpolate_Air_Flow"), new TextRequest("interpolate_Air_Flow"),
new FieldRequest("airFlow"), new FieldRequest("","airFlow"),
new TextRequest("Between"), new TextRequest("Between"),
new ConfigRequest("tChargeAirCoefMin"), new ConfigRequest("tChargeAirCoefMin"),
new ConfigRequest("tChargeAirFlowMax"), new ConfigRequest("tChargeAirFlowMax"),

View File

@ -5,16 +5,16 @@ import com.rusefi.ldmp.*;
public class ThermistorsMeta { public class ThermistorsMeta {
public static final Request[] CONTENT = new Request[]{ public static final Request[] CONTENT = new Request[]{
new TextRequest("Analog_MCU_reads"), new TextRequest("Analog_MCU_reads"),
new FieldRequest("voltageMCU"), new FieldRequest("","voltageMCU"),
new TextRequest("from_pin"), new TextRequest("from_pin"),
new ConfigRequest("adcChannel"), new ConfigRequest("adcChannel"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Analog_ECU_reads"), new TextRequest("Analog_ECU_reads"),
new FieldRequest("voltageBoard"), new FieldRequest("","voltageBoard"),
new TextRequest("Rdivider"), new TextRequest("Rdivider"),
new ConfigRequest("analogInputDividerCoefficient"), new ConfigRequest("analogInputDividerCoefficient"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Measured_resistance"), new TextRequest("Measured_resistance"),
new FieldRequest("resistance"), new FieldRequest("","resistance"),
}; };
} }

View File

@ -11,18 +11,18 @@ public class TpsMeta {
new SensorRequest("TPS"), new SensorRequest("TPS"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Analog_MCU_reads"), new TextRequest("Analog_MCU_reads"),
new FieldRequest("tpsVoltageMCU"), new FieldRequest("","tpsVoltageMCU"),
new TextRequest("Volts"), new TextRequest("Volts"),
new TextRequest("from_pin"), new TextRequest("from_pin"),
new ConfigRequest("tps1_1AdcChannel"), new ConfigRequest("tps1_1AdcChannel"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Analog_ECU_reads"), new TextRequest("Analog_ECU_reads"),
new FieldRequest("tpsVoltageBoard"), new FieldRequest("","tpsVoltageBoard"),
new TextRequest("Rdivider"), new TextRequest("Rdivider"),
new ConfigRequest("analogInputDividerCoefficient"), new ConfigRequest("analogInputDividerCoefficient"),
new TextRequest("EOL"), new TextRequest("EOL"),
new TextRequest("Current_ADC"), new TextRequest("Current_ADC"),
new FieldRequest("currentTpsAdc"), new FieldRequest("","currentTpsAdc"),
new TextRequest("interpolate_between"), new TextRequest("interpolate_between"),
new ConfigRequest("tpsMax"), new ConfigRequest("tpsMax"),
new TextRequest("and"), new TextRequest("and"),

View File

@ -6,14 +6,14 @@ public class TriggerDecoderMeta {
public static final Request[] CONTENT = new Request[]{ public static final Request[] CONTENT = new Request[]{
new ConfigRequest("TRIGGERINPUTPINS1"), new ConfigRequest("TRIGGERINPUTPINS1"),
new TextRequest("Trigger_1_Fall"), new TextRequest("Trigger_1_Fall"),
new FieldRequest("HWEVENTCOUNTERS1"), new FieldRequest("Trigger","HWEVENTCOUNTERS1"),
new TextRequest("Rise"), new TextRequest("Rise"),
new FieldRequest("HWEVENTCOUNTERS2"), new FieldRequest("Trigger","HWEVENTCOUNTERS2"),
new TextRequest("EOL"), new TextRequest("EOL"),
new ConfigRequest("TRIGGERINPUTPINS2"), new ConfigRequest("TRIGGERINPUTPINS2"),
new TextRequest("Trigger_2_Fall"), new TextRequest("Trigger_2_Fall"),
new FieldRequest("HWEVENTCOUNTERS3"), new FieldRequest("Trigger","HWEVENTCOUNTERS3"),
new TextRequest("Rise"), new TextRequest("Rise"),
new FieldRequest("HWEVENTCOUNTERS4"), new FieldRequest("Trigger","HWEVENTCOUNTERS4"),
}; };
} }

View File

@ -3,8 +3,6 @@ package com.rusefi.ldmp;
import java.util.Objects; import java.util.Objects;
import static com.rusefi.ConfigDefinition.EOL;
/** /**
* Reference to a parameter from configuration * Reference to a parameter from configuration
* *
@ -43,7 +41,7 @@ public class ConfigRequest extends Request {
} }
@Override @Override
public String getJavaCode() { public String getGeneratedJavaCode() {
return withSimpleParameter(quoteString(field)); return withSimpleParameter(quoteString(field));
} }
} }

View File

@ -2,10 +2,14 @@ package com.rusefi.ldmp;
import java.util.Objects; import java.util.Objects;
import static com.rusefi.ConfigDefinition.EOL;
public class FieldRequest extends Request { public class FieldRequest extends Request {
private final String stateContext;
private final String field; private final String field;
public FieldRequest(String field) { public FieldRequest(String stateContext, String field) {
this.stateContext = stateContext;
this.field = field; this.field = field;
} }
@ -16,7 +20,8 @@ public class FieldRequest extends Request {
@Override @Override
public String toString() { public String toString() {
return "FieldRequest{" + return "FieldRequest{" +
"field='" + field + '\'' + "stateContext='" + stateContext + '\'' +
", field='" + field + '\'' +
'}'; '}';
} }
@ -24,18 +29,23 @@ public class FieldRequest extends Request {
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false; if (o == null || getClass() != o.getClass()) return false;
FieldRequest that = (FieldRequest) o; FieldRequest request = (FieldRequest) o;
return field.equals(that.field); return stateContext.equals(request.stateContext) &&
field.equals(request.field);
} }
@Override @Override
public int hashCode() { public int hashCode() {
return Objects.hash(field); return Objects.hash(stateContext, field);
} }
@Override @Override
public String getJavaCode() { public String getGeneratedJavaCode() {
return withSimpleParameter(quoteString(field)); return GLOBAL_PREFIX + "new " + getClass().getSimpleName() + "("
+ quoteString(stateContext)
+ ","
+ quoteString(field)
+ ")," + EOL;
} }
} }

View File

@ -35,17 +35,17 @@ public class IfRequest extends Request {
} }
@Override @Override
public String getJavaCode() { public String getGeneratedJavaCode() {
String result = Request.GLOBAL_PREFIX; String result = Request.GLOBAL_PREFIX;
Request.GLOBAL_PREFIX = Request.GLOBAL_PREFIX + "\t"; Request.GLOBAL_PREFIX = Request.GLOBAL_PREFIX + "\t";
result += "new IfRequest(" + quoteString(variable) + "," + EOL + result += "new IfRequest(" + quoteString(variable) + "," + EOL +
Request.GLOBAL_PREFIX + "new Request[]{" + EOL + Request.GLOBAL_PREFIX + "new Request[]{" + EOL +
Request.printList(trueBlock) + Request.getGeneratedJavaCode(trueBlock) +
"}," + EOL + "}," + EOL +
Request.GLOBAL_PREFIX + "new Request[]{" + EOL + Request.GLOBAL_PREFIX + "new Request[]{" + EOL +
Request.printList(falseBlock) + Request.getGeneratedJavaCode(falseBlock) +
"})," + EOL; "})," + EOL;
Request.GLOBAL_PREFIX = Request.GLOBAL_PREFIX.substring(1); Request.GLOBAL_PREFIX = Request.GLOBAL_PREFIX.substring(1);

View File

@ -18,6 +18,7 @@ public class LiveDocsMetaParser {
private static final String DISPLAY_CONFIG = "DISPLAY_CONFIG"; private static final String DISPLAY_CONFIG = "DISPLAY_CONFIG";
private static final String DISPLAY_PREFIX = "DISPLAY_PREFIX"; private static final String DISPLAY_PREFIX = "DISPLAY_PREFIX";
private static final String DISPLAY_FIELD = "DISPLAY_FIELD"; private static final String DISPLAY_FIELD = "DISPLAY_FIELD";
private static final String DISPLAY_STATE = "DISPLAY_STATE";
private static final String DISPLAY_TEXT = "DISPLAY_TEXT"; private static final String DISPLAY_TEXT = "DISPLAY_TEXT";
private static final String DISPLAY_SENSOR = "DISPLAY_SENSOR"; private static final String DISPLAY_SENSOR = "DISPLAY_SENSOR";
private static final String DISPLAY_IF = "DISPLAY_IF"; private static final String DISPLAY_IF = "DISPLAY_IF";
@ -79,6 +80,10 @@ public class LiveDocsMetaParser {
SystemOut.println("REQ CONF " + config); SystemOut.println("REQ CONF " + config);
result.add(new ConfigRequest(config)); result.add(new ConfigRequest(config));
} }
} else if (DISPLAY_STATE.equalsIgnoreCase(token)) {
if (s.hasNext()) {
String state = s.next();
meta.stateStack.push(state); }
} else if (DISPLAY_TEXT.equalsIgnoreCase(token)) { } else if (DISPLAY_TEXT.equalsIgnoreCase(token)) {
if (s.hasNext()) { if (s.hasNext()) {
String config = s.next(); String config = s.next();
@ -100,7 +105,7 @@ public class LiveDocsMetaParser {
if (s.hasNext()) { if (s.hasNext()) {
String config = prefix + s.next(); String config = prefix + s.next();
SystemOut.println("REQ FIELD " + config); SystemOut.println("REQ FIELD " + config);
result.add(new FieldRequest(config)); result.add(new FieldRequest(meta.getStateContext(), config));
prefix.setLength(0); prefix.setLength(0);
} }
} else if (DISPLAY_IF.equalsIgnoreCase(token)) { } else if (DISPLAY_IF.equalsIgnoreCase(token)) {
@ -162,7 +167,7 @@ public class LiveDocsMetaParser {
java.append("\tpublic static final Request[] " + java.append("\tpublic static final Request[] " +
e.getKey() + e.getKey() +
" = new Request[]{" + EOL); " = new Request[]{" + EOL);
java.append(Request.printList(list)); java.append(Request.getGeneratedJavaCode(list));
java.append("\t};" + EOL); java.append("\t};" + EOL);
} }

View File

@ -4,7 +4,7 @@ import java.util.*;
public class MetaInfo { public class MetaInfo {
public Map<String, List<Request>> map = new TreeMap<>(); public Map<String, List<Request>> map = new TreeMap<>();
public Stack<String> stateStack = new Stack<>();
public List<Request> start(String content) { public List<Request> start(String content) {
map.putIfAbsent(content, new ArrayList<>()); map.putIfAbsent(content, new ArrayList<>());
@ -14,4 +14,10 @@ public class MetaInfo {
public List<Request> first() { public List<Request> first() {
return map.values().iterator().next(); return map.values().iterator().next();
} }
public String getStateContext() {
if (stateStack.isEmpty())
return ""; // state context not defined, java code would have to explicitly provide that information
return stateStack.peek();
}
} }

View File

@ -7,14 +7,14 @@ import static com.rusefi.ConfigDefinition.EOL;
public abstract class Request { public abstract class Request {
static String GLOBAL_PREFIX = "\t\t\t"; static String GLOBAL_PREFIX = "\t\t\t";
static String printList(List<Request> r) { static String getGeneratedJavaCode(List<Request> r) {
StringBuilder java = new StringBuilder(); StringBuilder java = new StringBuilder();
for (Request request : r) for (Request request : r)
java.append(request.getJavaCode()); java.append(request.getGeneratedJavaCode());
return java.toString(); return java.toString();
} }
public abstract String getJavaCode(); public abstract String getGeneratedJavaCode();
protected String withSimpleParameter(String parameter) { protected String withSimpleParameter(String parameter) {
return GLOBAL_PREFIX + "new " + getClass().getSimpleName() + "(" + parameter + ")," + EOL; return GLOBAL_PREFIX + "new " + getClass().getSimpleName() + "(" + parameter + ")," + EOL;

View File

@ -34,7 +34,7 @@ public class SensorRequest extends Request {
} }
@Override @Override
public String getJavaCode() { public String getGeneratedJavaCode() {
return withSimpleParameter(quoteString(value)); return withSimpleParameter(quoteString(value));
} }
} }

View File

@ -2,8 +2,6 @@ package com.rusefi.ldmp;
import java.util.Objects; import java.util.Objects;
import static com.rusefi.ConfigDefinition.EOL;
/** /**
* Static text label * Static text label
*/ */
@ -43,7 +41,7 @@ public class TextRequest extends Request {
} }
@Override @Override
public String getJavaCode() { public String getGeneratedJavaCode() {
return withSimpleParameter(quoteString(value)); return withSimpleParameter(quoteString(value));
} }
} }

View File

@ -29,7 +29,9 @@ public class LiveDocsMetaParserTest {
@Test @Test
public void parseField() { public void parseField() {
MetaInfo r = LiveDocsMetaParser.parse("\tDISPLAY_TEXT(Analog_MCU_reads);\n" + MetaInfo r = LiveDocsMetaParser.parse(
"DISPLAY_STATE(tps)\n" +
"\tDISPLAY_TEXT(Analog_MCU_reads);\n" +
"\tengine->engineState.DISPLAY_FIELD(currentTpsAdc) = adc;\n" + "\tengine->engineState.DISPLAY_FIELD(currentTpsAdc) = adc;\n" +
"\tDISPLAY_TEXT(ADC_which_equals);\n"); "\tDISPLAY_TEXT(ADC_which_equals);\n");
assertEquals(3, r.first().size()); assertEquals(3, r.first().size());
@ -63,10 +65,13 @@ public class LiveDocsMetaParserTest {
@Test @Test
public void testField() { public void testField() {
MetaInfo r = LiveDocsMetaParser.parse("tm->DISPLAY_FIELD(voltageMCU) = getVoltage(\"term\", config->adcChannel);\n" + MetaInfo r = LiveDocsMetaParser.parse(
"DISPLAY_tag(tag) DISPLAY_FIELD(voltageMCU2)"); "DISPLAY_STATE(tps)\n" +
"tm->DISPLAY_FIELD(voltageMCU) = getVoltage(\"term\", config->adcChannel);\n" +
"DISPLAY_tag(tag) DISPLAY_FIELD(voltageMCU2)");
assertEquals(1, r.first().size()); assertEquals(1, r.first().size());
assertEquals(new FieldRequest("voltageMCU"), r.first().get(0)); assertEquals(new FieldRequest("tps", "voltageMCU"), r.first().get(0));
assertEquals(2, r.map.size()); assertEquals(2, r.map.size());
} }