progress
This commit is contained in:
parent
1703152427
commit
45f61e2b88
|
@ -19,10 +19,6 @@
|
||||||
|
|
||||||
EXTERN_CONFIG;
|
EXTERN_CONFIG;
|
||||||
|
|
||||||
// todo:
|
|
||||||
// extern const float ve16RpmBins[FUEL_RPM_COUNT];
|
|
||||||
|
|
||||||
|
|
||||||
static const float ve16RpmBins[FUEL_RPM_COUNT] = {
|
static const float ve16RpmBins[FUEL_RPM_COUNT] = {
|
||||||
650.0,1100.0,1550.0,2000.0,
|
650.0,1100.0,1550.0,2000.0,
|
||||||
2450.0,2900.0,3350.0,3800.0,
|
2450.0,2900.0,3350.0,3800.0,
|
||||||
|
|
|
@ -2,7 +2,7 @@ autoupdate_build
|
||||||
rusefi_autoupdate.jar
|
rusefi_autoupdate.jar
|
||||||
logs/
|
logs/
|
||||||
rusefi_console_properties.xml
|
rusefi_console_properties.xml
|
||||||
output.c
|
generated*.cpp
|
||||||
currenttune.msq
|
currenttune.msq
|
||||||
output.msq
|
output.msq
|
||||||
rusefi.ini
|
rusefi.ini
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
<component name="ProjectRunConfigurationManager">
|
||||||
|
<configuration default="false" name="TS2CRunner" type="Application" factoryName="Application" nameIsGenerated="true">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="com.rusefi.TS2CRunner" />
|
||||||
|
<module name="models" />
|
||||||
|
<option name="VM_PARAMETERS" value="-Dini_file_path=." />
|
||||||
|
<extension name="coverage">
|
||||||
|
<pattern>
|
||||||
|
<option name="PATTERN" value="com.rusefi.*" />
|
||||||
|
<option name="ENABLED" value="true" />
|
||||||
|
</pattern>
|
||||||
|
</extension>
|
||||||
|
<method v="2">
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
</component>
|
|
@ -227,11 +227,6 @@ public class IniFileModel {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum State {
|
|
||||||
SKIPPING,
|
|
||||||
DIALOG
|
|
||||||
}
|
|
||||||
|
|
||||||
public static synchronized IniFileModel getInstance() {
|
public static synchronized IniFileModel getInstance() {
|
||||||
if (INSTANCE == null) {
|
if (INSTANCE == null) {
|
||||||
INSTANCE = new IniFileModel();
|
INSTANCE = new IniFileModel();
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package com.rusefi;
|
package com.rusefi;
|
||||||
|
|
||||||
|
import com.opensr5.ini.IniFileModel;
|
||||||
|
import com.opensr5.ini.field.ArrayIniField;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tuner studio project to C data structure converter command line utility
|
* tuner studio project to C data structure converter command line utility
|
||||||
*
|
* <p>
|
||||||
* 12/27/2014
|
* 12/27/2014
|
||||||
* Andrey Belomutskiy, (c) 2012-2016
|
* Andrey Belomutskiy, (c) 2012-2016
|
||||||
*/
|
*/
|
||||||
|
@ -15,13 +18,12 @@ public class TS2C {
|
||||||
// todo: replace with loadCount & rpmCount
|
// todo: replace with loadCount & rpmCount
|
||||||
private final int size;
|
private final int size;
|
||||||
|
|
||||||
private int rpmCount;
|
private float[] loadBins;
|
||||||
private int loadCount;
|
private float[] rpmBins;
|
||||||
|
|
||||||
private float loadBins[];
|
|
||||||
private float rpmBins[];
|
|
||||||
private float table[][];
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see TS2CRunner
|
||||||
|
*/
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
new TS2C(args);
|
new TS2C(args);
|
||||||
}
|
}
|
||||||
|
@ -42,46 +44,57 @@ public class TS2C {
|
||||||
String tableName = args[3];
|
String tableName = args[3];
|
||||||
size = Integer.parseInt(args.length > 4 ? args[4] : "16");
|
size = Integer.parseInt(args.length > 4 ? args[4] : "16");
|
||||||
|
|
||||||
|
IniFileModel model = IniFileModel.getInstance();
|
||||||
|
|
||||||
|
BufferedWriter w = new BufferedWriter(new FileWriter("generated_" + tableName + ".cpp"));
|
||||||
|
|
||||||
if (!loadSectionName.equalsIgnoreCase("none")) {
|
if (!loadSectionName.equalsIgnoreCase("none")) {
|
||||||
BufferedReader r = readAndScroll(msqFileName, loadSectionName);
|
loadBins = processCurve(msqFileName, loadSectionName, model, w);
|
||||||
|
|
||||||
loadCount = size;
|
|
||||||
loadBins = new float[loadCount];
|
|
||||||
readAxle(loadBins, r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rpmSectionName.equalsIgnoreCase("none")) {
|
if (!rpmSectionName.equalsIgnoreCase("none")) {
|
||||||
BufferedReader r = readAndScroll(msqFileName, rpmSectionName);
|
rpmBins = processCurve(msqFileName, rpmSectionName, model, w);
|
||||||
rpmCount = size;
|
|
||||||
rpmBins = new float[rpmCount];
|
|
||||||
readAxle(rpmBins, r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table = new float[size][];
|
if (!tableName.equalsIgnoreCase("none")) {
|
||||||
for (int i = 0; i < size; i++) {
|
float[][] table;
|
||||||
table[i] = new float[size];
|
|
||||||
}
|
|
||||||
|
|
||||||
BufferedReader r = readAndScroll(msqFileName, tableName);
|
table = new float[size][];
|
||||||
readTable(table, r);
|
for (int i = 0; i < size; i++) {
|
||||||
|
table[i] = new float[size];
|
||||||
BufferedWriter w = new BufferedWriter(new FileWriter("output.c"));
|
|
||||||
writeTable(w, new ValueSource() {
|
|
||||||
@Override
|
|
||||||
public float getValue(int loadIndex, int rpmIndex) {
|
|
||||||
return table[loadIndex][rpmIndex];
|
|
||||||
}
|
}
|
||||||
}, "TS2C");
|
|
||||||
|
BufferedReader r = readAndScroll(msqFileName, tableName);
|
||||||
|
readTable(table, r);
|
||||||
|
|
||||||
|
writeTable(w, (loadIndex, rpmIndex) -> table[loadIndex][rpmIndex], "TS2C");
|
||||||
|
w.write("\r\n\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
w.write("static void set" + tableName + "() {\n");
|
||||||
|
w.write("\tMEMCPY(config->" + rpmSectionName + ", hardCoded" + rpmSectionName + ");\n");
|
||||||
|
|
||||||
|
if (!tableName.equalsIgnoreCase("none")) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
w.write("\r\n\r\n/* rpm bins */\r\n\r\n");
|
w.write("}\n");
|
||||||
w.write(toString(rpmBins));
|
|
||||||
|
|
||||||
w.write("\r\n\r\n/* load bins */\r\n\r\n");
|
|
||||||
w.write(toString(loadBins));
|
|
||||||
w.write("\r\n\r\n");
|
|
||||||
|
|
||||||
w.close();
|
w.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private float[] processCurve(String msqFileName, String loadSectionName, IniFileModel model, BufferedWriter w) throws IOException {
|
||||||
|
ArrayIniField field = (ArrayIniField) model.allIniFields.get(loadSectionName);
|
||||||
|
int curveSize = field.getRows();
|
||||||
|
BufferedReader r = readAndScroll(msqFileName, loadSectionName);
|
||||||
|
float[] curve = new float[curveSize];
|
||||||
|
readAxle(curve, r);
|
||||||
|
|
||||||
|
w.write("static const float hardCoded" + loadSectionName + "[" + curveSize + "] = ");
|
||||||
|
w.write(toString(curve));
|
||||||
|
w.write(";\r\n\r\n");
|
||||||
|
return curve;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String toString(float[] a) {
|
private String toString(float[] a) {
|
||||||
|
@ -98,12 +111,12 @@ public class TS2C {
|
||||||
|
|
||||||
private void writeTable(BufferedWriter w, ValueSource valueSource, String toolName) throws IOException {
|
private void writeTable(BufferedWriter w, ValueSource valueSource, String toolName) throws IOException {
|
||||||
w.write("/* Generated by " + toolName + " on " + new Date() + "*/\r\n");
|
w.write("/* Generated by " + toolName + " on " + new Date() + "*/\r\n");
|
||||||
for (int loadIndex = 0; loadIndex < loadCount; loadIndex++)
|
for (int loadIndex = 0; loadIndex < loadBins.length; loadIndex++)
|
||||||
writeLine(valueSource, w, loadIndex);
|
writeTableLine(valueSource, w, loadIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param fileName text file to open
|
* @param fileName text file to open
|
||||||
* @param magicStringKey magic string content to scroll to
|
* @param magicStringKey magic string content to scroll to
|
||||||
* @return Reader after the magicStringKey line
|
* @return Reader after the magicStringKey line
|
||||||
*/
|
*/
|
||||||
|
@ -120,11 +133,11 @@ public class TS2C {
|
||||||
return reader;
|
return reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeLine(ValueSource valueSource, BufferedWriter w, int loadIndex) throws IOException {
|
private void writeTableLine(ValueSource valueSource, BufferedWriter w, int loadIndex) throws IOException {
|
||||||
StringBuilder sb = new StringBuilder("{");
|
StringBuilder sb = new StringBuilder("{");
|
||||||
|
|
||||||
sb.append("/* " + loadIndex + " " + String.format("%3.3f", loadBins[loadIndex]) + "\t*/");
|
sb.append("/* " + loadIndex + " " + String.format("%3.3f", loadBins[loadIndex]) + "\t*/");
|
||||||
for (int rpmIndex = 0; rpmIndex < rpmCount; rpmIndex++) {
|
for (int rpmIndex = 0; rpmIndex < rpmBins.length; rpmIndex++) {
|
||||||
sb.append("/* " + rpmIndex + " " + rpmBins[rpmIndex] + "*/" + String.format("%3.3f", valueSource.getValue(loadIndex, rpmIndex)) + ",\t");
|
sb.append("/* " + rpmIndex + " " + rpmBins[rpmIndex] + "*/" + String.format("%3.3f", valueSource.getValue(loadIndex, rpmIndex)) + ",\t");
|
||||||
}
|
}
|
||||||
sb.append("},\r\n");
|
sb.append("},\r\n");
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package com.rusefi;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class TS2CRunner {
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
String tuneFileName = "CurrentTune.msq";
|
||||||
|
|
||||||
|
TS2C.main(new String[]{tuneFileName, "afrLoadBins", "afrRpmBins", "afrTable"});
|
||||||
|
TS2C.main(new String[]{tuneFileName, "fuelLoadBins", "fuelRpmBins", "fuelTable"});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue