Automation coverage for RPM not reading #4709

This commit is contained in:
rusefillc 2022-10-28 04:22:10 -04:00
parent cee2d4882f
commit 9a3deff720
7 changed files with 94 additions and 62 deletions

View File

@ -4,6 +4,5 @@ java -DSystemOut.name=logs/gen_output_channels \
-jar ../java_tools/ConfigDefinition.jar \
-prepend integration/rusefi_config.txt \
-definition console/binary/output_channels.txt \
-sd_destination console/binary_log/log_fields_generated.h \
-output_lookup_file controllers/lua/generated/output_lookup_generated.cpp \
-ts_outputs_section console/binary/

Binary file not shown.

View File

@ -21,7 +21,6 @@ public class ConfigDefinition {
private static final String KEY_DEFINITION = "-definition";
private static final String KEY_TS_DESTINATION = "-ts_destination";
private static final String KEY_C_DESTINATION = "-c_destination";
private static final String KEY_SD_DESTINATION = "-sd_destination";
private static final String KEY_C_DEFINES = "-c_defines";
public static final String KEY_WITH_C_DEFINES = "-with_c_defines";
private static final String KEY_JAVA_DESTINATION = "-java_destination";
@ -96,9 +95,6 @@ public class ConfigDefinition {
case KEY_C_DESTINATION:
state.addCHeaderDestination(args[i + 1]);
break;
case KEY_SD_DESTINATION:
state.addSdDestination(args[i + 1]);
break;
case KEY_ZERO_INIT:
needZeroInit = Boolean.parseBoolean(args[i + 1]);
break;

View File

@ -342,10 +342,6 @@ public class ReaderState {
destinations.add(new CHeaderConsumer(this, cHeader, withC_Defines));
}
public void addSdDestination(String outputFileName) {
destinations.add(new SdCardFieldsConsumer(outputFileName));
}
public void addJavaDestination(String fileName) {
destinations.add(new FileJavaFieldsConsumer(this, fileName));
}

View File

@ -5,6 +5,7 @@ import com.rusefi.EnumToString;
import com.rusefi.InvokeReader;
import com.rusefi.ReaderState;
import com.rusefi.output.*;
import com.rusefi.util.LazyFile;
import org.yaml.snakeyaml.Yaml;
import java.io.File;
@ -70,7 +71,7 @@ public class LiveDataProcessor {
}
interface EntryHandler {
void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames) throws IOException;
void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr) throws IOException;
}
private int handleYaml(Map<String, Object> data, EntryHandler _handler) throws IOException {
@ -81,9 +82,11 @@ public class LiveDataProcessor {
ConfigurationConsumer dataLogConsumer = new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini");
SdCardFieldsContent sdCardFieldsConsumer = new SdCardFieldsContent();
EntryHandler handler = new EntryHandler() {
@Override
public void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames) throws IOException {
public void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr) throws IOException {
// TODO: use outputNames
int startingPosition = javaSensorsConsumer.sensorTsPosition;
@ -105,6 +108,12 @@ public class LiveDataProcessor {
state.addPrepend(prepend);
state.addCHeaderDestination(folder + File.separator + name + "_generated.h");
state.addJavaDestination("../java_console/models/src/main/java/com/rusefi/config/generated/" + javaName);
if (constexpr != null) {
sdCardFieldsConsumer.home = constexpr;
state.addDestination(sdCardFieldsConsumer::handleEndStruct);
}
state.doJob();
fancyNewStuff.append(fragmentDialogConsumer.getContent());
@ -115,14 +124,18 @@ public class LiveDataProcessor {
}
};
ArrayList<LinkedHashMap> liveDocs = (ArrayList<LinkedHashMap>)data.get("Usages");
ArrayList<LinkedHashMap> liveDocs = (ArrayList<LinkedHashMap>) data.get("Usages");
for (LinkedHashMap entry : liveDocs) {
String name = (String)entry.get("name");
String java = (String)entry.get("java");
String folder = (String)entry.get("folder");
String prepend = (String)entry.get("prepend");
Boolean withCDefines = (Boolean)entry.get("withCDefines");
String name = (String) entry.get("name");
String java = (String) entry.get("java");
String folder = (String) entry.get("folder");
String prepend = (String) entry.get("prepend");
String constexpr = (String) entry.get("constexpr");
Boolean withCDefines = (Boolean) entry.get("withCDefines");
// Defaults to false if not specified
withCDefines = withCDefines != null && withCDefines;
@ -133,14 +146,14 @@ public class LiveDataProcessor {
outputNamesArr = new String[0];
} else if (outputNames instanceof String) {
outputNamesArr = new String[1];
outputNamesArr[0] = (String)outputNames;
outputNamesArr[0] = (String) outputNames;
} else {
ArrayList<String> nameList = (ArrayList<String>)outputNames;
ArrayList<String> nameList = (ArrayList<String>) outputNames;
outputNamesArr = new String[nameList.size()];
nameList.toArray(outputNamesArr);
}
handler.onEntry(name, java, folder, prepend, withCDefines, outputNamesArr);
handler.onEntry(name, java, folder, prepend, withCDefines, outputNamesArr, constexpr);
String enumName = "LDS_" + name;
String type = name + "_s"; // convention
@ -171,6 +184,10 @@ public class LiveDataProcessor {
}
enumContent.append("} live_data_e;\n");
LazyFile lazyFile = new LazyFile("console/binary_log/log_fields_generated.h");
SdCardFieldsConsumer.wrapContent(lazyFile, sdCardFieldsConsumer.getBody());
lazyFile.close();
totalSensors.append(javaSensorsConsumer.getContent());
return javaSensorsConsumer.sensorTsPosition;

View File

@ -1,15 +1,13 @@
package com.rusefi.output;
import static com.rusefi.output.JavaSensorsConsumer.quote;
import com.rusefi.ConfigField;
import com.rusefi.ReaderState;
import com.rusefi.util.LazyFile;
import java.io.IOException;
public class SdCardFieldsConsumer implements ConfigurationConsumer {
private final StringBuilder body = new StringBuilder();
private final SdCardFieldsContent content = new SdCardFieldsContent();
private final LazyFile output;
public SdCardFieldsConsumer(String outputFileName) {
@ -18,53 +16,23 @@ public class SdCardFieldsConsumer implements ConfigurationConsumer {
@Override
public void endFile() throws IOException {
wrapContent(output, getBody());
output.close();
}
public static void wrapContent(LazyFile output, String content) {
output.write("static constexpr LogField fields[] = {\r\n" +
"{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n");
output.write(getBody());
output.write(content);
output.write("};\r\n");
output.close();
}
@Override
public void handleEndStruct(ReaderState state, ConfigStructure structure) throws IOException {
if (state.stack.isEmpty()) {
PerFieldWithStructuresIterator iterator = new PerFieldWithStructuresIterator(state, structure.tsFields, "",
this::processOutput, ".");
iterator.loop();
String content = iterator.getContent();
body.append(content);
}
}
private String processOutput(ReaderState readerState, ConfigField configField, String prefix) {
if (configField.getName().startsWith(ConfigStructure.ALIGNMENT_FILL_AT))
return "";
if (configField.getName().startsWith(ConfigStructure.UNUSED_ANYTHING_PREFIX))
return "";
if (configField.isBit())
return "";
if (configField.isFromIterate()) {
String name = configField.getIterateOriginalName() + "[" + (configField.getIterateIndex() - 1) + "]";
return getLine(readerState, configField, prefix, prefix + name);
} else {
return getLine(readerState, configField, prefix, prefix + configField.getName());
}
}
private String getLine(ReaderState readerState, ConfigField configField, String prefix, String name) {
return "\t{engine->outputChannels." + name +
", "
+ DataLogConsumer.getComment(prefix, configField, readerState.variableRegistry) +
", " +
quote(configField.getUnits()) +
", " +
configField.getDigits() +
"},\n";
content.handleEndStruct(state, structure);
}
public String getBody() {
return body.toString();
return content.getBody();
}
}

View File

@ -0,0 +1,56 @@
package com.rusefi.output;
import com.rusefi.ConfigField;
import com.rusefi.ReaderState;
import java.io.IOException;
import static com.rusefi.output.JavaSensorsConsumer.quote;
public class SdCardFieldsContent {
private final StringBuilder body = new StringBuilder();
public String home = "engine->outputChannels";
public void handleEndStruct(ReaderState state, ConfigStructure structure) throws IOException {
if (state.stack.isEmpty()) {
PerFieldWithStructuresIterator iterator = new PerFieldWithStructuresIterator(state, structure.tsFields, "",
this::processOutput, ".");
iterator.loop();
String content = iterator.getContent();
body.append(content);
}
}
private String processOutput(ReaderState readerState, ConfigField configField, String prefix) {
if (configField.getName().startsWith(ConfigStructure.ALIGNMENT_FILL_AT))
return "";
if (configField.getName().startsWith(ConfigStructure.UNUSED_ANYTHING_PREFIX))
return "";
if (configField.isBit())
return "";
if (configField.isFromIterate()) {
String name = configField.getIterateOriginalName() + "[" + (configField.getIterateIndex() - 1) + "]";
return getLine(readerState, configField, prefix, prefix + name);
} else {
return getLine(readerState, configField, prefix, prefix + configField.getName());
}
}
private String getLine(ReaderState readerState, ConfigField configField, String prefix, String name) {
return "\t{" + home + "." + name +
", "
+ DataLogConsumer.getComment(prefix, configField, readerState.variableRegistry) +
", " +
quote(configField.getUnits()) +
", " +
configField.getDigits() +
"},\n";
}
public String getBody() {
return body.toString();
}
}