only:expose fuel_pump_control and other engineModules via Lua #5239

This commit is contained in:
rusefi 2023-06-10 20:32:28 -04:00
parent 5d15135d6b
commit ef566e1959
3 changed files with 58 additions and 5 deletions

View File

@ -85,7 +85,7 @@ public class LiveDataProcessor {
} }
interface EntryHandler { interface EntryHandler {
void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr, String conditional) throws IOException; void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr, String conditional, String engineModule) throws IOException;
} }
private int handleYaml(Map<String, Object> data) throws IOException { private int handleYaml(Map<String, Object> data) throws IOException {
@ -101,7 +101,7 @@ public class LiveDataProcessor {
EntryHandler handler = new EntryHandler() { EntryHandler handler = new EntryHandler() {
@Override @Override
public void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr, String conditional) throws IOException { public void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr, String conditional, String engineModule) throws IOException {
// TODO: use outputNames // TODO: use outputNames
int startingPosition = javaSensorsConsumer.sensorTsPosition; int startingPosition = javaSensorsConsumer.sensorTsPosition;
@ -133,9 +133,14 @@ public class LiveDataProcessor {
state.addDestination((state1, structure) -> sdCardFieldsConsumer.handleEndStruct(state1, structure)); state.addDestination((state1, structure) -> sdCardFieldsConsumer.handleEndStruct(state1, structure));
outputValueConsumer.currentSectionPrefix = constexpr; outputValueConsumer.currentSectionPrefix = constexpr;
outputValueConsumer.moduleMode = false;
outputValueConsumer.conditional = conditional; outputValueConsumer.conditional = conditional;
state.addDestination((state1, structure) -> outputValueConsumer.handleEndStruct(state1, structure)); state.addDestination((state1, structure) -> outputValueConsumer.handleEndStruct(state1, structure));
} else if (engineModule != null) {
outputValueConsumer.currentEngineModule = engineModule;
outputValueConsumer.moduleMode = true;
} }
state.addDestination(new ConfigurationConsumer() { state.addDestination(new ConfigurationConsumer() {
@Override @Override
@ -163,6 +168,7 @@ public class LiveDataProcessor {
String folder = (String) entry.get("folder"); String folder = (String) entry.get("folder");
String prepend = (String) entry.get("prepend"); String prepend = (String) entry.get("prepend");
String constexpr = (String) entry.get("constexpr"); String constexpr = (String) entry.get("constexpr");
String engineModule = (String) entry.get("engineModule");
String conditional = (String) entry.get("conditional_compilation"); String conditional = (String) entry.get("conditional_compilation");
Boolean withCDefines = (Boolean) entry.get("withCDefines"); Boolean withCDefines = (Boolean) entry.get("withCDefines");
// Defaults to false if not specified // Defaults to false if not specified
@ -182,7 +188,7 @@ public class LiveDataProcessor {
nameList.toArray(outputNamesArr); nameList.toArray(outputNamesArr);
} }
handler.onEntry(name, java, folder, prepend, withCDefines, outputNamesArr, constexpr, conditional); handler.onEntry(name, java, folder, prepend, withCDefines, outputNamesArr, constexpr, conditional, engineModule);
String enumName = "LDS_" + name; String enumName = "LDS_" + name;
String type = name + "_s"; // convention String type = name + "_s"; // convention

View File

@ -27,6 +27,8 @@ public class GetOutputValueConsumer implements ConfigurationConsumer {
private final String fileName; private final String fileName;
public String currentSectionPrefix = "engine->outputChannels"; public String currentSectionPrefix = "engine->outputChannels";
public boolean moduleMode;
public String currentEngineModule;
public String conditional; public String conditional;
public GetOutputValueConsumer(String fileName) { public GetOutputValueConsumer(String fileName) {
@ -53,7 +55,12 @@ public class GetOutputValueConsumer implements ConfigurationConsumer {
} }
String userName = prefix + cf.getName(); String userName = prefix + cf.getName();
String javaName = currentSectionPrefix + "." + prefix; String javaName;
if (moduleMode) {
javaName = "engine->module<" + currentEngineModule + ">()->" + prefix;
} else {
javaName = currentSectionPrefix + "." + prefix;
}
getterPairs.add(new VariableRecord(userName, javaName + cf.getName(), null, conditional)); getterPairs.add(new VariableRecord(userName, javaName + cf.getName(), null, conditional));

View File

@ -45,4 +45,44 @@ public class GetOutputValueConsumerTest {
"\treturn EFI_ERROR_CODE;\n" + "\treturn EFI_ERROR_CODE;\n" +
"}\n", outputValueConsumer.getContent()); "}\n", outputValueConsumer.getContent());
} }
@Test
public void generateGetEngineModuleOutputs() {
String test = "struct_no_prefix fuel_pump_control_s\n" +
"\tbit isPrime\n" +
"\tbit engineTurnedRecently\n" +
"\tbit isFuelPumpOn\n" +
"\tbit ignitionOn\n" +
"end_struct\n";
ReaderStateImpl state = new ReaderStateImpl();
GetOutputValueConsumer outputValueConsumer = new GetOutputValueConsumer(null);
outputValueConsumer.moduleMode = true;
outputValueConsumer.currentEngineModule = "FuelPumpController";
state.readBufferedReader(test, (outputValueConsumer));
assertEquals(
"// generated by GetOutputValueConsumer.java\n" +
"#include \"pch.h\"\n" +
"#include \"value_lookup.h\"\n" +
"float getOutputValueByName(const char *name) {\n" +
"\tint hash = djb2lowerCase(name);\n" +
"\tswitch(hash) {\n" +
"// isPrime\n" +
"\t\tcase -1429286498:\n" +
"\t\t\treturn engine->module<FuelPumpController>()->isPrime;\n" +
"// engineTurnedRecently\n" +
"\t\tcase -1270448973:\n" +
"\t\t\treturn engine->module<FuelPumpController>()->engineTurnedRecently;\n" +
"// isFuelPumpOn\n" +
"\t\tcase -344048084:\n" +
"\t\t\treturn engine->module<FuelPumpController>()->isFuelPumpOn;\n" +
"// ignitionOn\n" +
"\t\tcase -381519965:\n" +
"\t\t\treturn engine->module<FuelPumpController>()->ignitionOn;\n" +
"\t}\n" +
"\treturn EFI_ERROR_CODE;\n" +
"}\n", outputValueConsumer.getContent());
}
} }