mirror of https://github.com/rusefi/rusefi-1.git
More fragment refactoring: encode by type, not enum index (#4075)
* fragment refactoring * jar * jar? * look up fragment by type, not index * don't even include that * jar again * jar again * unit tests are happy * guards * jar * hpfp guarding * handle knock controller * jar * s * stub multiple for each * jar * Update live_data.cpp * s * s
This commit is contained in:
parent
6931862fba
commit
7cc09ade6f
|
@ -1,27 +0,0 @@
|
||||||
// generated by gen_live_documentation.sh / UsagesReader.java
|
|
||||||
#include "pch.h"
|
|
||||||
#include "tunerstudio.h"
|
|
||||||
static const FragmentEntry fragments[] = {
|
|
||||||
reinterpret_cast<const output_channels_s*>(getStructAddr(LDS_output_channels)),
|
|
||||||
reinterpret_cast<const knock_controller_s*>(getStructAddr(LDS_knock_controller)),
|
|
||||||
reinterpret_cast<const high_pressure_fuel_pump_s*>(getStructAddr(LDS_high_pressure_fuel_pump)),
|
|
||||||
reinterpret_cast<const injector_model_s*>(getStructAddr(LDS_injector_model)),
|
|
||||||
reinterpret_cast<const launch_control_state_s*>(getStructAddr(LDS_launch_control_state)),
|
|
||||||
reinterpret_cast<const boost_control_s*>(getStructAddr(LDS_boost_control)),
|
|
||||||
reinterpret_cast<const ac_control_s*>(getStructAddr(LDS_ac_control)),
|
|
||||||
reinterpret_cast<const fan_control_s*>(getStructAddr(LDS_fan_control)),
|
|
||||||
reinterpret_cast<const fuel_pump_control_s*>(getStructAddr(LDS_fuel_pump_control)),
|
|
||||||
reinterpret_cast<const main_relay_s*>(getStructAddr(LDS_main_relay)),
|
|
||||||
reinterpret_cast<const engine_state_s*>(getStructAddr(LDS_engine_state)),
|
|
||||||
reinterpret_cast<const tps_accel_state_s*>(getStructAddr(LDS_tps_accel_state)),
|
|
||||||
reinterpret_cast<const trigger_central_s*>(getStructAddr(LDS_trigger_central)),
|
|
||||||
reinterpret_cast<const trigger_state_s*>(getStructAddr(LDS_trigger_state)),
|
|
||||||
reinterpret_cast<const wall_fuel_state_s*>(getStructAddr(LDS_wall_fuel_state)),
|
|
||||||
reinterpret_cast<const idle_state_s*>(getStructAddr(LDS_idle_state)),
|
|
||||||
reinterpret_cast<const ignition_state_s*>(getStructAddr(LDS_ignition_state)),
|
|
||||||
reinterpret_cast<const electronic_throttle_s*>(getStructAddr(LDS_electronic_throttle)),
|
|
||||||
};
|
|
||||||
|
|
||||||
FragmentList getFragments() {
|
|
||||||
return { fragments, efi::size(fragments) };
|
|
||||||
}
|
|
|
@ -0,0 +1,141 @@
|
||||||
|
#include "pch.h"
|
||||||
|
|
||||||
|
#include "tunerstudio.h"
|
||||||
|
|
||||||
|
template <typename TStruct>
|
||||||
|
const TStruct* getLiveDataAddr();
|
||||||
|
|
||||||
|
template <typename TStruct>
|
||||||
|
const TStruct* getLiveDataAddr(size_t index);
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const output_channels_s* getLiveDataAddr() {
|
||||||
|
return &engine->outputChannels;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const knock_controller_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<KnockController>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const high_pressure_fuel_pump_s* getLiveDataAddr() {
|
||||||
|
#if EFI_HPFP
|
||||||
|
return &engine->module<HpfpController>().unmock();
|
||||||
|
#else
|
||||||
|
return nullptr; // explicit null to confirm that this struct is handled
|
||||||
|
#endif // EFI_HPFP
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const launch_control_state_s* getLiveDataAddr() {
|
||||||
|
#if EFI_LAUNCH_CONTROL
|
||||||
|
return &engine->launchController;
|
||||||
|
#else
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const injector_model_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<InjectorModel>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const boost_control_s* getLiveDataAddr() {
|
||||||
|
#if EFI_BOOST_CONTROL
|
||||||
|
return &engine->boostController;
|
||||||
|
#else
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const ac_control_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<AcController>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const fan_control_s* getLiveDataAddr() {
|
||||||
|
return &engine->fan1;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const fuel_pump_control_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<FuelPumpController>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const main_relay_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<MainRelayController>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const engine_state_s* getLiveDataAddr() {
|
||||||
|
return &engine->engineState;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const tps_accel_state_s* getLiveDataAddr() {
|
||||||
|
return &engine->tpsAccelEnrichment;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const trigger_central_s* getLiveDataAddr() {
|
||||||
|
return &engine->triggerCentral;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const trigger_state_s* getLiveDataAddr(size_t idx) {
|
||||||
|
#if EFI_SHAFT_POSITION_INPUT
|
||||||
|
switch (idx) {
|
||||||
|
case 0: return &engine->triggerCentral.triggerState;
|
||||||
|
case 1: return &engine->triggerCentral.vvtState[0][0];
|
||||||
|
case 2: return &engine->triggerCentral.vvtState[0][1];
|
||||||
|
case 3: return &engine->triggerCentral.vvtState[1][0];
|
||||||
|
case 4: return &engine->triggerCentral.vvtState[1][1];
|
||||||
|
default: return nullptr;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
return nullptr;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const wall_fuel_state_s* getLiveDataAddr() {
|
||||||
|
return &engine->injectionEvents.elements[0].wallFuel;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const idle_state_s* getLiveDataAddr() {
|
||||||
|
return &engine->module<IdleController>().unmock();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const ignition_state_s* getLiveDataAddr() {
|
||||||
|
return &engine->ignitionState;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
const electronic_throttle_s* getLiveDataAddr() {
|
||||||
|
// todo: figure out how to handle two units?
|
||||||
|
// return engine->etbControllers[0];
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if EFI_UNIT_TEST
|
||||||
|
FragmentList getLiveDataFragments() {
|
||||||
|
return { nullptr, 0 };
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
static const FragmentEntry fragments[] = {
|
||||||
|
// This header is generated - do not edit by hand!
|
||||||
|
#include "live_data_fragments.h"
|
||||||
|
};
|
||||||
|
|
||||||
|
FragmentList getLiveDataFragments() {
|
||||||
|
return { fragments, efi::size(fragments) };
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,3 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
FragmentList getLiveDataFragments();
|
|
@ -39,8 +39,6 @@ const void * getStructAddr(live_data_e structId);
|
||||||
#include "thread_controller.h"
|
#include "thread_controller.h"
|
||||||
#include "thread_priority.h"
|
#include "thread_priority.h"
|
||||||
|
|
||||||
FragmentList getFragments();
|
|
||||||
|
|
||||||
void updateTunerStudioState();
|
void updateTunerStudioState();
|
||||||
|
|
||||||
void requestBurn(void);
|
void requestBurn(void);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
TUNERSTUDIO_SRC_CPP = $(PROJECT_DIR)/console/binary/tunerstudio_io.cpp \
|
TUNERSTUDIO_SRC_CPP = $(PROJECT_DIR)/console/binary/tunerstudio_io.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/tunerstudio_io_serial.cpp \
|
$(PROJECT_DIR)/console/binary/tunerstudio_io_serial.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/tunerstudio_io_serial_ports.cpp \
|
$(PROJECT_DIR)/console/binary/tunerstudio_io_serial_ports.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/generated/live_data_fragments.cpp \
|
$(PROJECT_DIR)/console/binary/generated/live_data.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/ts_can_channel.cpp \
|
$(PROJECT_DIR)/console/binary/ts_can_channel.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/serial_can.cpp \
|
$(PROJECT_DIR)/console/binary/serial_can.cpp \
|
||||||
$(PROJECT_DIR)/console/binary/tunerstudio.cpp \
|
$(PROJECT_DIR)/console/binary/tunerstudio.cpp \
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
#include "tunerstudio.h"
|
#include "tunerstudio.h"
|
||||||
#include "tunerstudio_io.h"
|
#include "tunerstudio_io.h"
|
||||||
|
|
||||||
|
#include "live_data.h"
|
||||||
|
|
||||||
#include "status_loop.h"
|
#include "status_loop.h"
|
||||||
|
|
||||||
#if EFI_TUNER_STUDIO
|
#if EFI_TUNER_STUDIO
|
||||||
|
@ -53,7 +55,7 @@ void TunerStudio::cmdOutputChannels(TsChannelBase* tsChannel, uint16_t offset, u
|
||||||
/**
|
/**
|
||||||
* collect data from all models
|
* collect data from all models
|
||||||
*/
|
*/
|
||||||
copyRange(scratchBuffer + 3, getFragments(), offset, count);
|
copyRange(scratchBuffer + 3, getLiveDataFragments(), offset, count);
|
||||||
|
|
||||||
tsChannel->crcAndWriteBuffer(TS_RESPONSE_OK, count);
|
tsChannel->crcAndWriteBuffer(TS_RESPONSE_OK, count);
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -31,10 +31,7 @@ public class UsagesReader {
|
||||||
|
|
||||||
private final StringBuilder fancyNewMenu = new StringBuilder();
|
private final StringBuilder fancyNewMenu = new StringBuilder();
|
||||||
|
|
||||||
private final StringBuilder fragmentsContent = new StringBuilder(
|
private final StringBuilder fragmentsContent = new StringBuilder(header);
|
||||||
header +
|
|
||||||
"#include \"pch.h\"\n" +
|
|
||||||
"#include \"tunerstudio.h\"\n");
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
if (args.length != 1) {
|
if (args.length != 1) {
|
||||||
|
@ -115,8 +112,6 @@ public class UsagesReader {
|
||||||
|
|
||||||
ArrayList<LinkedHashMap> liveDocs = (ArrayList<LinkedHashMap>)data.get("Usages");
|
ArrayList<LinkedHashMap> liveDocs = (ArrayList<LinkedHashMap>)data.get("Usages");
|
||||||
|
|
||||||
fragmentsContent.append("static const FragmentEntry fragments[] = {\n");
|
|
||||||
|
|
||||||
for (LinkedHashMap entry : liveDocs) {
|
for (LinkedHashMap entry : liveDocs) {
|
||||||
String name = (String)entry.get("name");
|
String name = (String)entry.get("name");
|
||||||
String java = (String)entry.get("java");
|
String java = (String)entry.get("java");
|
||||||
|
@ -146,23 +141,34 @@ public class UsagesReader {
|
||||||
String type = name + "_s"; // convention
|
String type = name + "_s"; // convention
|
||||||
enumContent.append(enumName + ",\n");
|
enumContent.append(enumName + ",\n");
|
||||||
|
|
||||||
fragmentsContent
|
if (outputNamesArr.length < 2) {
|
||||||
.append("\treinterpret_cast<const ")
|
fragmentsContent
|
||||||
.append(type)
|
.append("getLiveDataAddr<")
|
||||||
.append("*>(getStructAddr(")
|
.append(type)
|
||||||
.append(enumName)
|
.append(">(),\n");
|
||||||
.append(")),\n");
|
} else {
|
||||||
|
for (int i = 0; i < outputNamesArr.length; i++) {
|
||||||
|
if (i != 0) {
|
||||||
|
// TODO: remove once the rest of the handling for multiple copies of one struct is in place.
|
||||||
|
fragmentsContent.append("// ");
|
||||||
|
}
|
||||||
|
|
||||||
|
fragmentsContent
|
||||||
|
.append("getLiveDataAddr<")
|
||||||
|
.append(type)
|
||||||
|
.append(">(")
|
||||||
|
.append(i)
|
||||||
|
.append("),\t// ")
|
||||||
|
.append(outputNamesArr[i])
|
||||||
|
.append("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
enumContent.append("} live_data_e;\n");
|
enumContent.append("} live_data_e;\n");
|
||||||
|
|
||||||
totalSensors.append(javaSensorsConsumer.getContent());
|
totalSensors.append(javaSensorsConsumer.getContent());
|
||||||
|
|
||||||
fragmentsContent
|
|
||||||
.append("};\n\n")
|
|
||||||
.append("FragmentList getFragments() {\n\treturn { fragments, efi::size(fragments) };\n}\n");
|
|
||||||
|
|
||||||
return javaSensorsConsumer.sensorTsPosition;
|
return javaSensorsConsumer.sensorTsPosition;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeFiles() throws IOException {
|
private void writeFiles() throws IOException {
|
||||||
|
@ -170,7 +176,7 @@ public class UsagesReader {
|
||||||
fw.write(enumContent.toString());
|
fw.write(enumContent.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
try (FileWriter fw = new FileWriter("console/binary/generated/live_data_fragments.cpp")) {
|
try (FileWriter fw = new FileWriter("console/binary/generated/live_data_fragments.h")) {
|
||||||
fw.write(fragmentsContent.toString());
|
fw.write(fragmentsContent.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue