From 5eb3e76fb890f7e8d23bb799adc67fdadf877f21 Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sun, 28 Nov 2021 23:09:24 -0500 Subject: [PATCH] why so many channels are hidden in debug ? #3614 --- firmware/console/binary/generated/gauges.ini | 461 ++++++++++++++++++ firmware/console/binary/output_channels.txt | 11 +- java_tools/ConfigDefinition.jar | Bin 3555791 -> 3560897 bytes .../java/com/rusefi/ConfigDefinition.java | 1 + .../src/main/java/com/rusefi/ConfigField.java | 57 ++- .../com/rusefi/output/DataLogConsumer.java | 17 +- .../java/com/rusefi/output/GaugeConsumer.java | 95 ++++ .../java/com/rusefi/test/OutputsTest.java | 17 +- 8 files changed, 630 insertions(+), 29 deletions(-) create mode 100644 firmware/console/binary/generated/gauges.ini create mode 100644 java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java diff --git a/firmware/console/binary/generated/gauges.ini b/firmware/console/binary/generated/gauges.ini new file mode 100644 index 0000000000..6612c7f3f3 --- /dev/null +++ b/firmware/console/binary/generated/gauges.ini @@ -0,0 +1,461 @@ +sd_presentGauge = sd_present,"sd_present", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isIgnitionEnabledIndicatorGauge = isIgnitionEnabledIndicator,"isIgnitionEnabledIndicator", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isInjectionEnabledIndicatorGauge = isInjectionEnabledIndicator,"isInjectionEnabledIndicator", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +sd_logging_internalGauge = sd_logging_internal,"sd_logging_internal", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isCylinderCleanupActivatedGauge = isCylinderCleanupActivated,"isCylinderCleanupActivated", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isFuelPumpOnGauge = isFuelPumpOn,"isFuelPumpOn", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isFanOnGauge = isFanOn,"radiator fan", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isO2HeaterOnGauge = isO2HeaterOn,"isO2HeaterOn", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +checkEngineGauge = checkEngine,"checkEngine", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +needBurnGauge = needBurn,"needBurn", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +sd_msdGauge = sd_msd,"sd_msd", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +clutchUpStateGauge = clutchUpState,"clutch: up", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +clutchDownStateGauge = clutchDownState,"clutch: down", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isFan2OnGauge = isFan2On,"isFan2On", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +unusedb14Gauge = unusedb14,"unusedb14", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +brakePedalStateGauge = brakePedalState,"brake: down", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +toothLogReadyGauge = toothLogReady,"toothLogReady", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +acSwitchStateGauge = acSwitchState,"AC switch", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isTpsErrorGauge = isTpsError,"isTpsError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isCltErrorGauge = isCltError,"isCltError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isMapErrorGauge = isMapError,"isMapError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isIatErrorGauge = isIatError,"isIatError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +acStateGauge = acState,"acState", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isTriggerErrorGauge = isTriggerError,"isTriggerError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +hasCriticalErrorGauge = hasCriticalError,"hasCriticalError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isWarnNowGauge = isWarnNow,"isWarnNow", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isPedalErrorGauge = isPedalError,"isPedalError", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isKnockChipOkGauge = isKnockChipOk,"isKnockChipOk", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +launchTriggeredGauge = launchTriggered,"launchTriggered", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isTps2ErrorGauge = isTps2Error,"isTps2Error", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isIdleClosedLoopGauge = isIdleClosedLoop,"isIdleClosedLoop", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +isIdleCoastingGauge = isIdleCoasting,"isIdleCoasting", "", -1.0,-1.0, -1.0,-1.0, -1.0,-1.0, -1,-1 +RPMValueGauge = RPMValue,"RPM", "RPM", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rpmAccelerationGauge = rpmAcceleration,"dRPM", "RPM/s", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +speedToRpmRatioGauge = speedToRpmRatio,"s2rpm", "value", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vehicleSpeedKphGauge = vehicleSpeedKph,"Vehicle Speed", "kph", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +internalMcuTemperatureGauge = internalMcuTemperature,"CPU Temperature", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +coolantGauge = coolant,"CLT", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +intakeGauge = intake,"IAT", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +auxTemp1Gauge = auxTemp1,"auxTemp1", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +auxTemp2Gauge = auxTemp2,"auxTemp2", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +TPSValueGauge = TPSValue,"TPS", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +throttlePedalPositionGauge = throttlePedalPosition,"Throttle pedal position", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tpsADCGauge = tpsADC,"tpsADC", "ADC", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +MAFValueGauge = MAFValue,"MAF", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +massAirFlowValueGauge = massAirFlowValue,"MAF air flow", "Kg/h", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +MAPValueGauge = MAPValue,"MAP", "kPa", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +baroPressureGauge = baroPressure,"baroPressure", "kPa", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +lambdaValueGauge = lambdaValue,"Lambda", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knockRetardGauge = knockRetard,"knockRetard", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unused37Gauge = unused37,"unused37", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +VBattGauge = VBatt,"VBatt", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +oilPressureGauge = oilPressure,"Oil Pressure", "kPa", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtPositionB1IGauge = vvtPositionB1I,"VVT: bank 1 intake", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +chargeAirMassGauge = chargeAirMass,"air mass", "g", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +crankingFuelMsGauge = crankingFuelMs,"crankingFuelMs", "ms", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +currentTargetAfrGauge = currentTargetAfr,"fuel: target AFR", "ratio", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +baseFuelGauge = baseFuel,"fuel: base mass", "mg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelRunningGauge = fuelRunning,"fuel: running", "mg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +actualLastInjectionGauge = actualLastInjection,"fuel: Last injection", "ms", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +injectorDutyCycleGauge = injectorDutyCycle,"fuel: injector duty cycle", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +veValueGauge = veValue,"fuel: VE", "ratio", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +injectionOffsetGauge = injectionOffset,"injectionOffset", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tChargeGauge = tCharge,"tCharge", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +injectorLagMsGauge = injectorLagMs,"fuel: injector lag", "ms", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +iatCorrectionGauge = iatCorrection,"fuel: IAT correction", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +cltCorrectionGauge = cltCorrection,"fuel: CLT correction", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +currentEnginePhaseGauge = currentEnginePhase,"Engine Phase", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +wallFuelAmountGauge = wallFuelAmount,"fuel: wall corr ms", "mg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +wallFuelCorrectionGauge = wallFuelCorrection,"fuel: wall amount", "mg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unused76Gauge = unused76,"unused76", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +deltaTpsGauge = deltaTps,"fuel: TPS change", "ratio", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unused80Gauge = unused80,"unused80", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tpsAccelFuelGauge = tpsAccelFuel,"fuel: TPS acceleration extra fuel ms", "ms", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +ignitionAdvanceGauge = ignitionAdvance,"timing", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +sparkDwellValueGauge = sparkDwellValue,"dwell: coil charge time", "ms", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +coilDutyCycleGauge = coilDutyCycle,"dwell: coil duty cycle", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +idleAirValvePositionGauge = idleAirValvePosition,"Idle Air Valve", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +etbTargetGauge = etbTarget,"ETB Target", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +etb1DutyCycleGauge = etb1DutyCycle,"ETB Duty", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +etb1ErrorGauge = etb1Error,"ETB Error", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelTankLevelGauge = fuelTankLevel,"Fuel level", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +totalFuelConsumptionGauge = totalFuelConsumption,"fuel: Total consumed", "grams", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelFlowRateGauge = fuelFlowRate,"fuel: Flow rate", "gram/s", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +veTableYAxisGauge = veTableYAxis,"veTableYAxis", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +afrTableYAxisGauge = afrTableYAxis,"afrTableYAxis", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knockLevelGauge = knockLevel,"knock: current level", "Volts", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +secondsGauge = seconds,"Uptime", "sec", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +engineModeGauge = engineMode,"Engine Mode", "em", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +firmwareVersionGauge = firmwareVersion,"firmware", "version_f", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tsConfigVersionGauge = tsConfigVersion,"tsConfigVersion", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +calibrationValueGauge = calibrationValue,"calibrationValue", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +calibrationModeGauge = calibrationMode,"calibrationMode", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedPaddingGauge = unusedPadding,"unusedPadding", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelingLoadGauge = fuelingLoad,"fuel: load", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +ignitionLoadGauge = ignitionLoad,"ign: load", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +engineMakeCodeNameCrc16Gauge = engineMakeCodeNameCrc16,"Engine CRC16", "crc16", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +totalTriggerErrorCounterGauge = totalTriggerErrorCounter,"trg err", "counter", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +orderingErrorCounterGauge = orderingErrorCounter,"orderingErrorCounter", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +warningCounterGauge = warningCounter,"warning: counter", "count", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +lastErrorCodeGauge = lastErrorCode,"warning: last", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode1Gauge = recentErrorCode1,"recentErrorCode1", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode2Gauge = recentErrorCode2,"recentErrorCode2", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode3Gauge = recentErrorCode3,"recentErrorCode3", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode4Gauge = recentErrorCode4,"recentErrorCode4", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode5Gauge = recentErrorCode5,"recentErrorCode5", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode6Gauge = recentErrorCode6,"recentErrorCode6", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode7Gauge = recentErrorCode7,"recentErrorCode7", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +recentErrorCode8Gauge = recentErrorCode8,"recentErrorCode8", "error", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField1Gauge = debugFloatField1,"debugFloatField1", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField2Gauge = debugFloatField2,"debugFloatField2", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField3Gauge = debugFloatField3,"debugFloatField3", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField4Gauge = debugFloatField4,"debugFloatField4", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField5Gauge = debugFloatField5,"debugFloatField5", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField6Gauge = debugFloatField6,"debugFloatField6", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugFloatField7Gauge = debugFloatField7,"debugFloatField7", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugIntField1Gauge = debugIntField1,"debugIntField1", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugIntField2Gauge = debugIntField2,"debugIntField2", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugIntField3Gauge = debugIntField3,"debugIntField3", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugIntField4Gauge = debugIntField4,"debugIntField4", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +debugIntField5Gauge = debugIntField5,"debugIntField5", "val", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +accelerationXGauge = accelerationX,"Acceleration: X", "G", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +accelerationYGauge = accelerationY,"Acceleration: Y", "G", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt1Gauge = egt1,"egt1", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt2Gauge = egt2,"egt2", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt3Gauge = egt3,"egt3", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt4Gauge = egt4,"egt4", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt5Gauge = egt5,"egt5", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt6Gauge = egt6,"egt6", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt7Gauge = egt7,"egt7", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +egt8Gauge = egt8,"egt8", "deg C", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +TPS2ValueGauge = TPS2Value,"TPS2", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawTps1PrimaryGauge = rawTps1Primary,"rawTps1Primary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawPpsPrimaryGauge = rawPpsPrimary,"rawPpsPrimary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawCltGauge = rawClt,"rawClt", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawIatGauge = rawIat,"rawIat", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawOilPressureGauge = rawOilPressure,"rawOilPressure", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tuneCrc16Gauge = tuneCrc16,"Tune CRC16", "crc16", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAt246Gauge = unusedAt246,"unusedAt246", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tcuCurrentGearGauge = tcuCurrentGear,"Current Gear", "gear", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawPpsSecondaryGauge = rawPpsSecondary,"rawPpsSecondary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock1Gauge = knock1,"knock1", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock2Gauge = knock2,"knock2", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock3Gauge = knock3,"knock3", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock4Gauge = knock4,"knock4", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock5Gauge = knock5,"knock5", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock6Gauge = knock6,"knock6", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock7Gauge = knock7,"knock7", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock8Gauge = knock8,"knock8", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock9Gauge = knock9,"knock9", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock10Gauge = knock10,"knock10", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock11Gauge = knock11,"knock11", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knock12Gauge = knock12,"knock12", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +tcuDesiredGearGauge = tcuDesiredGear,"Desired Gear", "gear", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +flexPercentGauge = flexPercent,"Flex Ethanol %", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawIdlePositionSensorGauge = rawIdlePositionSensor,"rawIdlePositionSensor", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawWastegatePositionGauge = rawWastegatePosition,"rawWastegatePosition", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +wastegatePositionSensorGauge = wastegatePositionSensor,"Wastegate position sensor", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +idlePositionSensorGauge = idlePositionSensor,"Idle position sensor", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawLowFuelPressureGauge = rawLowFuelPressure,"rawLowFuelPressure", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawHighFuelPressureGauge = rawHighFuelPressure,"rawHighFuelPressure", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +lowFuelPressureGauge = lowFuelPressure,"Fuel pressure (low)", "kpa", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +highFuelPressureGauge = highFuelPressure,"Fuel pressure (high)", "bar", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +targetLambdaGauge = targetLambda,"fuel: target lambda", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +AFRValueGauge = AFRValue,"Air/Fuel Ratio", "AFR", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +VssAccelerationGauge = VssAcceleration,"Vss Accel", "m/s2", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +lambdaValue2Gauge = lambdaValue2,"Lambda 2", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +AFRValue2Gauge = AFRValue2,"Air/Fuel Ratio 2", "AFR", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtPositionB1EGauge = vvtPositionB1E,"VVT: bank 1 exhaust", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtPositionB2IGauge = vvtPositionB2I,"VVT: bank 2 intake", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtPositionB2EGauge = vvtPositionB2E,"VVT: bank 2 exhaust", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelPidCorrection1Gauge = fuelPidCorrection1,"fuelPidCorrection1", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +fuelPidCorrection2Gauge = fuelPidCorrection2,"fuelPidCorrection2", "%", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawTps1SecondaryGauge = rawTps1Secondary,"rawTps1Secondary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawTps2PrimaryGauge = rawTps2Primary,"rawTps2Primary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +rawTps2SecondaryGauge = rawTps2Secondary,"rawTps2Secondary", "V", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +knockCountGauge = knockCount,"knock: current level", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +accelerationZGauge = accelerationZ,"Acceleration: Z", "G", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +accelerationRollGauge = accelerationRoll,"Acceleration: Roll", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +accelerationYawGauge = accelerationYaw,"Acceleration: Yaw", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtTargets1Gauge = vvtTargets1,"vvtTargets1", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtTargets2Gauge = vvtTargets2,"vvtTargets2", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtTargets3Gauge = vvtTargets3,"vvtTargets3", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +vvtTargets4Gauge = vvtTargets4,"vvtTargets4", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +turboSpeedGauge = turboSpeed,"Turbocharger Speed", "hz", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd1Gauge = unusedAtTheEnd1,"unusedAtTheEnd1", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd2Gauge = unusedAtTheEnd2,"unusedAtTheEnd2", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd3Gauge = unusedAtTheEnd3,"unusedAtTheEnd3", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd4Gauge = unusedAtTheEnd4,"unusedAtTheEnd4", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd5Gauge = unusedAtTheEnd5,"unusedAtTheEnd5", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd6Gauge = unusedAtTheEnd6,"unusedAtTheEnd6", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd7Gauge = unusedAtTheEnd7,"unusedAtTheEnd7", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd8Gauge = unusedAtTheEnd8,"unusedAtTheEnd8", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd9Gauge = unusedAtTheEnd9,"unusedAtTheEnd9", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd10Gauge = unusedAtTheEnd10,"unusedAtTheEnd10", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd11Gauge = unusedAtTheEnd11,"unusedAtTheEnd11", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd12Gauge = unusedAtTheEnd12,"unusedAtTheEnd12", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd13Gauge = unusedAtTheEnd13,"unusedAtTheEnd13", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd14Gauge = unusedAtTheEnd14,"unusedAtTheEnd14", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd15Gauge = unusedAtTheEnd15,"unusedAtTheEnd15", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd16Gauge = unusedAtTheEnd16,"unusedAtTheEnd16", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd17Gauge = unusedAtTheEnd17,"unusedAtTheEnd17", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd18Gauge = unusedAtTheEnd18,"unusedAtTheEnd18", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd19Gauge = unusedAtTheEnd19,"unusedAtTheEnd19", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd20Gauge = unusedAtTheEnd20,"unusedAtTheEnd20", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd21Gauge = unusedAtTheEnd21,"unusedAtTheEnd21", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd22Gauge = unusedAtTheEnd22,"unusedAtTheEnd22", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd23Gauge = unusedAtTheEnd23,"unusedAtTheEnd23", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd24Gauge = unusedAtTheEnd24,"unusedAtTheEnd24", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd25Gauge = unusedAtTheEnd25,"unusedAtTheEnd25", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd26Gauge = unusedAtTheEnd26,"unusedAtTheEnd26", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd27Gauge = unusedAtTheEnd27,"unusedAtTheEnd27", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd28Gauge = unusedAtTheEnd28,"unusedAtTheEnd28", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd29Gauge = unusedAtTheEnd29,"unusedAtTheEnd29", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd30Gauge = unusedAtTheEnd30,"unusedAtTheEnd30", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd31Gauge = unusedAtTheEnd31,"unusedAtTheEnd31", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd32Gauge = unusedAtTheEnd32,"unusedAtTheEnd32", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd33Gauge = unusedAtTheEnd33,"unusedAtTheEnd33", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd34Gauge = unusedAtTheEnd34,"unusedAtTheEnd34", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd35Gauge = unusedAtTheEnd35,"unusedAtTheEnd35", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd36Gauge = unusedAtTheEnd36,"unusedAtTheEnd36", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd37Gauge = unusedAtTheEnd37,"unusedAtTheEnd37", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd38Gauge = unusedAtTheEnd38,"unusedAtTheEnd38", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd39Gauge = unusedAtTheEnd39,"unusedAtTheEnd39", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd40Gauge = unusedAtTheEnd40,"unusedAtTheEnd40", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd41Gauge = unusedAtTheEnd41,"unusedAtTheEnd41", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd42Gauge = unusedAtTheEnd42,"unusedAtTheEnd42", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd43Gauge = unusedAtTheEnd43,"unusedAtTheEnd43", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd44Gauge = unusedAtTheEnd44,"unusedAtTheEnd44", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd45Gauge = unusedAtTheEnd45,"unusedAtTheEnd45", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd46Gauge = unusedAtTheEnd46,"unusedAtTheEnd46", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd47Gauge = unusedAtTheEnd47,"unusedAtTheEnd47", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd48Gauge = unusedAtTheEnd48,"unusedAtTheEnd48", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd49Gauge = unusedAtTheEnd49,"unusedAtTheEnd49", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd50Gauge = unusedAtTheEnd50,"unusedAtTheEnd50", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd51Gauge = unusedAtTheEnd51,"unusedAtTheEnd51", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd52Gauge = unusedAtTheEnd52,"unusedAtTheEnd52", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd53Gauge = unusedAtTheEnd53,"unusedAtTheEnd53", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd54Gauge = unusedAtTheEnd54,"unusedAtTheEnd54", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd55Gauge = unusedAtTheEnd55,"unusedAtTheEnd55", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd56Gauge = unusedAtTheEnd56,"unusedAtTheEnd56", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd57Gauge = unusedAtTheEnd57,"unusedAtTheEnd57", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd58Gauge = unusedAtTheEnd58,"unusedAtTheEnd58", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd59Gauge = unusedAtTheEnd59,"unusedAtTheEnd59", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd60Gauge = unusedAtTheEnd60,"unusedAtTheEnd60", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd61Gauge = unusedAtTheEnd61,"unusedAtTheEnd61", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd62Gauge = unusedAtTheEnd62,"unusedAtTheEnd62", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd63Gauge = unusedAtTheEnd63,"unusedAtTheEnd63", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd64Gauge = unusedAtTheEnd64,"unusedAtTheEnd64", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd65Gauge = unusedAtTheEnd65,"unusedAtTheEnd65", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd66Gauge = unusedAtTheEnd66,"unusedAtTheEnd66", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd67Gauge = unusedAtTheEnd67,"unusedAtTheEnd67", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd68Gauge = unusedAtTheEnd68,"unusedAtTheEnd68", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd69Gauge = unusedAtTheEnd69,"unusedAtTheEnd69", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd70Gauge = unusedAtTheEnd70,"unusedAtTheEnd70", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd71Gauge = unusedAtTheEnd71,"unusedAtTheEnd71", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd72Gauge = unusedAtTheEnd72,"unusedAtTheEnd72", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd73Gauge = unusedAtTheEnd73,"unusedAtTheEnd73", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd74Gauge = unusedAtTheEnd74,"unusedAtTheEnd74", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd75Gauge = unusedAtTheEnd75,"unusedAtTheEnd75", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd76Gauge = unusedAtTheEnd76,"unusedAtTheEnd76", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd77Gauge = unusedAtTheEnd77,"unusedAtTheEnd77", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd78Gauge = unusedAtTheEnd78,"unusedAtTheEnd78", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd79Gauge = unusedAtTheEnd79,"unusedAtTheEnd79", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd80Gauge = unusedAtTheEnd80,"unusedAtTheEnd80", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd81Gauge = unusedAtTheEnd81,"unusedAtTheEnd81", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd82Gauge = unusedAtTheEnd82,"unusedAtTheEnd82", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd83Gauge = unusedAtTheEnd83,"unusedAtTheEnd83", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd84Gauge = unusedAtTheEnd84,"unusedAtTheEnd84", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd85Gauge = unusedAtTheEnd85,"unusedAtTheEnd85", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd86Gauge = unusedAtTheEnd86,"unusedAtTheEnd86", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd87Gauge = unusedAtTheEnd87,"unusedAtTheEnd87", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd88Gauge = unusedAtTheEnd88,"unusedAtTheEnd88", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd89Gauge = unusedAtTheEnd89,"unusedAtTheEnd89", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd90Gauge = unusedAtTheEnd90,"unusedAtTheEnd90", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd91Gauge = unusedAtTheEnd91,"unusedAtTheEnd91", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd92Gauge = unusedAtTheEnd92,"unusedAtTheEnd92", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd93Gauge = unusedAtTheEnd93,"unusedAtTheEnd93", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd94Gauge = unusedAtTheEnd94,"unusedAtTheEnd94", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd95Gauge = unusedAtTheEnd95,"unusedAtTheEnd95", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd96Gauge = unusedAtTheEnd96,"unusedAtTheEnd96", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd97Gauge = unusedAtTheEnd97,"unusedAtTheEnd97", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd98Gauge = unusedAtTheEnd98,"unusedAtTheEnd98", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd99Gauge = unusedAtTheEnd99,"unusedAtTheEnd99", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd100Gauge = unusedAtTheEnd100,"unusedAtTheEnd100", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd101Gauge = unusedAtTheEnd101,"unusedAtTheEnd101", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd102Gauge = unusedAtTheEnd102,"unusedAtTheEnd102", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd103Gauge = unusedAtTheEnd103,"unusedAtTheEnd103", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd104Gauge = unusedAtTheEnd104,"unusedAtTheEnd104", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd105Gauge = unusedAtTheEnd105,"unusedAtTheEnd105", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd106Gauge = unusedAtTheEnd106,"unusedAtTheEnd106", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd107Gauge = unusedAtTheEnd107,"unusedAtTheEnd107", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd108Gauge = unusedAtTheEnd108,"unusedAtTheEnd108", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd109Gauge = unusedAtTheEnd109,"unusedAtTheEnd109", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd110Gauge = unusedAtTheEnd110,"unusedAtTheEnd110", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd111Gauge = unusedAtTheEnd111,"unusedAtTheEnd111", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd112Gauge = unusedAtTheEnd112,"unusedAtTheEnd112", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd113Gauge = unusedAtTheEnd113,"unusedAtTheEnd113", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd114Gauge = unusedAtTheEnd114,"unusedAtTheEnd114", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd115Gauge = unusedAtTheEnd115,"unusedAtTheEnd115", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd116Gauge = unusedAtTheEnd116,"unusedAtTheEnd116", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd117Gauge = unusedAtTheEnd117,"unusedAtTheEnd117", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd118Gauge = unusedAtTheEnd118,"unusedAtTheEnd118", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd119Gauge = unusedAtTheEnd119,"unusedAtTheEnd119", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd120Gauge = unusedAtTheEnd120,"unusedAtTheEnd120", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd121Gauge = unusedAtTheEnd121,"unusedAtTheEnd121", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd122Gauge = unusedAtTheEnd122,"unusedAtTheEnd122", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd123Gauge = unusedAtTheEnd123,"unusedAtTheEnd123", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd124Gauge = unusedAtTheEnd124,"unusedAtTheEnd124", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd125Gauge = unusedAtTheEnd125,"unusedAtTheEnd125", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd126Gauge = unusedAtTheEnd126,"unusedAtTheEnd126", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd127Gauge = unusedAtTheEnd127,"unusedAtTheEnd127", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd128Gauge = unusedAtTheEnd128,"unusedAtTheEnd128", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd129Gauge = unusedAtTheEnd129,"unusedAtTheEnd129", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd130Gauge = unusedAtTheEnd130,"unusedAtTheEnd130", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd131Gauge = unusedAtTheEnd131,"unusedAtTheEnd131", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd132Gauge = unusedAtTheEnd132,"unusedAtTheEnd132", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd133Gauge = unusedAtTheEnd133,"unusedAtTheEnd133", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd134Gauge = unusedAtTheEnd134,"unusedAtTheEnd134", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd135Gauge = unusedAtTheEnd135,"unusedAtTheEnd135", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd136Gauge = unusedAtTheEnd136,"unusedAtTheEnd136", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd137Gauge = unusedAtTheEnd137,"unusedAtTheEnd137", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd138Gauge = unusedAtTheEnd138,"unusedAtTheEnd138", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd139Gauge = unusedAtTheEnd139,"unusedAtTheEnd139", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd140Gauge = unusedAtTheEnd140,"unusedAtTheEnd140", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd141Gauge = unusedAtTheEnd141,"unusedAtTheEnd141", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd142Gauge = unusedAtTheEnd142,"unusedAtTheEnd142", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd143Gauge = unusedAtTheEnd143,"unusedAtTheEnd143", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd144Gauge = unusedAtTheEnd144,"unusedAtTheEnd144", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd145Gauge = unusedAtTheEnd145,"unusedAtTheEnd145", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd146Gauge = unusedAtTheEnd146,"unusedAtTheEnd146", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd147Gauge = unusedAtTheEnd147,"unusedAtTheEnd147", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd148Gauge = unusedAtTheEnd148,"unusedAtTheEnd148", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd149Gauge = unusedAtTheEnd149,"unusedAtTheEnd149", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd150Gauge = unusedAtTheEnd150,"unusedAtTheEnd150", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd151Gauge = unusedAtTheEnd151,"unusedAtTheEnd151", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd152Gauge = unusedAtTheEnd152,"unusedAtTheEnd152", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd153Gauge = unusedAtTheEnd153,"unusedAtTheEnd153", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd154Gauge = unusedAtTheEnd154,"unusedAtTheEnd154", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd155Gauge = unusedAtTheEnd155,"unusedAtTheEnd155", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd156Gauge = unusedAtTheEnd156,"unusedAtTheEnd156", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd157Gauge = unusedAtTheEnd157,"unusedAtTheEnd157", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd158Gauge = unusedAtTheEnd158,"unusedAtTheEnd158", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd159Gauge = unusedAtTheEnd159,"unusedAtTheEnd159", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd160Gauge = unusedAtTheEnd160,"unusedAtTheEnd160", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd161Gauge = unusedAtTheEnd161,"unusedAtTheEnd161", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd162Gauge = unusedAtTheEnd162,"unusedAtTheEnd162", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd163Gauge = unusedAtTheEnd163,"unusedAtTheEnd163", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd164Gauge = unusedAtTheEnd164,"unusedAtTheEnd164", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd165Gauge = unusedAtTheEnd165,"unusedAtTheEnd165", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd166Gauge = unusedAtTheEnd166,"unusedAtTheEnd166", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd167Gauge = unusedAtTheEnd167,"unusedAtTheEnd167", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd168Gauge = unusedAtTheEnd168,"unusedAtTheEnd168", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd169Gauge = unusedAtTheEnd169,"unusedAtTheEnd169", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd170Gauge = unusedAtTheEnd170,"unusedAtTheEnd170", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd171Gauge = unusedAtTheEnd171,"unusedAtTheEnd171", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd172Gauge = unusedAtTheEnd172,"unusedAtTheEnd172", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd173Gauge = unusedAtTheEnd173,"unusedAtTheEnd173", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd174Gauge = unusedAtTheEnd174,"unusedAtTheEnd174", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd175Gauge = unusedAtTheEnd175,"unusedAtTheEnd175", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd176Gauge = unusedAtTheEnd176,"unusedAtTheEnd176", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd177Gauge = unusedAtTheEnd177,"unusedAtTheEnd177", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd178Gauge = unusedAtTheEnd178,"unusedAtTheEnd178", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd179Gauge = unusedAtTheEnd179,"unusedAtTheEnd179", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd180Gauge = unusedAtTheEnd180,"unusedAtTheEnd180", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd181Gauge = unusedAtTheEnd181,"unusedAtTheEnd181", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd182Gauge = unusedAtTheEnd182,"unusedAtTheEnd182", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd183Gauge = unusedAtTheEnd183,"unusedAtTheEnd183", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd184Gauge = unusedAtTheEnd184,"unusedAtTheEnd184", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd185Gauge = unusedAtTheEnd185,"unusedAtTheEnd185", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd186Gauge = unusedAtTheEnd186,"unusedAtTheEnd186", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd187Gauge = unusedAtTheEnd187,"unusedAtTheEnd187", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd188Gauge = unusedAtTheEnd188,"unusedAtTheEnd188", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd189Gauge = unusedAtTheEnd189,"unusedAtTheEnd189", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd190Gauge = unusedAtTheEnd190,"unusedAtTheEnd190", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd191Gauge = unusedAtTheEnd191,"unusedAtTheEnd191", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd192Gauge = unusedAtTheEnd192,"unusedAtTheEnd192", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd193Gauge = unusedAtTheEnd193,"unusedAtTheEnd193", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd194Gauge = unusedAtTheEnd194,"unusedAtTheEnd194", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd195Gauge = unusedAtTheEnd195,"unusedAtTheEnd195", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd196Gauge = unusedAtTheEnd196,"unusedAtTheEnd196", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd197Gauge = unusedAtTheEnd197,"unusedAtTheEnd197", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd198Gauge = unusedAtTheEnd198,"unusedAtTheEnd198", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd199Gauge = unusedAtTheEnd199,"unusedAtTheEnd199", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd200Gauge = unusedAtTheEnd200,"unusedAtTheEnd200", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd201Gauge = unusedAtTheEnd201,"unusedAtTheEnd201", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd202Gauge = unusedAtTheEnd202,"unusedAtTheEnd202", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd203Gauge = unusedAtTheEnd203,"unusedAtTheEnd203", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd204Gauge = unusedAtTheEnd204,"unusedAtTheEnd204", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd205Gauge = unusedAtTheEnd205,"unusedAtTheEnd205", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd206Gauge = unusedAtTheEnd206,"unusedAtTheEnd206", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd207Gauge = unusedAtTheEnd207,"unusedAtTheEnd207", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd208Gauge = unusedAtTheEnd208,"unusedAtTheEnd208", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd209Gauge = unusedAtTheEnd209,"unusedAtTheEnd209", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd210Gauge = unusedAtTheEnd210,"unusedAtTheEnd210", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd211Gauge = unusedAtTheEnd211,"unusedAtTheEnd211", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd212Gauge = unusedAtTheEnd212,"unusedAtTheEnd212", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd213Gauge = unusedAtTheEnd213,"unusedAtTheEnd213", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd214Gauge = unusedAtTheEnd214,"unusedAtTheEnd214", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd215Gauge = unusedAtTheEnd215,"unusedAtTheEnd215", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd216Gauge = unusedAtTheEnd216,"unusedAtTheEnd216", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd217Gauge = unusedAtTheEnd217,"unusedAtTheEnd217", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd218Gauge = unusedAtTheEnd218,"unusedAtTheEnd218", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd219Gauge = unusedAtTheEnd219,"unusedAtTheEnd219", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd220Gauge = unusedAtTheEnd220,"unusedAtTheEnd220", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd221Gauge = unusedAtTheEnd221,"unusedAtTheEnd221", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd222Gauge = unusedAtTheEnd222,"unusedAtTheEnd222", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd223Gauge = unusedAtTheEnd223,"unusedAtTheEnd223", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd224Gauge = unusedAtTheEnd224,"unusedAtTheEnd224", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd225Gauge = unusedAtTheEnd225,"unusedAtTheEnd225", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd226Gauge = unusedAtTheEnd226,"unusedAtTheEnd226", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd227Gauge = unusedAtTheEnd227,"unusedAtTheEnd227", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd228Gauge = unusedAtTheEnd228,"unusedAtTheEnd228", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd229Gauge = unusedAtTheEnd229,"unusedAtTheEnd229", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd230Gauge = unusedAtTheEnd230,"unusedAtTheEnd230", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd231Gauge = unusedAtTheEnd231,"unusedAtTheEnd231", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd232Gauge = unusedAtTheEnd232,"unusedAtTheEnd232", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd233Gauge = unusedAtTheEnd233,"unusedAtTheEnd233", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd234Gauge = unusedAtTheEnd234,"unusedAtTheEnd234", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd235Gauge = unusedAtTheEnd235,"unusedAtTheEnd235", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd236Gauge = unusedAtTheEnd236,"unusedAtTheEnd236", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd237Gauge = unusedAtTheEnd237,"unusedAtTheEnd237", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd238Gauge = unusedAtTheEnd238,"unusedAtTheEnd238", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd239Gauge = unusedAtTheEnd239,"unusedAtTheEnd239", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd240Gauge = unusedAtTheEnd240,"unusedAtTheEnd240", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd241Gauge = unusedAtTheEnd241,"unusedAtTheEnd241", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd242Gauge = unusedAtTheEnd242,"unusedAtTheEnd242", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd243Gauge = unusedAtTheEnd243,"unusedAtTheEnd243", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd244Gauge = unusedAtTheEnd244,"unusedAtTheEnd244", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd245Gauge = unusedAtTheEnd245,"unusedAtTheEnd245", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd246Gauge = unusedAtTheEnd246,"unusedAtTheEnd246", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd247Gauge = unusedAtTheEnd247,"unusedAtTheEnd247", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd248Gauge = unusedAtTheEnd248,"unusedAtTheEnd248", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd249Gauge = unusedAtTheEnd249,"unusedAtTheEnd249", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd250Gauge = unusedAtTheEnd250,"unusedAtTheEnd250", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd251Gauge = unusedAtTheEnd251,"unusedAtTheEnd251", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd252Gauge = unusedAtTheEnd252,"unusedAtTheEnd252", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd253Gauge = unusedAtTheEnd253,"unusedAtTheEnd253", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd254Gauge = unusedAtTheEnd254,"unusedAtTheEnd254", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd255Gauge = unusedAtTheEnd255,"unusedAtTheEnd255", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd256Gauge = unusedAtTheEnd256,"unusedAtTheEnd256", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd257Gauge = unusedAtTheEnd257,"unusedAtTheEnd257", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd258Gauge = unusedAtTheEnd258,"unusedAtTheEnd258", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd259Gauge = unusedAtTheEnd259,"unusedAtTheEnd259", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +unusedAtTheEnd260Gauge = unusedAtTheEnd260,"unusedAtTheEnd260", "", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0 +alternatorStatus_iTermGauge = alternatorStatus_iTerm,"alternatorStatus_ iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +alternatorStatus_dTermGauge = alternatorStatus_dTerm,"alternatorStatus_ dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +alternatorStatus_outputGauge = alternatorStatus_output,"alternatorStatus_ output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +alternatorStatus_errorGauge = alternatorStatus_error,"alternatorStatus_ error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +alternatorStatus_resetCounterGauge = alternatorStatus_resetCounter,"alternatorStatus_ resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0 +idleStatus_iTermGauge = idleStatus_iTerm,"idleStatus_ iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +idleStatus_dTermGauge = idleStatus_dTerm,"idleStatus_ dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +idleStatus_outputGauge = idleStatus_output,"idleStatus_ output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +idleStatus_errorGauge = idleStatus_error,"idleStatus_ error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +idleStatus_resetCounterGauge = idleStatus_resetCounter,"idleStatus_ resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0 +etbStatus_iTermGauge = etbStatus_iTerm,"etbStatus_ iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +etbStatus_dTermGauge = etbStatus_dTerm,"etbStatus_ dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +etbStatus_outputGauge = etbStatus_output,"etbStatus_ output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +etbStatus_errorGauge = etbStatus_error,"etbStatus_ error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3 +etbStatus_resetCounterGauge = etbStatus_resetCounter,"etbStatus_ resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0 diff --git a/firmware/console/binary/output_channels.txt b/firmware/console/binary/output_channels.txt index aa0655ac5d..94c17e6d8f 100644 --- a/firmware/console/binary/output_channels.txt +++ b/firmware/console/binary/output_channels.txt @@ -244,13 +244,14 @@ uint16_t rpmAcceleration;dRPM;"RPM/s",1, 0, 0, 0, 0 uint16_t turboSpeed;@@GAUGE_NAME_TURBO_SPEED@@;"hz",1, 0, 0, 0, 0 struct pid_status_s - float iTerm;;"", 1, 0, -10000, 10000, 4 - float dTerm;;"", 1, 0, -10000, 10000, 4 - float output;;"", 1, 0, -10000, 10000, 4 - float error;;"", 1, 0, -10000, 10000, 4 - int resetCounter;;"", 1, 0, -10000, 10000, 4 + float iTerm;;"", 1, 0, -10000, 10000, 3 + float dTerm;;"", 1, 0, -10000, 10000, 3 + float output;;"", 1, 0, -10000, 10000, 3 + float error;;"", 1, 0, -10000, 10000, 3 + int resetCounter;;"", 1, 0, -10000, 10000, 0 end_struct + ! we have some unused bytes to allow compatible TS changes uint8_t[260 iterate] unusedAtTheEnd;;"",1, 0, 0, 0, 0 diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 481f17359446fdd2e80fb40efb12e4ceadcf2dbf..bc4e9bfdb7aa47f5d5a2da956a45333027e103ba 100644 GIT binary patch delta 100820 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 diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java index ebff878a67..b5b06aa0a6 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigDefinition.java @@ -273,6 +273,7 @@ public class ConfigDefinition { if (TS_OUTPUTS_DESTINATION != null) { destinations.add(new OutputsSectionConsumer(TS_OUTPUTS_DESTINATION + File.separator + "generated/output_channels.ini", state)); destinations.add(new DataLogConsumer(TS_OUTPUTS_DESTINATION + File.separator + "generated/data_logs.ini", state)); + destinations.add(new GaugeConsumer(TS_OUTPUTS_DESTINATION + File.separator + "generated/gauges.ini", state)); } if (tsInputFileFolder != null && needToUpdateTsFiles) { CharArrayWriter tsWriter = new CharArrayWriter(); diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java index 688690cac0..76aa829d55 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/ConfigField.java @@ -157,13 +157,13 @@ public class ConfigField { String arraySizeAsText; if (matcher.group(5) != null) { arraySizeAsText = matcher.group(3) + "][" + matcher.group(5); - arraySizes = new int[2]; - arraySizes[0] = ConfigDefinition.getSize(state.variableRegistry, matcher.group(3)); - arraySizes[1] = ConfigDefinition.getSize(state.variableRegistry, matcher.group(5)); - } else if (matcher.group(3) != null) { + arraySizes = new int[2]; + arraySizes[0] = ConfigDefinition.getSize(state.variableRegistry, matcher.group(3)); + arraySizes[1] = ConfigDefinition.getSize(state.variableRegistry, matcher.group(5)); + } else if (matcher.group(3) != null) { arraySizeAsText = matcher.group(3); arraySizes = new int[1]; - arraySizes[0] = ConfigDefinition.getSize(state.variableRegistry, arraySizeAsText); + arraySizes[0] = ConfigDefinition.getSize(state.variableRegistry, arraySizeAsText); } else { arraySizes = new int[0]; arraySizeAsText = null; @@ -192,10 +192,10 @@ public class ConfigField { return 0; if (isBit()) return 4; - int size = getElementSize(); - for (int s : arraySizes) { - size *= s; - } + int size = getElementSize(); + for (int s : arraySizes) { + size *= s; + } return size; } @@ -283,14 +283,14 @@ public class ConfigField { } int mul, div; if (factor < 1.d) { - mul = (int)Math.round(1. / factor); + mul = (int) Math.round(1. / factor); div = 1; } else { mul = 1; - div = (int)factor; + div = (int) factor; } // Verify accuracy - double factor2 = ((double)div) / mul; + double factor2 = ((double) div) / mul; double accuracy = Math.abs((factor2 / factor) - 1.); if (accuracy > 0.0000001) { // Don't want to deal with exception propogation; this should adequately not compile @@ -300,16 +300,41 @@ public class ConfigField { return mul + ", " + div; } - public String getUnits() { + private String[] getTokens() { if (tsInfo == null) - return ""; - String[] tokens = tsInfo.split("\\,"); + return new String[0]; + return tsInfo.split("\\,"); + } + + public String getUnits() { + String[] tokens = getTokens(); if (tokens.length == 0) return ""; return unquote(tokens[0].trim()); } - private static String unquote(String token) { + public double getMin() { + String[] tokens = getTokens(); + if (tokens.length < 4) + return -1; + return Double.parseDouble(tokens[3]); + } + + public double getMax() { + String[] tokens = getTokens(); + if (tokens.length < 5) + return -1; + return Double.parseDouble(tokens[4]); + } + + public int getDigits() { + String[] tokens = getTokens(); + if (tokens.length < 6) + return -1; + return Integer.parseInt(tokens[5].trim()); + } + + public static String unquote(String token) { int length = token.length(); if (length < 2) return token; diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java index 6912852d4a..2736ae2d52 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/DataLogConsumer.java @@ -3,6 +3,8 @@ package com.rusefi.output; import com.rusefi.ConfigField; import com.rusefi.ReaderState; import com.rusefi.TypesHelper; +import com.rusefi.VariableRegistry; +import org.jetbrains.annotations.NotNull; import java.io.CharArrayWriter; import java.io.FileWriter; @@ -35,7 +37,6 @@ public class DataLogConsumer implements ConfigurationConsumer { @Override public void handleEndStruct(ConfigStructure structure) throws IOException { if (state.stack.isEmpty()) { - FieldIterator iterator = new FieldIterator(structure.tsFields); String content = handleFields(structure, iterator, ""); tsWriter.append(content); @@ -87,8 +88,15 @@ public class DataLogConsumer implements ConfigurationConsumer { typeString = "int, \"%d\""; } - String comment = state.variableRegistry.applyVariables(configField.getComment()); - String[] comments = comment == null ? new String[0] : comment.split("\\\\n"); + String comment = getComment(configField, state.variableRegistry); + + return "entry = " + prefix + configField.getName() + ", " + comment + ", " + typeString + "\n"; + } + + @NotNull + public static String getComment(ConfigField configField, VariableRegistry variableRegistry) { + String comment = variableRegistry.applyVariables(configField.getComment()); + String[] comments = comment == null ? new String[0] : comment.split("\\\\n"); comment = (comments.length > 0) ? comments[0] : ""; if (comment.isEmpty()) @@ -96,8 +104,7 @@ public class DataLogConsumer implements ConfigurationConsumer { if (comment.charAt(0) != '"') comment = quote(comment); - - return "entry = " + prefix + configField.getName() + ", " + comment + ", " + typeString + "\n"; + return comment; } public CharArrayWriter getTsWriter() { diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java new file mode 100644 index 0000000000..f2d305ba92 --- /dev/null +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/output/GaugeConsumer.java @@ -0,0 +1,95 @@ +package com.rusefi.output; + +import com.rusefi.ConfigField; +import com.rusefi.ReaderState; + +import java.io.CharArrayWriter; +import java.io.FileWriter; +import java.io.IOException; + +import static com.rusefi.output.DataLogConsumer.getComment; +import static org.abego.treelayout.internal.util.java.lang.string.StringUtil.quote; + +public class GaugeConsumer implements ConfigurationConsumer { + private final String fileName; + private final ReaderState state; + private final CharArrayWriter charArrayWriter = new CharArrayWriter(); + + public GaugeConsumer(String fileName, ReaderState state) { + this.fileName = fileName; + this.state = state; + } + + @Override + public void startFile() throws IOException { + System.out.println("startFile"); + + } + + @Override + public void endFile() throws IOException { + System.out.println("endFile"); + + } + + @Override + public void handleEndStruct(ConfigStructure structure) throws IOException { + if (state.stack.isEmpty()) { + FieldIterator iterator = new FieldIterator(structure.tsFields); + String content = handleFields(structure, iterator, ""); + charArrayWriter.append(content); + } + + if (fileName != null) { + FileWriter fw = new FileWriter(fileName); + fw.write(charArrayWriter.toCharArray()); + fw.close(); + } + } + + private String handleFields(ConfigStructure structure, FieldIterator iterator, String prefix) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < structure.tsFields.size(); i++) { + iterator.start(i); + + String content = handle(iterator.cf, prefix); + sb.append(content); + iterator.end(); + + } + return sb.toString(); + } + + private String handle(ConfigField configField, String prefix) { + ConfigStructure cs = configField.getState().structures.get(configField.getType()); + if (cs != null) { + String extraPrefix = cs.withPrefix ? configField.getName() + "_" : ""; + return handleFields(cs, new FieldIterator(cs.tsFields), extraPrefix); + } + + String comment = getComment(configField, state.variableRegistry); + comment = ConfigField.unquote(comment); + if (!prefix.isEmpty()) { + comment = prefix + " " + comment; + } + comment = quote(comment); + + + double min = configField.getMin(); + double max = configField.getMax(); + int digits = configField.getDigits(); + + String fullName = prefix + configField.getName(); + return fullName + "Gauge = " + fullName + "," + comment + + ", " + quote(configField.getUnits()) + + ", " + min + "," + max + + ", " + min + "," + max + + ", " + min + "," + max + + ", " + digits + "," + digits + + "\n"; + } + + public CharArrayWriter getTsWriter() { + return charArrayWriter; + } +} diff --git a/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java b/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java index 6f90e85725..5624a904ad 100644 --- a/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java +++ b/java_tools/configuration_definition/src/main/java/com/rusefi/test/OutputsTest.java @@ -2,15 +2,19 @@ package com.rusefi.test; import com.rusefi.ReaderState; import com.rusefi.output.DataLogConsumer; +import com.rusefi.output.GaugeConsumer; import com.rusefi.output.OutputsSectionConsumer; import org.junit.Test; import java.io.*; +import java.util.Arrays; import java.util.Collections; import static org.junit.Assert.assertEquals; public class OutputsTest { + private com.rusefi.output.GaugeConsumer GaugeConsumer; + @Test public void generateSomething() throws IOException { String test = "struct total\n" + @@ -101,8 +105,8 @@ public class OutputsTest { public void sensorStruct() throws IOException { String test = "struct total\n" + " struct pid_status_s\n" + - " \tfloat iTerm;;\"\", 1, 0, -10000, 10000, 4\n" + - " \tfloat dTerm;;\"\", 1, 0, -10000, 10000, 4\n" + + " \tfloat iTerm;;\"v\", 1, 0, -10000, 10000, 4\n" + + " \tfloat dTerm;;\"v\", 1, 0, -10000, 10000, 4\n" + " end_struct\n" + "\tpid_status_s alternatorStatus\n" + "\tpid_status_s idleStatus\n" + @@ -110,7 +114,8 @@ public class OutputsTest { ReaderState state = new ReaderState(); DataLogConsumer dataLogConsumer = new DataLogConsumer(null, state); - state.readBufferedReader(test, Collections.singletonList(dataLogConsumer)); + GaugeConsumer gaugeConsumer = new GaugeConsumer(null, state); + state.readBufferedReader(test, Arrays.asList(dataLogConsumer, gaugeConsumer)); assertEquals( "entry = alternatorStatus_iTerm, \"iTerm\", float, \"%.3f\"\n" + "entry = alternatorStatus_dTerm, \"dTerm\", float, \"%.3f\"\n" + @@ -118,5 +123,11 @@ public class OutputsTest { "entry = idleStatus_dTerm, \"dTerm\", float, \"%.3f\"\n", new String(dataLogConsumer.getTsWriter().toCharArray())); + assertEquals("alternatorStatus_iTermGauge = alternatorStatus_iTerm,\"alternatorStatus_ iTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + + "alternatorStatus_dTermGauge = alternatorStatus_dTerm,\"alternatorStatus_ dTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + + "idleStatus_iTermGauge = idleStatus_iTerm,\"idleStatus_ iTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n" + + "idleStatus_dTermGauge = idleStatus_dTerm,\"idleStatus_ dTerm\", \"v\", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 4,4\n", + new String(gaugeConsumer.getTsWriter().toCharArray())); + } }