This commit is contained in:
Matthew Kennedy 2023-11-25 01:29:48 -08:00
commit 2f584077f3
8 changed files with 152 additions and 4 deletions

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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!");
}
}

View File

@ -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("},");
}
}

View File

@ -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 + "]");
// }
}
}

View File

@ -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) {

View File

@ -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);
}
}

View File

@ -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");
}