From 412d80435076c7d160bfdbb32e92d8efea1a83c1 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 27 Nov 2021 12:28:59 -0500 Subject: [PATCH] automation around outputs section #197 --- firmware/console/binary/output_channels.txt | 62 ++++++++--------- .../console/binary/ts_outputs_generated.h | 39 +++++++++-- .../console/binary_log/binary_logging.cpp | 4 +- firmware/console/status_loop.cpp | 4 +- firmware/tunerstudio/rusefi.input | 67 ++++++++----------- 5 files changed, 99 insertions(+), 77 deletions(-) diff --git a/firmware/console/binary/output_channels.txt b/firmware/console/binary/output_channels.txt index ebae805716..269a1c56ed 100644 --- a/firmware/console/binary/output_channels.txt +++ b/firmware/console/binary/output_channels.txt @@ -62,57 +62,57 @@ uint16_t rpmAcceleration;;"RPM/s",1, 0, 0, 0, 0 uint8_t autoscale knockRetard;;"",{1/10}, 0, 0, 0, 0 uint8_t unused37;;"",1, 0, 0, 0, 0 - uint16_t autoscale VBatt;;"",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 0, 0 + uint16_t autoscale VBatt;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 0, 0 - uint16_t autoscale oilPressure;;"",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 + uint16_t autoscale oilPressure;;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 uint16_t autoscale vvtPositionB1I;;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 - uint16_t autoscale chargeAirMass;;"",{1/1000}, 0, 0, 0, 0 - uint16_t autoscale crankingFuelMass;airmass in mg, 0-65 grams;"",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 + uint16_t autoscale chargeAirMass;;"g",{1/1000}, 0, 0, 0, 0 + uint16_t autoscale crankingFuelMass;airmass in mg, 0-65 grams;"ms",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 - uint16_t autoscale currentTargetAfr;;"",{1/@@PACK_MULT_AFR@@}, 0, 0, 0, 0 - uint16_t autoscale fuelBase;This is the raw value we take from the fuel map or base fuel algorithm, before the corrections;"",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 + uint16_t autoscale currentTargetAfr;;"ratio",{1/@@PACK_MULT_AFR@@}, 0, 0, 0, 0 + uint16_t autoscale fuelBase;This is the raw value we take from the fuel map or base fuel algorithm, before the corrections;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 - uint16_t autoscale fuelRunning;Total fuel with CLT IAT and TPS acceleration without injector lag corrections per cycle, as pulse per cycle;"",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 - uint16_t autoscale actualLastInjection;Actual last injection time - including all compensation and injection mode;"",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 + uint16_t autoscale fuelRunning;Total fuel with CLT IAT and TPS acceleration without injector lag corrections per cycle, as pulse per cycle;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 + uint16_t autoscale actualLastInjection;Actual last injection time - including all compensation and injection mode;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 - uint8_t autoscale injectorDutyCycle;;"",{1/2}, 0, 0, 0, 0 - uint8_t autoscale veValue;;"",{1/2}, 0, 0, 0, 0 - uint16_t autoscale injectionOffset;;"",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 + uint8_t autoscale injectorDutyCycle;;"%",{1/2}, 0, 0, 0, 0 + uint8_t autoscale veValue;;"ratio",{1/2}, 0, 0, 0, 0 + uint16_t autoscale injectionOffset;;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 - uint16_t autoscale tCharge;;"",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 0 + uint16_t autoscale tCharge;;"deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 0 ! Corrections - uint16_t autoscale injectorLagMs;;"",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 - uint16_t autoscale iatCorrection;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale cltCorrection;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale baroCorrection;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale currentEnginePhase;;"",1, 0, 0, 0, 0 + uint16_t autoscale injectorLagMs;;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 + uint16_t autoscale iatCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale cltCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale baroCorrection;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale currentEnginePhase;;"deg",1, 0, 0, 0, 0 ! Wall model AE - uint16_t autoscale wallFuelAmount;;"",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 - uint16_t autoscale wallFuelCorrection;;"",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 + uint16_t autoscale wallFuelAmount;;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 + uint16_t autoscale wallFuelCorrection;;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 0 uint16_t unused76;;"",1, 0, 0, 0, 0 - uint16_t autoscale deltaTps;TPS acceleration enrichment;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale deltaTps;TPS acceleration enrichment;"ratio",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 uint16_t unused80;;"",1, 0, 0, 0, 0 - uint16_t autoscale tpsAccelFuel;;"",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 + uint16_t autoscale tpsAccelFuel;;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 ! Ignition - uint16_t autoscale ignitionAdvance;;"",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 - uint16_t autoscale sparkDwell;;"",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 + uint16_t autoscale ignitionAdvance;;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 0 + uint16_t autoscale sparkDwellValue;;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 0 - uint16_t autoscale coilDutyCycle;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale coilDutyCycle;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 ! Idle & ETB - uint16_t autoscale idlePosition;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale etbTarget;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale etb1DutyCycle;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale etb1Error;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale idleAirValvePosition;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale etbTarget;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale etb1DutyCycle;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale etb1Error;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 ! Fuel system - uint16_t autoscale fuelTankLevel;;"",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 + uint16_t autoscale fuelTankLevel;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 - uint16_t autoscale totalFuelConsumption;;"",1, 0, 0, 0, 0 - uint16_t autoscale fuelFlowRate;;"",{1/@@PACK_MULT_FUEL_FLOW@@}, 0, 0, 0, 0 + uint16_t autoscale totalFuelConsumption;;"grams",1, 0, 0, 0, 0 + uint16_t autoscale fuelFlowRate;;"gram/s",{1/@@PACK_MULT_FUEL_FLOW@@}, 0, 0, 0, 0 ! Y axis values for selectable tables uint16_t autoscale veTableYAxis;;"",{1/100}, 0, 0, 0, 0 diff --git a/firmware/console/binary/ts_outputs_generated.h b/firmware/console/binary/ts_outputs_generated.h index 016b036be7..a0cea41f44 100644 --- a/firmware/console/binary/ts_outputs_generated.h +++ b/firmware/console/binary/ts_outputs_generated.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) console/binary/output_channels.txt Sat Nov 27 05:37:21 PST 2021 +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) console/binary/output_channels.txt Sat Nov 27 11:56:34 EST 2021 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -194,10 +194,12 @@ struct ts_outputs_s { */ uint8_t unused37 = (uint8_t)0; /** + V * offset 38 */ scaled_channel VBatt = (uint16_t)0; /** + kPa * offset 40 */ scaled_channel oilPressure = (uint16_t)0; @@ -207,74 +209,91 @@ struct ts_outputs_s { */ scaled_channel vvtPositionB1I = (uint16_t)0; /** + g * offset 44 */ scaled_channel chargeAirMass = (uint16_t)0; /** * airmass in mg, 0-65 grams + ms * offset 46 */ scaled_channel crankingFuelMass = (uint16_t)0; /** + ratio * offset 48 */ scaled_channel currentTargetAfr = (uint16_t)0; /** * This is the raw value we take from the fuel map or base fuel algorithm, before the corrections + mg * offset 50 */ scaled_channel fuelBase = (uint16_t)0; /** * Total fuel with CLT IAT and TPS acceleration without injector lag corrections per cycle, as pulse per cycle + mg * offset 52 */ scaled_channel fuelRunning = (uint16_t)0; /** * Actual last injection time - including all compensation and injection mode + ms * offset 54 */ scaled_channel actualLastInjection = (uint16_t)0; /** + % * offset 56 */ scaled_channel injectorDutyCycle = (uint8_t)0; /** + ratio * offset 57 */ scaled_channel veValue = (uint8_t)0; /** + deg * offset 58 */ scaled_channel injectionOffset = (uint16_t)0; /** + deg C * offset 60 */ scaled_channel tCharge = (uint16_t)0; /** + ms * offset 62 */ scaled_channel injectorLagMs = (uint16_t)0; /** + % * offset 64 */ scaled_channel iatCorrection = (uint16_t)0; /** + % * offset 66 */ scaled_channel cltCorrection = (uint16_t)0; /** + % * offset 68 */ scaled_channel baroCorrection = (uint16_t)0; /** + deg * offset 70 */ scaled_channel currentEnginePhase = (uint16_t)0; /** + mg * offset 72 */ scaled_channel wallFuelAmount = (uint16_t)0; /** + mg * offset 74 */ scaled_channel wallFuelCorrection = (uint16_t)0; @@ -284,6 +303,7 @@ struct ts_outputs_s { uint16_t unused76 = (uint16_t)0; /** * TPS acceleration enrichment + ratio * offset 78 */ scaled_channel deltaTps = (uint16_t)0; @@ -292,46 +312,57 @@ struct ts_outputs_s { */ uint16_t unused80 = (uint16_t)0; /** + ms * offset 82 */ scaled_channel tpsAccelFuel = (uint16_t)0; /** + deg * offset 84 */ scaled_channel ignitionAdvance = (uint16_t)0; /** + ms * offset 86 */ - scaled_channel sparkDwell = (uint16_t)0; + scaled_channel sparkDwellValue = (uint16_t)0; /** + % * offset 88 */ scaled_channel coilDutyCycle = (uint16_t)0; /** + % * offset 90 */ - scaled_channel idlePosition = (uint16_t)0; + scaled_channel idleAirValvePosition = (uint16_t)0; /** + % * offset 92 */ scaled_channel etbTarget = (uint16_t)0; /** + % * offset 94 */ scaled_channel etb1DutyCycle = (uint16_t)0; /** + % * offset 96 */ scaled_channel etb1Error = (uint16_t)0; /** + % * offset 98 */ scaled_channel fuelTankLevel = (uint16_t)0; /** + grams * offset 100 */ scaled_channel totalFuelConsumption = (uint16_t)0; /** + gram/s * offset 102 */ scaled_channel fuelFlowRate = (uint16_t)0; @@ -640,4 +671,4 @@ struct ts_outputs_s { }; // end -// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) console/binary/output_channels.txt Sat Nov 27 05:37:21 PST 2021 +// this section was generated automatically by rusEFI tool ConfigDefinition.jar based on (unknown script) console/binary/output_channels.txt Sat Nov 27 11:56:34 EST 2021 diff --git a/firmware/console/binary_log/binary_logging.cpp b/firmware/console/binary_log/binary_logging.cpp index 7042e49d21..f1e45a307f 100644 --- a/firmware/console/binary_log/binary_logging.cpp +++ b/firmware/console/binary_log/binary_logging.cpp @@ -88,9 +88,9 @@ static constexpr LogField fields[] = { {tsOutputChannels.wallFuelCorrection, GAUGE_NAME_FUEL_WALL_CORRECTION, "ms", 3}, {tsOutputChannels.tpsAccelFuel, GAUGE_NAME_FUEL_TPS_EXTRA, "ms", 3}, {tsOutputChannels.ignitionAdvance, GAUGE_NAME_TIMING_ADVANCE, "deg", 1}, - {tsOutputChannels.sparkDwell, GAUGE_COIL_DWELL_TIME, "ms", 1}, + {tsOutputChannels.sparkDwellValue, GAUGE_COIL_DWELL_TIME, "ms", 1}, {tsOutputChannels.coilDutyCycle, GAUGE_NAME_DWELL_DUTY, "%", 0}, - {tsOutputChannels.idlePosition, GAUGE_NAME_IAC, "%", 1}, + {tsOutputChannels.idleAirValvePosition, GAUGE_NAME_IAC, "%", 1}, {tsOutputChannels.etbTarget, GAUGE_NAME_ETB_TARGET, "%", 2}, {tsOutputChannels.etb1DutyCycle, GAUGE_NAME_ETB_DUTY, "%", 1}, {tsOutputChannels.etb1Error, GAUGE_NAME_ETB_ERROR, "%", 3}, diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index c1a605d595..29654356cf 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -628,7 +628,7 @@ static void updateIgnition(int rpm) { // that's weird logic. also seems broken for two stroke? tsOutputChannels.ignitionAdvance = timing > FOUR_STROKE_CYCLE_DURATION / 2 ? timing - FOUR_STROKE_CYCLE_DURATION : timing; // 60 - tsOutputChannels.sparkDwell = engine->engineState.sparkDwell; + tsOutputChannels.sparkDwellValue = engine->engineState.sparkDwell; tsOutputChannels.coilDutyCycle = getCoilDutyCycle(rpm); @@ -761,7 +761,7 @@ void updateTunerStudioState(TunerStudioOutputChannels *tsOutputChannels) { #endif /* EFI_MAX_31855 */ #if EFI_IDLE_CONTROL - tsOutputChannels->idlePosition = getIdlePosition(); + tsOutputChannels->idleAirValvePosition = getIdlePosition(); #endif tsOutputChannels->warningCounter = engine->engineState.warnings.warningCounter; diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 80eab656ac..c4c6b022ef 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -235,42 +235,31 @@ baroPressure = scalar, U16, 32, "kPa", 0.03333333333333333, 0 lambdaValue = scalar, U16, 34, "", 1.0E-4, 0 knockRetard = scalar, U08, 36, "", 0.1, 0 unused37 = scalar, U08, 37, "", 1, 0 - VBatt = scalar, U16, 38, "V",{1/@@PACK_MULT_VOLTAGE@@}, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/@@PACK_MULT_PRESSURE@@}, 0.0 - vvtPositionB1I = scalar, S16, 42, "deg",{1/@@PACK_MULT_ANGLE@@}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",{1/@@PACK_MULT_AFR@@}, 0 - baseFuel = scalar, U16, 50, "mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0 - fuelRunning = scalar, U16, 52, "mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/@@PACK_MULT_MS@@}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/@@PACK_MULT_ANGLE@@}, 0 - tCharge = scalar, U16, 60, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/@@PACK_MULT_MS@@}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/@@PACK_MULT_PERCENT@@}, 0 - cltCorrection = scalar, S16, 66, "%",{1/@@PACK_MULT_PERCENT@@}, 0 - baroCorrection = scalar, S16, 68, "%",{1/@@PACK_MULT_PERCENT@@}, 0 - fuelPidCorrection=scalar, S16, 296, "%",{1/@@PACK_MULT_PERCENT@@}, 0 - fuelPidCorrection2=scalar, S16, 298, "%",{1/@@PACK_MULT_PERCENT@@}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0 - wallFuelCorrection=scalar, S16, 74, "mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0 - -; TPS/load AE - unusedLoadDelta = scalar, S16, 76, "value",{1/@@PACK_MULT_PERCENT@@}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/@@PACK_MULT_PERCENT@@}, 0 - unusedLoadAccelExtra=scalar,S16, 80, "value",{1/@@PACK_MULT_PERCENT@@}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/@@PACK_MULT_MS@@}, 0 +VBatt = scalar, U16, 38, "V", 0.001, 0 +oilPressure = scalar, U16, 40, "kPa", 0.03333333333333333, 0 +vvtPositionB1I = scalar, U16, 42, "deg", 0.02, 0 +chargeAirMass = scalar, U16, 44, "g", 0.001, 0 +crankingFuelMass = scalar, U16, 46, "ms", 0.01, 0 +currentTargetAfr = scalar, U16, 48, "ratio", 0.001, 0 +fuelBase = scalar, U16, 50, "mg", 0.01, 0 +fuelRunning = scalar, U16, 52, "mg", 0.01, 0 +actualLastInjection = scalar, U16, 54, "ms", 0.0033333333333333335, 0 +injectorDutyCycle = scalar, U08, 56, "%", 0.5, 0 +veValue = scalar, U08, 57, "ratio", 0.5, 0 +injectionOffset = scalar, U16, 58, "deg", 0.02, 0 +tCharge = scalar, U16, 60, "deg C", 0.01, 0 +injectorLagMs = scalar, U16, 62, "ms", 0.0033333333333333335, 0 +iatCorrection = scalar, U16, 64, "%", 0.01, 0 +cltCorrection = scalar, U16, 66, "%", 0.01, 0 +baroCorrection = scalar, U16, 68, "%", 0.01, 0 +currentEnginePhase = scalar, U16, 70, "deg", 1, 0 +currentEnginePhase = scalar, U16, 70, "deg", 1, 0 +wallFuelAmount = scalar, U16, 72, "mg", 0.01, 0 +wallFuelCorrection = scalar, U16, 74, "mg", 0.01, 0 +unused76 = scalar, U16, 76, "", 1, 0 +deltaTps = scalar, U16, 78, "ratio", 0.01, 0 +unused80 = scalar, U16, 80, "", 1, 0 +tpsAccelFuel = scalar, U16, 82, "ms", 0.0033333333333333335, 0 ; Ignition ignitionAdvance = scalar, S16, 84, "deg",{1/@@PACK_MULT_ANGLE@@}, 0.0 @@ -407,6 +396,9 @@ unused37 = scalar, U08, 37, "", 1, 0 vvtPositionB2I=scalar,S16, 292, "deg",{1/@@PACK_MULT_ANGLE@@}, 0 vvtPositionB2E=scalar,S16, 294, "deg",{1/@@PACK_MULT_ANGLE@@}, 0 + fuelPidCorrection=scalar, S16, 296, "%",{1/@@PACK_MULT_PERCENT@@}, 0 + fuelPidCorrection2=scalar, S16, 298, "%",{1/@@PACK_MULT_PERCENT@@}, 0 + vvtTargetB1I = scalar, S08, 314, "deg", 1, 0 vvtTargetB1E = scalar, S08, 315, "deg", 1, 0 vvtTargetB2I = scalar, S08, 316, "deg", 1, 0 @@ -418,7 +410,6 @@ unused37 = scalar, U08, 37, "", 1, 0 rawTps2Primary = scalar, U16, 302, "V",{1/@@PACK_MULT_VOLTAGE@@}, 0.0 rawTps2Secondary = scalar, U16, 304, "V",{1/@@PACK_MULT_VOLTAGE@@}, 0.0 - currentEnginePhase = scalar, U16, 70, "deg", 1, 0 ; ; see TunerStudioOutputChannels struct ; @@ -3764,7 +3755,7 @@ cmd_set_engine_type_default = "@@TS_IO_TEST_COMMAND_char@@\x00\x31\x00\x00" field = "Trailing Pin 4", trailingCoilPins4 dialog = parkingLot, "Experimental/Broken" - field = "mapCamDetectionAnglePosition", mapCapDetectionAnglePosition + field = "mapCamDetectionAnglePosition", mapCamDetectionAnglePosition field = "mapCamDetectionThreshold", mapCamDetectionThreshold field = "#System hacks" field = "Global fuel correction", globalFuelCorrection