rusefi/java_tools/configuration_definition_base/src/main/java/com/rusefi/output/SdCardFieldsContent.java

99 lines
3.4 KiB
Java
Raw Normal View History

package com.rusefi.output;
2023-01-06 09:09:11 -08:00
import com.rusefi.ConfigField;
2023-01-06 08:55:59 -08:00
import com.rusefi.ReaderState;
2024-02-25 20:25:39 -08:00
import com.rusefi.util.LazyFile;
import java.io.IOException;
import static com.rusefi.output.JavaSensorsConsumer.quote;
2024-02-25 20:48:03 -08:00
/**
* here we tell the firmware what to log on SD card how
*
* @see DataLogConsumer
*/
public class SdCardFieldsContent {
2024-02-25 20:48:03 -08:00
public static final String SD_CARD_OUTPUT_FILE_NAME = "console/binary_log/log_fields_generated.h";
private final StringBuilder body = new StringBuilder();
2024-02-25 20:48:03 -08:00
public String home = "test->reference"; // technical debt: default value is only used by unit tests
public String conditional;
2023-07-01 18:39:10 -07:00
public Boolean isPtr = false;
2024-02-25 20:25:39 -08:00
public static void wrapContent(LazyFile output, String content) {
output.write("// generated by " + SdCardFieldsContent.class + "\n");
output.write("static const LogField fields[] = {\n" +
"{packedTime, GAUGE_NAME_TIME, \"sec\", 0},\n");
output.write(content);
output.write("};\n");
}
2023-01-06 08:55:59 -08:00
public void handleEndStruct(ReaderState state, ConfigStructure structure) throws IOException {
2023-01-06 07:52:09 -08:00
if (state.isStackEmpty()) {
PerFieldWithStructuresIterator.Strategy strategy = new PerFieldWithStructuresIterator.Strategy() {
@Override
public String process(ReaderState state, ConfigField configField, String prefix) {
return processOutput(configField, prefix);
}
@Override
public String getArrayElementName(ConfigField cf) {
return cf.getOriginalArrayName();
}
};
2023-01-06 07:54:29 -08:00
PerFieldWithStructuresIterator iterator = new PerFieldWithStructuresIterator(state, structure.getTsFields(), "",
strategy, ".");
iterator.loop();
String content = iterator.getContent();
body.append(content);
}
}
2023-01-06 09:09:11 -08:00
private String processOutput(ConfigField configField, String prefix) {
2023-01-06 08:01:32 -08:00
if (configField.getName().startsWith(ConfigStructureImpl.ALIGNMENT_FILL_AT))
return "";
2023-01-06 09:28:42 -08:00
if (configField.getName().startsWith(ConfigStructure.UNUSED_ANYTHING_PREFIX))
return "";
if (configField.isBit())
return "";
2023-07-09 18:54:54 -07:00
String name = configField.getOriginalArrayName();
return getLine(configField, prefix, prefix + name);
}
2023-01-06 09:09:11 -08:00
private String getLine(ConfigField configField, String prefix, String name) {
String categoryStr = configField.getCategory();
2023-11-26 09:56:47 -08:00
if (categoryStr == null) {
categoryStr = "";
} else {
categoryStr = ", " + categoryStr;
}
boolean isEnum = configField.getTypeName().contains("_e");
2023-11-26 09:56:47 -08:00
if (isEnum)
return "";
String before = conditional == null ? "" : "#if " + conditional + "\n";
String after = conditional == null ? "" : "#endif\n";
return before
2023-11-26 09:56:47 -08:00
+ "\t{" +
home + (isPtr ? "->" : ".") + name +
", "
+ DataLogConsumer.getHumanGaugeName(prefix, configField, "") +
", " +
quote(configField.getUnits()) +
", " +
configField.getDigits() +
categoryStr +
"},\n" +
after;
}
public String getBody() {
return body.toString();
}
}