! units,scale,offset,min,max,digits ! ! this https://en.wikipedia.org/wiki/God_object is DEPRECATED ! the dream is to move many or most of the state out into smaller structures/classes like electronic_throttle.txt ! See also LiveData.yaml ! struct_no_prefix output_channels_s bit sd_present;SD: Present bit sd_logging_internal;SD: Logging bit triggerScopeReady bit antilagTriggered bit isFanOn;Radiator Fan bit isO2HeaterOn; bit checkEngine; bit needBurn; bit sd_msd;SD: MSD bit isFan2On;Radiator Fan 2 bit acrActive;Harley ACR: Active bit toothLogReady;Tooth Logger Ready bit isTpsError;Error: TPS bit isCltError;Error: CLT bit isMapError;Error: MAP bit isIatError;Error: IAT bit isTriggerError;Error: Trigger bit hasCriticalError;Error: Active bit isWarnNow;Warning: Active bit isPedalError;Error: Pedal bit launchTriggered;Launch Control Triggered bit isTps2Error;Error: TPS2 bit injectorFault;Injector Fault bit ignitionFault;Ignition Fault uint16_t RPMValue;@@GAUGE_NAME_RPM@@;"RPM",1, 0, 0, 8000, 0 uint16_t rpmAcceleration;dRPM;"RPM acceleration",1, 0, 0, 5, 2 uint16_t autoscale speedToRpmRatio;@@GAUGE_NAME_GEAR_RATIO@@;"value",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 uint8_t vehicleSpeedKph;@@GAUGE_NAME_VVS@@;"kph",1, 0, 0, 0, 1 int8_t internalMcuTemperature;@@GAUGE_NAME_ECU_TEMPERATURE@@;"deg C",1, 0, 0, 0, 0 int16_t autoscale coolant;@@GAUGE_NAME_CLT@@;"deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 1 int16_t autoscale intake;@@GAUGE_NAME_IAT@@;"deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 1 int16_t autoscale auxTemp1;;"deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 1 int16_t autoscale auxTemp2;;"deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0, 0, 0, 1 int16_t autoscale TPSValue;@@GAUGE_NAME_TPS@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale throttlePedalPosition;@@GAUGE_NAME_THROTTLE_PEDAL@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 uint16_t tpsADC;;"ADC", 1, 0, 0, 0, 0 uint16_t autoscale rawMaf;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint16_t autoscale mafMeasured;@@GAUGE_NAME_AIR_FLOW_MEASURED@@;"kg/h",{1/@@PACK_MULT_MASS_FLOW@@}, 0, 0, 0, 1 uint16_t autoscale MAPValue;@@GAUGE_NAME_MAP@@;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 1 uint16_t autoscale baroPressure;;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 1 uint16_t autoscale lambdaValue;@@GAUGE_NAME_LAMBDA@@;"",{1/@@PACK_MULT_LAMBDA@@}, 0, 0, 0, 3 uint8_t autoscale knockRetard;@@GAUGE_NAME_KNOCK_RETARD@@;"deg",{1/10}, 0, 0, 0, 1 uint16_t autoscale VBatt;@@GAUGE_NAME_VBAT@@;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 0, 2 uint16_t autoscale oilPressure;@@GAUGE_NAME_OIL_PRESSURE@@;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 int16_t autoscale vvtPositionB1I;@@GAUGE_NAME_VVT_B1I@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 1 uint16_t autoscale actualLastInjection;@@GAUGE_NAME_FUEL_LAST_INJECTION@@\nActual last injection time - including all compensation and injection mode;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 3 uint8_t autoscale injectorDutyCycle;@@GAUGE_NAME_FUEL_INJ_DUTY@@;"%",{1/2}, 0, 0, 0, 0 uint8_t autoscale veValue;@@GAUGE_NAME_FUEL_VE@@;"ratio",{1/2}, 0, 0, 0, 1 int16_t injectionOffset;@@GAUGE_NAME_FUEL_INJECTION_TIMING@@;"deg", 1, 0, 0, 0, 0 ! Corrections ! todo: inline this further to injectorModel deadTime uint16_t autoscale injectorLagMs;@@GAUGE_NAME_INJECTOR_LAG@@;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 3 ! we want a hash of engineMake+engineCode+vehicleName in the log file in order to match TS logs to rusEFI Online tune uint16_t engineMakeCodeNameCrc16;@@GAUGE_NAME_ENGINE_CRC16@@;"crc16",1, 0, 0, 0, 0 ! Wall model AE uint16_t autoscale wallFuelAmount;@@GAUGE_NAME_FUEL_WALL_AMOUNT@@;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 3 int16_t autoscale wallFuelCorrectionValue;@@GAUGE_NAME_FUEL_WALL_CORRECTION@@;"mg",{1/@@PACK_MULT_FUEL_MASS@@}, 0, 0, 0, 3 uint16_t revolutionCounterSinceStart;;"",1, 0, 0, 0, 0 uint16_t canReadCounter;CAN: Rx;"",1, 0, 0, 0, 0 int16_t autoscale tpsAccelFuel;@@GAUGE_NAME_FUEL_TPS_EXTRA@@;"ms",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 3 ! Ignition int16_t autoscale ignitionAdvance;@@GAUGE_NAME_TIMING_ADVANCE@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 1 uint8_t currentIgnitionMode;@@GAUGE_NAME_IGNITION_MODE@@ uint8_t currentInjectionMode;@@GAUGE_NAME_INJECTION_MODE@@ uint16_t autoscale coilDutyCycle;@@GAUGE_NAME_DWELL_DUTY@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 ! Idle & ETB int16_t autoscale etbTarget;ETB Target;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale etb1DutyCycle;@@GAUGE_NAME_ETB_DUTY@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 1 ! Fuel system int16_t autoscale fuelTankLevel;Fuel level;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 uint16_t totalFuelConsumption;@@GAUGE_NAME_FUEL_CONSUMPTION@@;"grams",1, 0, 0, 0, 1 uint16_t autoscale fuelFlowRate;@@GAUGE_NAME_FUEL_FLOW@@;"gram/s",{1/@@PACK_MULT_FUEL_FLOW@@}, 0, 0, 0, 3 int16_t autoscale TPS2Value;@@GAUGE_NAME_TPS2@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 uint16_t tuneCrc16;@@GAUGE_NAME_TUNE_CRC16@@;"crc16", 1, 0, 0, 0, 0 float knockLevel;@@GAUGE_NAME_KNOCK_LEVEL@@;"Volts", 1, 0, 0, 0, 2 ! integration magic: TS requires exact 'seconds' name uint32_t seconds;@@GAUGE_NAME_UPTIME@@;"sec", 1, 0, 0, 0, 0 uint32_t engineMode;Engine Mode;"em", 1, 0, 0, 0, 0 uint32_t firmwareVersion;@@GAUGE_NAME_VERSION@@;"version_f", 1, 0, 0, 0, 0 int16_t autoscale rawWastegatePosition;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 ! todo: reimplement { LIS302DLCsPin != 0 || imuType != 0 } int16_t autoscale accelerationX;@@GAUGE_NAME_ACCEL_X@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale accelerationY;@@GAUGE_NAME_ACCEL_Y@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 uint8_t detectedGear;@@GAUGE_NAME_DETECTED_GEAR@@;"", 1, 0, 0, @@GEARS_COUNT@@, 0 uint8_t maxTriggerReentrant;;"", 1, 0, 0, 100, 0 int16_t autoscale rawLowFuelPressure;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawHighFuelPressure;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale lowFuelPressure;@@GAUGE_NAME_FUEL_PRESSURE_LOW@@;"kpa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 0, 0 int16_t autoscale highFuelPressure;@@GAUGE_NAME_FUEL_PRESSURE_HIGH@@;"bar",{1/@@PACK_MULT_HIGH_PRESSURE@@}, 0, 0, 0, 0 int16_t autoscale rawPpsSecondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int8_t tcuDesiredGear;@@GAUGE_NAME_DESIRED_GEAR@@;"gear",1, 0, -1, 10, 0 uint8_t autoscale flexPercent;@@GAUGE_NAME_FLEX@@;"%",{1/2}, 0, 0, 0, 1 int16_t autoscale wastegatePositionSensor;@@GAUGE_NAME_WG_POSITION@@;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 ! todo: this not needed in light of TS_SIGNATURE but rusEFI console still uses it. Need to migrate ! rusEFI console from TS_FILE_VERSION to TS_SIGNATURE :( uint32_t tsConfigVersion;;"", 1, 0, 0, 0, 0 ! These two fields indicate to TS that we'd like to set a particular field to a particular value ! We use a maintainConstantValue in TS for each field we'd like to set, like this: ! maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } ! maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } ! When the mode is set to a particular value, TS will copy the calibrationValue in to the specified field. ! ! With this simple construct, the ECU can send any number of internally computed configuration fields ! back to TunerStudio, getting around the problem of setting values on the controller without TS's knowledge. ! The ECU simply has to sequentially set a mode/value, wait briefly, then repeat until all the values ! it wants to send have been sent. float calibrationValue;;"", 1, 0, 0, 0, 0 uint8_t calibrationMode;;"", 1, 0, 0, 0, 0 uint8_t idleTargetPosition;Idle: Stepper target position;"", 1, 0, 0, 0, 0 ! Errors uint32_t totalTriggerErrorCounter;@@GAUGE_NAME_TRG_ERR@@;"counter",1, 0, 0, 0, 0 uint32_t orderingErrorCounter;;"",1, 0, 0, 0, 0 uint16_t warningCounter;@@GAUGE_NAME_WARNING_COUNTER@@;"count",1, 0, 0, 0, 0 uint16_t lastErrorCode;@@GAUGE_NAME_WARNING_LAST@@;"error",1, 0, 0, 0, 0 uint16_t[8 iterate] recentErrorCode;;"error", 1, 0, 0, 0, 0 ! todo: re-implement enableLogDebugChannels float debugFloatField1;;"val", 1, 0, 0, 0, 3 float debugFloatField2;;"val", 1, 0, 0, 0, 3 float debugFloatField3;;"val", 1, 0, 0, 0, 3 float debugFloatField4;;"val", 1, 0, 0, 0, 3 float debugFloatField5;;"val", 1, 0, 0, 0, 3 float debugFloatField6;;"val", 1, 0, 0, 0, 3 float debugFloatField7;;"val", 1, 0, 0, 0, 3 uint32_t debugIntField1;;"val", 1, 0, 0, 0, 0 uint32_t debugIntField2;;"val", 1, 0, 0, 0, 0 uint32_t debugIntField3;;"val", 1, 0, 0, 0, 0 int16_t debugIntField4;;"val", 1, 0, 0, 0, 0 int16_t debugIntField5;;"val", 1, 0, 0, 0, 0 uint16_t[EGT_CHANNEL_COUNT iterate] egt;EGT;"deg C", 1, 0, 0, 0, 0 int16_t autoscale rawTps1Primary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawPpsPrimary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawClt;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawIat;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawOilPressure;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint8_t fuelClosedLoopBinIdx;;"", 1, 0, 0, 0, 0 int8_t tcuCurrentGear;@@GAUGE_NAME_CURRENT_GEAR@@;"gear", 1, 0, -1, 10, 0 int8_t[12 iterate] knock;Knock: Cyl;"dBv",1, 0, 0, 0, 0 uint16_t autoscale AFRValue;@@GAUGE_NAME_AFR@@;"AFR",{1/@@PACK_MULT_AFR@@}, 0, 0, 0, 2 uint16_t autoscale VssAcceleration;Vss Accel;"m/s2",{1/@@PACK_MULT_MS@@}, 0, 0, 0, 2 uint16_t autoscale lambdaValue2;@@GAUGE_NAME_LAMBDA2@@;"",{1/@@PACK_MULT_LAMBDA@@}, 0, 0, 0, 3 uint16_t autoscale AFRValue2;@@GAUGE_NAME_AFR2@@;"AFR",{1/@@PACK_MULT_AFR@@}, 0, 0, 0, 2 int16_t autoscale vvtPositionB1E;@@GAUGE_NAME_VVT_B1E@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 1 int16_t autoscale vvtPositionB2I;@@GAUGE_NAME_VVT_B2I@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 1 int16_t autoscale vvtPositionB2E;@@GAUGE_NAME_VVT_B2E@@;"deg",{1/@@PACK_MULT_ANGLE@@}, 0, 0, 0, 1 int16_t[2 iterate] autoscale fuelPidCorrection;Fuel: Trim bank;"%",{1/@@PACK_MULT_PERCENT@@}, 0, -20, 20, 2 int16_t autoscale rawTps1Secondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawTps2Primary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t autoscale rawTps2Secondary;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint16_t knockCount;@@GAUGE_NAME_KNOCK_COUNTER@@;"",1, 0, 0, 0, 0 int16_t autoscale accelerationZ;@@GAUGE_NAME_ACCEL_Z@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 int16_t autoscale accelerationRoll;@@GAUGE_NAME_ACCEL_ROLL@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 int16_t autoscale accelerationYaw;@@GAUGE_NAME_ACCEL_YAW@@;"G",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 int8_t[4 iterate] vvtTargets;;"deg",1, 0, 0, 0, 0 uint16_t turboSpeed;@@GAUGE_NAME_TURBO_SPEED@@;"hz",1, 0, 0, 0, 0 ! fun fact: we have a separate pid_state.txt file for a bit of a different structure huh? struct pid_status_s float pTerm;;"", 1, 0, -50000, 50000, 2 int16_t autoscale iTerm;;"", 0.01, 0, -327, 327, 2 int16_t autoscale dTerm;;"", 0.01, 0, -327, 327, 2 int16_t autoscale output;;"", 0.01, 0, -327, 327, 2 int16_t autoscale error;;"", 0.01, 0, -327, 327, 2 uint32_t resetCounter;;"", 1, 0, 0, 10000, 0 end_struct int16_t autoscale tps1Split;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale tps2Split;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale tps12Split;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int16_t autoscale accPedalSplit;;"%",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 2 int8_t sparkCutReason;Ign: Cut Code;"code",1, 0, 0, 0, 0 int8_t fuelCutReason;Fuel: Cut Code;"code",1, 0, 0, 0, 0 uint16_t autoscale mafEstimate;@@GAUGE_NAME_AIR_FLOW_ESTIMATE@@;"kg/h",{1/@@PACK_MULT_MASS_FLOW@@}, 0, 0, 0, 0 uint16_t instantRpm;;"rpm", 1, 0, 0, 0, 0 uint16_t autoscale rawMap;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint16_t autoscale rawAfr;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 float calibrationValue2;;"", 1, 0, 0, 0, 0 bit isMainRelayOn; bit isUsbConnected;isUsbConnected\nOriginal reason for this is to check if USB is connected from Lua uint32_t luaInvocationCounter;Lua: Tick counter;"count",1, 0, 0, 0, 0 uint32_t luaLastCycleDuration;Lua: Last tick duration;"nt",1, 0, 0, 0, 0 uint8_t testBenchIter;;"count",1, 0, 0, 0, 0 uint8_t tcu_currentRange;"TCU: Current Range";"", 1, 0, 0, 0, 0 uint16_t autoscale tcRatio;@@GAUGE_NAME_TC_RATIO@@;"value",{1/@@PACK_MULT_PERCENT@@}, 0, 0, 0, 0 float lastShiftTime uint32_t vssEdgeCounter uint32_t issEdgeCounter int16_t autoscale auxLinear1;@@GAUGE_NAME_AUX_LINEAR_1@@;"", 0.01, 0, 0, 0, 2 int16_t autoscale auxLinear2;@@GAUGE_NAME_AUX_LINEAR_2@@;"", 0.01, 0, 0, 0, 2 bit dfcoActive uint16_t autoscale fallbackMap;;"kPa", 0.1, 0, 0, 1000, 1 uint16_t autoscale instantMAPValue;Instant MAP;"kPa",{1/@@PACK_MULT_PRESSURE@@}, 0, 0, 655, 2 uint16_t maxLockedDuration;;"us", 1, 0, 0, 65535, 0 uint16_t canWriteOk;CAN: Tx OK;"", 1, 0, -10000, 10000, 3 uint16_t canWriteNotOk;CAN: Tx err;"", 1, 0, -10000, 10000, 3 uint32_t triggerPrimaryFall;;"", 1, 0, -10000, 10000, 3 uint32_t triggerPrimaryRise;;"", 1, 0, -10000, 10000, 3 uint32_t triggerSecondaryFall;;"", 1, 0, -10000, 10000, 3 uint32_t triggerSecondaryRise;;"", 1, 0, -10000, 10000, 3 uint32_t triggerVvtFall;;"", 1, 0, -10000, 10000, 3 uint32_t triggerVvtRise;;"", 1, 0, -10000, 10000, 3 uint8_t starterState;;"", 1, 0, -10000, 10000, 3 uint8_t starterRelayDisable;;"", 1, 0, -10000, 10000, 3 uint8_t multiSparkCounter;Ign: Multispark count;"", 1, 0, -10000, 10000, 3 uint8_t extiOverflowCount;;"", 1, 0, 0, 255, 0 pid_status_s alternatorStatus pid_status_s idleStatus pid_status_s etbStatus pid_status_s boostStatus pid_status_s wastegateDcStatus pid_status_s[CAM_INPUTS_COUNT iterate] vvtStatus uint16_t auxSpeed1;Aux speed 1;"s",1, 0, 0, 0, 0 uint16_t auxSpeed2;Aux speed 2;"s",1, 0, 0, 0, 0 uint16_t ISSValue;@@GAUGE_NAME_ISS@@;"RPM",1, 0, 0, 8000, 0 int16_t[LUA_ANALOG_INPUT_COUNT iterate] autoscale rawAnalogInput;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint8_t[4 iterate] autoscale gppwmOutput;GPPWM Output;"%", 0.5, 0, 0, 100, 2 int16_t[4 iterate] autoscale gppwmXAxis;;"", 1, 0, -30000, 30000, 0 int16_t[4 iterate] autoscale gppwmYAxis;;"", 0.1, 0, -1000, 1000, 1 int16_t autoscale rawBattery;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 int16_t[IGN_BLEND_COUNT iterate] autoscale ignBlendParameter;;"", 0.1, 0, -1000, 1000, 1 uint8_t[IGN_BLEND_COUNT iterate] autoscale ignBlendBias;;"%", 0.5, 0, 0, 100, 1 int16_t[IGN_BLEND_COUNT iterate] autoscale ignBlendOutput;;"deg", 0.01, 0, -300, 300, 2 int16_t[VE_BLEND_COUNT iterate] autoscale veBlendParameter;;"", 0.1, 0, -1000, 1000, 1 uint8_t[VE_BLEND_COUNT iterate] autoscale veBlendBias;;"%", 0.5, 0, 0, 100, 1 int16_t[VE_BLEND_COUNT iterate] autoscale veBlendOutput;;"%", 0.01, 0, -50, 50, 2 int16_t[BOOST_BLEND_COUNT iterate] autoscale boostOpenLoopBlendParameter;;"", 0.1, 0, -1000, 1000, 1 uint8_t[BOOST_BLEND_COUNT iterate] autoscale boostOpenLoopBlendBias;;"%", 0.5, 0, 0, 100, 1 int8_t[BOOST_BLEND_COUNT iterate] autoscale boostOpenLoopBlendOutput;;"%", 1, 0, -100, 100, 0 int16_t[BOOST_BLEND_COUNT iterate] autoscale boostClosedLoopBlendParameter;;"", 0.1, 0, -1000, 1000, 1 uint8_t[BOOST_BLEND_COUNT iterate] autoscale boostClosedLoopBlendBias;;"%", 0.5, 0, 0, 100, 1 int16_t[BOOST_BLEND_COUNT iterate] autoscale boostClosedLoopBlendOutput;;"%", 0.1, 0, -1000, 1000, 1 bit coilState1 bit coilState2 bit coilState3 bit coilState4 bit coilState5 bit coilState6 bit coilState7 bit coilState8 bit coilState9 bit coilState10 bit coilState11 bit coilState12 bit injectorState1 bit injectorState2 bit injectorState3 bit injectorState4 bit injectorState5 bit injectorState6 bit injectorState7 bit injectorState8 bit injectorState9 bit injectorState10 bit injectorState11 bit injectorState12 uint32_t outputRequestPeriod float mapFast float[LUA_GAUGE_COUNT iterate] luaGauges;Lua: Gauge;"value",1, 0, 0, 50000, 3 uint16_t autoscale rawMaf2;;"V",{1/@@PACK_MULT_VOLTAGE@@}, 0, 0, 5, 3 uint16_t autoscale mafMeasured2;@@GAUGE_NAME_AIR_FLOW_MEASURED_2@@;"kg/h",{1/@@PACK_MULT_MASS_FLOW@@}, 0, 0, 0, 1 uint16_t schedulingUsedCount;;"",1,0,0,0,0 uint16_t autoscale Gego;;"%",0.01,0,50,150,2 uint8_t[134 iterate] unusedAtTheEnd;;"",1, 0, 0, 0, 0 end_struct