// // Created by kifir on 11/18/24. // #pragma once #include "batt_lag_corr_curve.h" class EngineConfig { public: EngineConfig clone() const; // Other Sensor Inputs std::optional getClutchDownPin() const { return m_clutchDownPin; } std::optional getClutchDownPinInverted() const { return m_clutchDownPinInverted; } std::optional getClutchUpPin() const { return m_clutchUpPin; } std::optional getClutchUpPinInverted() const { return m_clutchUpPinInverted; } // Launch Control std::optional getLaunchActivatePin() const { return m_launchActivatePin; } std::optional getLaunchActivateInverted() const { return m_launchActivateInverted; } std::optional getLaunchControlEnabled() const { return m_launchControlEnabled; } std::optional getLaunchRpm() const { return m_launchRpm; } std::optional getLaunchRpmWindow() const { return m_launchRpmWindow; } std::optional getLaunchCorrectionsEndRpm() const { return m_launchCorrectionsEndRpm; } std::optional getIgnitionRetardEnable() const { return m_ignitionRetardEnable; } std::optional getIgnitionRetard() const { return m_ignitionRetard; } std::optional getSmoothRetardMode() const { return m_smoothRetardMode; } std::optional getEnableIgnitionCut() const { return m_enableIgnitionCut; } std::optional getInitialIgnitionCut() const { return m_initialIgnitionCut; } std::optional getFinalIgnitionCutBeforeLaunch() const { return m_finalIgnitionCutBeforeLaunch; } // Shift Torque Reduction (Flat Shift) std::optional getTorqueReductionEnabled() const { return m_isTorqueReductionEnabled; } std::optional getTorqueReductionActivationMode() const { return m_torqueReductionActivationMode; } std::optional getTorqueReductionTriggerPin() const { return m_torqueReductionTriggerPin; } std::optional getTorqueReductionTriggerPinInverted() const { return m_torqueReductionTriggerPinInverted; } std::optional getLimitTorqueReductionTime() const { return m_limitTorqueReductionTime; } std::optional getTorqueReductionTime() const { return m_torqueReductionTime; } std::optional getTorqueReductionArmingRpm() const { return m_torqueReductionArmingRpm; } std::optional getTorqueReductionArmingApp() const { return m_torqueReductionArmingApp; } std::optional getTorqueReductionIgnitionCut() const { return m_torqueReductionIgnitionCut; } std::optional getTorqueReductionIgnitionRetard() const { return m_torqueReductionIgnitionRetard; } std::optional getFuelPressureSensorMode() const { return m_fuelPressureSensorMode; }; // Injector std::optional getInjectorFlow() const { return m_injectorFlow; } std::optional getInjectorBattLagCorr() const { return m_injectorBattLagCorrCurve; } std::optional getInjectorFlowAsMassFlow() const { return m_injectorFlowAsMassFlow; } std::optional getFuelReferencePressure() const { return m_fuelReferencePressure; } std::optional getInjectorCompensationMode() const { return m_injectorCompensationMode; } // Secondary injector std::optional getInjectorSecondaryFlow() const { return m_injectorSecondaryFlow; } std::optional getInjectorSecondaryBattLagCorr() const { return m_injectorSecondaryBattLagCorrCurve; } std::optional getSecondaryInjectorFuelReferencePressure() const { return m_secondaryInjectorFuelReferencePressure; } std::optional getSecondaryInjectorCompensationMode() const { return m_secondaryInjectorCompensationMode; } // Staged injection std::optional getStagedInjectionEnabled() const { return m_isStagedInjectionEnabled; } // Nitrous control std::optional getNitrousControlEnabled() const { return m_nitrousControlEnabled; } std::optional getNitrousControlArmingMethod() const { return m_nitrousControlArmingMethod; } std::optional getNitrousControlTriggerPin() const { return m_nitrousControlTriggerPin; } std::optional getNitrousControlTriggerPinInverted() const { return m_nitrousControlTriggerPinInverted; } std::optional getNitrousControlTriggerPinMode() const { return m_nitrousControlTriggerPinMode; } std::optional getNitrousLuaGauge() const { return m_nitrousLuaGauge; } std::optional getNitrousLuaGaugeMeaning() const { return m_nitrousLuaGaugeMeaning; } std::optional getNitrousLuaGaugeArmingValue() const { return m_nitrousLuaGaugeArmingValue; } std::optional getNitrousMinimumVehicleSpeed() const { return m_nitrousMinimumVehicleSpeed; } std::optional getNitrousMinimumTps() const { return m_nitrousMinimumTps; } std::optional getNitrousMinimumClt() const { return m_nitrousMinimumClt; } std::optional getNitrousMaximumMap() const { return m_nitrousMaximumMap; } std::optional getNitrousMaximumAfr() const { return m_nitrousMaximumAfr; } std::optional getNitrousActivationRpm() const { return m_nitrousActivationRpm; } std::optional getNitrousDeactivationRpm() const { return m_nitrousDeactivationRpm; } std::optional getNitrousDeactivationRpmWindow() const { return m_nitrousDeactivationRpmWindow; } std::optional getNitrousFuelAdderPercent() const { return m_nitrousFuelAdderPercent; } std::optional getNitrousIgnitionRetard() const { return m_nitrousIgnitionRetard; } std::optional getFuelLevelAveragingAlpha() const { return m_fuelLevelAveragingAlpha; } std::optional getFuelLevelUpdatePeriodSec() const { return m_fuelLevelUpdatePeriodSec; } std::optional getFuelLevelLowThresholdVoltage() const { return m_fuelLevelLowThresholdVoltage; } std::optional getFuelLevelHighThresholdVoltage() const { return m_fuelLevelHighThresholdVoltage; } // We do not core about performance in tests, but we want to use builder-like style, so setters return new instance // of configuration: // Other Sensor Inputs EngineConfig setClutchDownPin(std::optional value); EngineConfig setClutchDownPinInverted(std::optional value); EngineConfig setClutchUpPin(std::optional value); EngineConfig setClutchUpPinInverted(std::optional value); // Launch Control EngineConfig setLaunchActivatePin(std::optional value); EngineConfig setLaunchActivateInverted(std::optional value); EngineConfig setLaunchControlEnabled(std::optional value); EngineConfig setLaunchRpm(std::optional value); EngineConfig setLaunchRpmWindow(std::optional value); EngineConfig setLaunchCorrectionsEndRpm(std::optional value); EngineConfig setIgnitionRetardEnable(std::optional value); EngineConfig setIgnitionRetard(std::optional value); EngineConfig setSmoothRetardMode(std::optional value); EngineConfig setEnableIgnitionCut(std::optional value); EngineConfig setInitialIgnitionCut(std::optional value); EngineConfig setFinalIgnitionCutBeforeLaunch(std::optional value); // Shift Torque Reduction (Flat Shift) EngineConfig setTorqueReductionEnabled(std::optional value); EngineConfig setTorqueReductionActivationMode(std::optional value); EngineConfig setTorqueReductionTriggerPin(std::optional value); EngineConfig setTorqueReductionTriggerPinInverted(std::optional value); EngineConfig setLimitTorqueReductionTime(std::optional value); EngineConfig setTorqueReductionTime(std::optional value); EngineConfig setTorqueReductionArmingRpm(std::optional value); EngineConfig setTorqueReductionArmingApp(std::optional value); EngineConfig setTorqueReductionIgnitionCut(std::optional value); EngineConfig setTorqueReductionIgnitionRetard(std::optional value); EngineConfig setFuelPressureSensorMode(std::optional value); // Injector EngineConfig setInjectorFlowAsMassFlow(std::optional injectorFlowAsMassFlow); EngineConfig setInjectorFlow(std::optional flow); EngineConfig setInjectorBattLagCorr(std::optional battLagCorr); EngineConfig setFuelReferencePressure(std::optional value); EngineConfig setInjectorCompensationMode(std::optional value); // Secondary injector EngineConfig setInjectorSecondaryFlow(std::optional flow); EngineConfig setInjectorSecondaryBattLagCorr(std::optional battLagCorr); EngineConfig setSecondaryInjectorFuelReferencePressure(std::optional value); EngineConfig setSecondaryInjectorCompensationMode(std::optional value); // Staged injection EngineConfig setStagedInjectionEnabled(std::optional value); // Nitrous control EngineConfig setNitrousControlEnabled(std::optional value); EngineConfig setNitrousControlArmingMethod(std::optional value); EngineConfig setNitrousControlTriggerPin(std::optional value); EngineConfig setNitrousControlTriggerPinInverted(std::optional value); EngineConfig setNitrousControlTriggerPinMode(std::optional value); EngineConfig setNitrousLuaGauge(std::optional value); EngineConfig setNitrousLuaGaugeMeaning(std::optional value); EngineConfig setNitrousLuaGaugeArmingValue(std::optional value); EngineConfig setNitrousMinimumVehicleSpeed(std::optional value); EngineConfig setNitrousMinimumTps(std::optional value); EngineConfig setNitrousMinimumClt(std::optional value); EngineConfig setNitrousMaximumMap(std::optional value); EngineConfig setNitrousMaximumAfr(std::optional value); EngineConfig setNitrousActivationRpm(std::optional value); EngineConfig setNitrousDeactivationRpm(std::optional value); EngineConfig setNitrousDeactivationRpmWindow(std::optional value); EngineConfig setNitrousFuelAdderPercent(std::optional value); EngineConfig setNitrousIgnitionRetard(std::optional value); EngineConfig setFuelLevelAveragingAlpha(std::optional value); EngineConfig setFuelLevelUpdatePeriodSec(std::optional value); EngineConfig setFuelLevelLowThresholdVoltage(std::optional value); EngineConfig setFuelLevelHighThresholdVoltage(std::optional value); private: // Other Sensor Inputs std::optional m_clutchDownPin; std::optional m_clutchDownPinInverted; std::optional m_clutchUpPin; std::optional m_clutchUpPinInverted; // Launch Control std::optional m_launchActivatePin; std::optional m_launchActivateInverted; std::optional m_launchControlEnabled; std::optional m_launchRpm; std::optional m_launchRpmWindow; std::optional m_launchCorrectionsEndRpm; std::optional m_ignitionRetardEnable; std::optional m_ignitionRetard; std::optional m_smoothRetardMode; std::optional m_enableIgnitionCut; std::optional m_initialIgnitionCut; std::optional m_finalIgnitionCutBeforeLaunch; // Shift Torque Reduction (Flat Shift) std::optional m_isTorqueReductionEnabled; std::optional m_torqueReductionActivationMode; std::optional m_torqueReductionTriggerPin; std::optional m_torqueReductionTriggerPinInverted; std::optional m_limitTorqueReductionTime; std::optional m_torqueReductionTime; std::optional m_torqueReductionArmingRpm; std::optional m_torqueReductionArmingApp; std::optional m_torqueReductionIgnitionCut; std::optional m_torqueReductionIgnitionRetard; std::optional m_fuelPressureSensorMode; // Injector std::optional m_injectorFlow; std::optional m_injectorBattLagCorrCurve; std::optional m_injectorFlowAsMassFlow;; std::optional m_fuelReferencePressure; std::optional m_injectorCompensationMode; // Secondary injector std::optional m_injectorSecondaryFlow; std::optional m_injectorSecondaryBattLagCorrCurve; std::optional m_secondaryInjectorFuelReferencePressure; std::optional m_secondaryInjectorCompensationMode; // Staged injection std::optional m_isStagedInjectionEnabled; // Nitrous control std::optional m_nitrousControlEnabled; std::optional m_nitrousControlArmingMethod; std::optional m_nitrousControlTriggerPin; std::optional m_nitrousControlTriggerPinInverted; std::optional m_nitrousControlTriggerPinMode; std::optional m_nitrousLuaGauge; std::optional m_nitrousLuaGaugeMeaning; std::optional m_nitrousLuaGaugeArmingValue; std::optional m_nitrousMinimumVehicleSpeed; std::optional m_nitrousMinimumTps; std::optional m_nitrousMinimumClt; std::optional m_nitrousMaximumMap; std::optional m_nitrousMaximumAfr; std::optional m_nitrousActivationRpm; std::optional m_nitrousDeactivationRpm; std::optional m_nitrousDeactivationRpmWindow; std::optional m_nitrousFuelAdderPercent; std::optional m_nitrousIgnitionRetard; std::optional m_fuelLevelAveragingAlpha; std::optional m_fuelLevelUpdatePeriodSec; std::optional m_fuelLevelLowThresholdVoltage; std::optional m_fuelLevelHighThresholdVoltage; };