mirror of https://github.com/rusefi/rusefi-1.git
establishing a bit of API
This commit is contained in:
parent
cbcce9d84a
commit
6d8978a006
Binary file not shown.
|
@ -1,10 +1,8 @@
|
||||||
package com.rusefi;
|
package com.rusefi;
|
||||||
|
|
||||||
import com.rusefi.newparse.ParseState;
|
import com.rusefi.newparse.ParseState;
|
||||||
import com.rusefi.newparse.parsing.Definition;
|
|
||||||
import com.rusefi.output.*;
|
import com.rusefi.output.*;
|
||||||
import com.rusefi.trigger.TriggerWheelTSLogic;
|
import com.rusefi.trigger.TriggerWheelTSLogic;
|
||||||
import com.rusefi.util.IoUtils;
|
|
||||||
import com.rusefi.util.SystemOut;
|
import com.rusefi.util.SystemOut;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -20,13 +18,13 @@ public class ConfigDefinition {
|
||||||
public static final String SIGNATURE_HASH = "SIGNATURE_HASH";
|
public static final String SIGNATURE_HASH = "SIGNATURE_HASH";
|
||||||
|
|
||||||
private static final String ROM_RAIDER_XML_TEMPLATE = "rusefi_template.xml";
|
private static final String ROM_RAIDER_XML_TEMPLATE = "rusefi_template.xml";
|
||||||
public static final String KEY_DEFINITION = "-definition";
|
private static final String KEY_DEFINITION = "-definition";
|
||||||
private static final String KEY_ROMRAIDER_INPUT = "-romraider";
|
private static final String KEY_ROMRAIDER_INPUT = "-romraider";
|
||||||
private static final String KEY_TS_DESTINATION = "-ts_destination";
|
private static final String KEY_TS_DESTINATION = "-ts_destination";
|
||||||
public static final String KEY_C_DESTINATION = "-c_destination";
|
private static final String KEY_C_DESTINATION = "-c_destination";
|
||||||
private static final String KEY_C_DEFINES = "-c_defines";
|
private static final String KEY_C_DEFINES = "-c_defines";
|
||||||
public static final String KEY_WITH_C_DEFINES = "-with_c_defines";
|
public static final String KEY_WITH_C_DEFINES = "-with_c_defines";
|
||||||
public static final String KEY_JAVA_DESTINATION = "-java_destination";
|
private static final String KEY_JAVA_DESTINATION = "-java_destination";
|
||||||
private static final String KEY_ROMRAIDER_DESTINATION = "-romraider_destination";
|
private static final String KEY_ROMRAIDER_DESTINATION = "-romraider_destination";
|
||||||
private static final String KEY_FIRING = "-firing_order";
|
private static final String KEY_FIRING = "-firing_order";
|
||||||
public static final String KEY_PREPEND = "-prepend";
|
public static final String KEY_PREPEND = "-prepend";
|
||||||
|
@ -80,7 +78,6 @@ public class ConfigDefinition {
|
||||||
String tsOutputsDestination = null;
|
String tsOutputsDestination = null;
|
||||||
|
|
||||||
|
|
||||||
List<ConfigurationConsumer> destinations = new ArrayList<>();
|
|
||||||
|
|
||||||
for (int i = 0; i < args.length - 1; i += 2) {
|
for (int i = 0; i < args.length - 1; i += 2) {
|
||||||
String key = args[i];
|
String key = args[i];
|
||||||
|
@ -100,7 +97,7 @@ public class ConfigDefinition {
|
||||||
tsOutputsDestination = args[i + 1];
|
tsOutputsDestination = args[i + 1];
|
||||||
break;
|
break;
|
||||||
case KEY_C_DESTINATION:
|
case KEY_C_DESTINATION:
|
||||||
destinations.add(new CHeaderConsumer(state, args[i + 1], state.withC_Defines));
|
state.addCHeaderDestination(args[i + 1]);
|
||||||
break;
|
break;
|
||||||
case KEY_ZERO_INIT:
|
case KEY_ZERO_INIT:
|
||||||
needZeroInit = Boolean.parseBoolean(args[i + 1]);
|
needZeroInit = Boolean.parseBoolean(args[i + 1]);
|
||||||
|
@ -112,13 +109,13 @@ public class ConfigDefinition {
|
||||||
destCDefinesFileName = args[i + 1];
|
destCDefinesFileName = args[i + 1];
|
||||||
break;
|
break;
|
||||||
case KEY_JAVA_DESTINATION:
|
case KEY_JAVA_DESTINATION:
|
||||||
destinations.add(new FileJavaFieldsConsumer(state, args[i + 1]));
|
state.addJavaDestination(args[i + 1]);
|
||||||
break;
|
break;
|
||||||
case "-field_lookup_file":
|
case "-field_lookup_file":
|
||||||
destinations.add(new GetConfigValueConsumer(args[i + 1]));
|
state.destinations.add(new GetConfigValueConsumer(args[i + 1]));
|
||||||
break;
|
break;
|
||||||
case "-output_lookup_file":
|
case "-output_lookup_file":
|
||||||
destinations.add(new GetOutputValueConsumer(args[i + 1]));
|
state.destinations.add(new GetOutputValueConsumer(args[i + 1]));
|
||||||
break;
|
break;
|
||||||
case "-readfile":
|
case "-readfile":
|
||||||
String keyName = args[i + 1];
|
String keyName = args[i + 1];
|
||||||
|
@ -137,14 +134,7 @@ public class ConfigDefinition {
|
||||||
romRaiderDestination = args[i + 1];
|
romRaiderDestination = args[i + 1];
|
||||||
break;
|
break;
|
||||||
case KEY_PREPEND:
|
case KEY_PREPEND:
|
||||||
{
|
state.addPrepend(args[i + 1].trim());
|
||||||
String value = args[i + 1];
|
|
||||||
// see UsagesReader use-case with dynamic prepend usage
|
|
||||||
if (!value.trim().isEmpty()) {
|
|
||||||
state.prependFiles.add(value);
|
|
||||||
state.inputFiles.add(value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case KEY_SIGNATURE:
|
case KEY_SIGNATURE:
|
||||||
signaturePrependFile = args[i + 1];
|
signaturePrependFile = args[i + 1];
|
||||||
|
@ -202,6 +192,7 @@ public class ConfigDefinition {
|
||||||
if (pinoutLogic != null) {
|
if (pinoutLogic != null) {
|
||||||
pinoutLogic.processYamls(state.variableRegistry, state);
|
pinoutLogic.processYamls(state.variableRegistry, state);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
|
||||||
// Parse the input files
|
// Parse the input files
|
||||||
{
|
{
|
||||||
|
@ -231,32 +222,28 @@ public class ConfigDefinition {
|
||||||
// TsWriter writer = new TsWriter();
|
// TsWriter writer = new TsWriter();
|
||||||
// writer.writeTunerstudio(parseState, tsPath + "/rusefi.input", tsPath + "/" + TSProjectConsumer.TS_FILE_OUTPUT_NAME);
|
// writer.writeTunerstudio(parseState, tsPath + "/rusefi.input", tsPath + "/" + TSProjectConsumer.TS_FILE_OUTPUT_NAME);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
if (tsOutputsDestination != null) {
|
if (tsOutputsDestination != null) {
|
||||||
destinations.add(new OutputsSectionConsumer(tsOutputsDestination + File.separator + "generated/output_channels.ini", state));
|
state.destinations.add(new OutputsSectionConsumer(tsOutputsDestination + File.separator + "generated/output_channels.ini", state));
|
||||||
destinations.add(new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini"));
|
state.destinations.add(new DataLogConsumer(tsOutputsDestination + File.separator + "generated/data_logs.ini"));
|
||||||
destinations.add(new GaugeConsumer(tsOutputsDestination + File.separator + "generated/gauges.ini", state));
|
state.destinations.add(new GaugeConsumer(tsOutputsDestination + File.separator + "generated/gauges.ini", state));
|
||||||
}
|
}
|
||||||
if (tsInputFileFolder != null) {
|
if (tsInputFileFolder != null) {
|
||||||
CharArrayWriter tsWriter = new CharArrayWriter();
|
CharArrayWriter tsWriter = new CharArrayWriter();
|
||||||
destinations.add(new TSProjectConsumer(tsWriter, tsInputFileFolder, state));
|
state.destinations.add(new TSProjectConsumer(tsWriter, tsInputFileFolder, state));
|
||||||
|
|
||||||
VariableRegistry tmpRegistry = new VariableRegistry();
|
VariableRegistry tmpRegistry = new VariableRegistry();
|
||||||
// store the CRC32 as a built-in variable
|
// store the CRC32 as a built-in variable
|
||||||
tmpRegistry.register(SIGNATURE_HASH, "" + crc32);
|
tmpRegistry.register(SIGNATURE_HASH, "" + crc32);
|
||||||
tmpRegistry.readPrependValues(signaturePrependFile);
|
tmpRegistry.readPrependValues(signaturePrependFile);
|
||||||
destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry));
|
state.destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destinations.isEmpty())
|
if (state.destinations.isEmpty())
|
||||||
throw new IllegalArgumentException("No destinations specified");
|
throw new IllegalArgumentException("No destinations specified");
|
||||||
/*
|
|
||||||
* this is the most important invocation - here we read the primary input file and generated code into all
|
state.doJob();
|
||||||
* the destinations/writers
|
|
||||||
*/
|
|
||||||
SystemOut.println("Reading definition from " + state.definitionInputFile);
|
|
||||||
BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(state.definitionInputFile), IoUtils.CHARSET.name()));
|
|
||||||
state.readBufferedReader(definitionReader, destinations);
|
|
||||||
|
|
||||||
if (destCDefinesFileName != null) {
|
if (destCDefinesFileName != null) {
|
||||||
ExtraUtil.writeDefinesToFile(state.variableRegistry, destCDefinesFileName, state.definitionInputFile);
|
ExtraUtil.writeDefinesToFile(state.variableRegistry, destCDefinesFileName, state.definitionInputFile);
|
||||||
|
|
|
@ -4,13 +4,14 @@ import com.devexperts.logging.Logging;
|
||||||
import com.opensr5.ini.RawIniFile;
|
import com.opensr5.ini.RawIniFile;
|
||||||
import com.opensr5.ini.field.EnumIniField;
|
import com.opensr5.ini.field.EnumIniField;
|
||||||
import com.rusefi.enum_reader.Value;
|
import com.rusefi.enum_reader.Value;
|
||||||
|
import com.rusefi.output.CHeaderConsumer;
|
||||||
import com.rusefi.output.ConfigStructure;
|
import com.rusefi.output.ConfigStructure;
|
||||||
import com.rusefi.output.ConfigurationConsumer;
|
import com.rusefi.output.ConfigurationConsumer;
|
||||||
|
import com.rusefi.output.FileJavaFieldsConsumer;
|
||||||
|
import com.rusefi.util.IoUtils;
|
||||||
|
import com.rusefi.util.SystemOut;
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.io.StringReader;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static com.devexperts.logging.Logging.getLogging;
|
import static com.devexperts.logging.Logging.getLogging;
|
||||||
|
@ -38,9 +39,11 @@ public class ReaderState {
|
||||||
public final Map<String, String> tsCustomLine = new HashMap<>();
|
public final Map<String, String> tsCustomLine = new HashMap<>();
|
||||||
public final Map<String, ConfigStructure> structures = new HashMap<>();
|
public final Map<String, ConfigStructure> structures = new HashMap<>();
|
||||||
public String headerMessage;
|
public String headerMessage;
|
||||||
|
// well, technically those should be a builder for state, not this state class itself
|
||||||
String definitionInputFile = null;
|
String definitionInputFile = null;
|
||||||
public boolean withC_Defines = true;
|
public boolean withC_Defines = true;
|
||||||
List<String> prependFiles = new ArrayList<>();
|
List<String> prependFiles = new ArrayList<>();
|
||||||
|
List<ConfigurationConsumer> destinations = new ArrayList<>();
|
||||||
|
|
||||||
public final EnumsReader enumsReader = new EnumsReader();
|
public final EnumsReader enumsReader = new EnumsReader();
|
||||||
public final VariableRegistry variableRegistry = new VariableRegistry();
|
public final VariableRegistry variableRegistry = new VariableRegistry();
|
||||||
|
@ -70,6 +73,16 @@ public class ReaderState {
|
||||||
structure.addBitField(bitField);
|
structure.addBitField(bitField);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void doJob() throws IOException {
|
||||||
|
/*
|
||||||
|
* this is the most important invocation - here we read the primary input file and generated code into all
|
||||||
|
* the destinations/writers
|
||||||
|
*/
|
||||||
|
SystemOut.println("Reading definition from " + this.definitionInputFile);
|
||||||
|
BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(this.definitionInputFile), IoUtils.CHARSET.name()));
|
||||||
|
readBufferedReader(definitionReader, this.destinations);
|
||||||
|
}
|
||||||
|
|
||||||
public void read(Reader reader) throws IOException {
|
public void read(Reader reader) throws IOException {
|
||||||
Map<String, EnumsReader.EnumState> newEnums = EnumsReader.readStatic(reader);
|
Map<String, EnumsReader.EnumState> newEnums = EnumsReader.readStatic(reader);
|
||||||
|
|
||||||
|
@ -301,4 +314,21 @@ public class ReaderState {
|
||||||
headerMessage = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date();
|
headerMessage = ToolUtil.getGeneratedAutomaticallyTag() + definitionInputFile + " " + new Date();
|
||||||
inputFiles.add(definitionInputFile);
|
inputFiles.add(definitionInputFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addCHeaderDestination(String cHeader) {
|
||||||
|
destinations.add(new CHeaderConsumer(this, cHeader, withC_Defines));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addJavaDestination(String fileName) {
|
||||||
|
destinations.add(new FileJavaFieldsConsumer(this, fileName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addPrepend(String fileName) {
|
||||||
|
if (fileName.isEmpty()) {
|
||||||
|
// see UsagesReader use-case with dynamic prepend usage
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
prependFiles.add(fileName);
|
||||||
|
inputFiles.add(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,9 @@ import org.antlr.v4.runtime.tree.ParseTreeWalker;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dead code? shall we drop it yet?
|
||||||
|
*/
|
||||||
public class RusefiParseErrorStrategy extends DefaultErrorStrategy {
|
public class RusefiParseErrorStrategy extends DefaultErrorStrategy {
|
||||||
private boolean hadError = false;
|
private boolean hadError = false;
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ public class UsagesReader {
|
||||||
String key = pair[0];
|
String key = pair[0];
|
||||||
String value = pair[1];
|
String value = pair[1];
|
||||||
if (key.equals(ConfigDefinition.KEY_WITH_C_DEFINES)) {
|
if (key.equals(ConfigDefinition.KEY_WITH_C_DEFINES)) {
|
||||||
withCDefines = Boolean.valueOf(value);
|
withCDefines = Boolean.parseBoolean(value);
|
||||||
} else if (key.equals(ConfigDefinition.KEY_PREPEND)) {
|
} else if (key.equals(ConfigDefinition.KEY_PREPEND)) {
|
||||||
prepend = value;
|
prepend = value;
|
||||||
}
|
}
|
||||||
|
@ -61,16 +61,10 @@ public class UsagesReader {
|
||||||
state.setDefinitionInputFile(folder + File.separator + name + ".txt");
|
state.setDefinitionInputFile(folder + File.separator + name + ".txt");
|
||||||
state.withC_Defines = withCDefines;
|
state.withC_Defines = withCDefines;
|
||||||
|
|
||||||
ConfigDefinition.doJob(new String[]{
|
state.addPrepend(prepend);
|
||||||
ConfigDefinition.KEY_PREPEND,
|
state.addCHeaderDestination(folder + File.separator + name + "_generated.h");
|
||||||
prepend,
|
state.addJavaDestination("../java_console/models/src/main/java/com/rusefi/config/generated/" + javaName);
|
||||||
|
state.doJob();
|
||||||
ConfigDefinition.KEY_JAVA_DESTINATION,
|
|
||||||
"../java_console/models/src/main/java/com/rusefi/config/generated/" + javaName,
|
|
||||||
|
|
||||||
ConfigDefinition.KEY_C_DESTINATION,
|
|
||||||
folder + File.separator + name + "_generated.h"
|
|
||||||
}, state);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue