live data objects evaluated at runtime (#4857)

* live data objects evaluated at runtime

* guard

* s
This commit is contained in:
Matthew Kennedy 2022-11-30 16:29:22 -08:00 committed by GitHub
parent dab7349253
commit 65b459d461
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 45 additions and 46 deletions

View File

@ -9,17 +9,17 @@
#include "fuel_computer.h" #include "fuel_computer.h"
template<> template<>
const output_channels_s* getLiveDataAddr() { const output_channels_s* getLiveData(size_t) {
return &engine->outputChannels; return &engine->outputChannels;
} }
template<> template<>
const knock_controller_s* getLiveDataAddr() { const knock_controller_s* getLiveData(size_t) {
return &engine->module<KnockController>().unmock(); return &engine->module<KnockController>().unmock();
} }
template<> template<>
const high_pressure_fuel_pump_s* getLiveDataAddr() { const high_pressure_fuel_pump_s* getLiveData(size_t) {
#if EFI_HPFP #if EFI_HPFP
return &engine->module<HpfpController>().unmock(); return &engine->module<HpfpController>().unmock();
#else #else
@ -28,7 +28,7 @@ const high_pressure_fuel_pump_s* getLiveDataAddr() {
} }
template<> template<>
const launch_control_state_s* getLiveDataAddr() { const launch_control_state_s* getLiveData(size_t) {
#if EFI_LAUNCH_CONTROL #if EFI_LAUNCH_CONTROL
return &engine->launchController; return &engine->launchController;
#else #else
@ -37,12 +37,12 @@ const launch_control_state_s* getLiveDataAddr() {
} }
template<> template<>
const injector_model_s* getLiveDataAddr() { const injector_model_s* getLiveData(size_t) {
return &engine->module<InjectorModel>().unmock(); return &engine->module<InjectorModel>().unmock();
} }
template<> template<>
const boost_control_s* getLiveDataAddr() { const boost_control_s* getLiveData(size_t) {
#if EFI_BOOST_CONTROL #if EFI_BOOST_CONTROL
return &engine->boostController; return &engine->boostController;
#else #else
@ -51,17 +51,17 @@ const boost_control_s* getLiveDataAddr() {
} }
template<> template<>
const ac_control_s* getLiveDataAddr() { const ac_control_s* getLiveData(size_t) {
return &engine->module<AcController>().unmock(); return &engine->module<AcController>().unmock();
} }
template<> template<>
const fuel_computer_s* getLiveDataAddr() { const fuel_computer_s* getLiveData(size_t) {
return &engine->fuelComputer; return &engine->fuelComputer;
} }
template<> template<>
const fan_control_s* getLiveDataAddr(size_t idx) { const fan_control_s* getLiveData(size_t idx) {
switch (idx) { switch (idx) {
case 0: return &engine->fan1; case 0: return &engine->fan1;
case 1: return &engine->fan2; case 1: return &engine->fan2;
@ -70,32 +70,32 @@ const fan_control_s* getLiveDataAddr(size_t idx) {
} }
template<> template<>
const fuel_pump_control_s* getLiveDataAddr() { const fuel_pump_control_s* getLiveData(size_t) {
return &engine->module<FuelPumpController>().unmock(); return &engine->module<FuelPumpController>().unmock();
} }
template<> template<>
const main_relay_s* getLiveDataAddr() { const main_relay_s* getLiveData(size_t) {
return &engine->module<MainRelayController>().unmock(); return &engine->module<MainRelayController>().unmock();
} }
template<> template<>
const engine_state_s* getLiveDataAddr() { const engine_state_s* getLiveData(size_t) {
return &engine->engineState; return &engine->engineState;
} }
template<> template<>
const tps_accel_state_s* getLiveDataAddr() { const tps_accel_state_s* getLiveData(size_t) {
return &engine->tpsAccelEnrichment; return &engine->tpsAccelEnrichment;
} }
template<> template<>
const trigger_central_s* getLiveDataAddr() { const trigger_central_s* getLiveData(size_t) {
return &engine->triggerCentral; return &engine->triggerCentral;
} }
template<> template<>
const trigger_state_s* getLiveDataAddr(size_t idx) { const trigger_state_s* getLiveData(size_t idx) {
#if EFI_SHAFT_POSITION_INPUT #if EFI_SHAFT_POSITION_INPUT
switch (idx) { switch (idx) {
case 0: return &engine->triggerCentral.triggerState; case 0: return &engine->triggerCentral.triggerState;
@ -111,7 +111,7 @@ const trigger_state_s* getLiveDataAddr(size_t idx) {
} }
template<> template<>
const trigger_state_primary_s* getLiveDataAddr() { const trigger_state_primary_s* getLiveData(size_t) {
#if EFI_SHAFT_POSITION_INPUT #if EFI_SHAFT_POSITION_INPUT
return &engine->triggerCentral.triggerState; return &engine->triggerCentral.triggerState;
#else #else
@ -120,34 +120,25 @@ const trigger_state_primary_s* getLiveDataAddr() {
} }
template<> template<>
const wall_fuel_state_s* getLiveDataAddr() { const wall_fuel_state_s* getLiveData(size_t) {
return &engine->injectionEvents.elements[0].wallFuel; return &engine->injectionEvents.elements[0].wallFuel;
} }
template<> template<>
const idle_state_s* getLiveDataAddr() { const idle_state_s* getLiveData(size_t) {
return &engine->module<IdleController>().unmock(); return &engine->module<IdleController>().unmock();
} }
template<> template<>
const ignition_state_s* getLiveDataAddr() { const ignition_state_s* getLiveData(size_t) {
return &engine->ignitionState; return &engine->ignitionState;
} }
template<> static const FragmentEntry fragments[] = {
const electronic_throttle_s* getLiveDataAddr(size_t) {
EtbController *etb = (EtbController *)engine->etbControllers[0];
return etb;
}
FragmentList getLiveDataFragments() {
// currently we initialize the array on first invocation
// this is quite a hack in terms of order of execution in real firmware code!
// todo: this still only allows for ONE unit test to work properly?!
static FragmentEntry fragments[] = {
// This header is generated - do not edit by hand! // This header is generated - do not edit by hand!
#include "live_data_fragments.h" #include "live_data_fragments.h"
}; };
FragmentList getLiveDataFragments() {
return { fragments, efi::size(fragments) }; return { fragments, efi::size(fragments) };
} }

View File

@ -6,10 +6,4 @@
#include <rusefi/fragments.h> #include <rusefi/fragments.h>
template <typename TStruct>
const TStruct* getLiveDataAddr();
template <typename TStruct>
const TStruct* getLiveDataAddr(size_t index);
FragmentList getLiveDataFragments(); FragmentList getLiveDataFragments();

View File

@ -60,9 +60,10 @@
#include "pch.h" #include "pch.h"
#include "electronic_throttle_impl.h"
#if EFI_ELECTRONIC_THROTTLE_BODY #if EFI_ELECTRONIC_THROTTLE_BODY
#include "electronic_throttle_impl.h"
#include "dc_motor.h" #include "dc_motor.h"
#include "dc_motors.h" #include "dc_motors.h"
#include "pid_auto_tune.h" #include "pid_auto_tune.h"
@ -1151,3 +1152,16 @@ void setProteusHitachiEtbDefaults() {
} }
#endif /* EFI_ELECTRONIC_THROTTLE_BODY */ #endif /* EFI_ELECTRONIC_THROTTLE_BODY */
template<>
const electronic_throttle_s* getLiveData(size_t idx) {
#if EFI_ELECTRONIC_THROTTLE_BODY
if (idx >= efi::size(etbControllers)) {
return nullptr;
}
return etbControllers[idx];
#else
return nullptr;
#endif
}

View File

@ -26,7 +26,7 @@ static AemXSeriesWideband aem2(1, SensorType::Lambda2);
#endif #endif
template <> template <>
const wideband_state_s* getLiveDataAddr(size_t idx) { const wideband_state_s* getLiveData(size_t idx) {
#if EFI_CAN_SUPPORT #if EFI_CAN_SUPPORT
switch (idx) { switch (idx) {
case 0: return &aem1; case 0: return &aem1;

@ -1 +1 @@
Subproject commit e87a4bc95459fe757299591db65ec4286f8faab3 Subproject commit 16a8e0b636f0a8d5f88dfdd6a1a4639ad90da936

Binary file not shown.

View File

@ -167,9 +167,9 @@ public class LiveDataProcessor {
if (outputNamesArr.length < 2) { if (outputNamesArr.length < 2) {
fragmentsContent fragmentsContent
.append("getLiveDataAddr<") .append("decl_frag<")
.append(type) .append(type)
.append(">(),\n"); .append(">{},\n");
} else { } else {
for (int i = 0; i < outputNamesArr.length; i++) { for (int i = 0; i < outputNamesArr.length; i++) {
if (i != 0) { if (i != 0) {
@ -178,11 +178,11 @@ public class LiveDataProcessor {
} }
fragmentsContent fragmentsContent
.append("getLiveDataAddr<") .append("decl_frag<")
.append(type) .append(type)
.append(">(") .append(", ")
.append(i) .append(i)
.append("),\t// ") .append(">{},\t// ")
.append(outputNamesArr[i]) .append(outputNamesArr[i])
.append("\n"); .append("\n");
} }