reduce updateTunerStudioState stack usage (#3308)
* break out in to functions * 100 more saved * happy simulator Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
parent
73315d0cfc
commit
5b9c2b6c0e
|
@ -459,6 +459,204 @@ extern HIP9011 instance;
|
||||||
|
|
||||||
#if EFI_TUNER_STUDIO
|
#if EFI_TUNER_STUDIO
|
||||||
|
|
||||||
|
static void updateTempSensors() {
|
||||||
|
SensorResult clt = Sensor::get(SensorType::Clt);
|
||||||
|
tsOutputChannels.coolantTemperature = clt.Value;
|
||||||
|
tsOutputChannels.isCltError = !clt.Valid;
|
||||||
|
|
||||||
|
SensorResult iat = Sensor::get(SensorType::Iat);
|
||||||
|
tsOutputChannels.intakeAirTemperature = iat.Value;
|
||||||
|
tsOutputChannels.isIatError = !iat.Valid;
|
||||||
|
|
||||||
|
SensorResult auxTemp1 = Sensor::get(SensorType::AuxTemp1);
|
||||||
|
tsOutputChannels.auxTemp1 = auxTemp1.Value;
|
||||||
|
|
||||||
|
SensorResult auxTemp2 = Sensor::get(SensorType::AuxTemp2);
|
||||||
|
tsOutputChannels.auxTemp2 = auxTemp2.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateThrottles() {
|
||||||
|
SensorResult tps1 = Sensor::get(SensorType::Tps1);
|
||||||
|
tsOutputChannels.throttlePosition = tps1.Value;
|
||||||
|
tsOutputChannels.isTpsError = !tps1.Valid;
|
||||||
|
tsOutputChannels.tpsADC = convertVoltageTo10bitADC(Sensor::getRaw(SensorType::Tps1Primary));
|
||||||
|
|
||||||
|
SensorResult tps2 = Sensor::get(SensorType::Tps2);
|
||||||
|
tsOutputChannels.throttle2Position = tps2.Value;
|
||||||
|
// If we don't have a TPS2 at all, don't turn on the failure light
|
||||||
|
tsOutputChannels.isTps2Error = !tps2.Valid && Sensor::hasSensor(SensorType::Tps2Primary);
|
||||||
|
|
||||||
|
SensorResult pedal = Sensor::get(SensorType::AcceleratorPedal);
|
||||||
|
tsOutputChannels.pedalPosition = pedal.Value;
|
||||||
|
// Only report fail if you have one (many people don't)
|
||||||
|
tsOutputChannels.isPedalError = !pedal.Valid && Sensor::hasSensor(SensorType::AcceleratorPedalPrimary);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateLambda() {
|
||||||
|
float lambdaValue = Sensor::get(SensorType::Lambda1).value_or(0);
|
||||||
|
tsOutputChannels.lambda = lambdaValue;
|
||||||
|
tsOutputChannels.airFuelRatio = lambdaValue * ENGINE(engineState.stoichiometricRatio);
|
||||||
|
|
||||||
|
float lambda2Value = Sensor::get(SensorType::Lambda2).value_or(0);
|
||||||
|
tsOutputChannels.lambda2 = lambda2Value;
|
||||||
|
tsOutputChannels.airFuelRatio2 = lambda2Value * ENGINE(engineState.stoichiometricRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFuelSensors() {
|
||||||
|
// Low pressure is directly in kpa
|
||||||
|
tsOutputChannels.lowFuelPressure = Sensor::get(SensorType::FuelPressureLow).Value;
|
||||||
|
// High pressure is in bar, aka 100 kpa
|
||||||
|
tsOutputChannels.highFuelPressure = KPA2BAR(Sensor::get(SensorType::FuelPressureHigh).Value);
|
||||||
|
|
||||||
|
tsOutputChannels.flexPercent = Sensor::get(SensorType::FuelEthanolPercent).Value;
|
||||||
|
|
||||||
|
tsOutputChannels.fuelTankLevel = Sensor::get(SensorType::FuelLevel).value_or(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateVvtSensors() {
|
||||||
|
#if EFI_SHAFT_POSITION_INPUT
|
||||||
|
// 248
|
||||||
|
tsOutputChannels.vvtPositionB1I = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/0);
|
||||||
|
tsOutputChannels.vvtPositionB1E = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/1);
|
||||||
|
tsOutputChannels.vvtPositionB2I = engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/0);
|
||||||
|
tsOutputChannels.vvtPositionB2E = engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateVehicleSpeed(int rpm) {
|
||||||
|
#if EFI_VEHICLE_SPEED
|
||||||
|
float vehicleSpeed = Sensor::get(SensorType::VehicleSpeed).value_or(0);
|
||||||
|
tsOutputChannels.vehicleSpeedKph = vehicleSpeed;
|
||||||
|
tsOutputChannels.speedToRpmRatio = vehicleSpeed / rpm;
|
||||||
|
#endif /* EFI_VEHICLE_SPEED */
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateRawSensors() {
|
||||||
|
tsOutputChannels.rawTps1Primary = Sensor::getRaw(SensorType::Tps1Primary);
|
||||||
|
tsOutputChannels.rawTps1Secondary = Sensor::getRaw(SensorType::Tps1Secondary);
|
||||||
|
tsOutputChannels.rawTps2Primary = Sensor::getRaw(SensorType::Tps2Primary);
|
||||||
|
tsOutputChannels.rawTps2Secondary = Sensor::getRaw(SensorType::Tps2Secondary);
|
||||||
|
tsOutputChannels.rawPpsPrimary = Sensor::getRaw(SensorType::AcceleratorPedalPrimary);
|
||||||
|
tsOutputChannels.rawPpsSecondary = Sensor::getRaw(SensorType::AcceleratorPedalSecondary);
|
||||||
|
tsOutputChannels.rawClt = Sensor::getRaw(SensorType::Clt);
|
||||||
|
tsOutputChannels.rawIat = Sensor::getRaw(SensorType::Iat);
|
||||||
|
tsOutputChannels.rawOilPressure = Sensor::getRaw(SensorType::OilPressure);
|
||||||
|
tsOutputChannels.rawLowFuelPressure = Sensor::getRaw(SensorType::FuelPressureLow);
|
||||||
|
tsOutputChannels.rawHighFuelPressure = Sensor::getRaw(SensorType::FuelPressureHigh);
|
||||||
|
tsOutputChannels.massAirFlowVoltage = Sensor::getRaw(SensorType::Maf);
|
||||||
|
tsOutputChannels.rawWastegatePositionSensor = Sensor::getRaw(SensorType::WastegatePosition);
|
||||||
|
tsOutputChannels.rawIdlePositionSensor = Sensor::getRaw(SensorType::IdlePosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateSensors(int rpm) {
|
||||||
|
updateTempSensors();
|
||||||
|
updateThrottles();
|
||||||
|
updateRawSensors();
|
||||||
|
updateLambda();
|
||||||
|
updateFuelSensors();
|
||||||
|
updateVvtSensors();
|
||||||
|
updateVehicleSpeed(rpm);
|
||||||
|
|
||||||
|
tsOutputChannels.vBatt = Sensor::get(SensorType::BatteryVoltage).value_or(0);
|
||||||
|
tsOutputChannels.baroPressure = Sensor::get(SensorType::BarometricPressure).value_or(0);
|
||||||
|
tsOutputChannels.manifoldAirPressure = Sensor::get(SensorType::Map).value_or(0);
|
||||||
|
|
||||||
|
tsOutputChannels.oilPressure = Sensor::get(SensorType::OilPressure).Value;
|
||||||
|
|
||||||
|
tsOutputChannels.idlePositionSensor = Sensor::get(SensorType::IdlePosition).value_or(0);
|
||||||
|
|
||||||
|
tsOutputChannels.wastegatePosition = Sensor::get(SensorType::WastegatePosition).value_or(0);
|
||||||
|
|
||||||
|
#if HAL_USE_ADC
|
||||||
|
tsOutputChannels.internalMcuTemperature = getMCUInternalTemperature();
|
||||||
|
#endif /* HAL_USE_ADC */
|
||||||
|
|
||||||
|
// tCharge depends on the previous state, so we should use the stored value.
|
||||||
|
tsOutputChannels.tCharge = ENGINE(engineState.sd.tCharge);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFuelCorrections() {
|
||||||
|
tsOutputChannels.baroCorrection = engine->engineState.baroCorrection;
|
||||||
|
tsOutputChannels.iatCorrection = ENGINE(engineState.running.intakeTemperatureCoefficient);
|
||||||
|
tsOutputChannels.cltCorrection = ENGINE(engineState.running.coolantTemperatureCoefficient);
|
||||||
|
|
||||||
|
tsOutputChannels.fuelTrim[0] = 100.0f * (ENGINE(stftCorrection)[0] - 1.0f);
|
||||||
|
tsOutputChannels.fuelTrim[1] = 100.0f * (ENGINE(stftCorrection)[1] - 1.0f);
|
||||||
|
|
||||||
|
tsOutputChannels.injectorLagMs = ENGINE(engineState.running.injectorLag);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFuelLoads() {
|
||||||
|
tsOutputChannels.fuelingLoad = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
tsOutputChannels.ignitionLoad = getIgnitionLoad(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
tsOutputChannels.veTableYAxis = ENGINE(engineState.currentVeLoad);
|
||||||
|
tsOutputChannels.afrTableYAxis = ENGINE(engineState.currentAfrLoad);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFuelResults() {
|
||||||
|
tsOutputChannels.chargeAirMass = engine->engineState.sd.airMassInOneCylinder;
|
||||||
|
|
||||||
|
tsOutputChannels.fuelBase = engine->engineState.baseFuel * 1000; // Convert grams to mg
|
||||||
|
tsOutputChannels.fuelRunning = ENGINE(engineState.running.fuel);
|
||||||
|
tsOutputChannels.actualLastInjection = ENGINE(actualLastInjection)[0];
|
||||||
|
|
||||||
|
tsOutputChannels.fuelFlowRate = engine->engineState.fuelConsumption.getConsumptionGramPerSecond();
|
||||||
|
tsOutputChannels.totalFuelConsumption = engine->engineState.fuelConsumption.getConsumedGrams();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFuelInfo() {
|
||||||
|
updateFuelCorrections();
|
||||||
|
updateFuelLoads();
|
||||||
|
updateFuelResults();
|
||||||
|
|
||||||
|
const auto& wallFuel = ENGINE(injectionEvents.elements[0].wallFuel);
|
||||||
|
tsOutputChannels.wallFuelAmount = wallFuel.getWallFuel();
|
||||||
|
tsOutputChannels.wallFuelCorrection = wallFuel.wallFuelCorrection;
|
||||||
|
|
||||||
|
tsOutputChannels.injectionOffset = engine->engineState.injectionOffset;
|
||||||
|
|
||||||
|
tsOutputChannels.veValue = engine->engineState.currentVe;
|
||||||
|
tsOutputChannels.currentTargetAfr = ENGINE(engineState.targetAFR);
|
||||||
|
tsOutputChannels.targetLambda = ENGINE(engineState.targetLambda);
|
||||||
|
|
||||||
|
tsOutputChannels.crankingFuelMass = ENGINE(engineState.cranking.fuel);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateIgnition(int rpm) {
|
||||||
|
float timing = engine->engineState.timingAdvance;
|
||||||
|
tsOutputChannels.ignitionAdvance = timing > 360 ? timing - 720 : timing;
|
||||||
|
// 60
|
||||||
|
tsOutputChannels.sparkDwell = ENGINE(engineState.sparkDwell);
|
||||||
|
|
||||||
|
tsOutputChannels.coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void updateFlags() {
|
||||||
|
tsOutputChannels.isFuelPumpOn = enginePins.fuelPumpRelay.getLogicValue();
|
||||||
|
tsOutputChannels.isFanOn = enginePins.fanRelay.getLogicValue();
|
||||||
|
tsOutputChannels.isFan2On = enginePins.fanRelay2.getLogicValue();
|
||||||
|
tsOutputChannels.isO2HeaterOn = enginePins.o2heater.getLogicValue();
|
||||||
|
tsOutputChannels.isIgnitionEnabledIndicator = ENGINE(limpManager).allowIgnition();
|
||||||
|
tsOutputChannels.isInjectionEnabledIndicator = ENGINE(limpManager).allowInjection();
|
||||||
|
tsOutputChannels.isCylinderCleanupActivated = engine->isCylinderCleanupMode;
|
||||||
|
|
||||||
|
#if EFI_LAUNCH_CONTROL
|
||||||
|
tsOutputChannels.launchTriggered = engine->isLaunchCondition;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
tsOutputChannels.clutchUpState = engine->clutchUpState;
|
||||||
|
tsOutputChannels.clutchDownState = engine->clutchDownState;
|
||||||
|
tsOutputChannels.brakePedalState = engine->brakePedalState;
|
||||||
|
|
||||||
|
#if EFI_PROD_CODE
|
||||||
|
tsOutputChannels.isTriggerError = isTriggerErrorNow();
|
||||||
|
#endif // EFI_PROD_CODE
|
||||||
|
|
||||||
|
#if EFI_INTERNAL_FLASH
|
||||||
|
tsOutputChannels.needBurn = getNeedToWriteConfiguration();
|
||||||
|
#endif /* EFI_INTERNAL_FLASH */
|
||||||
|
}
|
||||||
|
|
||||||
void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_ENGINE_PARAMETER_SUFFIX) {
|
||||||
#if EFI_SHAFT_POSITION_INPUT
|
#if EFI_SHAFT_POSITION_INPUT
|
||||||
int rpm = Sensor::get(SensorType::Rpm).Value;
|
int rpm = Sensor::get(SensorType::Rpm).Value;
|
||||||
|
@ -476,73 +674,10 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
// offset 0
|
// offset 0
|
||||||
tsOutputChannels->rpm = rpm;
|
tsOutputChannels->rpm = rpm;
|
||||||
|
|
||||||
SensorResult clt = Sensor::get(SensorType::Clt);
|
updateSensors(rpm);
|
||||||
tsOutputChannels->coolantTemperature = clt.Value;
|
updateFuelInfo();
|
||||||
tsOutputChannels->isCltError = !clt.Valid;
|
updateIgnition(rpm);
|
||||||
|
updateFlags();
|
||||||
SensorResult iat = Sensor::get(SensorType::Iat);
|
|
||||||
tsOutputChannels->intakeAirTemperature = iat.Value;
|
|
||||||
tsOutputChannels->isIatError = !iat.Valid;
|
|
||||||
|
|
||||||
SensorResult auxTemp1 = Sensor::get(SensorType::AuxTemp1);
|
|
||||||
tsOutputChannels->auxTemp1 = auxTemp1.Value;
|
|
||||||
|
|
||||||
SensorResult auxTemp2 = Sensor::get(SensorType::AuxTemp2);
|
|
||||||
tsOutputChannels->auxTemp2 = auxTemp2.Value;
|
|
||||||
|
|
||||||
SensorResult tps1 = Sensor::get(SensorType::Tps1);
|
|
||||||
tsOutputChannels->throttlePosition = tps1.Value;
|
|
||||||
tsOutputChannels->isTpsError = !tps1.Valid;
|
|
||||||
tsOutputChannels->tpsADC = convertVoltageTo10bitADC(Sensor::getRaw(SensorType::Tps1Primary));
|
|
||||||
|
|
||||||
SensorResult tps2 = Sensor::get(SensorType::Tps2);
|
|
||||||
tsOutputChannels->throttle2Position = tps2.Value;
|
|
||||||
// If we don't have a TPS2 at all, don't turn on the failure light
|
|
||||||
tsOutputChannels->isTps2Error = !tps2.Valid && Sensor::hasSensor(SensorType::Tps2Primary);
|
|
||||||
|
|
||||||
SensorResult pedal = Sensor::get(SensorType::AcceleratorPedal);
|
|
||||||
tsOutputChannels->pedalPosition = pedal.Value;
|
|
||||||
// Only report fail if you have one (many people don't)
|
|
||||||
tsOutputChannels->isPedalError = !pedal.Valid && Sensor::hasSensor(SensorType::AcceleratorPedalPrimary);
|
|
||||||
|
|
||||||
// Set raw sensors
|
|
||||||
tsOutputChannels->rawTps1Primary = Sensor::getRaw(SensorType::Tps1Primary);
|
|
||||||
tsOutputChannels->rawTps1Secondary = Sensor::getRaw(SensorType::Tps1Secondary);
|
|
||||||
tsOutputChannels->rawTps2Primary = Sensor::getRaw(SensorType::Tps2Primary);
|
|
||||||
tsOutputChannels->rawTps2Secondary = Sensor::getRaw(SensorType::Tps2Secondary);
|
|
||||||
tsOutputChannels->rawPpsPrimary = Sensor::getRaw(SensorType::AcceleratorPedalPrimary);
|
|
||||||
tsOutputChannels->rawPpsSecondary = Sensor::getRaw(SensorType::AcceleratorPedalSecondary);
|
|
||||||
tsOutputChannels->rawClt = Sensor::getRaw(SensorType::Clt);
|
|
||||||
tsOutputChannels->rawIat = Sensor::getRaw(SensorType::Iat);
|
|
||||||
tsOutputChannels->rawOilPressure = Sensor::getRaw(SensorType::OilPressure);
|
|
||||||
tsOutputChannels->rawLowFuelPressure = Sensor::getRaw(SensorType::FuelPressureLow);
|
|
||||||
tsOutputChannels->rawHighFuelPressure = Sensor::getRaw(SensorType::FuelPressureHigh);
|
|
||||||
tsOutputChannels->massAirFlowVoltage = Sensor::getRaw(SensorType::Maf);
|
|
||||||
|
|
||||||
float lambdaValue = Sensor::get(SensorType::Lambda1).value_or(0);
|
|
||||||
tsOutputChannels->lambda = lambdaValue;
|
|
||||||
tsOutputChannels->airFuelRatio = lambdaValue * ENGINE(engineState.stoichiometricRatio);
|
|
||||||
|
|
||||||
float lambda2Value = Sensor::get(SensorType::Lambda2).value_or(0);
|
|
||||||
tsOutputChannels->lambda2 = lambda2Value;
|
|
||||||
tsOutputChannels->airFuelRatio2 = lambda2Value * ENGINE(engineState.stoichiometricRatio);
|
|
||||||
|
|
||||||
tsOutputChannels->fuelingLoad = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE);
|
|
||||||
tsOutputChannels->ignitionLoad = getIgnitionLoad(PASS_ENGINE_PARAMETER_SIGNATURE);
|
|
||||||
tsOutputChannels->veTableYAxis = ENGINE(engineState.currentVeLoad);
|
|
||||||
tsOutputChannels->afrTableYAxis = ENGINE(engineState.currentAfrLoad);
|
|
||||||
|
|
||||||
// offset 28
|
|
||||||
tsOutputChannels->vBatt = Sensor::get(SensorType::BatteryVoltage).value_or(0);
|
|
||||||
|
|
||||||
// offset 36
|
|
||||||
tsOutputChannels->baroPressure = Sensor::get(SensorType::BarometricPressure).value_or(0);
|
|
||||||
|
|
||||||
// 48
|
|
||||||
tsOutputChannels->fuelBase = engine->engineState.baseFuel * 1000; // Convert grams to mg
|
|
||||||
// 64
|
|
||||||
tsOutputChannels->actualLastInjection = ENGINE(actualLastInjection)[0];
|
|
||||||
|
|
||||||
|
|
||||||
// 104
|
// 104
|
||||||
tsOutputChannels->rpmAcceleration = engine->rpmCalculator.getRpmAcceleration();
|
tsOutputChannels->rpmAcceleration = engine->rpmCalculator.getRpmAcceleration();
|
||||||
|
@ -557,70 +692,24 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
|
|
||||||
tsOutputChannels->orderingErrorCounter = engine->triggerCentral.triggerState.orderingErrorCounter;
|
tsOutputChannels->orderingErrorCounter = engine->triggerCentral.triggerState.orderingErrorCounter;
|
||||||
// 68
|
// 68
|
||||||
tsOutputChannels->baroCorrection = engine->engineState.baroCorrection;
|
|
||||||
// 140
|
// 140
|
||||||
#if EFI_ENGINE_CONTROL
|
#if EFI_ENGINE_CONTROL
|
||||||
tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
tsOutputChannels->injectorDutyCycle = getInjectorDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tsOutputChannels->fuelTankLevel = Sensor::get(SensorType::FuelLevel).value_or(0);
|
|
||||||
// 160
|
|
||||||
const auto& wallFuel = ENGINE(injectionEvents.elements[0].wallFuel);
|
|
||||||
tsOutputChannels->wallFuelAmount = wallFuel.getWallFuel();
|
|
||||||
|
|
||||||
tsOutputChannels->wallFuelCorrection = wallFuel.wallFuelCorrection;
|
|
||||||
|
|
||||||
|
|
||||||
tsOutputChannels->iatCorrection = ENGINE(engineState.running.intakeTemperatureCoefficient);
|
|
||||||
|
|
||||||
tsOutputChannels->cltCorrection = ENGINE(engineState.running.coolantTemperatureCoefficient);
|
|
||||||
// 188
|
|
||||||
tsOutputChannels->fuelRunning = ENGINE(engineState.running.fuel);
|
|
||||||
// 196
|
|
||||||
tsOutputChannels->injectorLagMs = ENGINE(engineState.running.injectorLag);
|
|
||||||
// 224
|
// 224
|
||||||
efitimesec_t timeSeconds = getTimeNowSeconds();
|
efitimesec_t timeSeconds = getTimeNowSeconds();
|
||||||
tsOutputChannels->timeSeconds = timeSeconds;
|
tsOutputChannels->timeSeconds = timeSeconds;
|
||||||
|
|
||||||
#if EFI_SHAFT_POSITION_INPUT
|
|
||||||
// 248
|
|
||||||
tsOutputChannels->vvtPositionB1I = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/0);
|
|
||||||
tsOutputChannels->vvtPositionB1E = engine->triggerCentral.getVVTPosition(/*bankIndex*/0, /*camIndex*/1);
|
|
||||||
tsOutputChannels->vvtPositionB2I = engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/0);
|
|
||||||
tsOutputChannels->vvtPositionB2E = engine->triggerCentral.getVVTPosition(/*bankIndex*/1, /*camIndex*/1);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// 252
|
// 252
|
||||||
tsOutputChannels->engineMode = packEngineMode(PASS_ENGINE_PARAMETER_SIGNATURE);
|
tsOutputChannels->engineMode = packEngineMode(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
// 120
|
// 120
|
||||||
tsOutputChannels->firmwareVersion = getRusEfiVersion();
|
tsOutputChannels->firmwareVersion = getRusEfiVersion();
|
||||||
// 268
|
|
||||||
tsOutputChannels->fuelTrim[0] = 100.0f * (ENGINE(stftCorrection)[0] - 1.0f);
|
|
||||||
tsOutputChannels->fuelTrim[1] = 100.0f * (ENGINE(stftCorrection)[1] - 1.0f);
|
|
||||||
|
|
||||||
// 276
|
// 276
|
||||||
tsOutputChannels->accelerationX = engine->sensors.accelerometer.x;
|
tsOutputChannels->accelerationX = engine->sensors.accelerometer.x;
|
||||||
// 278
|
// 278
|
||||||
tsOutputChannels->accelerationY = engine->sensors.accelerometer.y;
|
tsOutputChannels->accelerationY = engine->sensors.accelerometer.y;
|
||||||
// 280
|
|
||||||
tsOutputChannels->oilPressure = Sensor::get(SensorType::OilPressure).Value;
|
|
||||||
|
|
||||||
// Low pressure is directly in kpa
|
|
||||||
tsOutputChannels->lowFuelPressure = Sensor::get(SensorType::FuelPressureLow).Value;
|
|
||||||
// High pressure is in bar, aka 100 kpa
|
|
||||||
tsOutputChannels->highFuelPressure = KPA2BAR(Sensor::get(SensorType::FuelPressureHigh).Value);
|
|
||||||
|
|
||||||
tsOutputChannels->flexPercent = Sensor::get(SensorType::FuelEthanolPercent).Value;
|
|
||||||
|
|
||||||
// 288
|
|
||||||
tsOutputChannels->injectionOffset = engine->engineState.injectionOffset;
|
|
||||||
|
|
||||||
// offset 112
|
|
||||||
tsOutputChannels->veValue = engine->engineState.currentVe;
|
|
||||||
tsOutputChannels->currentTargetAfr = ENGINE(engineState.targetAFR);
|
|
||||||
tsOutputChannels->targetLambda = ENGINE(engineState.targetLambda);
|
|
||||||
|
|
||||||
tsOutputChannels->manifoldAirPressure = Sensor::get(SensorType::Map).value_or(0);
|
|
||||||
|
|
||||||
#if EFI_DYNO_VIEW
|
#if EFI_DYNO_VIEW
|
||||||
tsOutputChannels->VssAcceleration = getDynoviewAcceleration(PASS_ENGINE_PARAMETER_SIGNATURE);
|
tsOutputChannels->VssAcceleration = getDynoviewAcceleration(PASS_ENGINE_PARAMETER_SIGNATURE);
|
||||||
|
@ -637,10 +726,6 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
tsOutputChannels->isKnockChipOk = (instance.invalidResponsesCount == 0);
|
tsOutputChannels->isKnockChipOk = (instance.invalidResponsesCount == 0);
|
||||||
#endif /* EFI_HIP_9011 */
|
#endif /* EFI_HIP_9011 */
|
||||||
|
|
||||||
#if EFI_LAUNCH_CONTROL
|
|
||||||
tsOutputChannels->launchTriggered = engine->isLaunchCondition;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
tsOutputChannels->tpsAccelFuel = engine->engineState.tpsAccelEnrich;
|
tsOutputChannels->tpsAccelFuel = engine->engineState.tpsAccelEnrich;
|
||||||
// engine load acceleration
|
// engine load acceleration
|
||||||
if (hasMapSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) {
|
if (hasMapSensor(PASS_ENGINE_PARAMETER_SIGNATURE)) {
|
||||||
|
@ -650,10 +735,6 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
|
|
||||||
tsOutputChannels->checkEngine = hasErrorCodes();
|
tsOutputChannels->checkEngine = hasErrorCodes();
|
||||||
|
|
||||||
#if HAL_USE_ADC
|
|
||||||
tsOutputChannels->internalMcuTemperature = getMCUInternalTemperature();
|
|
||||||
#endif /* HAL_USE_ADC */
|
|
||||||
|
|
||||||
#if EFI_MAX_31855
|
#if EFI_MAX_31855
|
||||||
for (int i = 0; i < EGT_CHANNEL_COUNT; i++)
|
for (int i = 0; i < EGT_CHANNEL_COUNT; i++)
|
||||||
tsOutputChannels->egtValues.values[i] = getEgtValue(i);
|
tsOutputChannels->egtValues.values[i] = getEgtValue(i);
|
||||||
|
@ -663,61 +744,12 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels DECLARE_
|
||||||
tsOutputChannels->idlePosition = getIdlePosition();
|
tsOutputChannels->idlePosition = getIdlePosition();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tsOutputChannels->idlePositionSensor = Sensor::get(SensorType::IdlePosition).value_or(0);
|
|
||||||
tsOutputChannels->rawIdlePositionSensor = Sensor::getRaw(SensorType::IdlePosition);
|
|
||||||
|
|
||||||
tsOutputChannels->wastegatePosition = Sensor::get(SensorType::WastegatePosition).value_or(0);
|
|
||||||
tsOutputChannels->rawWastegatePositionSensor = Sensor::getRaw(SensorType::WastegatePosition);
|
|
||||||
|
|
||||||
#if EFI_PROD_CODE
|
|
||||||
tsOutputChannels->isTriggerError = isTriggerErrorNow();
|
|
||||||
|
|
||||||
#if EFI_INTERNAL_FLASH
|
|
||||||
tsOutputChannels->needBurn = getNeedToWriteConfiguration();
|
|
||||||
#endif /* EFI_INTERNAL_FLASH */
|
|
||||||
|
|
||||||
tsOutputChannels->isFuelPumpOn = enginePins.fuelPumpRelay.getLogicValue();
|
|
||||||
tsOutputChannels->isFanOn = enginePins.fanRelay.getLogicValue();
|
|
||||||
tsOutputChannels->isFan2On = enginePins.fanRelay2.getLogicValue();
|
|
||||||
tsOutputChannels->isO2HeaterOn = enginePins.o2heater.getLogicValue();
|
|
||||||
tsOutputChannels->isIgnitionEnabledIndicator = ENGINE(limpManager).allowIgnition();
|
|
||||||
tsOutputChannels->isInjectionEnabledIndicator = ENGINE(limpManager).allowInjection();
|
|
||||||
tsOutputChannels->isCylinderCleanupActivated = engine->isCylinderCleanupMode;
|
|
||||||
|
|
||||||
#if EFI_VEHICLE_SPEED
|
|
||||||
float vehicleSpeed = Sensor::get(SensorType::VehicleSpeed).value_or(0);
|
|
||||||
tsOutputChannels->vehicleSpeedKph = vehicleSpeed;
|
|
||||||
tsOutputChannels->speedToRpmRatio = vehicleSpeed / rpm;
|
|
||||||
|
|
||||||
#endif /* EFI_VEHICLE_SPEED */
|
|
||||||
#endif /* EFI_PROD_CODE */
|
|
||||||
|
|
||||||
tsOutputChannels->fuelFlowRate = engine->engineState.fuelConsumption.getConsumptionGramPerSecond();
|
|
||||||
tsOutputChannels->totalFuelConsumption = engine->engineState.fuelConsumption.getConsumedGrams();
|
|
||||||
|
|
||||||
tsOutputChannels->warningCounter = engine->engineState.warnings.warningCounter;
|
tsOutputChannels->warningCounter = engine->engineState.warnings.warningCounter;
|
||||||
tsOutputChannels->lastErrorCode = engine->engineState.warnings.lastErrorCode;
|
tsOutputChannels->lastErrorCode = engine->engineState.warnings.lastErrorCode;
|
||||||
for (int i = 0; i < 8;i++) {
|
for (int i = 0; i < 8;i++) {
|
||||||
tsOutputChannels->recentErrorCodes[i] = engine->engineState.warnings.recentWarnings.get(i);
|
tsOutputChannels->recentErrorCodes[i] = engine->engineState.warnings.recentWarnings.get(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
tsOutputChannels->clutchUpState = engine->clutchUpState;
|
|
||||||
tsOutputChannels->clutchDownState = engine->clutchDownState;
|
|
||||||
tsOutputChannels->brakePedalState = engine->brakePedalState;
|
|
||||||
|
|
||||||
#if EFI_ENGINE_CONTROL
|
|
||||||
// tCharge depends on the previous state, so we should use the stored value.
|
|
||||||
tsOutputChannels->tCharge = ENGINE(engineState.sd.tCharge);
|
|
||||||
float timing = engine->engineState.timingAdvance;
|
|
||||||
tsOutputChannels->ignitionAdvance = timing > 360 ? timing - 720 : timing;
|
|
||||||
// 60
|
|
||||||
tsOutputChannels->sparkDwell = ENGINE(engineState.sparkDwell);
|
|
||||||
tsOutputChannels->crankingFuelMass = ENGINE(engineState.cranking.fuel);
|
|
||||||
tsOutputChannels->chargeAirMass = engine->engineState.sd.airMassInOneCylinder;
|
|
||||||
|
|
||||||
tsOutputChannels->coilDutyCycle = getCoilDutyCycle(rpm PASS_ENGINE_PARAMETER_SUFFIX);
|
|
||||||
#endif // EFI_ENGINE_CONTROL
|
|
||||||
|
|
||||||
switch (engineConfiguration->debugMode) {
|
switch (engineConfiguration->debugMode) {
|
||||||
case DBG_START_STOP:
|
case DBG_START_STOP:
|
||||||
tsOutputChannels->debugIntField1 = engine->startStopStateToggleCounter;
|
tsOutputChannels->debugIntField1 = engine->startStopStateToggleCounter;
|
||||||
|
|
Loading…
Reference in New Issue