mirror of https://github.com/FOME-Tech/fome-fw.git
Merge branch 'master' of https://github.com/fome-tech/fome-fw
This commit is contained in:
commit
2f584077f3
|
@ -97,6 +97,8 @@ public class LiveDataProcessor {
|
|||
// tsOutputsDestination + File.separator + "/data_logs.ini"
|
||||
// );
|
||||
|
||||
// SdLogWriter sdLogWriter = new SdLogWriter("console/binary_log/log_fields_generated.h");
|
||||
|
||||
EntryHandler handler = new EntryHandler() {
|
||||
@Override
|
||||
public void onEntry(String name, String javaName, String folder, String prepend, boolean withCDefines, String[] outputNames, String constexpr, String conditional, Boolean isPtr) throws IOException {
|
||||
|
@ -163,6 +165,10 @@ public class LiveDataProcessor {
|
|||
// outputChannelWriter.writeOutputChannels(parseState, outputNames[i]);
|
||||
// }
|
||||
// }
|
||||
|
||||
// if (constexpr != null) {
|
||||
// sdLogWriter.writeSdLogs(parseState, constexpr + (isPtr ? "->" : "."));
|
||||
// }
|
||||
}
|
||||
|
||||
state.doJob();
|
||||
|
@ -241,6 +247,7 @@ public class LiveDataProcessor {
|
|||
lazyFile.close();
|
||||
|
||||
outputValueConsumer.endFile();
|
||||
// sdLogWriter.endFile();
|
||||
|
||||
// return outputChannelWriter.getSize();
|
||||
return outputsSections.sensorTsPosition;
|
||||
|
|
|
@ -83,4 +83,9 @@ public class ArrayLayout extends Layout {
|
|||
protected void writeOutputChannelLayout(PrintStream ps, PrintStream psDatalog, StructNamePrefixer prefixer, int offsetAdd) {
|
||||
this.prototypeLayout.writeOutputChannelLayout(ps, psDatalog, prefixer, offsetAdd, this.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName) {
|
||||
this.prototypeLayout.writeSdLogLayout(ps, prefixer, sourceName, this.length);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public abstract class Layout {
|
|||
}
|
||||
|
||||
public final void writeTunerstudioLayout(PrintStream ps, TsMetadata meta) {
|
||||
writeTunerstudioLayout(ps, meta, new StructNamePrefixer(), 0);
|
||||
writeTunerstudioLayout(ps, meta, new StructNamePrefixer('_'), 0);
|
||||
}
|
||||
|
||||
protected void writeTunerstudioLayout(PrintStream ps, TsMetadata meta, StructNamePrefixer prefixer, int offsetAdd) {}
|
||||
|
@ -68,7 +68,7 @@ public abstract class Layout {
|
|||
public void writeCOffsetCheck(PrintStream ps, String parentTypeName) { }
|
||||
|
||||
public void writeOutputChannelLayout(PrintStream ps, PrintStream psDatalog, String prefix, int offsetAdd) {
|
||||
StructNamePrefixer prefixer = new StructNamePrefixer();
|
||||
StructNamePrefixer prefixer = new StructNamePrefixer('_');
|
||||
|
||||
if (prefix != null) {
|
||||
prefixer.push(prefix);
|
||||
|
@ -91,4 +91,23 @@ public abstract class Layout {
|
|||
|
||||
ps.print(text);
|
||||
}
|
||||
|
||||
public void writeSdLogLayout(PrintStream ps, String sourceName) {
|
||||
// TODO
|
||||
final String prefix = null;
|
||||
|
||||
StructNamePrefixer prefixer = new StructNamePrefixer('.');
|
||||
|
||||
if (prefix != null) {
|
||||
prefixer.push(prefix);
|
||||
}
|
||||
|
||||
writeSdLogLayout(ps, prefixer, sourceName);
|
||||
}
|
||||
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName) { }
|
||||
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName, int[] arrayLength) {
|
||||
throw new IllegalStateException("This type can't be in an array!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -217,4 +217,51 @@ public class ScalarLayout extends Layout {
|
|||
elementOffset += type.size;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName) {
|
||||
writeSdLogLayout(ps, prefixer, "", "", sourceName);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName, int[] arrayLength) {
|
||||
if (arrayLength.length != 1) {
|
||||
throw new IllegalStateException("Output channels don't support multi dimension arrays");
|
||||
}
|
||||
|
||||
for (int i = 0; i < arrayLength[0]; i++) {
|
||||
writeSdLogLayout(ps, prefixer, "[" + i + "]", " " + (i + 1), sourceName);
|
||||
}
|
||||
}
|
||||
|
||||
private void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String arraySub, String commentSuffix, String sourceName) {
|
||||
if (this.name.startsWith("unused")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// {engine->outputChannels.mafMeasured, "MAF", "kg/h", 1},
|
||||
|
||||
final String prefixedName = prefixer.get(this.name);
|
||||
|
||||
ps.print("\t{");
|
||||
ps.print(sourceName);
|
||||
ps.print(prefixedName);
|
||||
ps.print(arraySub);
|
||||
ps.print(", \"");
|
||||
|
||||
String comment = this.options.comment;
|
||||
|
||||
// default to name in case of no comment
|
||||
if (comment == null || comment.length() == 0) {
|
||||
comment = prefixedName;
|
||||
}
|
||||
|
||||
ps.print(comment);
|
||||
ps.print(commentSuffix);
|
||||
ps.print("\", ");
|
||||
ps.print(this.options.units);
|
||||
ps.print(", ");
|
||||
ps.print(this.options.digits);
|
||||
ps.println("},");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -226,4 +226,33 @@ public class StructLayout extends Layout {
|
|||
elementOffset += this.size;
|
||||
}
|
||||
}
|
||||
|
||||
private void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName, String name) {
|
||||
if (!this.noPrefix) {
|
||||
prefixer.push(name);
|
||||
}
|
||||
|
||||
this.children.forEach(c -> c.writeSdLogLayout(ps, prefixer, sourceName));
|
||||
|
||||
if (!this.noPrefix) {
|
||||
prefixer.pop();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName) {
|
||||
writeSdLogLayout(ps, prefixer, sourceName, this.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeSdLogLayout(PrintStream ps, StructNamePrefixer prefixer, String sourceName, int[] arrayLength) {
|
||||
if (arrayLength.length != 1) {
|
||||
throw new IllegalStateException("Output channels don't support multi dimension arrays");
|
||||
}
|
||||
|
||||
// TODO: This doesn't quite work, as it's unclear how to make automatic naming work properly
|
||||
// for (int i = 0; i < arrayLength[0]; i++) {
|
||||
// writeSdLogLayout(ps, prefixer, sourceName, this.name + "[" + i + "]");
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,11 @@ import java.util.Stack;
|
|||
public class StructNamePrefixer {
|
||||
private final Stack<String> stack = new Stack<>();
|
||||
private int idx = -1;
|
||||
private final char prefixChar;
|
||||
|
||||
public StructNamePrefixer(char prefixChar) {
|
||||
this.prefixChar = prefixChar;
|
||||
}
|
||||
|
||||
public void pop() {
|
||||
stack.pop();
|
||||
|
@ -18,7 +23,7 @@ public class StructNamePrefixer {
|
|||
this.idx = -1;
|
||||
}
|
||||
|
||||
stack.push(name + "_");
|
||||
stack.push(name + this.prefixChar);
|
||||
}
|
||||
|
||||
void setIndex(int idx) {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package com.rusefi.newparse.outputs;
|
||||
|
||||
import com.rusefi.newparse.ParseState;
|
||||
import com.rusefi.newparse.layout.StructLayout;
|
||||
import com.rusefi.newparse.parsing.Struct;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.PrintStream;
|
||||
|
||||
public class SdLogWriter {
|
||||
private final PrintStream ps;
|
||||
|
||||
public SdLogWriter(String outputFile) throws FileNotFoundException {
|
||||
this(new PrintStreamAlwaysUnix(new FileOutputStream(outputFile)));
|
||||
}
|
||||
|
||||
public SdLogWriter(PrintStream ps) {
|
||||
this.ps = ps;
|
||||
|
||||
ps.println("static constexpr LogField fields[] = {");
|
||||
ps.println("\t{packedTime, GAUGE_NAME_TIME, \"sec\", 0},");
|
||||
}
|
||||
|
||||
public void endFile() {
|
||||
ps.println("};");
|
||||
}
|
||||
|
||||
public void writeSdLogs(ParseState parser, String sourceName) {
|
||||
// Assume the last struct is the one we want...
|
||||
Struct s = parser.getStructs().get(parser.getStructs().size() - 1);
|
||||
|
||||
StructLayout sl = new StructLayout(0, "root", s);
|
||||
sl.writeSdLogLayout(ps, sourceName);
|
||||
}
|
||||
}
|
|
@ -25,7 +25,7 @@ public class SdCardFieldsConsumer implements ConfigurationConsumer {
|
|||
|
||||
public static void wrapContent(LazyFile output, String content) {
|
||||
output.write("static constexpr LogField fields[] = {\n" +
|
||||
"{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n");
|
||||
"\t{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n");
|
||||
output.write(content);
|
||||
output.write("};\n");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue