; This is a TunerStudio project for the rusEFI.com engine management system
;
; This file has been generated by invoking gen_config.sh
; The input files are
;	tunerstudio.template.ini	the common template
;	rusefi_config.txt	the project specific file
;
; In TunerStudio some fields have little question mark on the left of the name for additional field tips.
; Those tips are defined in ../integration/rusefi_config.txt
;
; For example
;
;	float bias_resistor;Pull-up resistor value on your board;"Ohm"
; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip
; Note that '+' sign is required after first semicolon for tooltip to appear in TunerStudio
;
;
; field = "# blue text"
; field = "! red text"
; field = "normal text"
;
; see also https://www.tunerstudio.com/index.php/support/manuals/tsdevmanuals/137-ecu-definition-specification-aka-the-ini-document
;

; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly.
enable2ndByteCanID = false

[SettingGroups]
	; the referenceName will over-ride previous, so if you are creating a
	; settingGroup with a reference name of lambdaSensor, it will replace the
	; setting group defined in the settingGroups.xml of the TunerStudio config
	; folder. If is is an undefined referenceName, it will be added.
	; keyword	=  referenceName,  DisplayName
; see https://github.com/rusefi/rusefi/issues/6170 issue
;  settingGroup = connectivityProfile, "Protocol Profile"
;    settingOption = CONN_SLOW, "Slower / Wireless"
;    settingOption = CONN_FAST, "High Speed / USB"

; disabled!, see pull #8647 for details, also #8675 for commented out #if's
;#set USE_METRIC_UNITS       ; unset for Fahrenheit
#define USE_METRIC_UNITS=true

[MegaTune]
 ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201
	signature	= "rusEFI master.2025.10.18.alphax-8chan.2673909081"
	re_auto_update_root_url = "https://rusefi.com/build_server"
	re_obfuscated = "false"

[TunerStudio]
	queryCommand	= "S"
	versionInfo	= "V"  ; firmware version for title bar.
	signature= "rusEFI master.2025.10.18.alphax-8chan.2673909081" ; signature is expected to be 7 or more characters.

	; TS will try to use legacy temp units in some cases, showing "deg F" on a CLT gauge that's actually deg C
	useLegacyFTempUnits = false
	ignoreMissingBitOptions = true

	; Optimize comms for fast rusEFI ECUs
	noCommReadDelay = true;
	defaultRuntimeRecordPerSec = 100;
;#if CONN_SLOW
;#else
	maxUnusedRuntimeRange = 1000;
;#endif

	; Set default IP/port to our IP/port
	defaultIpAddress = localhost
	defaultIpPort = 29001

[Constants]
; new packet serial format with CRC
	messageEnvelopeFormat = msEnvelope_1.0

	endianness			= little
	nPages				= 3

	; Note endian in pageIdentifier! second page is 0x0100
	pageIdentifier		= "\x00\x00", "\x00\x01", "\x00\x02"
	; Page 2 size is TS_HIGH_SPEED_COUNT of uint16_t
	pageSize			= 25848, 256, 2048
	pageReadCommand		= "R%2i%2o%2c", "R%2i%2o%2c", "R%2i%2o%2c"
	burnCommand			= "B%2i", "", ""
	pageValueWrite		= "C%2i%2o%2c%v", "C%2i%2o%2c%v", "C%2i%2o%2c%v"
	pageChunkWrite		= "C%2i%2o%2c%v", "C%2i%2o%2c%v", "C%2i%2o%2c%v"
	crc32CheckCommand	= "k%2i%2o%2c", "k%2i%2o%2c", "k%2i%2o%2c"
	retrieveConfigError = "e"

;communication settings
; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/
	pageActivationDelay = 500
;e.g. put writeblocks off and add an interwrite delay
	writeBlocks = on
	interWriteDelay = 10
	blockReadTimeout	= 3000; Milliseconds general timeout

 ; delayAfterPortOpen = 500

	blockingFactor = 1024 ; max chunk size
;end communication settings

	;  name					= bits,	type, offset,  bits
	;  name					= array,  type, offset,  shape, units,	scale, translate,	lo,		hi, digits
	;  name					= scalar, type, offset,			units,	scale, translate,	lo,		hi, digits
#define gpio_list="NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PF0", "PF1", "PF2", "PF3", "PF4", "PF5", "PF6", "PF7", "PF8", "PF9", "PF10", "PF11", "PF12", "PF13", "PF14", "PF15", "PG0", "PG1", "PG2", "PG3", "PG4", "PG5", "PG6", "PG7", "PG8", "PG9", "PG10", "PG11", "PG12", "PG13", "PG14", "PG15", "PH0", "PH1", "PH2", "PH3", "PH4", "PH5", "PH6", "PH7", "PH8", "PH9", "PH10", "PH11", "PH12", "PH13", "PH14", "PH15", "PI0", "PI1", "PI2", "PI3", "PI4", "PI5", "PI6", "PI7", "PI8", "PI9", "PI10", "PI11", "PI12", "PI13", "PI14", "PI15", "PJ0", "PJ1", "PJ2", "PJ3", "PJ4", "PJ5", "PJ6", "PJ7", "PJ8", "PJ9", "PJ10", "PJ11", "PJ12", "PJ13", "PJ14", "PJ15", "PK0", "PK1", "PK2", "PK3", "PK4", "PK5", "PK6", "PK7", "PK8", "PK9", "PK10", "PK11", "PK12", "PK13", "PK14", "PK15"
#define switch_input_pin_e_list="NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","22A - Switch 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","6A - Switch 1","INVALID","14A - Switch 2","15A - Hall Input 1","23A - Hall Input 2","24A - Hall Input 3 / SENT","9A - Hall Input 4","INVALID","INVALID","INVALID","5A - Switch 4","13A - Hall Input 5","21A - Flex","21B - Knock2 Input","INVALID","INVALID","INVALID","INVALID","26A - VSS Hall"
#define output_pin_e_list="NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","6C - High Side 2","INVALID","INVALID","INVALID","INVALID","INVALID","31C - Ignition 12","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","28C - Ignition 6","21C - Ignition 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","14D - VVT 2","20D - VVT 3","21D - VVT 4","22D - Boost","29C - Ignition 9","23C - Ignition 10","30C - Ignition 11","11C - Ignition 1","INVALID","INVALID","INVALID","INVALID","17C - Low Side 5","7C - High Side 3","11D - Main Relay","INVALID","INVALID","10D - Fan","INVALID","5D - Injector 5","4D - Injector 4","3D - Injector 3","5C - High Side 1","8D - VVT 1","16D - Low Side 1","23D - Low Side 2","INVALID","INVALID","14C - Ignition 5","20C - Ignition 4","13C - Ignition 3","19C - Ignition 2","15C - Ignition 8","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","6D - Injector 6","7D - Injector 7","13D - Injector 8","INVALID","INVALID","INVALID","INVALID","34C - Low Side 7","12D - NOS","9C - Low Side 4","15D - Tachometer","1D - Injector 1","2D - Injector 2","INVALID","9D - Fuel Pump","25C - Low Side 6","INVALID","INVALID","8C - Low Side 3","INVALID","INVALID","INVALID","24D - Injector 12","25D - Injector 11","26D - Injector 10","19D - Injector 9"
#define brain_input_pin_e_list="NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","3B/4B - VR2","INVALID","INVALID","INVALID","1B - VR1-/Hall Input max9924","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","15A - Hall Input 1","23A - Hall Input 2","24A - Hall Input 3 / SENT","9A - Hall Input 4","INVALID","INVALID","INVALID","INVALID","13A - Hall Input 5","21A - Flex","INVALID","INVALID","INVALID","INVALID","INVALID","26A - VSS Hall","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","7B/13B - VR4","INVALID","INVALID","INVALID","INVALID","5B/6B - VR3"
#define adc_channel_e_list="NONE","INVALID","3A - Aux Analog 2","On-board MAP","32A - PPS Sensor Input","31A - TPS Sensor Input","24B - Ignition Key Voltage","INVALID","INVALID","19A - Aux Analog 6","1A - Aux Analog 1","2A - Aux Analog 4","INVALID","29A - CLT Sensor Input","27A - IAT Sensor Input","INVALID","12A - Aux Analog 8","INVALID","11A - Aux Analog 3","INVALID","34A - PPS2 Sensor Input","33A - TPS2 Sensor Input","INVALID","INVALID","INVALID","4A - Aux Analog 7","INVALID","10A - Aux Analog 5","INVALID","30A - Aux Temp 2","28A - Aux Temp 1","INVALID","20A - Aux Analog 9"

; TODO: move to autogenerated?
#define can_wbo_re_id_list="ID1 0x190/191", "ID2 0x192/193", "ID3 0x194/195", "ID4 0x196/197", "ID5 0x198/199", "ID6 0x19A/19B", "ID7 0x19C/19D", "ID8 0x19E/19F", "ID9 0x200/201", "ID10 0x202/203", "ID11 0x204/205", "ID12 0x206/207", "ID13 0x208/209", "ID14 0x20A/20B", "ID15 0x20C/20D", "ID16 0x20E/20F"
#define can_wbo_aem_id_list="ID1 0x0000180", "ID2 0x0000181", "ID3 0x0000182", "ID4 0x0000183", "ID5 0x0000184", "ID6 0x0000185", "ID7 0x0000186", "ID8 0x0000187", "ID9 0x0000188", "ID10 0x0000189", "ID11 0x000018A", "ID12 0x000018B", "ID13 0x000018C", "ID14 0x000018D", "ID15 0x000018E", "ID16 0x000018F"

#define can_wbo_re_hwidx_list="INVALID", "First", "INVALID", "INVALID", "INVALID", "Second", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"

#define pin_mode_e_enum="default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN"
#define pin_input_mode_e_enum="DEFAULT", "PULLUP", "PULLDOWN", "INVALID", "INVERTED DEFAULT", "INVERTED PULLUP", "INVERTED PULLDOWN"
#define pin_output_mode_e_enum="default", "default inverted", "open collector", "open collector inverted"
#define gppwm_channel_e_enum="Zero", "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "Aux Temp 1", "Aux Temp 2", "Accel Pedal", "Battery Voltage", "VVT 1 In Actual", "VVT 1 Ex Actual", "VVT 2 In Actual", "VVT 2 Ex Actual", "Ethanol (Flex) %", "Aux Linear 1", "Aux Linear 2", "GPPWM Output 1", "GPPWM Output 2", "GPPWM Output 3", "GPPWM Output 4", "Lua Gauge 1", "Lua Gauge 2", "RPM", "Gear (detected)", "Baro pressure", "EGT 1", "EGT 2", "Aux Linear 3", "Aux Linear 4", "Vehicle speed", "Oil pressure", "Oil temp", "Fuel Pressure"
#define spi_device_e_enum="Off", "SPI1", "SPI2", "SPI3", "SPI4", "SPI5", "SPI6"

; Remove next line when Java toolset gets adjusted to load those from json config into VariablesRegistry
#define engine_load_mode_e_list="Speed Density", "MAF Air Charge", "Alpha-N", "Lua"

; page 2 goes before autogenerated page 1 because ConfigDefinition.jar also generates [SettingContextHelp] section right after
; but all pages should be in [Constants] section
page = 2
	highSpeedOffsets = array, U16, 0, [128], "", 1, 0.00000, 0.00, 65535, 0, noMsqSave
; total TS size = 256


page = 3
	ltft_table_bank1 = array, F32, 0, [16x16], "%", 100.0, 0.00000, -35.0, 35.0, 1, noMsqSave,controllerPriority
ltft_table_bank2 = array, F32, 1024, [16x16], "%", 100.0, 0.00000, -35.0, 35.0, 1, noMsqSave,controllerPriority
; total TS size = 2048


; CONFIG_DEFINITION_START
; this section was generated automatically by rusEFI tool config_definition-all.jar based on (unknown script) integration/rusefi_config.txt

page = 1
engineType = bits, U16, 0, [0:6], 0="DEFAULT_FRANKENSO",22="BMW_M52",50="BMW_M73_MRE",51="BMW_M73_MRE_SLAVE",38="DISCOVERY_PDM",2="DODGE_NEON_1995",46="DODGE_NEON_2003_CRANK",64="DODGE_RAM",61="EEPROM_BENCH_ENGINE",58="ETB_BENCH_ENGINE",21="ET_BOSCH_QUICK_START",24="ET_TEST_WITH_BOSCH_QUICK_START",3="FORD_ASPIRE_1996",11="FORD_COYOTE",67="FORD_ECOBOOST",14="FORD_ESCORT_GT",7="FORD_INLINE_6_1995",40="FRANKENSO_BMW_M73_F",41="FRANKENSO_MIATA_NA6_MAP",59="FRANKENSO_TEST_33810",15="FUEL_BENCH",47="GM_LCV",65="GM_LNF",55="GM_LTG",98="GM_SBC",27="GM_SBC_GEN4",49="GM_SBC_GEN5",8="GY6_139QMB",6="HARLEY",84="HELLEN_121_NISSAN_4_CYL",72="HELLEN_121_NISSAN_6_CYL",85="HELLEN_121_NISSAN_8_CYL",87="HELLEN_121_NISSAN_ALMERA_N16",71="HELLEN_121_VAG_4_CYL",81="HELLEN_121_VAG_8_CYL",78="HELLEN_121_VAG_V6_CYL",79="HELLEN_121_VAG_VR6_CYL",36="HELLEN_128_MERCEDES_4_CYL",88="HELLEN_128_MERCEDES_6_CYL",89="HELLEN_128_MERCEDES_8_CYL",82="HELLEN_154_HYUNDAI_COUPE_BK1",95="HELLEN_154_HYUNDAI_COUPE_BK2",76="HELLEN_154_VAG",75="HELLEN_2CHAN_STIM_QC",74="HELLEN_4CHAN_STIM_QC",57="HELLEN_HONDA_BCM",43="HONDA_600",90="HONDA_K",66="HONDA_OBD1",91="HONDA_OBD2A",104="HYUNDAI_PB",60="L9779_BENCH_ENGINE",54="MAVERICK_X3",34="MAZDA_MIATA_NA6",80="MAZDA_MIATA_NA94",10="MAZDA_MIATA_NA96",83="MAZDA_MIATA_NB1",69="MAZDA_MIATA_NB2",86="MAZDA_MIATA_NB2_36",20="MAZDA_MIATA_NC",33="ME17_9_MISC",68="MERCEDES_M111",1="MIATA_PROTEUS_TCU",99="MINIMAL_PINS",12="MITSUBISHI_3A92",23="MRE_BODY_CONTROL",4="MRE_SECONDARY_CAN",37="MRE_SUBARU_EJ18",62="MRE_VW_B6",35="POLARIS",9="POLARIS_RZR",30="PROTEUS_ANALOG_PWM_TEST",63="PROTEUS_BMW_M73",25="PROTEUS_LUA_DEMO",103="PROTEUS_NISSAN_VQ35",73="PROTEUS_STIM_QC",39="PROTEUS_VW_B6",29="SACHS",92="SIMULATOR_CONFIG",56="SUBARU_2011",70="SUBARU_EG33",17="TCU_4R70W",100="TEST_100",101="TEST_101",18="TEST_33816",28="TEST_CRANK_ENGINE",48="TEST_DC_WASTEGATE_DISCOVERY",26="TEST_ENGINE",45="TEST_ENGINE_VVT",52="TEST_ISSUE_366_BOTH",53="TEST_ISSUE_366_RISE",93="TEST_ISSUE_6451",19="TEST_ROTARY",13="TOYOTA_1NZ_FE",44="TOYOTA_2JZ_GTE_VVTi",102="UNUSED102",31="UNUSED31",42="UNUSED42",94="UNUSED94",105="UNUSED_105",16="UNUSED_16",5="UNUSED_5",97="UNUSED_97",77="VAG_5_CYL",32="VW_ABA",96="WASTEGATE_PROTEUS_TEST"
startButtonSuppressOnStartUpMs = scalar, U16, 2, "", 1, 0, 0, 32000, 0
launchRpm = scalar, U16, 4, "rpm", 1, 0, 0, 20000, 0
rpmHardLimit = scalar, U16, 6, "rpm", 1, 0, 0, 20000, 0
engineSnifferRpmThreshold = scalar, U16, 8, "RPM", 1, 0, 0, 30000, 0
multisparkMaxRpm = scalar, U08, 10, "rpm", 50.0, 0, 0, 3000, 0
maxAcRpm = scalar, U08, 11, "rpm", 50.0, 0, 0, 10000, 0
maxAcTps = scalar, U08, 12, "%", 1, 0, 0, 100, 0
maxAcClt = scalar, S16, 14, "C", 1, 0, 0, 250, 0
compressionRatio = scalar, F32, 16, "CR", 1, 0, 0, 300, 1
idlePositionMin = scalar, U16, 20, "mv", 1, 0, 0, 5000, 0
idlePositionMax = scalar, U16, 22, "mv", 1, 0, 0, 5000, 0
ltitEnabled = bits, U32, 24, [0:0], "false", "true"
ltitEmaAlpha = scalar, U08, 28, "0-255", 1,0,1,255,0
ltitStableRpmThreshold = scalar, U08, 29, "rpm", 1,0,1,100,0
ltitStableTime = scalar, U08, 30, "s", 1,0,1,30,0
ltitCorrectionRate = scalar, U08, 31, "%/s", 1,0,1,100,0
ltitIgnitionOnDelay = scalar, U08, 32, "s", 1,0,1,60,0
ltitIgnitionOffSaveDelay = scalar, U08, 33, "s", 1,0,1,60,0
ltitClampMin = scalar, F32, 36, "%", 1, 0, 0, 100, 1
ltitClampMax = scalar, F32, 40, "%", 1, 0, 100, 300, 1
ltitSmoothingIntensity = scalar, U08, 44, "ratio", 0.01, 0, 0, 2.5, 2
ltitIntegratorThreshold = scalar, F32, 48, "%", 1, 0, 0, 25, 0
mainRelayPin = bits, U16, 52, [0:8], $output_pin_e_list
sdCardCsPin = bits, U16, 54, [0:8], $gpio_list
canTxPin = bits, U16, 56, [0:8], $gpio_list
canRxPin = bits, U16, 58, [0:8], $gpio_list
torqueReductionTriggerPin = bits, U16, 60, [0:8], $switch_input_pin_e_list
launchFuelAdderPercent = scalar, S08, 62, "%", 1, 0, -100, 100, 0
etbJamTimeout = scalar, U08, 63, "sec", 0.02, 0, 0, 5, 2
tachOutputPin = bits, U16, 64, [0:8], $output_pin_e_list
tachOutputPinMode = bits, U08, 66, [0:1], $pin_output_mode_e_enum
acIdleExtraOffset = scalar, U08, 67, "%", 1, 0, 0, 100, 0
multisparkMaxSparkingAngle = scalar, U08, 68, "deg", 1, 0, 0, 60, 0
multisparkMaxExtraSparkCount = scalar, U08, 69, "count", 1, 0, 1, 5, 0
vvtControlMinRpm = scalar, S16, 70, "RPM", 1, 0, 0, 3000, 0
injector_flow = scalar, F32, 72, "", 1, 0, 0, 99999, 2
injector_battLagCorrBattBins = array, S16, 76, [8], "volts", 0.01, 0, 0, 22, 2
injector_battLagCorrPressBins = array, U32, 92, [2], "kPa", 0.1, 0, 0, 30000, 2
injector_battLagCorrTable = array, S16, 100, [8x2], "ms", 0.01, 0, 0, 50, 2
injectorSecondary_flow = scalar, F32, 132, "", 1, 0, 0, 99999, 2
injectorSecondary_battLagCorrBattBins = array, S16, 136, [8], "volts", 0.01, 0, 0, 22, 2
injectorSecondary_battLagCorrPressBins = array, U32, 152, [2], "kPa", 0.1, 0, 0, 30000, 2
injectorSecondary_battLagCorrTable = array, S16, 160, [8x2], "ms", 0.01, 0, 0, 50, 2
isForcedInduction = bits, U32, 192, [0:0], "false", "true"
useFordRedundantTps = bits, U32, 192, [1:1], "false", "true"
enableKline = bits, U32, 192, [2:2], "false", "true"
overrideTriggerGaps = bits, U32, 192, [3:3], "false", "true"
enableFan1WithAc = bits, U32, 192, [4:4], "false", "true"
enableFan2WithAc = bits, U32, 192, [5:5], "false", "true"
enableTrailingSparks = bits, U32, 192, [6:6], "false", "true"
etb_use_two_wires = bits, U32, 192, [7:7], "false", "true"
isDoubleSolenoidIdle = bits, U32, 192, [8:8], "false", "true"
useEeprom = bits, U32, 192, [9:9], "false", "true"
useCicPidForIdle = bits, U32, 192, [10:10], "false", "true"
useTLE8888_cranking_hack = bits, U32, 192, [11:11], "false", "true"
kickStartCranking = bits, U32, 192, [12:12], "false", "true"
useSeparateIdleTablesForCrankingTaper = bits, U32, 192, [13:13], "disabled", "enabled"
launchControlEnabled = bits, U32, 192, [14:14], "disabled", "enabled"
antiLagEnabled = bits, U32, 192, [15:15], "disabled", "enabled"
useRunningMathForCranking = bits, U32, 192, [16:16], "Fixed", "Fuel Map"
displayLogicLevelsInEngineSniffer = bits, U32, 192, [17:17], "false", "true"
useTLE8888_stepper = bits, U32, 192, [18:18], "false", "true"
usescriptTableForCanSniffingFiltering = bits, U32, 192, [19:19], "false", "true"
verboseCan = bits, U32, 192, [20:20], "Do not print", "Print all"
artificialTestMisfire = bits, U32, 192, [21:21], "No thank you", "Danger Mode"
useFordRedundantPps = bits, U32, 192, [22:22], "false", "true"
cltSensorPulldown = bits, U32, 192, [23:23], "false", "true"
iatSensorPulldown = bits, U32, 192, [24:24], "false", "true"
allowIdenticalPps = bits, U32, 192, [25:25], "false", "true"
overrideVvtTriggerGaps = bits, U32, 192, [26:26], "false", "true"
useSpiImu = bits, U32, 192, [27:27], "false", "true"
enableStagedInjection = bits, U32, 192, [28:28], "false", "true"
useIdleAdvanceWhileCoasting = bits, U32, 192, [29:29], "no", "yes"
tpsMin = scalar, S16, 196, "V", 0.0048828125, 0, 0, 5, 2
tpsMax = scalar, S16, 198, "V", 0.0048828125, 0, 0, 5, 2
tpsErrorDetectionTooLow = scalar, S16, 200, "%", 1, 0, -10, 0, 0
tpsErrorDetectionTooHigh = scalar, S16, 202, "%", 1, 0, 100, 110, 0
cranking_rpm = scalar, S16, 204, "RPM", 1, 0, 0, 12000, 0
ignitionDwellForCrankingMs = scalar, F32, 208, "ms", 1, 0, 0, 200, 1
etbRevLimitStart = scalar, U16, 212, "rpm", 1, 0, 0, 15000, 0
etbRevLimitRange = scalar, U16, 214, "rpm", 1, 0, 0, 2000, 0
map_samplingAngleBins = array, F32, 216, [8], "", 1, 0, 0, 18000, 2
map_samplingAngle = array, F32, 248, [8], "deg", 1, 0, -720, 720, 2
map_samplingWindowBins = array, F32, 280, [8], "", 1, 0, 0, 18000, 2
map_samplingWindow = array, F32, 312, [8], "deg", 1, 0, -720, 720, 2
map_sensor_lowValue = scalar, F32, 344, "kPa", 1, 0, -400, 800, 2
map_sensor_highValue = scalar, F32, 348, "kPa", 1, 0, -400, 800, 2
map_sensor_type = bits, U08, 352, [0:4], "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "GM 3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "GM 2 Bar", "GM 1 Bar", "MPXH6400", "MPXH6300", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
map_sensor_hwChannel = bits, U08, 353, [0:5], $adc_channel_e_list
clt_tempC_1 = scalar, F32, 356, "*C", 1, 0, -55, 200, 1
clt_tempC_2 = scalar, F32, 360, "*C", 1, 0, -55, 200, 1
clt_tempC_3 = scalar, F32, 364, "*C", 1, 0, -55, 200, 1
clt_resistance_1 = scalar, F32, 368, "Ohm", 1, 0, 0, 1000000, 1
clt_resistance_2 = scalar, F32, 372, "Ohm", 1, 0, 0, 1000000, 1
clt_resistance_3 = scalar, F32, 376, "Ohm", 1, 0, 0, 1000000, 1
clt_bias_resistor = scalar, F32, 380, "Ohm", 1, 0, 0, 200000, 1
clt_adcChannel = bits, U08, 384, [0:5], $adc_channel_e_list
iat_tempC_1 = scalar, F32, 388, "*C", 1, 0, -55, 200, 1
iat_tempC_2 = scalar, F32, 392, "*C", 1, 0, -55, 200, 1
iat_tempC_3 = scalar, F32, 396, "*C", 1, 0, -55, 200, 1
iat_resistance_1 = scalar, F32, 400, "Ohm", 1, 0, 0, 1000000, 1
iat_resistance_2 = scalar, F32, 404, "Ohm", 1, 0, 0, 1000000, 1
iat_resistance_3 = scalar, F32, 408, "Ohm", 1, 0, 0, 1000000, 1
iat_bias_resistor = scalar, F32, 412, "Ohm", 1, 0, 0, 200000, 1
iat_adcChannel = bits, U08, 416, [0:5], $adc_channel_e_list
launchTimingRetard = scalar, F32, 420, "deg", 1, 0, -180, 180, 2
idleMaximumAirmass = scalar, U08, 424, "mg", 2.0, 0, 0, 500, 1
tuningDetector = scalar, U08, 425, "seconds", 1, -1, 0, 250, 0
alternator_iTermMin = scalar, S16, 426, "", 1, 0, -30000, 30000, 0
alternator_iTermMax = scalar, S16, 428, "", 1, 0, -30000, 30000, 0
displacement = scalar, F32, 432, "L", 1, 0, 0, 65, 3
triggerSimulatorRpm = scalar, U16, 436, "RPM", 1, 0, 0, 30000, 0
cylindersCount = scalar, U32, 440, "", 1, 0, 1, 12, 0
firingOrder = bits, U08, 444, [0:6], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1-2-3-4-5-6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8 Mustang", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8 HO", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "1-2-3-4-5-6-7-8", "1-5-4-8-6-3-7-2", "1-4-3-6-2-5", "1-8-7-3-6-5-4-2", "1-6-2-4-3-5", "1-6-5-4-3-2", "1-4-5-2-3-6", "1-5-4-8-3-7-2-6 Voodoo", "1-6-5-10-2-7-3-8-4-9", "1-8-6-2-7-3-4-5 F136", "fo35", "fo36", "fo37", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
justATempTest = scalar, U08, 445, "", 1, 0, 0, 100, 0
mapSyncThreshold = scalar, U08, 446, "kPa", 1, 0, 0, 50, 0
cylinderBore = scalar, F32, 448, "mm", 1, 0, 0, 2000, 2
fuelAlgorithm = bits, U08, 452, [0:2], $engine_load_mode_e_list
ALSMaxTPS = scalar, U08, 453, "%", 1, 0, 0, 10, 0
crankingInjectionMode = bits, U08, 454, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point"
injectionMode = bits, U08, 455, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point"
boostControlMinRpm = scalar, U16, 456, "", 1, 0, 0, 25000, 0
boostControlMinTps = scalar, U08, 458, "", 1, 0, 0, 100, 0
boostControlMinMap = scalar, U16, 460, "", 1, 0, 0, 650, 0
boostControlPin = bits, U16, 462, [0:8], $output_pin_e_list
boostControlPinMode = bits, U08, 464, [0:1], $pin_output_mode_e_enum
crankingTimingAngle = scalar, F32, 468, "deg", 1, 0, -30, 30, 0
ignitionMode = bits, U08, 472, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors"
gapTrackingLengthOverride = scalar, S08, 473, "count", 1, 0, 1, 18, 0
maxIdleVss = scalar, U08, 474, "kmh", 1, 0, 0, 100, 0
camDecoder2jzPrecision = scalar, U08, 475, "", 1, 0, 0, 100, 0
minOilPressureAfterStart = scalar, U16, 476, "kPa", 1, 0, 0, 1000, 0
timingMode = bits, U08, 478, [0:0], "dynamic", "fixed"
canNbcType = bits, U08, 479, [0:4], "None", "FIAT", "VAG", "MAZDA RX8", "BMW E46", "W202", "BMW E90", "Haltech", "VAG MQB", "Nissan VQ35", "Genesis Coupe", "Honda K", "AiM", "MS Simplified Broadcast", "type 14", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
fixedModeTiming = scalar, F32, 480, "RPM", 1, 0, 0, 3000, 0
globalTriggerAngleOffset = scalar, F32, 484, "deg btdc", 1, 0, -720, 720, 0
analogInputDividerCoefficient = scalar, F32, 488, "coef", 1, 0, 0.01, 10, 2
vbattDividerCoeff = scalar, F32, 492, "coef", 1, 0, 0.01, 99, 2
fanPin = bits, U16, 496, [0:8], $output_pin_e_list
fanPinMode = bits, U08, 498, [0:1], $pin_output_mode_e_enum
fanOnTemperature = scalar, S16, 500, "C", 1, 0, -40, 250, 0
fanOffTemperature = scalar, S16, 502, "C", 1, 0, -40, 250, 0
fan2Pin = bits, U16, 504, [0:8], $output_pin_e_list
fan2PinMode = bits, U08, 506, [0:1], $pin_output_mode_e_enum
fan2OnTemperature = scalar, S16, 508, "C", 1, 0, -40, 250, 0
fan2OffTemperature = scalar, S16, 510, "C", 1, 0, -40, 250, 0
disableFan1AtSpeed = scalar, S08, 512, "", 1, 0, 0, 100, 0
disableFan2AtSpeed = scalar, S08, 513, "", 1, 0, 0, 100, 0
disableFan1WhenStopped = bits, U32, 516, [0:0], "false", "true"
disableFan2WhenStopped = bits, U32, 516, [1:1], "false", "true"
acrPin = bits, U16, 520, [0:8], $output_pin_e_list
driveWheelRevPerKm = scalar, F32, 524, "revs/km", 1, 0, 100, 1000, 1
canSleepPeriodMs = scalar, S32, 528, "ms", 1, 0, 0, 1000, 2
byFirmwareVersion = scalar, S32, 532, "index", 1, 0, 0, 300, 0
tps1_1AdcChannel = bits, U08, 536, [0:5], $adc_channel_e_list
vbattAdcChannel = bits, U08, 537, [0:5], $adc_channel_e_list
fuelLevelSensor = bits, U08, 538, [0:5], $adc_channel_e_list
tps2_1AdcChannel = bits, U08, 539, [0:5], $adc_channel_e_list
idle_derivativeFilterLoss = scalar, F32, 540, "x", 1, 0, -1000000, 1000000, 4
trigger_type = bits, U32, 544, [0:6], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "INVALID", "GM_7X", "Daihatsu 3 cylinder", "Mazda SOHC 4", "60-2", "36-1", "Mercedes Two Segment", "Single Tooth", "EZ30", "INVALID", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "INVALID", "Half Moon", "Dodge Ram 1+16", "60-2 Wrong Polarity", "Benelli Tre", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "INVALID", "Rover K", "GM 24x 5 degree", "Honda CBR 600 Cam", "INVALID", "probably broken ChryslerNGC 36-2-2", "3-1 skipped", "Dodge Neon 2003 crank", "Miata NB", "INVALID", "INVALID", "Subaru 7+6", "Jeep 18-2-2-2", "12crank/24cam", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "INVALID", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "INVALID", "36-2", "Subaru SVX", "Suzuki K6A", "Subaru 7 without 6", "INVALID", "INVALID", "GM 60-2-2-2", "Skoda Favorit", "INVALID", "Kawa KX450F", "Nissan VQ35", "INVALID", "Nissan VQ30", "Nissan QR25", "INVALID", "Subaru SVX Crank 1", "Subaru SVX Cam VVT", "Ford PIP", "Suzuki G13B", "Honda K 4+1", "Nissan MR18 Crank", "32-2", "36-2-1", "36-2-1-1", "3-0", "INVALID", "GM 24x 3 degree", "60-2-2 F3R", "Mitsu 4G63 Crank", "x2 30 Deg camshaft BTDC", "INVALID", "INVALID", "6-0", "Daihatsu 4 cylinder", "INVALID", "dev", "Nissan HR", "Arctic Cat", "HR12 in", "HONDA J30A2", "trg88", "trg89", "Dodge/Chrysler/Jeep V8 5.7L", "Toyota UZ 3 tooth", "Jeep EVD 36-2-2", "Jeep 66-2-2-2", "Subaru 6 tooth Crank", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
trigger_customTotalToothCount = scalar, S32, 548, "number", 1, 0, 1, 300, 0
trigger_customSkippedToothCount = scalar, S32, 552, "number", 1, 0, 0, 300, 0
airByRpmTaper = scalar, F32, 556, "%", 1, 0, 0, 50, 1
boostControlSafeDutyCycle = scalar, U08, 560, "%", 1, 0, 0, 100, 0
mafAdcChannel = bits, U08, 561, [0:5], $adc_channel_e_list
acrRevolutions = scalar, U08, 562, "", 1, 0, 0, 100, 0
calibrationBirthday = scalar, S32, 564, "", 1, 0, 0, 100, 0
adcVcc = scalar, F32, 568, "volts", 1, 0, 0, 6, 3
mapCamDetectionAnglePosition = scalar, F32, 572, "Deg", 1, 0, 0, 360, 0
camInputs1 = bits, U16, 576, [0:8], $brain_input_pin_e_list
camInputs2 = bits, U16, 578, [0:8], $brain_input_pin_e_list
camInputs3 = bits, U16, 580, [0:8], $brain_input_pin_e_list
camInputs4 = bits, U16, 582, [0:8], $brain_input_pin_e_list
afr_hwChannel = bits, U08, 584, [0:5], $adc_channel_e_list
afr_hwChannel2 = bits, U08, 585, [0:5], $adc_channel_e_list
afr_v1 = scalar, F32, 588, "volts", 1, 0, 0, 10, 2
afr_value1 = scalar, F32, 592, "AFR", 1, 0, 0, 1000, 2
afr_v2 = scalar, F32, 596, "volts", 1, 0, 0, 10, 2
afr_value2 = scalar, F32, 600, "AFR", 1, 0, 0, 1000, 2
throttlePedalPositionAdcChannel = bits, U08, 604, [0:5], $adc_channel_e_list
etbSplit = scalar, U08, 605, "%", 0.1, 0, 0, 5, 1
tle6240_cs = bits, U16, 606, [0:8], $gpio_list
tle6240_csPinMode = bits, U08, 608, [0:1], $pin_output_mode_e_enum
mc33810_csPinMode = bits, U08, 609, [0:1], $pin_output_mode_e_enum
baroSensor_lowValue = scalar, F32, 612, "kPa", 1, 0, -400, 800, 2
baroSensor_highValue = scalar, F32, 616, "kPa", 1, 0, -400, 800, 2
baroSensor_type = bits, U08, 620, [0:4], "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "GM 3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "GM 2 Bar", "GM 1 Bar", "MPXH6400", "MPXH6300", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
baroSensor_hwChannel = bits, U08, 621, [0:5], $adc_channel_e_list
idle_solenoidFrequency = scalar, S32, 624, "Hz", 1, 0, 0, 3000, 0
idle_solenoidPin = bits, U16, 628, [0:8], $output_pin_e_list
idle_stepperDirectionPin = bits, U16, 630, [0:8], $gpio_list
idle_stepperStepPin = bits, U16, 632, [0:8], $gpio_list
idle_solenoidPinMode = bits, U08, 634, [0:1], $pin_output_mode_e_enum
knockRetardAggression = scalar, U08, 636, "%", 0.1, 0, 0, 20, 1
knockRetardReapplyRate = scalar, U08, 637, "deg/s", 0.1, 0, 0, 10, 1
engineSyncCam = bits, S08, 638, [0:1], "Intake First Bank", "Exhaust First Bank", "Intake Second Bank", "Exhaust Second Bank"
sdCardCsPinMode = bits, U08, 639, [0:1], $pin_output_mode_e_enum
vssGearRatio = scalar, U16, 640, "ratio", 0.001, 0, 0, 60, 3
vssFilterReciprocal = scalar, U08, 642, "", 1, 0, 3, 200, 0
vssToothCount = scalar, U08, 643, "count", 1, 0, 1, 100, 0
idleVeOverrideMode = bits, U08, 644, [0:1], "None", "MAP", "TPS", "INVALID"
l9779_cs = bits, U16, 646, [0:8], $gpio_list
injectionPins1 = bits, U16, 648, [0:8], $output_pin_e_list
injectionPins2 = bits, U16, 650, [0:8], $output_pin_e_list
injectionPins3 = bits, U16, 652, [0:8], $output_pin_e_list
injectionPins4 = bits, U16, 654, [0:8], $output_pin_e_list
injectionPins5 = bits, U16, 656, [0:8], $output_pin_e_list
injectionPins6 = bits, U16, 658, [0:8], $output_pin_e_list
injectionPins7 = bits, U16, 660, [0:8], $output_pin_e_list
injectionPins8 = bits, U16, 662, [0:8], $output_pin_e_list
injectionPins9 = bits, U16, 664, [0:8], $output_pin_e_list
injectionPins10 = bits, U16, 666, [0:8], $output_pin_e_list
injectionPins11 = bits, U16, 668, [0:8], $output_pin_e_list
injectionPins12 = bits, U16, 670, [0:8], $output_pin_e_list
ignitionPins1 = bits, U16, 672, [0:8], $output_pin_e_list
ignitionPins2 = bits, U16, 674, [0:8], $output_pin_e_list
ignitionPins3 = bits, U16, 676, [0:8], $output_pin_e_list
ignitionPins4 = bits, U16, 678, [0:8], $output_pin_e_list
ignitionPins5 = bits, U16, 680, [0:8], $output_pin_e_list
ignitionPins6 = bits, U16, 682, [0:8], $output_pin_e_list
ignitionPins7 = bits, U16, 684, [0:8], $output_pin_e_list
ignitionPins8 = bits, U16, 686, [0:8], $output_pin_e_list
ignitionPins9 = bits, U16, 688, [0:8], $output_pin_e_list
ignitionPins10 = bits, U16, 690, [0:8], $output_pin_e_list
ignitionPins11 = bits, U16, 692, [0:8], $output_pin_e_list
ignitionPins12 = bits, U16, 694, [0:8], $output_pin_e_list
injectionPinMode = bits, U08, 696, [0:1], $pin_output_mode_e_enum
ignitionPinMode = bits, U08, 697, [0:1], $pin_output_mode_e_enum
fuelPumpPin = bits, U16, 698, [0:8], $output_pin_e_list
fuelPumpPinMode = bits, U08, 700, [0:1], $pin_output_mode_e_enum
gapVvtTrackingLengthOverride = scalar, S08, 701, "count", 1, 0, 1, 4, 0
malfunctionIndicatorPin = bits, U16, 702, [0:8], $output_pin_e_list
malfunctionIndicatorPinMode = bits, U08, 704, [0:1], $pin_output_mode_e_enum
clutchDownPin = bits, U16, 706, [0:8], $switch_input_pin_e_list
alternatorControlPin = bits, U16, 708, [0:8], $output_pin_e_list
alternatorControlPinMode = bits, U08, 710, [0:1], $pin_output_mode_e_enum
clutchDownPinMode = bits, U08, 711, [0:2], $pin_input_mode_e_enum
digitalPotentiometerChipSelect1 = bits, U16, 712, [0:8], $gpio_list
digitalPotentiometerChipSelect2 = bits, U16, 714, [0:8], $gpio_list
digitalPotentiometerChipSelect3 = bits, U16, 716, [0:8], $gpio_list
digitalPotentiometerChipSelect4 = bits, U16, 718, [0:8], $gpio_list
electronicThrottlePin1Mode = bits, U08, 720, [0:1], $pin_output_mode_e_enum
max31855spiDevice = bits, U08, 721, [0:2], $spi_device_e_enum
debugTriggerSync = bits, U16, 722, [0:8], $gpio_list
digitalPotentiometerSpiDevice = bits, U08, 724, [0:2], $spi_device_e_enum
brakePedalPinMode = bits, U08, 725, [0:2], $pin_input_mode_e_enum
mc33972_cs = bits, U16, 726, [0:8], $gpio_list
mc33972_csPinMode = bits, U08, 728, [0:1], $pin_output_mode_e_enum
auxFastSensor1_adcChannel = bits, U08, 729, [0:5], $adc_channel_e_list
tps1_2AdcChannel = bits, U08, 730, [0:5], $adc_channel_e_list
tps2_2AdcChannel = bits, U08, 731, [0:5], $adc_channel_e_list
throttlePedalPositionSecondAdcChannel = bits, U08, 732, [0:5], $adc_channel_e_list
afr_type = bits, S08, 733, [0:2], "BPSX", "Innovate", "14Point7", "INVALID", "PLX", "Custom", "AEM", "INVALID"
mc33810_cs1 = bits, U16, 734, [0:8], $gpio_list
idle_antiwindupFreq = scalar, F32, 736, "x", 1, 0, -1000000, 1000000, 4
triggerInputPins1 = bits, U16, 740, [0:8], $brain_input_pin_e_list
triggerInputPins2 = bits, U16, 742, [0:8], $brain_input_pin_e_list
mc33_t_min_boost = scalar, U16, 744, "us", 1, 0, 0, 10000, 0
finalGearRatio = scalar, U16, 746, "ratio", 0.01, 0, 0, 10, 2
tcuInputSpeedSensorPin = bits, U16, 748, [0:8], $brain_input_pin_e_list
tcuInputSpeedSensorTeeth = scalar, U08, 750, "", 1, 0, 0, 100, 0
triggerSimulatorPins1 = bits, U16, 752, [0:8], $gpio_list
triggerSimulatorPins2 = bits, U16, 754, [0:8], $gpio_list
fordInjectorSmallPulseSlope = scalar, U16, 756, "g/s", 0.001, 0, 0, 65, 3
triggerSimulatorPinModes1 = bits, U08, 758, [0:1], $pin_output_mode_e_enum
triggerSimulatorPinModes2 = bits, U08, 759, [0:1], $pin_output_mode_e_enum
maf2AdcChannel = bits, U08, 760, [0:5], $adc_channel_e_list
o2heaterPin = bits, U16, 762, [0:8], $output_pin_e_list
o2heaterPinModeTodO = bits, U08, 764, [0:1], $pin_output_mode_e_enum
lambdaProtectionMinRpm = scalar, U08, 765, "RPM", 100.0, 0, 0, 25000, 0
lambdaProtectionMinLoad = scalar, U08, 766, "%", 10.0, 0, 0, 650, 0
is_enabled_spi_1 = bits, U32, 768, [0:0], "false", "true"
is_enabled_spi_2 = bits, U32, 768, [1:1], "false", "true"
is_enabled_spi_3 = bits, U32, 768, [2:2], "false", "true"
isSdCardEnabled = bits, U32, 768, [3:3], "disabled", "enabled"
rusefiVerbose29b = bits, U32, 768, [4:4], "11 bit", "29 bit"
rethrowHardFault = bits, U32, 768, [5:5], "false", "true"
verboseQuad = bits, U32, 768, [6:6], "false", "true"
useStepperIdle = bits, U32, 768, [7:7], "false", "true"
enabledStep1Limiter = bits, U32, 768, [8:8], "false", "true"
lambdaProtectionEnable = bits, U32, 768, [9:9], "false", "true"
verboseTLE8888 = bits, U32, 768, [10:10], "false", "true"
enableVerboseCanTx = bits, U32, 768, [11:11], "false", "true"
externalRusEfiGdiModule = bits, U32, 768, [12:12], "false", "true"
unusedFlipWboChannels = bits, U32, 768, [13:13], "false", "true"
measureMapOnlyInOneCylinder = bits, U32, 768, [14:14], "false", "true"
stepperForceParkingEveryRestart = bits, U32, 768, [15:15], "false", "true"
isFasterEngineSpinUpEnabled = bits, U32, 768, [16:16], "disabled", "enabled"
coastingFuelCutEnabled = bits, U32, 768, [17:17], "false", "true"
useIacTableForCoasting = bits, U32, 768, [18:18], "disabled", "enabled"
useNoiselessTriggerDecoder = bits, U32, 768, [19:19], "false", "true"
useIdleTimingPidControl = bits, U32, 768, [20:20], "false", "true"
disableEtbWhenEngineStopped = bits, U32, 768, [21:21], "false", "true"
is_enabled_spi_4 = bits, U32, 768, [22:22], "false", "true"
pauseEtbControl = bits, U32, 768, [23:23], "false", "true"
verboseKLine = bits, U32, 768, [24:24], "false", "true"
idleIncrementalPidCic = bits, U32, 768, [25:25], "false", "true"
enableAemXSeries = bits, U32, 768, [26:26], "false", "true"
modeledFlowIdle = bits, U32, 768, [27:27], "false", "true"
logicAnalyzerPins1 = bits, U16, 772, [0:8], $brain_input_pin_e_list
logicAnalyzerPins2 = bits, U16, 774, [0:8], $brain_input_pin_e_list
logicAnalyzerPins3 = bits, U16, 776, [0:8], $brain_input_pin_e_list
logicAnalyzerPins4 = bits, U16, 778, [0:8], $brain_input_pin_e_list
mainRelayPinMode = bits, U08, 780, [0:1], $pin_output_mode_e_enum
verboseCanBaseAddress = scalar, U32, 784, "", 1, 0, 0, 536870911, 0
mc33_hvolt = scalar, U08, 788, "v", 1, 0, 40, 70, 0
minimumBoostClosedLoopMap = scalar, U16, 790, "kPa", 1, 0, 0, 650, 0
initialIgnitionCutPercent = scalar, S08, 792, "%", 1, 0, 0, 100, 0
finalIgnitionCutPercentBeforeLaunch = scalar, S08, 793, "%", 1, 0, 0, 100, 0
boostOpenLoopYAxis = bits, U08, 794, [0:5], $gppwm_channel_e_enum
l9779spiDevice = bits, U08, 795, [0:2], $spi_device_e_enum
imuType = bits, U08, 796, [0:4], "None", "VAG", "MM5.10", "type 3", "type 4", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
idlePidRpmUpperLimit = scalar, S16, 798, "RPM", 1, 0, 0, 1000, 0
applyNonlinearBelowPulse = scalar, U16, 800, "ms", 0.001, 0, 0, 30, 3
lps25BaroSensorScl = bits, U16, 802, [0:8], $gpio_list
lps25BaroSensorSda = bits, U16, 804, [0:8], $gpio_list
vehicleSpeedSensorInputPin = bits, U16, 806, [0:8], $brain_input_pin_e_list
clutchUpPin = bits, U16, 808, [0:8], $switch_input_pin_e_list
injectorNonlinearMode = bits, U08, 810, [0:1], "None", "Polynomial", "Ford (dual slope)", "INVALID"
clutchUpPinMode = bits, U08, 811, [0:2], $pin_input_mode_e_enum
max31855_cs1 = bits, U16, 812, [0:8], $gpio_list
max31855_cs2 = bits, U16, 814, [0:8], $gpio_list
max31855_cs3 = bits, U16, 816, [0:8], $gpio_list
max31855_cs4 = bits, U16, 818, [0:8], $gpio_list
max31855_cs5 = bits, U16, 820, [0:8], $gpio_list
max31855_cs6 = bits, U16, 822, [0:8], $gpio_list
max31855_cs7 = bits, U16, 824, [0:8], $gpio_list
max31855_cs8 = bits, U16, 826, [0:8], $gpio_list
flexSensorPin = bits, U16, 828, [0:8], $brain_input_pin_e_list
torqueReductionArmingRpm = scalar, U16, 830, "rpm", 1, 0, 0, 20000, 0
stepperDirectionPinMode = bits, U08, 832, [0:1], $pin_output_mode_e_enum
mc33972spiDevice = bits, U08, 833, [0:2], $spi_device_e_enum
stoichRatioSecondary = scalar, U08, 834, ":1", 0.1, 0, 5, 25, 1
etbMaximumPosition = scalar, U08, 835, "%", 1, 0, 70, 100, 0
sdCardLogFrequency = scalar, U16, 836, "hz", 1, 0, 1, 250, 0
idlePositionChannel = bits, U08, 838, [0:5], $adc_channel_e_list
launchCorrectionsEndRpm = scalar, U16, 840, "", 1, 0, 0, 32000, 0
starterRelayDisablePin = bits, U16, 842, [0:8], $output_pin_e_list
starterRelayDisablePinMode = bits, U08, 844, [0:1], $pin_output_mode_e_enum
secondSolenoidPin = bits, U16, 846, [0:8], $output_pin_e_list
startStopButtonPin = bits, U16, 848, [0:8], $switch_input_pin_e_list
lambdaProtectionRestoreRpm = scalar, U08, 850, "RPM", 100.0, 0, 0, 25000, 0
acRelayPinMode = bits, U08, 851, [0:1], $pin_output_mode_e_enum
mapMinBufferLength = scalar, S32, 852, "count", 1, 0, 1, 24, 0
idlePidDeactivationTpsThreshold = scalar, S16, 856, "%", 1, 0, 0, 50, 0
stepperParkingExtraSteps = scalar, S16, 858, "%", 1, 0, 0, 3000, 0
tps1SecondaryMin = scalar, S16, 860, "V", 0.0048828125, 0, 0, 5, 2
tps1SecondaryMax = scalar, S16, 862, "V", 0.0048828125, 0, 0, 5, 2
startCrankingDuration = scalar, U16, 864, "Seconds", 1, 0, 0, 30, 0
triggerErrorPin = bits, U16, 866, [0:8], $gpio_list
triggerErrorPinMode = bits, U08, 868, [0:1], $pin_output_mode_e_enum
acRelayPin = bits, U16, 870, [0:8], $output_pin_e_list
lambdaProtectionMinTps = scalar, U08, 872, "%", 1, 0, 0, 100, 0
lambdaProtectionTimeout = scalar, U08, 873, "s", 0.1, 0, 0, 10, 1
scriptSetting1 = scalar, F32, 876, "", 1, 0, 0, 18000, 2
scriptSetting2 = scalar, F32, 880, "", 1, 0, 0, 18000, 2
scriptSetting3 = scalar, F32, 884, "", 1, 0, 0, 18000, 2
scriptSetting4 = scalar, F32, 888, "", 1, 0, 0, 18000, 2
scriptSetting5 = scalar, F32, 892, "", 1, 0, 0, 18000, 2
scriptSetting6 = scalar, F32, 896, "", 1, 0, 0, 18000, 2
scriptSetting7 = scalar, F32, 900, "", 1, 0, 0, 18000, 2
scriptSetting8 = scalar, F32, 904, "", 1, 0, 0, 18000, 2
spi1mosiPin = bits, U16, 908, [0:8], $gpio_list
spi1misoPin = bits, U16, 910, [0:8], $gpio_list
spi1sckPin = bits, U16, 912, [0:8], $gpio_list
spi2mosiPin = bits, U16, 914, [0:8], $gpio_list
spi2misoPin = bits, U16, 916, [0:8], $gpio_list
spi2sckPin = bits, U16, 918, [0:8], $gpio_list
spi3mosiPin = bits, U16, 920, [0:8], $gpio_list
spi3misoPin = bits, U16, 922, [0:8], $gpio_list
spi3sckPin = bits, U16, 924, [0:8], $gpio_list
cdmInputPin = bits, U16, 926, [0:8], $gpio_list
consoleUartDevice = bits, U08, 928, [0:1], "Off", "UART1", "UART2", "UART3"
idleReturnTargetRamp = bits, U32, 932, [0:0], "no", "yes"
useInjectorFlowLinearizationTable = bits, U32, 932, [1:1], "false", "true"
useHbridgesToDriveIdleStepper = bits, U32, 932, [2:2], "false", "true"
multisparkEnable = bits, U32, 932, [3:3], "false", "true"
enableLaunchRetard = bits, U32, 932, [4:4], "no", "yes"
canInputBCM = bits, U32, 932, [5:5], "false", "true"
consumeObdSensors = bits, U32, 932, [6:6], "false", "true"
enableCanVss = bits, U32, 932, [7:7], "false", "true"
stftIgnoreErrorMagnitude = bits, U32, 932, [8:8], "no", "yes"
vvtBooleanForVerySpecialCases = bits, U32, 932, [9:9], "false", "true"
enableSoftwareKnock = bits, U32, 932, [10:10], "disabled", "enabled"
verboseVVTDecoding = bits, U32, 932, [11:11], "false", "true"
invertCamVVTSignal = bits, U32, 932, [12:12], "Rising", "Falling"
alphaNUseIat = bits, U32, 932, [13:13], "false", "true"
knockBankCyl1 = bits, U32, 932, [14:14], "Channel 1", "Channel 2"
knockBankCyl2 = bits, U32, 932, [15:15], "Channel 1", "Channel 2"
knockBankCyl3 = bits, U32, 932, [16:16], "Channel 1", "Channel 2"
knockBankCyl4 = bits, U32, 932, [17:17], "Channel 1", "Channel 2"
knockBankCyl5 = bits, U32, 932, [18:18], "Channel 1", "Channel 2"
knockBankCyl6 = bits, U32, 932, [19:19], "Channel 1", "Channel 2"
knockBankCyl7 = bits, U32, 932, [20:20], "Channel 1", "Channel 2"
knockBankCyl8 = bits, U32, 932, [21:21], "Channel 1", "Channel 2"
knockBankCyl9 = bits, U32, 932, [22:22], "Channel 1", "Channel 2"
knockBankCyl10 = bits, U32, 932, [23:23], "Channel 1", "Channel 2"
knockBankCyl11 = bits, U32, 932, [24:24], "Channel 1", "Channel 2"
knockBankCyl12 = bits, U32, 932, [25:25], "Channel 1", "Channel 2"
tcuEnabled = bits, U32, 932, [26:26], "false", "true"
canBroadcastUseChannelTwo = bits, U32, 932, [27:27], "first", "second"
useRawOutputToDriveIdleStepper = bits, U32, 932, [28:28], "false", "true"
verboseCan2 = bits, U32, 932, [29:29], "Do not print", "Print all"
etbIo1_directionPin1 = bits, U16, 936, [0:8], $gpio_list
etbIo1_directionPin2 = bits, U16, 938, [0:8], $gpio_list
etbIo1_controlPin = bits, U16, 940, [0:8], $gpio_list
etbIo1_disablePin = bits, U16, 942, [0:8], $gpio_list
etbIo2_directionPin1 = bits, U16, 944, [0:8], $gpio_list
etbIo2_directionPin2 = bits, U16, 946, [0:8], $gpio_list
etbIo2_controlPin = bits, U16, 948, [0:8], $gpio_list
etbIo2_disablePin = bits, U16, 950, [0:8], $gpio_list
ALSActivatePin = bits, U16, 952, [0:8], $switch_input_pin_e_list
launchActivatePin = bits, U16, 954, [0:8], $switch_input_pin_e_list
boostPid_pFactor = scalar, F32, 956, "", 1, 0, -10000, 10000, 4
boostPid_iFactor = scalar, F32, 960, "", 1, 0, -10000, 10000, 4
boostPid_dFactor = scalar, F32, 964, "", 1, 0, -10000, 10000, 4
boostPid_offset = scalar, S16, 968, "", 1, 0, -1000, 1000, 0
boostPid_periodMs = scalar, S16, 970, "ms", 1, 0, 0, 3000, 0
boostPid_minValue = scalar, S16, 972, "", 1, 0, -30000, 30000, 0
boostPid_maxValue = scalar, S16, 974, "", 1, 0, -30000, 30000, 0
boostType = bits, U08, 976, [0:0], "Open Loop", "Open + Closed Loop"
ignitionKeyDigitalPinMode = bits, U08, 977, [0:2], $pin_input_mode_e_enum
ignitionKeyDigitalPin = bits, U16, 978, [0:8], $gpio_list
boostPwmFrequency = scalar, S32, 980, "Hz", 1, 0, 0, 3000, 0
launchActivationMode = bits, S08, 984, [0:2], "Launch Button", "Clutch Down Switch", "Speed Based", "Brake Pedal", "Lua", "INVALID", "INVALID", "INVALID"
antiLagActivationMode = bits, S08, 985, [0:1], "Switch Input", "Always Active", "Lua", "INVALID"
crankingCondition = bits, S08, 986, [0:1], "None", "Brake", "Clutch", "INVALID"
tpsAccelLookback = scalar, U08, 987, "sec", 0.05, 0, 0, 5, 2
tpsDecelEnleanmentThreshold = scalar, F32, 988, "roc", 1, 0, 0, 200, 1
tpsDecelEnleanmentMultiplier = scalar, F32, 992, "coeff", 1, 0, 0, 200, 2
accelEnrichmentMode = bits, U08, 996, [0:1], "MS Adder", "Percent Adder", "MAP Prediction", "INVALID"
noFuelTrimAfterDfcoTime = scalar, U08, 997, "sec", 0.1, 0, 0, 10, 1
noFuelTrimAfterAccelTime = scalar, U08, 998, "sec", 0.1, 0, 0, 10, 1
launchSpeedThreshold = scalar, S32, 1000, "kmh", 1, 0, 0, 300, 0
launchRpmWindow = scalar, S32, 1004, "RPM", 1, 0, 0, 8000, 0
triggerEventsTimeoutMs = scalar, F32, 1008, "ms", 1, 0, 0, 3000, 3
ppsExpAverageAlpha = scalar, F32, 1012, "percent", 100.0, 0, 0, 100, 1
mapExpAverageAlpha = scalar, F32, 1016, "", 1, 0, 0, 1, 3
magicNumberAvailableForDevTricks = scalar, F32, 1020, "", 1, 0, 0, 100, 0
turbochargerFilter = scalar, F32, 1024, "", 1, 0, 0, 100, 0
launchTpsThreshold = scalar, S32, 1028, "", 1, 0, 0, 20000, 0
launchActivateDelay = scalar, F32, 1032, "", 1, 0, 0, 20000, 0
stft_maxIdleRegionRpm = scalar, U08, 1036, "RPM", 50.0, 0, 0, 12000, 0
stft_maxOverrunLoad = scalar, U16, 1038, "load", 1, 0, 0, 250, 0
stft_minPowerLoad = scalar, U16, 1040, "load", 1, 0, 0, 250, 0
stft_deadband = scalar, U08, 1042, "%", 0.1, 0, 0, 3, 1
stft_minClt = scalar, S08, 1043, "C", 1, 0, -20, 100, 0
stft_minAfr = scalar, U08, 1044, "afr", 0.1, 0, 10, 20, 1
stft_maxAfr = scalar, U08, 1045, "afr", 0.1, 0, 10, 20, 1
stft_startupDelay = scalar, U08, 1046, "seconds", 1, 0, 0, 250, 0
stft_cellCfgs1_maxAdd = scalar, U08, 1048, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs1_maxRemove = scalar, U08, 1049, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs1_timeConstant = scalar, U16, 1050, "sec", 0.1, 0, 0.1, 100, 2
stft_cellCfgs2_maxAdd = scalar, U08, 1052, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs2_maxRemove = scalar, U08, 1053, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs2_timeConstant = scalar, U16, 1054, "sec", 0.1, 0, 0.1, 100, 2
stft_cellCfgs3_maxAdd = scalar, U08, 1056, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs3_maxRemove = scalar, U08, 1057, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs3_timeConstant = scalar, U16, 1058, "sec", 0.1, 0, 0.1, 100, 2
stft_cellCfgs4_maxAdd = scalar, U08, 1060, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs4_maxRemove = scalar, U08, 1061, "%", 0.1, 0, 0, 25, 1
stft_cellCfgs4_timeConstant = scalar, U16, 1062, "sec", 0.1, 0, 0.1, 100, 2
ltft_enabled = bits, U32, 1064, [0:0], "no", "yes"
ltft_correctionEnabled = bits, U32, 1064, [1:1], "no", "yes"
ltft_deadband = scalar, U08, 1068, "%", 0.1, 0, 0, 3, 1
ltft_maxAdd = scalar, U08, 1069, "%", 0.1, 0, 0, 25, 1
ltft_maxRemove = scalar, U08, 1070, "%", 0.1, 0, 0, 25, 1
ltft_timeConstant = scalar, U16, 1072, "sec", 1, 0, 1, 3000, 0
stepperDcIo1_directionPin1 = bits, U16, 1076, [0:8], $gpio_list
stepperDcIo1_directionPin2 = bits, U16, 1078, [0:8], $gpio_list
stepperDcIo1_controlPin = bits, U16, 1080, [0:8], $gpio_list
stepperDcIo1_disablePin = bits, U16, 1082, [0:8], $gpio_list
stepperDcIo2_directionPin1 = bits, U16, 1084, [0:8], $gpio_list
stepperDcIo2_directionPin2 = bits, U16, 1086, [0:8], $gpio_list
stepperDcIo2_controlPin = bits, U16, 1088, [0:8], $gpio_list
stepperDcIo2_disablePin = bits, U16, 1090, [0:8], $gpio_list
engineMake = string, ASCII, 1092, 32
engineCode = string, ASCII, 1124, 32
vehicleName = string, ASCII, 1156, 32
tcu_solenoid1 = bits, U16, 1188, [0:8], $output_pin_e_list
tcu_solenoid2 = bits, U16, 1190, [0:8], $output_pin_e_list
tcu_solenoid3 = bits, U16, 1192, [0:8], $output_pin_e_list
tcu_solenoid4 = bits, U16, 1194, [0:8], $output_pin_e_list
tcu_solenoid5 = bits, U16, 1196, [0:8], $output_pin_e_list
tcu_solenoid6 = bits, U16, 1198, [0:8], $output_pin_e_list
etbFunctions1 = bits, U08, 1200, [0:2], "None", "Throttle 1", "Throttle 2", "Idle Valve", "Wastegate", "INVALID", "INVALID", "INVALID"
etbFunctions2 = bits, U08, 1201, [0:2], "None", "Throttle 1", "Throttle 2", "Idle Valve", "Wastegate", "INVALID", "INVALID", "INVALID"
drv8860spiDevice = bits, U08, 1202, [0:2], $spi_device_e_enum
drv8860_cs = bits, U16, 1204, [0:8], $gpio_list
drv8860_csPinMode = bits, U08, 1206, [0:1], $pin_output_mode_e_enum
drv8860_miso = bits, U16, 1208, [0:8], $gpio_list
luaOutputPins1 = bits, U16, 1210, [0:8], $output_pin_e_list
luaOutputPins2 = bits, U16, 1212, [0:8], $output_pin_e_list
luaOutputPins3 = bits, U16, 1214, [0:8], $output_pin_e_list
luaOutputPins4 = bits, U16, 1216, [0:8], $output_pin_e_list
luaOutputPins5 = bits, U16, 1218, [0:8], $output_pin_e_list
luaOutputPins6 = bits, U16, 1220, [0:8], $output_pin_e_list
luaOutputPins7 = bits, U16, 1222, [0:8], $output_pin_e_list
luaOutputPins8 = bits, U16, 1224, [0:8], $output_pin_e_list
vvtOffsets1 = scalar, F32, 1228, "value", 1, 0, -720, 1000, 1
vvtOffsets2 = scalar, F32, 1232, "value", 1, 0, -720, 1000, 1
vvtOffsets3 = scalar, F32, 1236, "value", 1, 0, -720, 1000, 1
vvtOffsets4 = scalar, F32, 1240, "value", 1, 0, -720, 1000, 1
vrThreshold1_rpmBins = array, U08, 1244, [6], "rpm", 50.0, 0, 0, 12000, 0
vrThreshold1_values = array, U08, 1250, [6], "volts", 0.01, 0, 0, 2.5, 2
vrThreshold1_pin = bits, U16, 1256, [0:8], $gpio_list
vrThreshold2_rpmBins = array, U08, 1260, [6], "rpm", 50.0, 0, 0, 12000, 0
vrThreshold2_values = array, U08, 1266, [6], "volts", 0.01, 0, 0, 2.5, 2
vrThreshold2_pin = bits, U16, 1272, [0:8], $gpio_list
vrThreshold3_rpmBins = array, U08, 1276, [6], "rpm", 50.0, 0, 0, 12000, 0
vrThreshold3_values = array, U08, 1282, [6], "volts", 0.01, 0, 0, 2.5, 2
vrThreshold3_pin = bits, U16, 1288, [0:8], $gpio_list
gpPwmNote1 = string, ASCII, 1292, 16
gpPwmNote2 = string, ASCII, 1308, 16
gpPwmNote3 = string, ASCII, 1324, 16
gpPwmNote4 = string, ASCII, 1340, 16
tps2SecondaryMin = scalar, U16, 1356, "ADC", 1, 0, 0, 1000, 0
tps2SecondaryMax = scalar, U16, 1358, "ADC", 1, 0, 0, 1000, 0
widebandOnSecondBus = bits, U32, 1360, [0:0], "CAN1", "CAN2"
fuelClosedLoopCorrectionEnabled = bits, U32, 1360, [1:1], "disabled", "enabled"
alwaysWriteSdCard = bits, U32, 1360, [2:2], "false", "true"
knockDetectionUseDoubleFrequency = bits, U32, 1360, [3:3], "first harmonic", "second harmonic"
yesUnderstandLocking = bits, U32, 1360, [4:4], "no", "yes"
silentTriggerError = bits, U32, 1360, [5:5], "false", "true"
useLinearCltSensor = bits, U32, 1360, [6:6], "false", "true"
canReadEnabled = bits, U32, 1360, [7:7], "false", "true"
canWriteEnabled = bits, U32, 1360, [8:8], "false", "true"
useLinearIatSensor = bits, U32, 1360, [9:9], "false", "true"
enableOilPressureProtect = bits, U32, 1360, [10:10], "false", "true"
tachPulseDurationAsDutyCycle = bits, U32, 1360, [11:11], "Constant time", "Duty cycle"
isAlternatorControlEnabled = bits, U32, 1360, [12:12], "false", "true"
invertPrimaryTriggerSignal = bits, U32, 1360, [13:13], "Rising", "Falling"
invertSecondaryTriggerSignal = bits, U32, 1360, [14:14], "Rising", "Falling"
cutFuelOnHardLimit = bits, U32, 1360, [15:15], "no", "yes"
cutSparkOnHardLimit = bits, U32, 1360, [16:16], "no", "yes"
launchFuelCutEnable = bits, U32, 1360, [17:17], "no", "yes"
launchSparkCutEnable = bits, U32, 1360, [18:18], "no", "yes"
torqueReductionEnabled = bits, U32, 1360, [19:19], "false", "true"
camSyncOnSecondCrankRevolution = bits, U32, 1360, [20:20], "first", "second"
limitTorqueReductionTime = bits, U32, 1360, [21:21], "false", "true"
verboseIsoTp = bits, U32, 1360, [22:22], "false", "true"
engineSnifferFocusOnInputs = bits, U32, 1360, [23:23], "false", "true"
twoStroke = bits, U32, 1360, [24:24], "Four Stroke", "Two Stroke"
skippedWheelOnCam = bits, U32, 1360, [25:25], "On crankshaft", "On camshaft"
acSwitch = bits, U16, 1364, [0:8], $switch_input_pin_e_list
vRefAdcChannel = bits, U08, 1366, [0:5], $adc_channel_e_list
etbNeutralPosition = scalar, U08, 1367, "%", 1, 0, 0, 100, 0
idleMode = bits, U08, 1368, [0:0], "Open Loop + Closed Loop", "Open Loop"
isInjectionEnabled = bits, U32, 1372, [0:0], "disabled", "enabled"
isIgnitionEnabled = bits, U32, 1372, [1:1], "disabled", "enabled"
isCylinderCleanupEnabled = bits, U32, 1372, [2:2], "disabled", "enabled"
complexWallModel = bits, U32, 1372, [3:3], "Basic (constants)", "Advanced (tables)"
alwaysInstantRpm = bits, U32, 1372, [4:4], "false", "true"
isMapAveragingEnabled = bits, U32, 1372, [5:5], "disabled", "enabled"
useSeparateAdvanceForIdle = bits, U32, 1372, [6:6], "disabled", "enabled"
isWaveAnalyzerEnabled = bits, U32, 1372, [7:7], "false", "true"
useSeparateVeForIdle = bits, U32, 1372, [8:8], "disabled", "enabled"
verboseTriggerSynchDetails = bits, U32, 1372, [9:9], "false", "true"
hondaK = bits, U32, 1372, [10:10], "false", "true"
twoWireBatchIgnition = bits, U32, 1372, [11:11], "false", "true"
useFixedBaroCorrFromMap = bits, U32, 1372, [12:12], "false", "true"
useSeparateAdvanceForCranking = bits, U32, 1372, [13:13], "Fixed (auto taper)", "Table"
useAdvanceCorrectionsForCranking = bits, U32, 1372, [14:14], "no", "yes"
flexCranking = bits, U32, 1372, [15:15], "disabled", "enabled"
useIacPidMultTable = bits, U32, 1372, [16:16], "false", "true"
isBoostControlEnabled = bits, U32, 1372, [17:17], "disabled", "enabled"
launchSmoothRetard = bits, U32, 1372, [18:18], "false", "true"
isPhaseSyncRequiredForIgnition = bits, U32, 1372, [19:19], "false", "true"
useCltBasedRpmLimit = bits, U32, 1372, [20:20], "no", "yes"
forceO2Heating = bits, U32, 1372, [21:21], "no", "yes"
invertVvtControlIntake = bits, U32, 1372, [22:22], "advance", "retard"
invertVvtControlExhaust = bits, U32, 1372, [23:23], "advance", "retard"
useBiQuadOnAuxSpeedSensors = bits, U32, 1372, [24:24], "false", "true"
sdTriggerLog = bits, U32, 1372, [25:25], "normal", "trigger"
stepper_dc_use_two_wires = bits, U32, 1372, [26:26], "false", "true"
watchOutForLinearTime = bits, U32, 1372, [27:27], "false", "true"
engineChartSize = scalar, U32, 1376, "count", 1, 0, 0, 300, 0
turboSpeedSensorMultiplier = scalar, F32, 1380, "mult", 1, 0, 0, 7000, 3
acIdleRpmTarget = scalar, S16, 1384, "RPM", 1, 0, 0, 2000, 0
warningPeriod = scalar, S16, 1386, "seconds", 1, 0, 0, 60, 0
knockDetectionWindowStart = scalar, F32, 1388, "angle", 1, 0, -1000, 1000, 2
idleStepperReactionTime = scalar, F32, 1392, "ms", 1, 0, 1, 300, 0
idleStepperTotalSteps = scalar, S32, 1396, "count", 1, 0, 5, 3000, 0
torqueReductionArmingApp = scalar, S32, 1400, "", 1, 0, 0, 20000, 0
tachPulseDuractionMs = scalar, F32, 1404, "", 1, 0, 0, 100, 2
wwaeTau = scalar, F32, 1408, "Seconds", 1, 0, 0, 3, 2
alternatorControl_pFactor = scalar, F32, 1412, "", 1, 0, -10000, 10000, 4
alternatorControl_iFactor = scalar, F32, 1416, "", 1, 0, -10000, 10000, 4
alternatorControl_dFactor = scalar, F32, 1420, "", 1, 0, -10000, 10000, 4
alternatorControl_offset = scalar, S16, 1424, "", 1, 0, -1000, 1000, 0
alternatorControl_periodMs = scalar, S16, 1426, "ms", 1, 0, 0, 3000, 0
alternatorControl_minValue = scalar, S16, 1428, "", 1, 0, -30000, 30000, 0
alternatorControl_maxValue = scalar, S16, 1430, "", 1, 0, -30000, 30000, 0
etb_pFactor = scalar, F32, 1432, "", 1, 0, -10000, 10000, 4
etb_iFactor = scalar, F32, 1436, "", 1, 0, -10000, 10000, 4
etb_dFactor = scalar, F32, 1440, "", 1, 0, -10000, 10000, 4
etb_offset = scalar, S16, 1444, "", 1, 0, -1000, 1000, 0
etb_periodMs = scalar, S16, 1446, "ms", 1, 0, 0, 3000, 0
etb_minValue = scalar, S16, 1448, "", 1, 0, -30000, 30000, 0
etb_maxValue = scalar, S16, 1450, "", 1, 0, -30000, 30000, 0
airTaperRpmRange = scalar, S16, 1452, "RPM", 1, 0, 0, 1500, 0
turboSpeedSensorInputPin = bits, U16, 1454, [0:8], $brain_input_pin_e_list
tps2Min = scalar, S16, 1456, "ADC", 1, 0, 0, 1023, 0
tps2Max = scalar, S16, 1458, "ADC", 1, 0, 0, 1023, 0
starterControlPin = bits, U16, 1460, [0:8], $output_pin_e_list
startStopButtonMode = bits, U08, 1462, [0:2], $pin_input_mode_e_enum
mc33816_flag0 = bits, U16, 1464, [0:8], $gpio_list
tachPulsePerRev = scalar, U16, 1466, "", 0.001, 0, 1, 15, 3
mapErrorDetectionTooLow = scalar, F32, 1468, "kPa", 1, 0, -100, 100, 2
mapErrorDetectionTooHigh = scalar, F32, 1472, "kPa", 1, 0, -100, 800, 2
multisparkSparkDuration = scalar, U16, 1476, "ms", 0.001, 0, 0, 3, 2
multisparkDwell = scalar, U16, 1478, "ms", 0.001, 0, 0, 3, 2
idleRpmPid_pFactor = scalar, F32, 1480, "", 1, 0, -10000, 10000, 4
idleRpmPid_iFactor = scalar, F32, 1484, "", 1, 0, -10000, 10000, 4
idleRpmPid_dFactor = scalar, F32, 1488, "", 1, 0, -10000, 10000, 4
idleRpmPid_offset = scalar, S16, 1492, "", 1, 0, -1000, 1000, 0
idleRpmPid_periodMs = scalar, S16, 1494, "ms", 1, 0, 0, 3000, 0
idleRpmPid_minValue = scalar, S16, 1496, "", 1, 0, -30000, 30000, 0
idleRpmPid_maxValue = scalar, S16, 1498, "", 1, 0, -30000, 30000, 0
wwaeBeta = scalar, F32, 1500, "Fraction", 1, 0, 0, 1, 2
binarySerialTxPin = bits, U16, 1504, [0:8], $gpio_list
binarySerialRxPin = bits, U16, 1506, [0:8], $gpio_list
auxValves1 = bits, U16, 1508, [0:8], $gpio_list
auxValves2 = bits, U16, 1510, [0:8], $gpio_list
tcuUpshiftButtonPin = bits, U16, 1512, [0:8], $switch_input_pin_e_list
tcuDownshiftButtonPin = bits, U16, 1514, [0:8], $switch_input_pin_e_list
throttlePedalUpVoltage = scalar, F32, 1516, "volts", 1, 0, -6, 6, 2
throttlePedalWOTVoltage = scalar, F32, 1520, "volts", 1, 0, -6, 6, 2
startUpFuelPumpDuration = scalar, S16, 1524, "seconds", 1, 0, 0, 6000, 0
mafFilterParameter = scalar, U16, 1526, "", 1, 0, 0, 10000, 0
idlePidRpmDeadZone = scalar, S16, 1528, "RPM", 1, 0, 0, 800, 0
mc33810DisableRecoveryMode = bits, U32, 1532, [0:0], "false", "true"
mc33810Gpgd0Mode = bits, U32, 1532, [1:1], "false", "true"
mc33810Gpgd1Mode = bits, U32, 1532, [2:2], "false", "true"
mc33810Gpgd2Mode = bits, U32, 1532, [3:3], "false", "true"
mc33810Gpgd3Mode = bits, U32, 1532, [4:4], "false", "true"
enableExtendedCanBroadcast = bits, U32, 1532, [5:5], "false", "true"
luaCanRxWorkaround = bits, U32, 1532, [6:6], "false", "true"
flexSensorInverted = bits, U32, 1532, [7:7], "Normal", "Inverted"
useHardSkipInTraction = bits, U32, 1532, [8:8], "false", "true"
useAuxSpeedForSlipRatio = bits, U32, 1532, [9:9], "false", "true"
useVssAsSecondWheelSpeed = bits, U32, 1532, [10:10], "false", "true"
is_enabled_spi_5 = bits, U32, 1532, [11:11], "false", "true"
is_enabled_spi_6 = bits, U32, 1532, [12:12], "false", "true"
enableAemXSeriesEgt = bits, U32, 1532, [13:13], "false", "true"
startRequestPinInverted = bits, U32, 1532, [14:14], "Normal", "Inverted"
tcu_rangeSensorPulldown = bits, U32, 1532, [15:15], "false", "true"
devBit01 = bits, U32, 1532, [16:16], "false", "true"
devBit0 = bits, U32, 1532, [17:17], "false", "true"
devBit1 = bits, U32, 1532, [18:18], "false", "true"
devBit2 = bits, U32, 1532, [19:19], "false", "true"
devBit3 = bits, U32, 1532, [20:20], "false", "true"
devBit4 = bits, U32, 1532, [21:21], "false", "true"
devBit5 = bits, U32, 1532, [22:22], "false", "true"
devBit6 = bits, U32, 1532, [23:23], "false", "true"
devBit7 = bits, U32, 1532, [24:24], "false", "true"
invertExhaustCamVVTSignal = bits, U32, 1532, [25:25], "Rising", "Falling"
enableKnockSpectrogram = bits, U32, 1532, [26:26], "no", "yes"
enableKnockSpectrogramFilter = bits, U32, 1532, [27:27], "false", "true"
iacByTpsTaper = scalar, S16, 1536, "percent", 1, 0, 0, 500, 0
accelerometerCsPin = bits, U16, 1538, [0:8], $gpio_list
coastingFuelCutVssLow = scalar, U08, 1540, "kmh", 1, 0, 0, 255, 0
coastingFuelCutVssHigh = scalar, U08, 1541, "kmh", 1, 0, 0, 255, 0
tpsAccelEnrichmentThreshold = scalar, F32, 1544, "roc", 1, 0, 0, 200, 1
auxSpeedSensorInputPin1 = bits, U16, 1548, [0:8], $brain_input_pin_e_list
auxSpeedSensorInputPin2 = bits, U16, 1550, [0:8], $brain_input_pin_e_list
totalGearsCount = scalar, U08, 1552, "", 1, 0, 1, 10, 0
injectionTimingMode = bits, U08, 1553, [0:1], "End of injection", "Start of injection", "Center of injection", "INVALID"
debugMode = bits, U08, 1554, [0:5], "INVALID", "TPS acceleration enrichment", "INVALID", "Stepper Idle Control", "Engine Load accl enrich", "Trigger Counters", "Soft Spark Cut", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "SD card", "sr5", "Knock", "INVALID", "Electronic Throttle", "Executor", "Bench Test / TS commands", "INVALID", "Analog inputs #1", "INSTANT_RPM", "INVALID", "Status", "INVALID", "INVALID", "MAP", "Metrics", "INVALID", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "INVALID", "Boost Control", "INVALID", "INVALID", "ETB Autotune", "Composite Log", "INVALID", "INVALID", "INVALID", "Dyno_View", "Logic_Analyzer", "INVALID", "TCU", "Lua", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
fan1ExtraIdle = scalar, U08, 1555, "%", 1, 0, 0, 100, 0
uartConsoleSerialSpeed = scalar, U32, 1556, "BPs", 1, 0, 0, 1000000, 0
throttlePedalSecondaryUpVoltage = scalar, F32, 1560, "volts", 1, 0, -6, 6, 2
throttlePedalSecondaryWOTVoltage = scalar, F32, 1564, "volts", 1, 0, -6, 6, 2
canBaudRate = bits, U08, 1568, [0:2], "33.33kbps", "50kbps", "83.33kbps", "100kbps", "125kbps", "250kbps", "500kbps", "1Mbps"
veOverrideMode = bits, U08, 1569, [0:1], "None", "MAP", "TPS", "INVALID"
can2BaudRate = bits, U08, 1570, [0:2], "33.33kbps", "50kbps", "83.33kbps", "100kbps", "125kbps", "250kbps", "500kbps", "1Mbps"
afrOverrideMode = bits, U08, 1571, [0:2], "None", "MAP", "TPS", "Acc Pedal", "Cyl Filling %", "INVALID", "INVALID", "INVALID"
mc33_hpfp_i_peak = scalar, U08, 1572, "A", 0.1, 0, 0, 25, 1
mc33_hpfp_i_hold = scalar, U08, 1573, "A", 0.1, 0, 0, 25, 1
mc33_hpfp_i_hold_off = scalar, U08, 1574, "us", 1, 0, 0, 255, 0
mc33_hpfp_max_hold = scalar, U08, 1575, "ms", 1, 0, 0, 255, 0
stepperDcInvertedPins = bits, U32, 1576, [0:0], "false", "true"
canOpenBLT = bits, U32, 1576, [1:1], "false", "true"
can2OpenBLT = bits, U32, 1576, [2:2], "false", "true"
injectorFlowAsMassFlow = bits, U32, 1576, [3:3], "cc/min", "grams per second"
boardUseCanTerminator = bits, U32, 1576, [4:4], "false", "true"
kLineDoHondaSend = bits, U32, 1576, [5:5], "false", "true"
can1ListenMode = bits, U32, 1576, [6:6], "false", "true"
can2ListenMode = bits, U32, 1576, [7:7], "false", "true"
camDecoder2jzPosition = scalar, U08, 1580, "angle", 1, 0, 0, 255, 0
mc33810maxDwellTimer = bits, U08, 1581, [0:2], "2 mS", "4 mS", "8 mS", "16 mS", "32 mS", "64 mS", "INVALID", "INVALID"
benchTestOnTime = scalar, U16, 1582, "ms", 0.01, 0, 1, 500, 2
lambdaProtectionRestoreTps = scalar, U08, 1584, "%", 1, 0, 0, 100, 0
lambdaProtectionRestoreLoad = scalar, U08, 1585, "%", 10.0, 0, 0, 650, 0
launchActivatePinMode = bits, U08, 1586, [0:2], $pin_input_mode_e_enum
can2TxPin = bits, U16, 1588, [0:8], $gpio_list
can2RxPin = bits, U16, 1590, [0:8], $gpio_list
starterControlPinMode = bits, U08, 1592, [0:1], $pin_output_mode_e_enum
wastegatePositionSensor = bits, U08, 1593, [0:5], $adc_channel_e_list
ignOverrideMode = bits, U08, 1594, [0:2], "None", "MAP", "TPS", "Acc Pedal", "Cyl Filling %", "INVALID", "INVALID", "INVALID"
injectorPressureType = bits, U08, 1595, [0:0], "Low", "High"
hpfpValvePin = bits, U16, 1596, [0:8], $output_pin_e_list
hpfpValvePinMode = bits, U08, 1598, [0:1], $pin_output_mode_e_enum
boostCutPressure = scalar, F32, 1600, "kPa", 1, 0, 0, 650, 0
tchargeBins = array, U08, 1604, [16], "kg/h", 5.0, 0, 0, 1200, 0
tchargeValues = array, U08, 1620, [16], "ratio", 0.01, 0, 0, 1, 2
fixedTiming = scalar, F32, 1636, "deg", 1, 0, -720, 720, 2
mapLowValueVoltage = scalar, F32, 1640, "v", 1, 0, 0, 10, 2
mapHighValueVoltage = scalar, F32, 1644, "v", 1, 0, 0, 10, 2
egoValueShift = scalar, F32, 1648, "value", 1, 0, -10, 10, 2
vvtPins1 = bits, U16, 1652, [0:8], $output_pin_e_list
vvtPins2 = bits, U16, 1654, [0:8], $output_pin_e_list
vvtPins3 = bits, U16, 1656, [0:8], $output_pin_e_list
vvtPins4 = bits, U16, 1658, [0:8], $output_pin_e_list
tChargeMinRpmMinTps = scalar, U08, 1660, "", 0.005, 0, 0, 1, 3
tChargeMinRpmMaxTps = scalar, U08, 1661, "", 0.005, 0, 0, 1, 3
tChargeMaxRpmMinTps = scalar, U08, 1662, "", 0.005, 0, 0, 1, 3
tChargeMaxRpmMaxTps = scalar, U08, 1663, "", 0.005, 0, 0, 1, 3
vvtOutputFrequency = scalar, U16, 1664, "Hz", 1, 0, 0, 3000, 0
minimumIgnitionTiming = scalar, S08, 1666, "deg BTDC", 1, 0, -90, 90, 0
maximumIgnitionTiming = scalar, S08, 1667, "deg BTDC", 1, 0, -90, 90, 0
alternatorPwmFrequency = scalar, S32, 1668, "Hz", 1, 0, 0, 3000, 0
vvtMode1 = bits, U08, 1672, [0:5], "Inactive", "Single Tooth", "Toyota 3 Tooth Even/2JZ", "Miata NB2", "Mitsu 4G69", "Bosch Quick Start", "4/1", "ST 170", "Ford Barra 3+1", "Nissan VQ", "Honda K Intake", "Nissan MR18", "Mitsu 3A92", "Sync by MAP", "Chrysler Phaser", "Mazda Skyactiv", "Honda K Exhaust", "INVALID", "Mitsubishi 4G63", "Ford Coyote", "Mitsu 6G72", "Honda 600", "Mazda L", "Dev", "HR12DDR In", "INVALID", "INVALID", "Toyota 3 Tooth UZ", "Subaru 3-1-2-1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
vvtMode2 = bits, U08, 1673, [0:5], "Inactive", "Single Tooth", "Toyota 3 Tooth Even/2JZ", "Miata NB2", "Mitsu 4G69", "Bosch Quick Start", "4/1", "ST 170", "Ford Barra 3+1", "Nissan VQ", "Honda K Intake", "Nissan MR18", "Mitsu 3A92", "Sync by MAP", "Chrysler Phaser", "Mazda Skyactiv", "Honda K Exhaust", "INVALID", "Mitsubishi 4G63", "Ford Coyote", "Mitsu 6G72", "Honda 600", "Mazda L", "Dev", "HR12DDR In", "INVALID", "INVALID", "Toyota 3 Tooth UZ", "Subaru 3-1-2-1", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
fan2ExtraIdle = scalar, U08, 1674, "%", 1, 0, 0, 100, 0
primingDelay = scalar, U08, 1675, "sec", 0.01, 0, 0, 1, 2
auxAnalogInputs1 = bits, U08, 1676, [0:5], $adc_channel_e_list
auxAnalogInputs2 = bits, U08, 1677, [0:5], $adc_channel_e_list
auxAnalogInputs3 = bits, U08, 1678, [0:5], $adc_channel_e_list
auxAnalogInputs4 = bits, U08, 1679, [0:5], $adc_channel_e_list
auxAnalogInputs5 = bits, U08, 1680, [0:5], $adc_channel_e_list
auxAnalogInputs6 = bits, U08, 1681, [0:5], $adc_channel_e_list
auxAnalogInputs7 = bits, U08, 1682, [0:5], $adc_channel_e_list
auxAnalogInputs8 = bits, U08, 1683, [0:5], $adc_channel_e_list
trailingCoilPins1 = bits, U16, 1684, [0:8], $output_pin_e_list
trailingCoilPins2 = bits, U16, 1686, [0:8], $output_pin_e_list
trailingCoilPins3 = bits, U16, 1688, [0:8], $output_pin_e_list
trailingCoilPins4 = bits, U16, 1690, [0:8], $output_pin_e_list
trailingCoilPins5 = bits, U16, 1692, [0:8], $output_pin_e_list
trailingCoilPins6 = bits, U16, 1694, [0:8], $output_pin_e_list
trailingCoilPins7 = bits, U16, 1696, [0:8], $output_pin_e_list
trailingCoilPins8 = bits, U16, 1698, [0:8], $output_pin_e_list
trailingCoilPins9 = bits, U16, 1700, [0:8], $output_pin_e_list
trailingCoilPins10 = bits, U16, 1702, [0:8], $output_pin_e_list
trailingCoilPins11 = bits, U16, 1704, [0:8], $output_pin_e_list
trailingCoilPins12 = bits, U16, 1706, [0:8], $output_pin_e_list
tle8888mode = bits, U08, 1708, [0:1], "Auto", "SemiAuto", "Manual", "Hall"
accelerometerCsPinMode = bits, U08, 1709, [0:1], $pin_output_mode_e_enum
injectorCompensationMode = bits, U08, 1710, [0:1], "None", "Fixed rail pressure", "Sensed Rail Pressure", "HPFP fuel mass compensation"
fuelReferencePressure = scalar, F32, 1712, "kPa", 1, 0, 50, 700000, 0
auxTempSensor1_tempC_1 = scalar, F32, 1716, "*C", 1, 0, -55, 200, 1
auxTempSensor1_tempC_2 = scalar, F32, 1720, "*C", 1, 0, -55, 200, 1
auxTempSensor1_tempC_3 = scalar, F32, 1724, "*C", 1, 0, -55, 200, 1
auxTempSensor1_resistance_1 = scalar, F32, 1728, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor1_resistance_2 = scalar, F32, 1732, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor1_resistance_3 = scalar, F32, 1736, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor1_bias_resistor = scalar, F32, 1740, "Ohm", 1, 0, 0, 200000, 1
auxTempSensor1_adcChannel = bits, U08, 1744, [0:5], $adc_channel_e_list
auxTempSensor2_tempC_1 = scalar, F32, 1748, "*C", 1, 0, -55, 200, 1
auxTempSensor2_tempC_2 = scalar, F32, 1752, "*C", 1, 0, -55, 200, 1
auxTempSensor2_tempC_3 = scalar, F32, 1756, "*C", 1, 0, -55, 200, 1
auxTempSensor2_resistance_1 = scalar, F32, 1760, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor2_resistance_2 = scalar, F32, 1764, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor2_resistance_3 = scalar, F32, 1768, "Ohm", 1, 0, 0, 1000000, 1
auxTempSensor2_bias_resistor = scalar, F32, 1772, "Ohm", 1, 0, 0, 200000, 1
auxTempSensor2_adcChannel = bits, U08, 1776, [0:5], $adc_channel_e_list
knockSamplingDuration = scalar, S16, 1780, "Deg", 1, 0, 0, 720, 0
etbFreq = scalar, S16, 1782, "Hz", 1, 0, 0, 3000, 0
etbWastegatePid_pFactor = scalar, F32, 1784, "", 1, 0, -10000, 10000, 4
etbWastegatePid_iFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4
etbWastegatePid_dFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4
etbWastegatePid_offset = scalar, S16, 1796, "", 1, 0, -1000, 1000, 0
etbWastegatePid_periodMs = scalar, S16, 1798, "ms", 1, 0, 0, 3000, 0
etbWastegatePid_minValue = scalar, S16, 1800, "", 1, 0, -30000, 30000, 0
etbWastegatePid_maxValue = scalar, S16, 1802, "", 1, 0, -30000, 30000, 0
stepperNumMicroSteps = bits, U08, 1804, [0:3], "Full-Step (Default)", "INVALID", "Half-Step", "INVALID", "1/4 Micro-Step", "INVALID", "INVALID", "INVALID", "1/8 Micro-Step", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
stepperMinDutyCycle = scalar, U08, 1805, "%", 1, 0, 0, 100, 0
stepperMaxDutyCycle = scalar, U08, 1806, "%", 1, 0, 0, 100, 0
sdCardSpiDevice = bits, U08, 1807, [0:2], $spi_device_e_enum
timing_offset_cylinder1 = scalar, F32, 1808, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder2 = scalar, F32, 1812, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder3 = scalar, F32, 1816, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder4 = scalar, F32, 1820, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder5 = scalar, F32, 1824, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder6 = scalar, F32, 1828, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder7 = scalar, F32, 1832, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder8 = scalar, F32, 1836, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder9 = scalar, F32, 1840, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder10 = scalar, F32, 1844, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder11 = scalar, F32, 1848, "deg", 1, 0, -720, 720, 1
timing_offset_cylinder12 = scalar, F32, 1852, "deg", 1, 0, -720, 720, 1
idlePidActivationTime = scalar, F32, 1856, "seconds", 1, 0, 0, 60, 1
vvtControlMinClt = scalar, S16, 1860, "C", 1, 0, -40, 250, 0
spi1SckMode = bits, U08, 1862, [0:6], $pin_mode_e_enum
spi1MosiMode = bits, U08, 1863, [0:6], $pin_mode_e_enum
spi1MisoMode = bits, U08, 1864, [0:6], $pin_mode_e_enum
spi2SckMode = bits, U08, 1865, [0:6], $pin_mode_e_enum
spi2MosiMode = bits, U08, 1866, [0:6], $pin_mode_e_enum
spi2MisoMode = bits, U08, 1867, [0:6], $pin_mode_e_enum
spi3SckMode = bits, U08, 1868, [0:6], $pin_mode_e_enum
spi3MosiMode = bits, U08, 1869, [0:6], $pin_mode_e_enum
spi3MisoMode = bits, U08, 1870, [0:6], $pin_mode_e_enum
stepperEnablePinMode = bits, U08, 1871, [0:1], $pin_output_mode_e_enum
mc33816_rstb = bits, U16, 1872, [0:8], $gpio_list
mc33816_driven = bits, U16, 1874, [0:8], $gpio_list
brakePedalPin = bits, U16, 1876, [0:8], $switch_input_pin_e_list
auxPid1_pFactor = scalar, F32, 1880, "", 1, 0, -10000, 10000, 4
auxPid1_iFactor = scalar, F32, 1884, "", 1, 0, -10000, 10000, 4
auxPid1_dFactor = scalar, F32, 1888, "", 1, 0, -10000, 10000, 4
auxPid1_offset = scalar, S16, 1892, "", 1, 0, -1000, 1000, 0
auxPid1_periodMs = scalar, S16, 1894, "ms", 1, 0, 0, 3000, 0
auxPid1_minValue = scalar, S16, 1896, "", 1, 0, -30000, 30000, 0
auxPid1_maxValue = scalar, S16, 1898, "", 1, 0, -30000, 30000, 0
auxPid2_pFactor = scalar, F32, 1900, "", 1, 0, -10000, 10000, 4
auxPid2_iFactor = scalar, F32, 1904, "", 1, 0, -10000, 10000, 4
auxPid2_dFactor = scalar, F32, 1908, "", 1, 0, -10000, 10000, 4
auxPid2_offset = scalar, S16, 1912, "", 1, 0, -1000, 1000, 0
auxPid2_periodMs = scalar, S16, 1914, "ms", 1, 0, 0, 3000, 0
auxPid2_minValue = scalar, S16, 1916, "", 1, 0, -30000, 30000, 0
auxPid2_maxValue = scalar, S16, 1918, "", 1, 0, -30000, 30000, 0
injectorCorrectionPolynomial1 = scalar, F32, 1920, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial2 = scalar, F32, 1924, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial3 = scalar, F32, 1928, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial4 = scalar, F32, 1932, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial5 = scalar, F32, 1936, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial6 = scalar, F32, 1940, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial7 = scalar, F32, 1944, "", 1, 0, -1000, 1000, 4
injectorCorrectionPolynomial8 = scalar, F32, 1948, "", 1, 0, -1000, 1000, 4
primeBins = array, S16, 1952, [8], "C", 1, 0, -40, 250, 0
oilPressure_hwChannel = bits, U08, 1968, [0:5], $adc_channel_e_list
oilPressure_v1 = scalar, F32, 1972, "volts", 1, 0, 0, 10, 2
oilPressure_value1 = scalar, F32, 1976, "", 1, 0, -100000, 1000000, 2
oilPressure_v2 = scalar, F32, 1980, "volts", 1, 0, 0, 10, 2
oilPressure_value2 = scalar, F32, 1984, "", 1, 0, -100000, 1000000, 2
accelerometerSpiDevice = bits, U08, 1988, [0:2], $spi_device_e_enum
stepperEnablePin = bits, U16, 1990, [0:8], $gpio_list
tle8888_cs = bits, U16, 1992, [0:8], $gpio_list
tle8888_csPinMode = bits, U08, 1994, [0:1], $pin_output_mode_e_enum
mc33816_cs = bits, U16, 1996, [0:8], $gpio_list
auxFrequencyFilter = scalar, F32, 2000, "hz", 1, 0, 0, 100, 1
sentInputPins1 = bits, U16, 2004, [0:8], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6", "PE7", "PE8", "PE9", "PE10", "PE11", "PE12", "PE13", "PE14", "PE15", "PF0", "PF1", "PF2", "PF3", "PF4", "PF5", "PF6", "PF7", "PF8", "PF9", "PF10", "PF11", "PF12", "PF13", "PF14", "PF15", "PG0", "PG1", "PG2", "PG3", "PG4", "PG5", "PG6", "PG7", "PG8", "PG9", "PG10", "PG11", "PG12", "PG13", "PG14", "PG15", "PH0", "PH1", "PH2", "PH3", "PH4", "PH5", "PH6", "PH7", "PH8", "PH9", "PH10", "PH11", "PH12", "PH13", "PH14", "PH15", "PI0", "PI1", "PI2", "PI3", "PI4", "PI5", "PI6", "PI7", "PI8", "PI9", "PI10", "PI11", "PI12", "PI13", "PI14", "PI15", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
coastingFuelCutRpmHigh = scalar, S16, 2006, "rpm", 1, 0, 0, 5000, 0
coastingFuelCutRpmLow = scalar, S16, 2008, "rpm", 1, 0, 0, 5000, 0
coastingFuelCutTps = scalar, S16, 2010, "%", 1, 0, 0, 20, 0
coastingFuelCutClt = scalar, S16, 2012, "C", 1, 0, -100, 250, 0
pidExtraForLowRpm = scalar, S16, 2014, "%", 1, 0, 0, 100, 0
coastingFuelCutMap = scalar, S16, 2016, "kPa", 1, 0, 0, 650, 0
highPressureFuel_hwChannel = bits, U08, 2020, [0:5], $adc_channel_e_list
highPressureFuel_v1 = scalar, F32, 2024, "volts", 1, 0, 0, 10, 2
highPressureFuel_value1 = scalar, F32, 2028, "", 1, 0, -100000, 1000000, 2
highPressureFuel_v2 = scalar, F32, 2032, "volts", 1, 0, 0, 10, 2
highPressureFuel_value2 = scalar, F32, 2036, "", 1, 0, -100000, 1000000, 2
lowPressureFuel_hwChannel = bits, U08, 2040, [0:5], $adc_channel_e_list
lowPressureFuel_v1 = scalar, F32, 2044, "volts", 1, 0, 0, 10, 2
lowPressureFuel_value1 = scalar, F32, 2048, "", 1, 0, -100000, 1000000, 2
lowPressureFuel_v2 = scalar, F32, 2052, "volts", 1, 0, 0, 10, 2
lowPressureFuel_value2 = scalar, F32, 2056, "", 1, 0, -100000, 1000000, 2
scriptCurveName1 = string, ASCII, 2060, 16
scriptCurveName2 = string, ASCII, 2076, 16
scriptCurveName3 = string, ASCII, 2092, 16
scriptCurveName4 = string, ASCII, 2108, 16
scriptCurveName5 = string, ASCII, 2124, 16
scriptCurveName6 = string, ASCII, 2140, 16
scriptTableName1 = string, ASCII, 2156, 16
scriptTableName2 = string, ASCII, 2172, 16
scriptTableName3 = string, ASCII, 2188, 16
scriptTableName4 = string, ASCII, 2204, 16
scriptSettingName1 = string, ASCII, 2220, 16
scriptSettingName2 = string, ASCII, 2236, 16
scriptSettingName3 = string, ASCII, 2252, 16
scriptSettingName4 = string, ASCII, 2268, 16
scriptSettingName5 = string, ASCII, 2284, 16
scriptSettingName6 = string, ASCII, 2300, 16
scriptSettingName7 = string, ASCII, 2316, 16
scriptSettingName8 = string, ASCII, 2332, 16
tChargeAirCoefMin = scalar, F32, 2348, "", 1, 0, 0, 1, 3
tChargeAirCoefMax = scalar, F32, 2352, "", 1, 0, 0, 1, 3
tChargeAirFlowMax = scalar, F32, 2356, "kg/h", 1, 0, 0, 1000, 1
tChargeAirIncrLimit = scalar, F32, 2360, "deg/sec", 1, 0, 0, 100, 1
tChargeAirDecrLimit = scalar, F32, 2364, "deg/sec", 1, 0, 0, 100, 1
etb_iTermMin = scalar, S16, 2368, "", 1, 0, -30000, 30000, 0
etb_iTermMax = scalar, S16, 2370, "", 1, 0, -30000, 30000, 0
idleTimingPid_pFactor = scalar, F32, 2372, "", 1, 0, -10000, 10000, 4
idleTimingPid_iFactor = scalar, F32, 2376, "", 1, 0, -10000, 10000, 4
idleTimingPid_dFactor = scalar, F32, 2380, "", 1, 0, -10000, 10000, 4
idleTimingPid_offset = scalar, S16, 2384, "", 1, 0, -1000, 1000, 0
idleTimingPid_periodMs = scalar, S16, 2386, "ms", 1, 0, 0, 3000, 0
idleTimingPid_minValue = scalar, S16, 2388, "", 1, 0, -30000, 30000, 0
idleTimingPid_maxValue = scalar, S16, 2390, "", 1, 0, -30000, 30000, 0
idleTimingSoftEntryTime = scalar, F32, 2392, "", 1, 0, 0, 100, 1
torqueReductionTriggerPinMode = bits, U08, 2396, [0:2], $pin_input_mode_e_enum
torqueReductionActivationMode = bits, S08, 2397, [0:1], "Torque Reduction Button", "Launch Button", "Clutch Down Switch", "Clutch Up Switch"
tpsAccelFractionPeriod = scalar, S16, 2398, "cycles", 1, 0, 0, 500, 0
tpsAccelFractionDivisor = scalar, F32, 2400, "coef", 1, 0, 1, 100, 2
tle8888spiDevice = bits, U08, 2404, [0:2], $spi_device_e_enum
mc33816spiDevice = bits, U08, 2405, [0:2], $spi_device_e_enum
idlerpmpid_iTermMin = scalar, S16, 2406, "", 1, 0, -30000, 30000, 0
tle6240spiDevice = bits, U08, 2408, [0:2], $spi_device_e_enum
stoichRatioPrimary = scalar, U08, 2409, ":1", 0.1, 0, 5, 25, 1
idlerpmpid_iTermMax = scalar, S16, 2410, "", 1, 0, -30000, 30000, 0
etbIdleThrottleRange = scalar, F32, 2412, "%", 1, 0, 0, 45, 0
cylinderBankSelect1 = scalar, U08, 2416, "", 1, 1, 1, 2, 0
cylinderBankSelect2 = scalar, U08, 2417, "", 1, 1, 1, 2, 0
cylinderBankSelect3 = scalar, U08, 2418, "", 1, 1, 1, 2, 0
cylinderBankSelect4 = scalar, U08, 2419, "", 1, 1, 1, 2, 0
cylinderBankSelect5 = scalar, U08, 2420, "", 1, 1, 1, 2, 0
cylinderBankSelect6 = scalar, U08, 2421, "", 1, 1, 1, 2, 0
cylinderBankSelect7 = scalar, U08, 2422, "", 1, 1, 1, 2, 0
cylinderBankSelect8 = scalar, U08, 2423, "", 1, 1, 1, 2, 0
cylinderBankSelect9 = scalar, U08, 2424, "", 1, 1, 1, 2, 0
cylinderBankSelect10 = scalar, U08, 2425, "", 1, 1, 1, 2, 0
cylinderBankSelect11 = scalar, U08, 2426, "", 1, 1, 1, 2, 0
cylinderBankSelect12 = scalar, U08, 2427, "", 1, 1, 1, 2, 0
primeValues = array, U08, 2428, [8], "mg", 5.0, 0, 0, 1250, 0
triggerCompCenterVolt = scalar, U08, 2436, "V", 0.02, 0, 0, 5.1, 2
triggerCompHystMin = scalar, U08, 2437, "V", 0.02, 0, 0, 5.1, 2
triggerCompHystMax = scalar, U08, 2438, "V", 0.02, 0, 0, 5.1, 2
triggerCompSensorSatRpm = scalar, U08, 2439, "RPM", 50.0, 0, 0, 12000, 0
tractionControlSlipBins = array, U16, 2440, [6], "ratio", 0.01, 0, 0, 650, 2
tractionControlSpeedBins = array, U08, 2452, [6], "RPM", 1, 0, 0, 250, 0
canVssNbcType = bits, U08, 2458, [0:2], "BMW_e46", "W202", "BMW E8x/E9x MK60e5", "Nissan 350", "Hyundai PB", "Honda Civic9", "INVALID", "INVALID"
gppwm1_pin = bits, U16, 2460, [0:8], $output_pin_e_list
gppwm1_dutyIfError = scalar, U08, 2462, "%", 1, 0, 0, 100, 0
gppwm1_pwmFrequency = scalar, U16, 2464, "hz", 1, 0, 0, 500, 0
gppwm1_onAboveDuty = scalar, U08, 2466, "%", 1, 0, 0, 100, 0
gppwm1_offBelowDuty = scalar, U08, 2467, "%", 1, 0, 0, 100, 0
gppwm1_loadAxis = bits, U08, 2468, [0:5], $gppwm_channel_e_enum
gppwm1_rpmAxis = bits, U08, 2469, [0:5], $gppwm_channel_e_enum
gppwm1_loadBins = array, S16, 2470, [8], "", 0.5, 0, -1000, 10000, 1
gppwm1_rpmBins = array, S16, 2486, [8], "", 1, 0, -30000, 30000, 0
gppwm1_table = array, U08, 2502, [8x8], "duty", 0.5, 0, 0, 100, 1
gppwm2_pin = bits, U16, 2568, [0:8], $output_pin_e_list
gppwm2_dutyIfError = scalar, U08, 2570, "%", 1, 0, 0, 100, 0
gppwm2_pwmFrequency = scalar, U16, 2572, "hz", 1, 0, 0, 500, 0
gppwm2_onAboveDuty = scalar, U08, 2574, "%", 1, 0, 0, 100, 0
gppwm2_offBelowDuty = scalar, U08, 2575, "%", 1, 0, 0, 100, 0
gppwm2_loadAxis = bits, U08, 2576, [0:5], $gppwm_channel_e_enum
gppwm2_rpmAxis = bits, U08, 2577, [0:5], $gppwm_channel_e_enum
gppwm2_loadBins = array, S16, 2578, [8], "", 0.5, 0, -1000, 10000, 1
gppwm2_rpmBins = array, S16, 2594, [8], "", 1, 0, -30000, 30000, 0
gppwm2_table = array, U08, 2610, [8x8], "duty", 0.5, 0, 0, 100, 1
gppwm3_pin = bits, U16, 2676, [0:8], $output_pin_e_list
gppwm3_dutyIfError = scalar, U08, 2678, "%", 1, 0, 0, 100, 0
gppwm3_pwmFrequency = scalar, U16, 2680, "hz", 1, 0, 0, 500, 0
gppwm3_onAboveDuty = scalar, U08, 2682, "%", 1, 0, 0, 100, 0
gppwm3_offBelowDuty = scalar, U08, 2683, "%", 1, 0, 0, 100, 0
gppwm3_loadAxis = bits, U08, 2684, [0:5], $gppwm_channel_e_enum
gppwm3_rpmAxis = bits, U08, 2685, [0:5], $gppwm_channel_e_enum
gppwm3_loadBins = array, S16, 2686, [8], "", 0.5, 0, -1000, 10000, 1
gppwm3_rpmBins = array, S16, 2702, [8], "", 1, 0, -30000, 30000, 0
gppwm3_table = array, U08, 2718, [8x8], "duty", 0.5, 0, 0, 100, 1
gppwm4_pin = bits, U16, 2784, [0:8], $output_pin_e_list
gppwm4_dutyIfError = scalar, U08, 2786, "%", 1, 0, 0, 100, 0
gppwm4_pwmFrequency = scalar, U16, 2788, "hz", 1, 0, 0, 500, 0
gppwm4_onAboveDuty = scalar, U08, 2790, "%", 1, 0, 0, 100, 0
gppwm4_offBelowDuty = scalar, U08, 2791, "%", 1, 0, 0, 100, 0
gppwm4_loadAxis = bits, U08, 2792, [0:5], $gppwm_channel_e_enum
gppwm4_rpmAxis = bits, U08, 2793, [0:5], $gppwm_channel_e_enum
gppwm4_loadBins = array, S16, 2794, [8], "", 0.5, 0, -1000, 10000, 1
gppwm4_rpmBins = array, S16, 2810, [8], "", 1, 0, -30000, 30000, 0
gppwm4_table = array, U08, 2826, [8x8], "duty", 0.5, 0, 0, 100, 1
mc33_i_boost = scalar, U16, 2892, "mA", 1, 0, 1000, 25000, 0
mc33_i_peak = scalar, U16, 2894, "mA", 1, 0, 1000, 20000, 0
mc33_i_hold = scalar, U16, 2896, "mA", 1, 0, 1000, 20000, 0
mc33_t_max_boost = scalar, U16, 2898, "us", 1, 0, 0, 10000, 0
mc33_t_peak_off = scalar, U16, 2900, "us", 1, 0, 0, 10000, 0
mc33_t_peak_tot = scalar, U16, 2902, "us", 1, 0, 0, 10000, 0
mc33_t_bypass = scalar, U16, 2904, "us", 1, 0, 0, 10000, 0
mc33_t_hold_off = scalar, U16, 2906, "us", 1, 0, 0, 10000, 0
mc33_t_hold_tot = scalar, U16, 2908, "us", 1, 0, 0, 10000, 0
tcuUpshiftButtonPinMode = bits, U08, 2910, [0:2], $pin_input_mode_e_enum
tcuDownshiftButtonPinMode = bits, U08, 2911, [0:2], $pin_input_mode_e_enum
acSwitchMode = bits, U08, 2912, [0:2], $pin_input_mode_e_enum
tcu_solenoid_mode1 = bits, U08, 2913, [0:1], $pin_output_mode_e_enum
tcu_solenoid_mode2 = bits, U08, 2914, [0:1], $pin_output_mode_e_enum
tcu_solenoid_mode3 = bits, U08, 2915, [0:1], $pin_output_mode_e_enum
tcu_solenoid_mode4 = bits, U08, 2916, [0:1], $pin_output_mode_e_enum
tcu_solenoid_mode5 = bits, U08, 2917, [0:1], $pin_output_mode_e_enum
tcu_solenoid_mode6 = bits, U08, 2918, [0:1], $pin_output_mode_e_enum
triggerGapOverrideFrom1 = scalar, F32, 2920, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom2 = scalar, F32, 2924, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom3 = scalar, F32, 2928, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom4 = scalar, F32, 2932, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom5 = scalar, F32, 2936, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom6 = scalar, F32, 2940, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom7 = scalar, F32, 2944, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom8 = scalar, F32, 2948, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom9 = scalar, F32, 2952, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom10 = scalar, F32, 2956, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom11 = scalar, F32, 2960, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom12 = scalar, F32, 2964, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom13 = scalar, F32, 2968, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom14 = scalar, F32, 2972, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom15 = scalar, F32, 2976, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom16 = scalar, F32, 2980, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom17 = scalar, F32, 2984, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideFrom18 = scalar, F32, 2988, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo1 = scalar, F32, 2992, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo2 = scalar, F32, 2996, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo3 = scalar, F32, 3000, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo4 = scalar, F32, 3004, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo5 = scalar, F32, 3008, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo6 = scalar, F32, 3012, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo7 = scalar, F32, 3016, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo8 = scalar, F32, 3020, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo9 = scalar, F32, 3024, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo10 = scalar, F32, 3028, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo11 = scalar, F32, 3032, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo12 = scalar, F32, 3036, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo13 = scalar, F32, 3040, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo14 = scalar, F32, 3044, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo15 = scalar, F32, 3048, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo16 = scalar, F32, 3052, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo17 = scalar, F32, 3056, "ratio", 1, 0, 0, 20, 3
triggerGapOverrideTo18 = scalar, F32, 3060, "ratio", 1, 0, 0, 20, 3
maxCamPhaseResolveRpm = scalar, U08, 3064, "rpm", 50.0, 0, 0, 12500, 0
dfcoDelay = scalar, U08, 3065, "sec", 0.1, 0, 0, 10, 1
acDelay = scalar, U08, 3066, "sec", 0.1, 0, 0, 10, 1
tChargeMode = bits, U08, 3067, [0:1], "RPM+TPS (Default)", "Air Mass Interpolation", "Table", "INVALID"
fordInjectorSmallPulseBreakPoint = scalar, U16, 3068, "mg", 0.001, 0, 0, 65, 3
etbJamDetectThreshold = scalar, U08, 3070, "%", 1, 0, 0, 50, 0
hpfpCamLobes = scalar, U08, 3071, "lobes/cam", 1, 0, 0, 255, 0
hpfpCam = bits, U08, 3072, [0:2], "NONE", "Intake 1", "Exhaust 1", "Intake 2", "Exhaust 2", "INVALID", "INVALID", "INVALID"
acLowRpmLimit = scalar, S08, 3073, "RPM", 10.0, 0, 0, 1200, 0
hpfpMinAngle = scalar, U08, 3074, "deg", 1, 0, 0, 255, 0
hpfpPumpVolume = scalar, U16, 3076, "cc", 0.001, 0, 0, 65, 3
hpfpActivationAngle = scalar, U08, 3078, "deg", 1, 0, 0, 255, 0
issFilterReciprocal = scalar, U08, 3079, "", 1, 0, 0, 255, 0
hpfpPidP = scalar, U16, 3080, "%/kPa", 0.001, 0, 0, 65, 3
hpfpPidI = scalar, U16, 3082, "%/kPa/lobe", 1.0E-5, 0, 0, 0.65, 5
hpfpPid_iTermMin = scalar, S16, 3084, "", 1, 0, -30000, 30000, 0
hpfpPid_iTermMax = scalar, S16, 3086, "", 1, 0, -30000, 30000, 0
hpfpTargetDecay = scalar, U16, 3088, "kPa/s", 1, 0, 0, 65000, 0
stepper_raw_output1 = bits, U16, 3090, [0:8], $output_pin_e_list
stepper_raw_output2 = bits, U16, 3092, [0:8], $output_pin_e_list
stepper_raw_output3 = bits, U16, 3094, [0:8], $output_pin_e_list
stepper_raw_output4 = bits, U16, 3096, [0:8], $output_pin_e_list
gearRatio1 = scalar, U16, 3098, "ratio", 0.01, 0, 0, 30, 2
gearRatio2 = scalar, U16, 3100, "ratio", 0.01, 0, 0, 30, 2
gearRatio3 = scalar, U16, 3102, "ratio", 0.01, 0, 0, 30, 2
gearRatio4 = scalar, U16, 3104, "ratio", 0.01, 0, 0, 30, 2
gearRatio5 = scalar, U16, 3106, "ratio", 0.01, 0, 0, 30, 2
gearRatio6 = scalar, U16, 3108, "ratio", 0.01, 0, 0, 30, 2
gearRatio7 = scalar, U16, 3110, "ratio", 0.01, 0, 0, 30, 2
gearRatio8 = scalar, U16, 3112, "ratio", 0.01, 0, 0, 30, 2
gearRatio9 = scalar, U16, 3114, "ratio", 0.01, 0, 0, 30, 2
gearRatio10 = scalar, U16, 3116, "ratio", 0.01, 0, 0, 30, 2
vvtActivationDelayMs = scalar, U16, 3118, "ms", 1, 0, 0, 65000, 0
gearControllerMode = bits, U08, 3120, [0:1], "None", "Button Shift", "Automatic", "Generic"
transmissionControllerMode = bits, U08, 3121, [0:1], "None", "Simple Transmission", "Generic 4-Speed", "GM 4L6X"
acrDisablePhase = scalar, U16, 3122, "deg", 1, 0, 0, 720, 0
auxLinear1_hwChannel = bits, U08, 3124, [0:5], $adc_channel_e_list
auxLinear1_v1 = scalar, F32, 3128, "volts", 1, 0, 0, 10, 2
auxLinear1_value1 = scalar, F32, 3132, "", 1, 0, -100000, 1000000, 2
auxLinear1_v2 = scalar, F32, 3136, "volts", 1, 0, 0, 10, 2
auxLinear1_value2 = scalar, F32, 3140, "", 1, 0, -100000, 1000000, 2
auxLinear2_hwChannel = bits, U08, 3144, [0:5], $adc_channel_e_list
auxLinear2_v1 = scalar, F32, 3148, "volts", 1, 0, 0, 10, 2
auxLinear2_value1 = scalar, F32, 3152, "", 1, 0, -100000, 1000000, 2
auxLinear2_v2 = scalar, F32, 3156, "volts", 1, 0, 0, 10, 2
auxLinear2_value2 = scalar, F32, 3160, "", 1, 0, -100000, 1000000, 2
tcu_tcc_onoff_solenoid = bits, U16, 3164, [0:8], $output_pin_e_list
tcu_tcc_onoff_solenoid_mode = bits, U08, 3166, [0:1], $pin_output_mode_e_enum
tcu_tcc_pwm_solenoid = bits, U16, 3168, [0:8], $output_pin_e_list
tcu_tcc_pwm_solenoid_mode = bits, U08, 3170, [0:1], $pin_output_mode_e_enum
tcu_tcc_pwm_solenoid_freq = scalar, U16, 3172, "Hz", 1, 0, 0, 3000, 0
tcu_pc_solenoid_pin = bits, U16, 3174, [0:8], $output_pin_e_list
tcu_pc_solenoid_pin_mode = bits, U08, 3176, [0:1], $pin_output_mode_e_enum
tcu_pc_solenoid_freq = scalar, U16, 3178, "Hz", 1, 0, 0, 3000, 0
tcu_32_solenoid_pin = bits, U16, 3180, [0:8], $output_pin_e_list
tcu_32_solenoid_pin_mode = bits, U08, 3182, [0:1], $pin_output_mode_e_enum
tcu_32_solenoid_freq = scalar, U16, 3184, "Hz", 1, 0, 0, 3000, 0
acrPin2 = bits, U16, 3186, [0:8], $output_pin_e_list
etbMinimumPosition = scalar, U08, 3188, "%", 0.1, 0, 0, 10, 1
tuneHidingKey = scalar, U16, 3190, "", 1, 0, 0, 20000, 0
vinNumber = string, ASCII, 3192, 17, 17
torqueReductionActivationTemperature = scalar, S08, 3209, "C", 1, 0, 0, 90, 0
fuelPressureSensorMode = bits, U08, 3210, [0:1], "Absolute", "Gauge", "Differential", "INVALID"
luaDigitalInputPins1 = bits, U16, 3212, [0:8], $switch_input_pin_e_list
luaDigitalInputPins2 = bits, U16, 3214, [0:8], $switch_input_pin_e_list
luaDigitalInputPins3 = bits, U16, 3216, [0:8], $switch_input_pin_e_list
luaDigitalInputPins4 = bits, U16, 3218, [0:8], $switch_input_pin_e_list
luaDigitalInputPins5 = bits, U16, 3220, [0:8], $switch_input_pin_e_list
luaDigitalInputPins6 = bits, U16, 3222, [0:8], $switch_input_pin_e_list
luaDigitalInputPins7 = bits, U16, 3224, [0:8], $switch_input_pin_e_list
luaDigitalInputPins8 = bits, U16, 3226, [0:8], $switch_input_pin_e_list
ALSMinRPM = scalar, S16, 3228, "rpm", 1, 0, 0, 20000, 0
ALSMaxRPM = scalar, S16, 3230, "rpm", 1, 0, 0, 20000, 0
ALSMaxDuration = scalar, S16, 3232, "sec", 1, 0, 0, 10, 0
ALSMinCLT = scalar, S08, 3234, "C", 1, 0, 0, 90, 0
ALSMaxCLT = scalar, S08, 3235, "C", 1, 0, 0, 105, 0
alsMinTimeBetween = scalar, U08, 3236, "", 1, 0, 0, 250, 0
alsEtbPosition = scalar, U08, 3237, "", 1, 0, 0, 250, 0
acRelayAlternatorDutyAdder = scalar, U08, 3238, "%", 1, 0, 0, 100, 0
sentEtbType = bits, S08, 3239, [0:1], "None", "GM type 1", "Ford type 1", "Custom"
customSentTpsMin = scalar, U16, 3240, "", 1, 0, 0, 32000, 0
ALSIdleAdd = scalar, S32, 3244, "%", 1, 0, 0, 100, 2
ALSEtbAdd = scalar, S32, 3248, "%", 1, 0, 0, 100, 2
ALSSkipRatio = scalar, F32, 3252, "", 1, 0, 0, 1, 1
acPressureEnableHyst = scalar, U08, 3256, "kPa", 0.5, 0, 0, 125, 1
ALSActivatePinMode = bits, U08, 3257, [0:2], $pin_input_mode_e_enum
tpsSecondaryMaximum = scalar, U08, 3258, "%", 0.5, 0, 0, 100, 1
ppsSecondaryMaximum = scalar, U08, 3259, "%", 0.5, 0, 0, 100, 1
luaDigitalInputPinModes1 = bits, U08, 3260, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes2 = bits, U08, 3261, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes3 = bits, U08, 3262, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes4 = bits, U08, 3263, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes5 = bits, U08, 3264, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes6 = bits, U08, 3265, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes7 = bits, U08, 3266, [0:2], $pin_input_mode_e_enum
luaDigitalInputPinModes8 = bits, U08, 3267, [0:2], $pin_input_mode_e_enum
customSentTpsMax = scalar, U16, 3268, "", 1, 0, 0, 32000, 0
kLineBaudRate = scalar, U16, 3270, "", 1, 0, 0, 32000, 0
canGpioType = bits, S08, 3272, [0:1], "None", "DRT protocol", "MS protocol", "INVALID"
uiMode = bits, S08, 3273, [0:1], "Full", "INVALID", "Tuning", "INVALID"
hpfpPeakPos = scalar, S16, 3274, "deg", 1, 0, -719, 719, 0
kLinePeriodUs = scalar, S16, 3276, "us", 1, 0, 0, 30000, 0
rpmSoftLimitWindowSize = scalar, U08, 3278, "RPM", 10.0, 0, 0, 2500, 0
rpmSoftLimitTimingRetard = scalar, U08, 3279, "deg", 0.2, 0, 0, 50, 1
rpmSoftLimitFuelAdded = scalar, U08, 3280, "%", 0.2, 0, 0, 50, 1
rpmHardLimitHyst = scalar, U08, 3281, "RPM", 10.0, 0, 0, 2500, 0
benchTestOffTime = scalar, U16, 3282, "ms", 0.1, 0, 5, 2000, 1
boostCutPressureHyst = scalar, U08, 3284, "kPa", 0.5, 0, 0, 125, 1
gearBasedOpenLoopBoostAdder = array, S08, 3285, [10], "%", 0.5, 0, -63, 63, 1
benchTestCount = scalar, U32, 3296, "", 1, 0, 1, 10000000, 0
iacByTpsHoldTime = scalar, U08, 3300, "seconds", 0.1, 0, 0, 25, 1
iacByTpsDecayTime = scalar, U08, 3301, "seconds", 0.1, 0, 0, 25, 1
tcu_rangeInput1 = bits, U16, 3302, [0:8], $switch_input_pin_e_list
tcu_rangeInput2 = bits, U16, 3304, [0:8], $switch_input_pin_e_list
tcu_rangeInput3 = bits, U16, 3306, [0:8], $switch_input_pin_e_list
tcu_rangeInput4 = bits, U16, 3308, [0:8], $switch_input_pin_e_list
tcu_rangeInput5 = bits, U16, 3310, [0:8], $switch_input_pin_e_list
tcu_rangeInput6 = bits, U16, 3312, [0:8], $switch_input_pin_e_list
tcu_rangeInputMode1 = bits, U08, 3314, [0:2], $pin_input_mode_e_enum
tcu_rangeInputMode2 = bits, U08, 3315, [0:2], $pin_input_mode_e_enum
tcu_rangeInputMode3 = bits, U08, 3316, [0:2], $pin_input_mode_e_enum
tcu_rangeInputMode4 = bits, U08, 3317, [0:2], $pin_input_mode_e_enum
tcu_rangeInputMode5 = bits, U08, 3318, [0:2], $pin_input_mode_e_enum
tcu_rangeInputMode6 = bits, U08, 3319, [0:2], $pin_input_mode_e_enum
canVssScaling = scalar, U16, 3320, "ratio", 1.0E-4, 0, 0.5, 1.5, 4
oilTempSensor_tempC_1 = scalar, F32, 3324, "*C", 1, 0, -55, 200, 1
oilTempSensor_tempC_2 = scalar, F32, 3328, "*C", 1, 0, -55, 200, 1
oilTempSensor_tempC_3 = scalar, F32, 3332, "*C", 1, 0, -55, 200, 1
oilTempSensor_resistance_1 = scalar, F32, 3336, "Ohm", 1, 0, 0, 1000000, 1
oilTempSensor_resistance_2 = scalar, F32, 3340, "Ohm", 1, 0, 0, 1000000, 1
oilTempSensor_resistance_3 = scalar, F32, 3344, "Ohm", 1, 0, 0, 1000000, 1
oilTempSensor_bias_resistor = scalar, F32, 3348, "Ohm", 1, 0, 0, 200000, 1
oilTempSensor_adcChannel = bits, U08, 3352, [0:5], $adc_channel_e_list
fuelTempSensor_tempC_1 = scalar, F32, 3356, "*C", 1, 0, -55, 200, 1
fuelTempSensor_tempC_2 = scalar, F32, 3360, "*C", 1, 0, -55, 200, 1
fuelTempSensor_tempC_3 = scalar, F32, 3364, "*C", 1, 0, -55, 200, 1
fuelTempSensor_resistance_1 = scalar, F32, 3368, "Ohm", 1, 0, 0, 1000000, 1
fuelTempSensor_resistance_2 = scalar, F32, 3372, "Ohm", 1, 0, 0, 1000000, 1
fuelTempSensor_resistance_3 = scalar, F32, 3376, "Ohm", 1, 0, 0, 1000000, 1
fuelTempSensor_bias_resistor = scalar, F32, 3380, "Ohm", 1, 0, 0, 200000, 1
fuelTempSensor_adcChannel = bits, U08, 3384, [0:5], $adc_channel_e_list
ambientTempSensor_tempC_1 = scalar, F32, 3388, "*C", 1, 0, -55, 200, 1
ambientTempSensor_tempC_2 = scalar, F32, 3392, "*C", 1, 0, -55, 200, 1
ambientTempSensor_tempC_3 = scalar, F32, 3396, "*C", 1, 0, -55, 200, 1
ambientTempSensor_resistance_1 = scalar, F32, 3400, "Ohm", 1, 0, 0, 1000000, 1
ambientTempSensor_resistance_2 = scalar, F32, 3404, "Ohm", 1, 0, 0, 1000000, 1
ambientTempSensor_resistance_3 = scalar, F32, 3408, "Ohm", 1, 0, 0, 1000000, 1
ambientTempSensor_bias_resistor = scalar, F32, 3412, "Ohm", 1, 0, 0, 200000, 1
ambientTempSensor_adcChannel = bits, U08, 3416, [0:5], $adc_channel_e_list
compressorDischargeTemperature_tempC_1 = scalar, F32, 3420, "*C", 1, 0, -55, 200, 1
compressorDischargeTemperature_tempC_2 = scalar, F32, 3424, "*C", 1, 0, -55, 200, 1
compressorDischargeTemperature_tempC_3 = scalar, F32, 3428, "*C", 1, 0, -55, 200, 1
compressorDischargeTemperature_resistance_1 = scalar, F32, 3432, "Ohm", 1, 0, 0, 1000000, 1
compressorDischargeTemperature_resistance_2 = scalar, F32, 3436, "Ohm", 1, 0, 0, 1000000, 1
compressorDischargeTemperature_resistance_3 = scalar, F32, 3440, "Ohm", 1, 0, 0, 1000000, 1
compressorDischargeTemperature_bias_resistor = scalar, F32, 3444, "Ohm", 1, 0, 0, 200000, 1
compressorDischargeTemperature_adcChannel = bits, U08, 3448, [0:5], $adc_channel_e_list
throttleInletPressureChannel = bits, U08, 3452, [0:5], $adc_channel_e_list
compressorDischargePressureChannel = bits, U08, 3453, [0:5], $adc_channel_e_list
dacOutputPins1 = bits, U16, 3454, [0:8], $gpio_list
dacOutputPins2 = bits, U16, 3456, [0:8], $gpio_list
speedometerOutputPin = bits, U16, 3458, [0:8], $output_pin_e_list
speedometerPulsePerKm = scalar, U16, 3460, "", 1, 0, 0, 65000, 0
simulatorCamPosition1 = scalar, U08, 3462, "", 1, 0, 0, 100, 0
simulatorCamPosition2 = scalar, U08, 3463, "", 1, 0, 0, 100, 0
simulatorCamPosition3 = scalar, U08, 3464, "", 1, 0, 0, 100, 0
simulatorCamPosition4 = scalar, U08, 3465, "", 1, 0, 0, 100, 0
ignKeyAdcChannel = bits, U08, 3466, [0:5], $adc_channel_e_list
ignKeyAdcDivider = scalar, F32, 3468, "", 1, 0, 0, 100, 0
spi6MisoMode = bits, U08, 3472, [0:6], $pin_mode_e_enum
triggerVVTGapOverrideFrom1 = scalar, F32, 3476, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideFrom2 = scalar, F32, 3480, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideFrom3 = scalar, F32, 3484, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideFrom4 = scalar, F32, 3488, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideTo1 = scalar, F32, 3492, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideTo2 = scalar, F32, 3496, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideTo3 = scalar, F32, 3500, "ratio", 1, 0, 0, 20, 3
triggerVVTGapOverrideTo4 = scalar, F32, 3504, "ratio", 1, 0, 0, 20, 3
tractionControlEtbDrop = array, S08, 3508, [6x6], "%", 1, 0, -100, 0, 0
maxInjectorDutyInstant = scalar, U08, 3544, "%", 1, 0, 50, 200, 0
maxInjectorDutySustained = scalar, U08, 3545, "%", 1, 0, 50, 120, 0
maxInjectorDutySustainedTimeout = scalar, U08, 3546, "sec", 0.1, 0, 0, 5, 1
injectionPinsStage21 = bits, U16, 3548, [0:8], $output_pin_e_list
injectionPinsStage22 = bits, U16, 3550, [0:8], $output_pin_e_list
injectionPinsStage23 = bits, U16, 3552, [0:8], $output_pin_e_list
injectionPinsStage24 = bits, U16, 3554, [0:8], $output_pin_e_list
injectionPinsStage25 = bits, U16, 3556, [0:8], $output_pin_e_list
injectionPinsStage26 = bits, U16, 3558, [0:8], $output_pin_e_list
injectionPinsStage27 = bits, U16, 3560, [0:8], $output_pin_e_list
injectionPinsStage28 = bits, U16, 3562, [0:8], $output_pin_e_list
injectionPinsStage29 = bits, U16, 3564, [0:8], $output_pin_e_list
injectionPinsStage210 = bits, U16, 3566, [0:8], $output_pin_e_list
injectionPinsStage211 = bits, U16, 3568, [0:8], $output_pin_e_list
injectionPinsStage212 = bits, U16, 3570, [0:8], $output_pin_e_list
tractionControlTimingDrop = array, S08, 3572, [6x6], "Deg", 1, 0, -100, 100, 0
tractionControlIgnitionSkip = array, S08, 3608, [6x6], "%", 1, 0, 0, 100, 0
auxSpeed1Multiplier = scalar, F32, 3644, "", 1, 0, 0, 100, 0
brakeMeanEffectivePressureDifferential = scalar, F32, 3648, "", 1, 0, 0, 100, 0
spi4mosiPin = bits, U16, 3652, [0:8], $gpio_list
spi4misoPin = bits, U16, 3654, [0:8], $gpio_list
spi4sckPin = bits, U16, 3656, [0:8], $gpio_list
spi5mosiPin = bits, U16, 3658, [0:8], $gpio_list
spi5misoPin = bits, U16, 3660, [0:8], $gpio_list
spi5sckPin = bits, U16, 3662, [0:8], $gpio_list
spi6mosiPin = bits, U16, 3664, [0:8], $gpio_list
spi6misoPin = bits, U16, 3666, [0:8], $gpio_list
spi6sckPin = bits, U16, 3668, [0:8], $gpio_list
spi4SckMode = bits, U08, 3670, [0:6], $pin_mode_e_enum
spi4MosiMode = bits, U08, 3671, [0:6], $pin_mode_e_enum
spi4MisoMode = bits, U08, 3672, [0:6], $pin_mode_e_enum
spi5SckMode = bits, U08, 3673, [0:6], $pin_mode_e_enum
spi5MosiMode = bits, U08, 3674, [0:6], $pin_mode_e_enum
spi5MisoMode = bits, U08, 3675, [0:6], $pin_mode_e_enum
spi6SckMode = bits, U08, 3676, [0:6], $pin_mode_e_enum
spi6MosiMode = bits, U08, 3677, [0:6], $pin_mode_e_enum
tunerStudioSerialSpeed = scalar, U32, 3680, "BPs", 1, 0, 0, 1000000, 0
camSimulatorPin = bits, U16, 3684, [0:8], $gpio_list
camSimulatorPinMode = bits, U08, 3686, [0:1], $pin_output_mode_e_enum
anotherCiTest = scalar, S32, 3688, "", 1, 0, 0, 100, 0
device_uid1 = scalar, U32, 3692, "", 1, 0, 0, 100, 0
device_uid2 = scalar, U32, 3696, "", 1, 0, 0, 100, 0
device_uid3 = scalar, U32, 3700, "", 1, 0, 0, 100, 0
tcu_rangeAnalogInput1 = bits, U08, 3704, [0:5], $adc_channel_e_list
tcu_rangeAnalogInput2 = bits, U08, 3705, [0:5], $adc_channel_e_list
tcu_rangeAnalogInput3 = bits, U08, 3706, [0:5], $adc_channel_e_list
tcu_rangeAnalogInput4 = bits, U08, 3707, [0:5], $adc_channel_e_list
tcu_rangeAnalogInput5 = bits, U08, 3708, [0:5], $adc_channel_e_list
tcu_rangeAnalogInput6 = bits, U08, 3709, [0:5], $adc_channel_e_list
tcu_rangeSensorBiasResistor = scalar, F32, 3712, "Ohm", 1, 0, 0, 200000, 1
msIoBox0_id = bits, U08, 3716, [0:1], "Off", "ID1 (0x200)", "ID2 (0x220)", "ID3 (0x240)"
msIoBox0_vss = bits, U08, 3717, [0:1], "Off", "VR speed in (1, 2)", "Hall speed in (3, 4)", "All (1, 2, 3, 4)"
mc33810Nomi = scalar, U08, 3720, "A", 0.25, 0, 3.00, 10.75, 2
mc33810Maxi = scalar, U08, 3721, "A", 1, 0, 6, 21, 0
acPressure_hwChannel = bits, U08, 3724, [0:5], $adc_channel_e_list
acPressure_v1 = scalar, F32, 3728, "volts", 1, 0, 0, 10, 2
acPressure_value1 = scalar, F32, 3732, "", 1, 0, -100000, 1000000, 2
acPressure_v2 = scalar, F32, 3736, "volts", 1, 0, 0, 10, 2
acPressure_value2 = scalar, F32, 3740, "", 1, 0, -100000, 1000000, 2
minAcPressure = scalar, U16, 3744, "kPa", 1, 0, 0, 500, 0
maxAcPressure = scalar, U16, 3746, "kPa", 1, 0, 0, 500, 0
minimumOilPressureTimeout = scalar, U08, 3748, "sec", 0.1, 0, 0, 5, 1
auxLinear3_hwChannel = bits, U08, 3752, [0:5], $adc_channel_e_list
auxLinear3_v1 = scalar, F32, 3756, "volts", 1, 0, 0, 10, 2
auxLinear3_value1 = scalar, F32, 3760, "", 1, 0, -100000, 1000000, 2
auxLinear3_v2 = scalar, F32, 3764, "volts", 1, 0, 0, 10, 2
auxLinear3_value2 = scalar, F32, 3768, "", 1, 0, -100000, 1000000, 2
auxLinear4_hwChannel = bits, U08, 3772, [0:5], $adc_channel_e_list
auxLinear4_v1 = scalar, F32, 3776, "volts", 1, 0, 0, 10, 2
auxLinear4_value1 = scalar, F32, 3780, "", 1, 0, -100000, 1000000, 2
auxLinear4_v2 = scalar, F32, 3784, "volts", 1, 0, 0, 10, 2
auxLinear4_value2 = scalar, F32, 3788, "", 1, 0, -100000, 1000000, 2
knockSuppressMinTps = scalar, U08, 3792, "%", 1, 0, 0, 100, 1
knockFuelTrimAggression = scalar, U08, 3793, "%", 0.1, 0, 0, 20, 1
knockFuelTrimReapplyRate = scalar, U08, 3794, "1%/s", 0.1, 0, 0, 10, 1
knockFuelTrim = scalar, U08, 3795, "%", 1, 0, 0, 30, 1
knockSpectrumSensitivity = scalar, F32, 3796, "sense", 1, 0, 0, 1, 2
knockFrequency = scalar, F32, 3800, "Hz", 1, 0, 0, 20000, 2
secondaryInjectorCompensationMode = bits, U08, 3804, [0:1], "None", "Fixed rail pressure", "Sensed Rail Pressure", "HPFP fuel mass compensation"
secondaryInjectorFuelReferencePressure = scalar, F32, 3808, "kPa", 1, 0, 50, 700000, 0
EtbSentInput = bits, U08, 3812, [0:2], "None", "SENT input 1", "SENT input 2", "SENT input 3", "SENT input 4", "SENT input 5", "SENT input 6", "SENT input 7"
FuelHighPressureSentInput = bits, U08, 3813, [0:2], "None", "SENT input 1", "SENT input 2", "SENT input 3", "SENT input 4", "SENT input 5", "SENT input 6", "SENT input 7"
FuelHighPressureSentType = bits, U08, 3814, [0:1], "None", "GM type", "Custom", "INVALID"
nitrousControlEnabled = bits, U32, 3816, [0:0], "disabled", "enabled"
vvlControlEnabled = bits, U32, 3816, [1:1], "disabled", "enabled"
unusedFancy3 = bits, U32, 3816, [2:2], "false", "true"
unusedFancy4 = bits, U32, 3816, [3:3], "false", "true"
unusedFancy5 = bits, U32, 3816, [4:4], "false", "true"
unusedFancy6 = bits, U32, 3816, [5:5], "false", "true"
unusedFancy7 = bits, U32, 3816, [6:6], "false", "true"
unusedFancy8 = bits, U32, 3816, [7:7], "false", "true"
unusedFancy9 = bits, U32, 3816, [8:8], "false", "true"
unusedFancy10 = bits, U32, 3816, [9:9], "false", "true"
unusedFancy11 = bits, U32, 3816, [10:10], "false", "true"
unusedFancy12 = bits, U32, 3816, [11:11], "false", "true"
unusedFancy13 = bits, U32, 3816, [12:12], "false", "true"
unusedFancy14 = bits, U32, 3816, [13:13], "false", "true"
unusedFancy15 = bits, U32, 3816, [14:14], "false", "true"
unusedFancy16 = bits, U32, 3816, [15:15], "false", "true"
unusedFancy17 = bits, U32, 3816, [16:16], "false", "true"
unusedFancy18 = bits, U32, 3816, [17:17], "false", "true"
unusedFancy19 = bits, U32, 3816, [18:18], "false", "true"
unusedFancy20 = bits, U32, 3816, [19:19], "false", "true"
unusedFancy21 = bits, U32, 3816, [20:20], "false", "true"
unusedFancy22 = bits, U32, 3816, [21:21], "false", "true"
unusedFancy23 = bits, U32, 3816, [22:22], "false", "true"
unusedFancy24 = bits, U32, 3816, [23:23], "false", "true"
unusedFancy25 = bits, U32, 3816, [24:24], "false", "true"
unusedFancy26 = bits, U32, 3816, [25:25], "false", "true"
unusedFancy27 = bits, U32, 3816, [26:26], "false", "true"
unusedFancy28 = bits, U32, 3816, [27:27], "false", "true"
unusedFancy29 = bits, U32, 3816, [28:28], "false", "true"
unusedFancy30 = bits, U32, 3816, [29:29], "false", "true"
unusedFancy31 = bits, U32, 3816, [30:30], "false", "true"
unusedFancy32 = bits, U32, 3816, [31:31], "false", "true"
nitrousControlArmingMethod = bits, S08, 3820, [3:3], "Digital Switch Input", "Lua Gauge"
nitrousControlTriggerPin = bits, U16, 3822, [0:8], $switch_input_pin_e_list
nitrousControlTriggerPinMode = bits, U08, 3824, [0:2], $pin_input_mode_e_enum
nitrousLuaGauge = bits, S08, 3825, [0:2], "Lua Gauge 1", "Lua Gauge 2", "Lua Gauge 3", "Lua Gauge 4", "Lua Gauge 5", "Lua Gauge 6", "Lua Gauge 7", "Lua Gauge 8"
nitrousLuaGaugeMeaning = bits, S08, 3826, [3:3], "Lower Bound", "Upper Bound"
nitrousLuaGaugeArmingValue = scalar, F32, 3828, "", 1, 0, -30000, 30000, 3
nitrousMinimumTps = scalar, S32, 3832, "", 1, 0, 0, 20000, 0
nitrousMinimumClt = scalar, S16, 3836, "C", 1, 0, 0, 250, 0
nitrousMaximumMap = scalar, S16, 3838, "kPa", 1, 0, 0, 650, 0
nitrousMaximumAfr = scalar, U08, 3840, "afr", 0.1, 0, 10, 20, 1
nitrousActivationRpm = scalar, U16, 3842, "rpm", 1, 0, 0, 20000, 0
nitrousDeactivationRpm = scalar, U16, 3844, "rpm", 1, 0, 0, 20000, 0
nitrousDeactivationRpmWindow = scalar, U16, 3846, "rpm", 1, 0, 0, 20000, 0
dfcoRetardDeg = scalar, U08, 3848, "deg", 1, 0, 0, 30, 0
dfcoRetardRampInTime = scalar, U08, 3849, "s", 0.1, 0, 0, 1, 1
nitrousRelayPin = bits, U16, 3850, [0:8], $output_pin_e_list
nitrousRelayPinMode = bits, U08, 3852, [0:1], $pin_output_mode_e_enum
nitrousFuelAdderPercent = scalar, S08, 3853, "%", 1, 0, 0, 100, 0
nitrousIgnitionRetard = scalar, F32, 3856, "deg", 1, 0, -180, 180, 2
nitrousMinimumVehicleSpeed = scalar, U16, 3860, "kmh", 1, 0, 0, 300, 0
fuelLevelAveragingAlpha = scalar, F32, 3864, "", 1, 0, 0.0001, 1, 4
fuelLevelUpdatePeriodSec = scalar, F32, 3868, "seconds", 1, 0, 0, 60000, 3
fuelLevelLowThresholdVoltage = scalar, F32, 3872, "v", 1, 0, 0, 10, 2
fuelLevelHighThresholdVoltage = scalar, F32, 3876, "v", 1, 0, 0, 10, 2
afrExpAverageAlpha = scalar, F32, 3880, "", 1, 0, 0, 1, 3
sparkHardwareLatencyCorrection = scalar, U08, 3884, "uS", 1, 0, 0, 250, 0
maxOilPressureTimeout = scalar, U08, 3885, "sec", 0.1, 0, 0, 5, 1
idleFlowEstimateFlow = array, U16, 3886, [8], "kg/h", 0.01, 0, 0, 200, 2
idleFlowEstimatePosition = array, U08, 3902, [8], "%", 0.5, 0, 0, 100, 1
airmassToTimingBins = array, S08, 3910, [8], "mg", 1, 0, -100, 100, 0
airmassToTimingValues = array, S08, 3918, [8], "deg", 1, 0, -30, 30, 0
idleReturnTargetRampDuration = scalar, U08, 3926, "seconds", 0.1, 0, 0.1, 15, 1
wastegatePositionOpenedVoltage = scalar, F32, 3928, "v", 1, 0, 0, 10, 2
wastegatePositionClosedVoltage = scalar, F32, 3932, "v", 1, 0, 0, 10, 2
canWbo1_type = bits, U08, 3936, [0:1], "RusEFI", "AEM X-series", "Disabled/Analog", "INVALID"
canWbo1_reId = bits, U08, 3937, [0:3], $can_wbo_re_id_list
canWbo1_aemId = bits, U08, 3938, [0:3], $can_wbo_aem_id_list
canWbo1_reHwidx = bits, U08, 3939, [0:3], $can_wbo_re_hwidx_list
canWbo1_enableRemap = bits, U32, 3940, [0:0], "false", "true"
canWbo2_type = bits, U08, 3944, [0:1], "RusEFI", "AEM X-series", "Disabled/Analog", "INVALID"
canWbo2_reId = bits, U08, 3945, [0:3], $can_wbo_re_id_list
canWbo2_aemId = bits, U08, 3946, [0:3], $can_wbo_aem_id_list
canWbo2_reHwidx = bits, U08, 3947, [0:3], $can_wbo_re_hwidx_list
canWbo2_enableRemap = bits, U32, 3948, [0:0], "false", "true"
vvlRelayPin = bits, U16, 3952, [0:8], $output_pin_e_list
vvlRelayPinMode = bits, U08, 3954, [0:1], $pin_output_mode_e_enum
vvlController_fuelAdderPercent = scalar, S08, 3956, "%", 1, 0, 0, 100, 0
vvlController_ignitionRetard = scalar, F32, 3960, "deg", 1, 0, -180, 180, 2
vvlController_minimumTps = scalar, S32, 3964, "", 1, 0, 0, 20000, 0
vvlController_minimumClt = scalar, S16, 3968, "C", 1, 0, 0, 250, 0
vvlController_maximumMap = scalar, S16, 3970, "kPa", 1, 0, 0, 650, 0
vvlController_maximumAfr = scalar, U08, 3972, "afr", 0.1, 0, 0, 20, 1
vvlController_activationRpm = scalar, U16, 3974, "rpm", 1, 0, 0, 20000, 0
vvlController_deactivationRpm = scalar, U16, 3976, "rpm", 1, 0, 0, 20000, 0
vvlController_deactivationRpmWindow = scalar, U16, 3978, "rpm", 1, 0, 0, 20000, 0
tmfTable = array, F32, 3980, [2x2], "", 1, 0, 0, 255, 2
tmfRatioBins = array, F32, 3996, [2], "", 1, 0, 0, 65000, 1
tmfOpeningBins = array, F32, 4004, [2], "", 1, 0, 0, 65000, 1
torqueTable = array, U08, 4012, [6x6], "Nm", 10.0, 0, 0, 255, 0
torqueRpmBins = array, U16, 4048, [6], "RPM", 1, 0, 0, 65000, 0
torqueLoadBins = array, U16, 4060, [6], "Load", 1, 0, 0, 65000, 0
postCrankingFactor = array, F32, 4072, [6x6], "mult", 1, 0, 1, 3, 2
postCrankingDurationBins = array, U16, 4216, [6], "count", 1, 0, 0, 64000, 0
postCrankingCLTBins = array, S16, 4228, [6], "C", 1, 0, -100, 250, 0
etbBiasBins = array, F32, 4240, [8], "target TPS position", 1, 0, 0, 100, 0
etbBiasValues = array, F32, 4272, [8], "ETB duty cycle bias", 1, 0, -100, 100, 2
dcWastegateBiasBins = array, S08, 4304, [8], "target DC position", 1, 0, 0, 100, 0
dcWastegateBiasValues = array, S16, 4312, [8], "DC wastegate duty cycle bias", 0.01, 0, -100, 100, 2
iacPidMultTable = array, U08, 4328, [8x8], "%", 0.05, 0, 0, 10, 2
iacPidMultLoadBins = array, U08, 4392, [8], "Load", 1, 0, 0, 250, 2
iacPidMultRpmBins = array, U08, 4400, [8], "RPM", 10.0, 0, 0, 2500, 0
sparkDwellRpmBins = array, U16, 4408, [8], "RPM", 1, 0, 0, 25000, 0
sparkDwellValues = array, U16, 4424, [8], "ms", 0.01, 0, 0, 30, 2
cltIdleRpmBins = array, S16, 4440, [16], "C", 1, 0, -40, 250, 0
cltIdleRpm = array, U08, 4472, [16], "RPM", 20.0, 0, 0, 5000, 0
ignitionCltCorrTable = array, S16, 4488, [5x5], "deg", 0.1, 0, -50, 50, 1
ignitionCltCorrTempBins = array, S16, 4538, [5], "C", 1, 0, -40, 250, 0
ignitionCltCorrLoadBins = array, U08, 4548, [5], "Load", 5.0, 0, 0, 650, 0
scriptCurve1Bins = array, F32, 4556, [16], "x", 1, 0, -10000, 10000, 3
scriptCurve1 = array, F32, 4620, [16], "y", 1, 0, -10000, 10000, 3
scriptCurve2Bins = array, F32, 4684, [16], "x", 1, 0, -10000, 10000, 3
scriptCurve2 = array, F32, 4748, [16], "y", 1, 0, -10000, 10000, 3
scriptCurve3Bins = array, F32, 4812, [8], "x", 1, 0, -10000, 10000, 3
scriptCurve3 = array, F32, 4844, [8], "y", 1, 0, -10000, 10000, 3
scriptCurve4Bins = array, F32, 4876, [8], "x", 1, 0, -10000, 10000, 3
scriptCurve4 = array, F32, 4908, [8], "y", 1, 0, -10000, 10000, 3
scriptCurve5Bins = array, F32, 4940, [8], "x", 1, 0, -10000, 10000, 3
scriptCurve5 = array, F32, 4972, [8], "y", 1, 0, -10000, 10000, 3
scriptCurve6Bins = array, F32, 5004, [8], "x", 1, 0, -10000, 10000, 3
scriptCurve6 = array, F32, 5036, [8], "y", 1, 0, -10000, 10000, 3
baroCorrPressureBins = array, F32, 5068, [4], "kPa", 1, 0, 0, 120, 2
baroCorrRpmBins = array, F32, 5084, [4], "RPM", 1, 0, 0, 18000, 0
baroCorrTable = array, F32, 5100, [4x4], "ratio", 1, 0, 0, 2, 2
crankingTpsCoef = array, F32, 5164, [8], "Ratio", 1, 0, 0, 700, 2
crankingTpsBins = array, F32, 5196, [8], "%", 1, 0, 0, 100, 2
crankingAdvanceBins = array, U16, 5228, [4], "RPM", 1, 0, 0, 25000, 0
crankingAdvance = array, S16, 5236, [4], "deg", 0.01, 0, -20, 90, 2
iacCoastingRpmBins = array, U08, 5244, [16], "RPM", 100.0, 0, 0, 25000, 0
iacCoasting = array, U08, 5260, [16], "%", 0.5, 0, 0, 100, 1
boostTableOpenLoop = array, U08, 5276, [8x8], "", 0.5, 0, 0, 100, 1
boostRpmBins = array, U08, 5340, [8], "RPM", 100.0, 0, 0, 25000, 0
boostOpenLoopLoadBins = array, U16, 5348, [8], "", 1, 0, 0, 650, 0
boostTableClosedLoop = array, U08, 5364, [8x8], "", 2.0, 0, 0, 510, 0
boostClosedLoopLoadBins = array, U16, 5428, [8], "", 1, 0, 0, 650, 0
pedalToTpsTable = array, U08, 5444, [8x8], "%", 1, 0, 0, 100, 0
pedalToTpsPedalBins = array, U08, 5508, [8], "%", 1, 0, 0, 120, 0
pedalToTpsRpmBins = array, U08, 5516, [8], "RPM", 100.0, 0, 0, 25000, 0
cltCrankingCorrBins = array, F32, 5524, [8], "C", 1, 0, -100, 250, 2
cltCrankingCorr = array, F32, 5556, [8], "percent", 1, 0, 0, 100, 2
afterCrankingIACtaperDurationBins = array, F32, 5588, [6], "C", 1, 0, -100, 250, 2
afterCrankingIACtaperDuration = array, U16, 5612, [6], "cycles", 1, 0, 0, 500, 1
idleAdvanceBins = array, U08, 5624, [8], "RPM", 50.0, 0, 0, 12000, 0
idleAdvance = array, F32, 5632, [8], "deg", 1, 0, -20, 90, 1
idleVeRpmBins = array, U08, 5664, [4], "RPM", 10.0, 0, 0, 2500, 0
idleVeLoadBins = array, U08, 5668, [4], "load", 1, 0, 0, 100, 0
idleVeTable = array, U16, 5672, [4x4], "%", 0.1, 0, 0, 999, 1
luaScript = string, ASCII, 5704, 10000
cltFuelCorrBins = array, F32, 15704, [16], "C", 1, 0, -100, 250, 2
cltFuelCorr = array, F32, 15768, [16], "ratio", 1, 0, 0, 5, 2
iatFuelCorrBins = array, F32, 15832, [16], "C", 1, 0, -100, 250, 2
iatFuelCorr = array, F32, 15896, [16], "ratio", 1, 0, 0, 5, 2
crankingFuelCoef = array, F32, 15960, [8], "ratio", 1, 0, 0, 50, 2
crankingFuelBins = array, F32, 15992, [8], "C", 1, 0, -80, 250, 2
crankingCycleBins = array, F32, 16024, [8], "counter", 1, 0, -80, 170, 0
crankingCycleFuelCltBins = array, S16, 16056, [4], "C", 1, 0, -100, 250, 2
crankingCycleBaseFuel = array, F32, 16064, [8x4], "mg", 1, 0, 0, 500, 1
cltIdleCorrBins = array, F32, 16192, [6], "C", 1, 0, -100, 250, 2
cltIdleCorrTable = array, F32, 16216, [6x4], "%", 1, 0, 0, 100, 2
rpmIdleCorrBins = array, U08, 16312, [4], "Target RPM", 100.0, 0, 0, 25000, 0
ltitTable = array, U16, 16316, [6], "%", 0.1, 0, 50, 150, 1
mafDecoding = array, F32, 16328, [32], "kg/hour", 1, 0, -500, 4000, 2
mafDecodingBins = array, F32, 16456, [32], "V", 1, 0, -5, 150, 2
ignitionIatCorrTable = array, S16, 16584, [8x8], "deg", 0.1, 0, -50, 50, 1
ignitionIatCorrTempBins = array, S08, 16712, [8], "C", 1, 0, -40, 120, 0
ignitionIatCorrLoadBins = array, U08, 16720, [8], "Load", 5.0, 0, 0, 650, 0
injectionPhase = array, S16, 16728, [16x16], "deg", 1, 0, -720, 720, 0
injPhaseLoadBins = array, U16, 17240, [16], "Load", 1, 0, 0, 650, 0
injPhaseRpmBins = array, U16, 17272, [16], "RPM", 1, 0, 0, 18000, 0
tcuSolenoidTable = array, U08, 17304, [10x6], "onoff", 1, 0, 0, 1, 0
mapEstimateTable = array, U16, 17364, [16x16], "kPa", 0.01, 0, 0, 650, 2
mapEstimateTpsBins = array, U16, 17876, [16], "% TPS", 0.01, 0, 0, 100, 1
mapEstimateRpmBins = array, U16, 17908, [16], "RPM", 1, 0, 0, 18000, 0
vvtTable1 = array, S08, 17940, [8x8], "value", 1, 0, -125, 125, 0
vvtTable1LoadBins = array, U16, 18004, [8], "L", 1, 0, 0, 650, 0
vvtTable1RpmBins = array, U16, 18020, [8], "RPM", 1, 0, 0, 18000, 0
vvtTable2 = array, S08, 18036, [8x8], "value", 1, 0, -125, 125, 0
vvtTable2LoadBins = array, U16, 18100, [8], "L", 1, 0, 0, 650, 0
vvtTable2RpmBins = array, U16, 18116, [8], "RPM", 1, 0, 0, 18000, 0
ignitionTable = array, S16, 18132, [16x16], "deg", 0.1, 0, -20, 90, 1
ignitionLoadBins = array, U16, 18644, [16], "Load", 1, 0, 0, 650, 0
ignitionRpmBins = array, U16, 18676, [16], "RPM", 1, 0, 0, 18000, 0
veTable = array, U16, 18708, [16x16], "%", 0.1, 0, 0, 999, 1
veLoadBins = array, U16, 19220, [16], {bitStringValue(fuelUnits, fuelAlgorithm) }, 1, 0, 0, 650, 0
veRpmBins = array, U16, 19252, [16], "RPM", 1, 0, 0, 18000, 0
#if LAMBDA
lambdaTable = array, U08, 19284, [16x16], "lambda", 0.006802721088435374, 0, 0.6, 1.5, 2
#else
lambdaTable = array, U08, 19284, [16x16], "afr", 0.1, 0, 0, 25, 1
#endif
lambdaLoadBins = array, U16, 19540, [16], "", 1, 0, 0, 1000, 0
lambdaRpmBins = array, U16, 19572, [16], "RPM", 1, 0, 0, 18000, 0
tpsTpsAccelTable = array, F32, 19604, [8x8], "value", 1, 0, 0, 30000, 2
tpsTpsAccelFromRpmBins = array, F32, 19860, [8], "%", 1, 0, 0, 30000, 2
tpsTpsAccelToRpmBins = array, F32, 19892, [8], "%", 1, 0, 0, 25500, 2
scriptTable1 = array, F32, 19924, [8x8], "value", 1, 0, -100000, 100000, 2
scriptTable1LoadBins = array, S16, 20180, [8], "L", 1, 0, -32000, 32000, 0
scriptTable1RpmBins = array, S16, 20196, [8], "RPM", 1, 0, -32000, 32000, 0
scriptTable2 = array, F32, 20212, [8x8], "value", 1, 0, -100000, 100000, 2
scriptTable2LoadBins = array, S16, 20468, [8], "L", 1, 0, -32000, 32000, 0
scriptTable2RpmBins = array, S16, 20484, [8], "RPM", 1, 0, -32000, 32000, 0
scriptTable3 = array, U08, 20500, [8x8], "value", 1, 0, 0, 255, 0
scriptTable3LoadBins = array, S16, 20564, [8], "L", 1, 0, -32000, 32000, 0
scriptTable3RpmBins = array, S16, 20580, [8], "RPM", 1, 0, -32000, 32000, 0
scriptTable4 = array, U08, 20596, [10x8], "value", 1, 0, 0, 255, 0
scriptTable4LoadBins = array, S16, 20676, [8], "L", 1, 0, -32000, 32000, 0
scriptTable4RpmBins = array, S16, 20692, [10], "RPM", 1, 0, -32000, 32000, 0
ignTrimLoadBins = array, U16, 20712, [4], "", 1, 0, 0, 1000, 0
ignTrimRpmBins = array, U16, 20720, [4], "rpm", 1, 0, 0, 20000, 0
ignTrims1_table = array, S08, 20728, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims2_table = array, S08, 20744, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims3_table = array, S08, 20760, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims4_table = array, S08, 20776, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims5_table = array, S08, 20792, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims6_table = array, S08, 20808, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims7_table = array, S08, 20824, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims8_table = array, S08, 20840, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims9_table = array, S08, 20856, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims10_table = array, S08, 20872, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims11_table = array, S08, 20888, [4x4], "", 0.2, 0, -25, 25, 1
ignTrims12_table = array, S08, 20904, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrimLoadBins = array, U16, 20920, [4], "", 1, 0, 0, 1000, 0
fuelTrimRpmBins = array, U16, 20928, [4], "rpm", 1, 0, 0, 20000, 0
fuelTrims1_table = array, S08, 20936, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims2_table = array, S08, 20952, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims3_table = array, S08, 20968, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims4_table = array, S08, 20984, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims5_table = array, S08, 21000, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims6_table = array, S08, 21016, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims7_table = array, S08, 21032, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims8_table = array, S08, 21048, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims9_table = array, S08, 21064, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims10_table = array, S08, 21080, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims11_table = array, S08, 21096, [4x4], "", 0.2, 0, -25, 25, 1
fuelTrims12_table = array, S08, 21112, [4x4], "", 0.2, 0, -25, 25, 1
crankingFuelCoefE100 = array, U16, 21128, [8], "ratio", 0.01, 0, 0, 50, 2
tcu_pcAirmassBins = array, U08, 21144, [8], "Airmass", 5.0, 0, 0, 1200, 0
tcu_pcValsR = array, U08, 21152, [8], "%", 1, 0, 0, 255, 0
tcu_pcValsN = array, U08, 21160, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals1 = array, U08, 21168, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals2 = array, U08, 21176, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals3 = array, U08, 21184, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals4 = array, U08, 21192, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals12 = array, U08, 21200, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals23 = array, U08, 21208, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals34 = array, U08, 21216, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals21 = array, U08, 21224, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals32 = array, U08, 21232, [8], "%", 1, 0, 0, 255, 0
tcu_pcVals43 = array, U08, 21240, [8], "%", 1, 0, 0, 255, 0
tcu_tccTpsBins = array, U08, 21248, [8], "TPS", 1, 0, 0, 255, 0
tcu_tccLockSpeed = array, U08, 21256, [8], "kmh", 1, 0, 0, 255, 0
tcu_tccUnlockSpeed = array, U08, 21264, [8], "kmh", 1, 0, 0, 255, 0
tcu_32SpeedBins = array, U08, 21272, [8], "kmh", 1, 0, 0, 255, 0
tcu_32Vals = array, U08, 21280, [8], "%", 1, 0, 0, 255, 0
throttle2TrimTable = array, S08, 21288, [6x6], "%", 0.1, 0, -10, 10, 1
throttle2TrimTpsBins = array, U08, 21324, [6], "%", 1, 0, 0, 120, 0
throttle2TrimRpmBins = array, U08, 21330, [6], "RPM", 100.0, 0, 0, 25000, 0
maxKnockRetardTable = array, U08, 21336, [6x6], "deg", 0.25, 0, 0, 30, 2
maxKnockRetardLoadBins = array, U08, 21372, [6], "%", 1, 0, 0, 250, 0
maxKnockRetardRpmBins = array, U08, 21378, [6], "RPM", 100.0, 0, 0, 25000, 0
ALSTimingRetardTable = array, S16, 21384, [4x4], "deg", 0.1, 0, -60, 0, 1
alsIgnRetardLoadBins = array, U16, 21416, [4], "TPS", 1, 0, 0, 100, 0
alsIgnRetardrpmBins = array, U16, 21424, [4], "RPM", 1, 0, 0, 25000, 0
ALSFuelAdjustment = array, S16, 21432, [4x4], "percent", 0.1, 0, 0, 50, 1
alsFuelAdjustmentLoadBins = array, U16, 21464, [4], "TPS", 1, 0, 0, 100, 0
alsFuelAdjustmentrpmBins = array, U16, 21472, [4], "RPM", 1, 0, 0, 25000, 0
ALSIgnSkipTable = array, S16, 21480, [4x4], "ratio", 10.0, 0, 0, 50, 1
alsIgnSkipLoadBins = array, U16, 21512, [4], "TPS", 1, 0, 0, 100, 0
alsIgnSkiprpmBins = array, U16, 21520, [4], "RPM", 1, 0, 0, 25000, 0
ignBlends1_table = array, S16, 21528, [8x8], "", 0.1, 0, -100, 100, 1
ignBlends1_loadBins = array, U16, 21656, [8], "Load", 1, 0, 0, 1000, 0
ignBlends1_rpmBins = array, U16, 21672, [8], "RPM", 1, 0, 0, 18000, 0
ignBlends1_blendParameter = bits, U08, 21688, [0:5], $gppwm_channel_e_enum
ignBlends1_yAxisOverride = bits, U08, 21689, [0:5], $gppwm_channel_e_enum
ignBlends1_blendBins = array, S16, 21690, [8], "", 0.1, 0, -3200, 3200, 1
ignBlends1_blendValues = array, U08, 21706, [8], "%", 0.5, 0, 0, 100, 1
ignBlends2_table = array, S16, 21716, [8x8], "", 0.1, 0, -100, 100, 1
ignBlends2_loadBins = array, U16, 21844, [8], "Load", 1, 0, 0, 1000, 0
ignBlends2_rpmBins = array, U16, 21860, [8], "RPM", 1, 0, 0, 18000, 0
ignBlends2_blendParameter = bits, U08, 21876, [0:5], $gppwm_channel_e_enum
ignBlends2_yAxisOverride = bits, U08, 21877, [0:5], $gppwm_channel_e_enum
ignBlends2_blendBins = array, S16, 21878, [8], "", 0.1, 0, -3200, 3200, 1
ignBlends2_blendValues = array, U08, 21894, [8], "%", 0.5, 0, 0, 100, 1
ignBlends3_table = array, S16, 21904, [8x8], "", 0.1, 0, -100, 100, 1
ignBlends3_loadBins = array, U16, 22032, [8], "Load", 1, 0, 0, 1000, 0
ignBlends3_rpmBins = array, U16, 22048, [8], "RPM", 1, 0, 0, 18000, 0
ignBlends3_blendParameter = bits, U08, 22064, [0:5], $gppwm_channel_e_enum
ignBlends3_yAxisOverride = bits, U08, 22065, [0:5], $gppwm_channel_e_enum
ignBlends3_blendBins = array, S16, 22066, [8], "", 0.1, 0, -3200, 3200, 1
ignBlends3_blendValues = array, U08, 22082, [8], "%", 0.5, 0, 0, 100, 1
ignBlends4_table = array, S16, 22092, [8x8], "", 0.1, 0, -100, 100, 1
ignBlends4_loadBins = array, U16, 22220, [8], "Load", 1, 0, 0, 1000, 0
ignBlends4_rpmBins = array, U16, 22236, [8], "RPM", 1, 0, 0, 18000, 0
ignBlends4_blendParameter = bits, U08, 22252, [0:5], $gppwm_channel_e_enum
ignBlends4_yAxisOverride = bits, U08, 22253, [0:5], $gppwm_channel_e_enum
ignBlends4_blendBins = array, S16, 22254, [8], "", 0.1, 0, -3200, 3200, 1
ignBlends4_blendValues = array, U08, 22270, [8], "%", 0.5, 0, 0, 100, 1
veBlends1_table = array, S16, 22280, [8x8], "", 0.1, 0, -100, 100, 1
veBlends1_loadBins = array, U16, 22408, [8], "Load", 1, 0, 0, 1000, 0
veBlends1_rpmBins = array, U16, 22424, [8], "RPM", 1, 0, 0, 18000, 0
veBlends1_blendParameter = bits, U08, 22440, [0:5], $gppwm_channel_e_enum
veBlends1_yAxisOverride = bits, U08, 22441, [0:5], $gppwm_channel_e_enum
veBlends1_blendBins = array, S16, 22442, [8], "", 0.1, 0, -3200, 3200, 1
veBlends1_blendValues = array, U08, 22458, [8], "%", 0.5, 0, 0, 100, 1
veBlends2_table = array, S16, 22468, [8x8], "", 0.1, 0, -100, 100, 1
veBlends2_loadBins = array, U16, 22596, [8], "Load", 1, 0, 0, 1000, 0
veBlends2_rpmBins = array, U16, 22612, [8], "RPM", 1, 0, 0, 18000, 0
veBlends2_blendParameter = bits, U08, 22628, [0:5], $gppwm_channel_e_enum
veBlends2_yAxisOverride = bits, U08, 22629, [0:5], $gppwm_channel_e_enum
veBlends2_blendBins = array, S16, 22630, [8], "", 0.1, 0, -3200, 3200, 1
veBlends2_blendValues = array, U08, 22646, [8], "%", 0.5, 0, 0, 100, 1
veBlends3_table = array, S16, 22656, [8x8], "", 0.1, 0, -100, 100, 1
veBlends3_loadBins = array, U16, 22784, [8], "Load", 1, 0, 0, 1000, 0
veBlends3_rpmBins = array, U16, 22800, [8], "RPM", 1, 0, 0, 18000, 0
veBlends3_blendParameter = bits, U08, 22816, [0:5], $gppwm_channel_e_enum
veBlends3_yAxisOverride = bits, U08, 22817, [0:5], $gppwm_channel_e_enum
veBlends3_blendBins = array, S16, 22818, [8], "", 0.1, 0, -3200, 3200, 1
veBlends3_blendValues = array, U08, 22834, [8], "%", 0.5, 0, 0, 100, 1
veBlends4_table = array, S16, 22844, [8x8], "", 0.1, 0, -100, 100, 1
veBlends4_loadBins = array, U16, 22972, [8], "Load", 1, 0, 0, 1000, 0
veBlends4_rpmBins = array, U16, 22988, [8], "RPM", 1, 0, 0, 18000, 0
veBlends4_blendParameter = bits, U08, 23004, [0:5], $gppwm_channel_e_enum
veBlends4_yAxisOverride = bits, U08, 23005, [0:5], $gppwm_channel_e_enum
veBlends4_blendBins = array, S16, 23006, [8], "", 0.1, 0, -3200, 3200, 1
veBlends4_blendValues = array, U08, 23022, [8], "%", 0.5, 0, 0, 100, 1
throttleEstimateEffectiveAreaBins = array, U16, 23032, [12], "%", 0.1, 0, 0, 100, 1
throttleEstimateEffectiveAreaValues = array, U16, 23056, [12], "g/s", 0.1, 0, 0, 6500, 1
boostOpenLoopBlends1_table = array, S16, 23080, [8x8], "", 0.1, 0, -100, 100, 1
boostOpenLoopBlends1_loadBins = array, U16, 23208, [8], "Load", 1, 0, 0, 1000, 0
boostOpenLoopBlends1_rpmBins = array, U16, 23224, [8], "RPM", 1, 0, 0, 18000, 0
boostOpenLoopBlends1_blendParameter = bits, U08, 23240, [0:5], $gppwm_channel_e_enum
boostOpenLoopBlends1_yAxisOverride = bits, U08, 23241, [0:5], $gppwm_channel_e_enum
boostOpenLoopBlends1_blendBins = array, S16, 23242, [8], "", 0.1, 0, -3200, 3200, 1
boostOpenLoopBlends1_blendValues = array, U08, 23258, [8], "%", 0.5, 0, 0, 100, 1
boostOpenLoopBlends2_table = array, S16, 23268, [8x8], "", 0.1, 0, -100, 100, 1
boostOpenLoopBlends2_loadBins = array, U16, 23396, [8], "Load", 1, 0, 0, 1000, 0
boostOpenLoopBlends2_rpmBins = array, U16, 23412, [8], "RPM", 1, 0, 0, 18000, 0
boostOpenLoopBlends2_blendParameter = bits, U08, 23428, [0:5], $gppwm_channel_e_enum
boostOpenLoopBlends2_yAxisOverride = bits, U08, 23429, [0:5], $gppwm_channel_e_enum
boostOpenLoopBlends2_blendBins = array, S16, 23430, [8], "", 0.1, 0, -3200, 3200, 1
boostOpenLoopBlends2_blendValues = array, U08, 23446, [8], "%", 0.5, 0, 0, 100, 1
boostClosedLoopBlends1_table = array, S16, 23456, [8x8], "", 0.1, 0, -100, 100, 1
boostClosedLoopBlends1_loadBins = array, U16, 23584, [8], "Load", 1, 0, 0, 1000, 0
boostClosedLoopBlends1_rpmBins = array, U16, 23600, [8], "RPM", 1, 0, 0, 18000, 0
boostClosedLoopBlends1_blendParameter = bits, U08, 23616, [0:5], $gppwm_channel_e_enum
boostClosedLoopBlends1_yAxisOverride = bits, U08, 23617, [0:5], $gppwm_channel_e_enum
boostClosedLoopBlends1_blendBins = array, S16, 23618, [8], "", 0.1, 0, -3200, 3200, 1
boostClosedLoopBlends1_blendValues = array, U08, 23634, [8], "%", 0.5, 0, 0, 100, 1
boostClosedLoopBlends2_table = array, S16, 23644, [8x8], "", 0.1, 0, -100, 100, 1
boostClosedLoopBlends2_loadBins = array, U16, 23772, [8], "Load", 1, 0, 0, 1000, 0
boostClosedLoopBlends2_rpmBins = array, U16, 23788, [8], "RPM", 1, 0, 0, 18000, 0
boostClosedLoopBlends2_blendParameter = bits, U08, 23804, [0:5], $gppwm_channel_e_enum
boostClosedLoopBlends2_yAxisOverride = bits, U08, 23805, [0:5], $gppwm_channel_e_enum
boostClosedLoopBlends2_blendBins = array, S16, 23806, [8], "", 0.1, 0, -3200, 3200, 1
boostClosedLoopBlends2_blendValues = array, U08, 23822, [8], "%", 0.5, 0, 0, 100, 1
tcu_rangeP = array, F32, 23832, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeR = array, F32, 23856, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeN = array, F32, 23880, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeD = array, F32, 23904, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeM = array, F32, 23928, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeM3 = array, F32, 23952, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeM2 = array, F32, 23976, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeM1 = array, F32, 24000, [6], "level", 1, 0, 0, 200000, 0
tcu_rangePlus = array, F32, 24024, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeMinus = array, F32, 24048, [6], "level", 1, 0, 0, 200000, 0
tcu_rangeLow = array, F32, 24072, [6], "level", 1, 0, 0, 200000, 0
lambdaMaxDeviationTable = array, U08, 24096, [4x4], "lambda", 0.01, 0, 0, 1, 2
lambdaMaxDeviationLoadBins = array, U16, 24112, [4], "", 1, 0, 0, 1000, 0
lambdaMaxDeviationRpmBins = array, U16, 24120, [4], "RPM", 1, 0, 0, 18000, 0
injectorStagingTable = array, U08, 24128, [6x6], "%", 1, 0, 0, 90, 0
injectorStagingLoadBins = array, U16, 24164, [6], "", 1, 0, 0, 1000, 0
injectorStagingRpmBins = array, U16, 24176, [6], "RPM", 1, 0, 0, 18000, 0
wwCltBins = array, S16, 24188, [8], "C", 1, 0, -40, 250, 0
wwTauCltValues = array, U08, 24204, [8], "", 0.01, 0, 0, 2.5, 2
wwBetaCltValues = array, U08, 24212, [8], "", 0.01, 0, 0, 1, 2
wwMapBins = array, U08, 24220, [8], "kPa", 1, 0, 0, 250, 0
wwTauMapValues = array, U08, 24228, [8], "", 0.01, 0, 0, 2.5, 2
wwBetaMapValues = array, U08, 24236, [8], "", 0.01, 0, 0, 2.5, 2
hpfpLobeProfileQuantityBins = array, U08, 24244, [16], "%", 0.5, 0, 0, 100, 1
hpfpLobeProfileAngle = array, U08, 24260, [16], "deg", 0.5, 0, 0, 125, 1
hpfpDeadtimeVoltsBins = array, U08, 24276, [8], "volts", 1, 0, 0, 255, 0
hpfpDeadtimeMS = array, U16, 24284, [8], "ms", 0.001, 0, 0, 65, 3
hpfpTarget = array, U16, 24300, [10x10], "kPa", 1, 0, 0, 65000, 0
hpfpTargetLoadBins = array, U16, 24500, [10], "load", 0.1, 0, 0, 6500, 1
hpfpTargetRpmBins = array, U08, 24520, [10], "RPM", 50.0, 0, 0, 12500, 0
hpfpCompensation = array, S08, 24530, [10x10], "%", 1, 0, -100, 100, 0
hpfpCompensationLoadBins = array, U16, 24630, [10], "cc/lobe", 0.001, 0, 0, 65, 3
hpfpCompensationRpmBins = array, U08, 24650, [10], "RPM", 50.0, 0, 0, 12500, 0
hpfpFuelMassCompensation = array, U16, 24660, [8x8], "%", 0.01, 0, 1, 10, 2
hpfpFuelMassCompensationFuelMass = array, U16, 24788, [8], "fuel mass/mg", 0.01, 0, 0, 650, 2
hpfpFuelMassCompensationFuelPressure = array, U16, 24804, [8], "bar", 0.1, 0, 0, 300, 1
injectorFlowLinearization = array, U16, 24820, [2x2], "ms", 0.01, 0, 0, 600, 2
injectorFlowLinearizationFuelMassBins = array, U16, 24828, [2], "fuel mass/mg", 0.01, 0, 0, 650, 2
injectorFlowLinearizationPressureBins = array, U16, 24832, [2], "bar", 0.1, 0, 0, 300, 1
knockNoiseRpmBins = array, U16, 24836, [16], "RPM", 1, 0, 0, 30000, 0
knockBaseNoise = array, S08, 24868, [16], "dB", 0.5, 0, -64, 10, 1
tpsTspCorrValuesBins = array, U08, 24884, [4], "RPM", 50.0, 0, 0, 12500, 0
tpsTspCorrValues = array, U08, 24888, [4], "multiplier", 0.02, 0, 0, 5, 2
predictiveMapBlendDurationBins = array, U08, 24892, [4], "RPM", 50.0, 0, 0, 12500, 0
predictiveMapBlendDurationValues = array, U08, 24896, [4], "second", 0.02, 0, 0, 5, 2
cltRevLimitRpmBins = array, S16, 24900, [4], "C", 1, 0, -40, 200, 0
cltRevLimitRpm = array, U16, 24908, [4], "RPM", 1, 0, 0, 20000, 0
fuelLevelBins = array, U16, 24916, [8], "volt", 0.001, 0, 0, 5, 3
fuelLevelValues = array, U08, 24932, [8], "%", 1, 0, 0, 100, 0
dwellVoltageCorrVoltBins = array, U08, 24940, [8], "volts", 0.1, 0, 0, 20, 1
dwellVoltageCorrValues = array, U08, 24948, [8], "multiplier", 0.02, 0, 0, 5, 2
tcu_shiftTpsBins = array, U08, 24956, [8], "%", 1, 0, 0, 255, 2
tcu_shiftSpeed12 = array, U08, 24964, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftSpeed23 = array, U08, 24972, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftSpeed34 = array, U08, 24980, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftSpeed21 = array, U08, 24988, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftSpeed32 = array, U08, 24996, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftSpeed43 = array, U08, 25004, [8], "kmh", 1, 0, 0, 255, 0
tcu_shiftTime = scalar, F32, 25012, "ms", 1, 0, 0, 3000, 0
alternatorVoltageTargetTable = array, S16, 25016, [4x4], "volts", 0.1, 0, 0, 30, 1
alternatorVoltageTargetLoadBins = array, U16, 25048, [4], "Load", 1, 0, 0, 1000, 0
alternatorVoltageTargetRpmBins = array, U16, 25056, [4], "RPM", 1, 0, 0, 18000, 0
cltBoostCorrBins = array, F32, 25064, [5], "C", 1, 0, -100, 250, 2
cltBoostCorr = array, F32, 25084, [5], "ratio", 1, 0, 0, 5, 2
iatBoostCorrBins = array, F32, 25104, [5], "C", 1, 0, -100, 250, 2
iatBoostCorr = array, F32, 25124, [5], "ratio", 1, 0, 0, 5, 2
cltBoostAdderBins = array, F32, 25144, [5], "C", 1, 0, -100, 250, 2
cltBoostAdder = array, F32, 25164, [5], "", 1, 0, 0, 5, 2
iatBoostAdderBins = array, F32, 25184, [5], "C", 1, 0, -100, 250, 2
iatBoostAdder = array, F32, 25204, [5], "", 1, 0, 0, 5, 2
minimumOilPressureBins = array, U08, 25224, [8], "RPM", 100.0, 0, 0, 25000, 0
minimumOilPressureValues = array, U08, 25232, [8], "kPa", 10.0, 0, 0, 1000, 0
targetAfrBlends1_table = array, S16, 25240, [8x8], "", 0.1, 0, -100, 100, 1
targetAfrBlends1_loadBins = array, U16, 25368, [8], "Load", 1, 0, 0, 1000, 0
targetAfrBlends1_rpmBins = array, U16, 25384, [8], "RPM", 1, 0, 0, 18000, 0
targetAfrBlends1_blendParameter = bits, U08, 25400, [0:5], $gppwm_channel_e_enum
targetAfrBlends1_yAxisOverride = bits, U08, 25401, [0:5], $gppwm_channel_e_enum
targetAfrBlends1_blendBins = array, S16, 25402, [8], "", 0.1, 0, -3200, 3200, 1
targetAfrBlends1_blendValues = array, U08, 25418, [8], "%", 0.5, 0, 0, 100, 1
targetAfrBlends2_table = array, S16, 25428, [8x8], "", 0.1, 0, -100, 100, 1
targetAfrBlends2_loadBins = array, U16, 25556, [8], "Load", 1, 0, 0, 1000, 0
targetAfrBlends2_rpmBins = array, U16, 25572, [8], "RPM", 1, 0, 0, 18000, 0
targetAfrBlends2_blendParameter = bits, U08, 25588, [0:5], $gppwm_channel_e_enum
targetAfrBlends2_yAxisOverride = bits, U08, 25589, [0:5], $gppwm_channel_e_enum
targetAfrBlends2_blendBins = array, S16, 25590, [8], "", 0.1, 0, -3200, 3200, 1
targetAfrBlends2_blendValues = array, U08, 25606, [8], "%", 0.5, 0, 0, 100, 1
dynoRpmStep = scalar, U08, 25616, "Rpm", 1, 0, 1, 250, 0
dynoSaeTemperatureC = scalar, S08, 25617, "C", 1, 0, -80, 80, 0
dynoSaeRelativeHumidity = scalar, U08, 25618, "%", 1, 0, 0, 100, 0
dynoSaeBaro = scalar, F32, 25620, "KPa", 1, 0, 30, 110, 3
dynoCarWheelDiaInch = scalar, S08, 25624, "Inch", 1, 0, 0, 24, 1
dynoCarWheelAspectRatio = scalar, S08, 25625, "Aspect Ratio (height)", 1, 0, 0, 100, 0
dynoCarWheelTireWidthMm = scalar, S16, 25626, "Width mm", 1, 0, 0, 400, 0
dynoCarGearPrimaryReduction = scalar, F32, 25628, "Units", 1, 0, 0, 10, 3
dynoCarGearRatio = scalar, F32, 25632, "Units", 1, 0, 0, 10, 3
dynoCarGearFinalDrive = scalar, F32, 25636, "Units", 1, 0, 0, 10, 3
dynoCarCarMassKg = scalar, S16, 25640, "Kg", 1, 0, 0, 5000, 0
dynoCarCargoMassKg = scalar, S16, 25642, "Kg", 1, 0, 0, 1000, 0
dynoCarCoeffOfDrag = scalar, F32, 25644, "Coeff", 1, 0, 0, 1, 3
dynoCarFrontalAreaM2 = scalar, F32, 25648, "m2", 1, 0, 0, 100, 2
trailingSparkTable = array, S08, 25652, [4x4], "deg", 0.1, 0, 0, 12, 1
trailingSparkRpmBins = array, U08, 25668, [4], "rpm", 50.0, 0, 0, 12000, 0
trailingSparkLoadBins = array, U08, 25672, [4], "Load", 5.0, 0, 0, 650, 0
maximumOilPressureBins = array, U08, 25676, [4], "RPM", 100.0, 0, 0, 25000, 0
maximumOilPressureValues = array, U08, 25680, [4], "kPa", 10.0, 0, 0, 2000, 0
torqueReductionCutXaxis = bits, U08, 25684, [0:5], $gppwm_channel_e_enum
torqueReductionIgnitionCutTable = array, S08, 25685, [6x2], "%", 1, 0, 0, 100, 0
torqueReductionCutXBins = array, S16, 25698, [6], "", 1, 0, -30000, 30000, 0
torqueReductionCutGearBins = array, S08, 25710, [2], "gear N°", 1, 0, 0, 20, 0
torqueReductionTimeXaxis = bits, U08, 25712, [0:5], $gppwm_channel_e_enum
torqueReductionTimeTable = array, F32, 25716, [6x2], "ms", 1, 0, 1, 2000, 0
torqueReductionTimeXBins = array, S16, 25764, [6], "", 1, 0, -30000, 30000, 0
torqueReductionTimeGearBins = array, S08, 25776, [2], "gear N°", 1, 0, 0, 20, 0
torqueReductionIgnitionRetardXaxis = bits, U08, 25778, [0:5], $gppwm_channel_e_enum
torqueReductionIgnitionRetardTable = array, F32, 25780, [6x2], "deg", 1, 0, -180, 180, 2
torqueReductionIgnitionRetardXBins = array, S16, 25828, [6], "", 1, 0, -30000, 30000, 0
torqueReductionIgnitionRetardGearBins = array, S08, 25840, [2], "gear N°", 1, 0, 0, 20, 0
boardUseTempPullUp = bits, U32, 25844, [0:0], "Piggyback Mode", "With Pull Ups"
boardUse2stepPullDown = bits, U32, 25844, [1:1], "With Pull Up", "With Pull Down"
boardUseD2PullDown = bits, U32, 25844, [2:2], "With Pull Up", "With Pull Down"
boardUseD3PullDown = bits, U32, 25844, [3:3], "With Pull Up", "With Pull Down"
boardUseCrankPullUp = bits, U32, 25844, [4:4], "VR", "Hall"
boardUseH1PullDown = bits, U32, 25844, [5:5], "With Pull Up", "With Pull Down"
boardUseH2PullDown = bits, U32, 25844, [6:6], "With Pull Up", "With Pull Down"
boardUseH3PullDown = bits, U32, 25844, [7:7], "With Pull Up", "With Pull Down"
boardUseH4PullDown = bits, U32, 25844, [8:8], "With Pull Up", "With Pull Down"
boardUseH5PullDown = bits, U32, 25844, [9:9], "With Pull Up", "With Pull Down"
boardUseFlexPullDown = bits, U32, 25844, [10:10], "With Pull Up", "With Pull Down"
; total TS size = 25848
[SettingContextHelp]
	engineType = "http://rusefi.com/wiki/index.php?title=Manual:Engine_Type\nset engine_type X"
	launchRpm = "A secondary Rev limit engaged by the driver to help launch the vehicle faster"
	rpmHardLimit = "set rpm_hard_limit X"
	engineSnifferRpmThreshold = "Engine sniffer would be disabled above this rpm\nset engineSnifferRpmThreshold X"
	multisparkMaxRpm = "Disable multispark above this engine speed."
	maxAcRpm = "Above this RPM, disable AC. Set to 0 to disable check."
	maxAcTps = "Above this TPS, disable AC. Set to 0 to disable check."
	maxAcClt = "Above this CLT, disable AC to prevent overheating the engine. Set to 0 to disable check."
	compressionRatio = "Just for reference really, not taken into account by any logic at this point"
	idlePositionMin = "Voltage when the idle valve is closed.\nYou probably don't have one of these!"
	idlePositionMax = "Voltage when the idle valve is open.\nYou probably don't have one of these!\n1 volt = 1000 units"
	ltitEnabled = "Enable LTIT (Long Term Idle Trim) learning"
	ltitEmaAlpha = "EMA filter constant for LTIT (0-255)"
	ltitStableRpmThreshold = "RPM range to consider stable idle"
	ltitStableTime = "Minimum time of stable idle before learning"
	ltitCorrectionRate = "LTIT learning rate"
	ltitIgnitionOnDelay = "Delay after ignition ON before LTIT learning/application"
	ltitIgnitionOffSaveDelay = "Delay after ignition OFF before LTIT save"
	ltitClampMin = "Minimum LTIT multiplicative correction value"
	ltitClampMax = "Maximum LTIT multiplicative correction value"
	ltitSmoothingIntensity = "LTIT table regional smoothing intensity (0=no smoothing)"
	ltitIntegratorThreshold = "Minimum threshold of PID integrator for LTIT correction"
	torqueReductionTriggerPin = "Pin that activates the reduction/cut for shifting. Sometimes shared with the Launch Control pin"
	etbJamTimeout = "Time after which the throttle is considered jammed."
	acIdleExtraOffset = "Additional idle % while A/C is active"
	multisparkMaxSparkingAngle = "This parameter sets the latest that the last multispark can occur after the main ignition event. For example, if the ignition timing is 30 degrees BTDC, and this parameter is set to 45, no multispark will ever be fired after 15 degrees ATDC."
	multisparkMaxExtraSparkCount = "Configures the maximum number of extra sparks to fire (does not include main spark)"
	injector_flow = "This is your injector flow at the fuel pressure used in the vehicle\nSee units setting below"
	injector_battLagCorrPressBins = "Injector correction pressure"
	injector_battLagCorrTable = "ms delay between injector open and close dead times"
	injectorSecondary_flow = "This is your injector flow at the fuel pressure used in the vehicle\nSee units setting below"
	injectorSecondary_battLagCorrPressBins = "Injector correction pressure"
	injectorSecondary_battLagCorrTable = "ms delay between injector open and close dead times"
	isForcedInduction = "Does the vehicle have a turbo or supercharger?"
	useFordRedundantTps = "On some Ford and Toyota vehicles one of the throttle sensors is not linear on the full range, i.e. in the specific range of the positions we effectively have only one sensor."
	enableFan1WithAc = "Turn on this fan when AC is on."
	enableFan2WithAc = "Turn on this fan when AC is on."
	enableTrailingSparks = "Enable secondary spark outputs that fire after the primary (rotaries, twin plug engines)."
	etb_use_two_wires = "TLE7209 and L6205 use two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode."
	isDoubleSolenoidIdle = "Subaru/BMW style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position."
	useCicPidForIdle = "Switch between Industrial and Cic PID implementation"
	useSeparateIdleTablesForCrankingTaper = "This uses separate ignition timing and VE tables not only for idle conditions, also during the postcranking-to-idle taper transition (See also afterCrankingIACtaperDuration)."
	useRunningMathForCranking = "For cranking either use the specified fixed base fuel mass, or use the normal running math (VE table)."
	displayLogicLevelsInEngineSniffer = "Shall we display real life signal or just the part consumed by trigger decoder.\nApplies to both trigger and cam/vvt input."
	verboseCan = "Print incoming and outgoing first bus CAN messages in rusEFI console"
	artificialTestMisfire = "Experimental setting that will cause a misfire\nDO NOT ENABLE."
	useFordRedundantPps = "On some Ford and Toyota vehicles one of the pedal sensors is not linear on the full range, i.e. in the specific range of the positions we effectively have only one sensor."
	useSpiImu = "If enabled - use onboard SPI Accelerometer, otherwise listen for CAN messages"
	tpsMin = "Closed voltage for primary throttle position sensor"
	tpsMax = "Fully opened voltage for primary throttle position sensor"
	tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equipped."
	tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equipped."
	cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \nset cranking_rpm X"
	ignitionDwellForCrankingMs = "Dwell duration while cranking"
	etbRevLimitStart = "Once engine speed passes this value, start reducing ETB angle."
	etbRevLimitRange = "This far above 'Soft limiter start', fully close the throttle. At the bottom of the range, throttle control is normal. At the top of the range, the throttle is fully closed."
	map_samplingAngle = "MAP averaging sampling start crank degree angle"
	map_samplingWindow = "MAP averaging angle crank degree duration"
	map_sensor_lowValue = "kPa/psi value at low volts"
	map_sensor_highValue = "kPa/psi value at high volts"
	clt_tempC_1 = "these values are in Celcius"
	clt_bias_resistor = "Pull-up resistor value on your board"
	iat_tempC_1 = "these values are in Celcius"
	iat_bias_resistor = "Pull-up resistor value on your board"
	idleMaximumAirmass = "Maximum commanded airmass for the idle controller."
	tuningDetector = "Zero value means do not detect tuning, set at least 15 if you are using TunerStudio autotune"
	alternator_iTermMin = "iTerm min value"
	alternator_iTermMax = "iTerm max value"
	displacement = "Engine displacement in litres"
	cylindersCount = "Number of cylinder the engine has."
	mapSyncThreshold = "Delta kPa/psi for MAP sync"
	cylinderBore = "Cylinder diameter in mm"
	fuelAlgorithm = "Determines the method used for calculating fuel delivery. The following options are available:\nUses intake manifold pressure (MAP) and intake air temperature (IAT) to calculate air density and fuel requirements. This is a common strategy, especially for naturally aspirated or turbocharged engines.\nAlpha-N: Uses throttle position as the primary load input for fuel calculation. This strategy is generally used in engines with individual throttle bodies or those that lack a reliable MAP signal.\nMAF Air Charge: Relies on a Mass Air Flow (MAF) sensor to measure the amount of air entering the engine directly, making it effective for engines equipped with a MAF sensor.\nLua: Allows for custom fuel calculations using Lua scripting, enabling highly specific tuning applications where the other strategies don't apply."
	crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"."
	injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups."
	boostControlMinRpm = "Minimum RPM to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases."
	boostControlMinTps = "Minimum TPS to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases."
	boostControlMinMap = "Minimum MAP to enable boost control. Use this to avoid solenoid noise at idle, and help spool in some cases."
	boostControlPin = "Wastegate control Solenoid, set to 'NONE' if you are using DC wastegate"
	crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nThere is tapering towards running timing advance\nset cranking_timing_angle X"
	ignitionMode = "Single coil = distributor\nIndividual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode\nWasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder\nTwo distributors = A pair of distributors, found on some BMW, Toyota and other engines\nset ignition_mode X"
	gapTrackingLengthOverride = "How many consecutive gap rations have to match expected ranges for sync to happen"
	maxIdleVss = "Above this speed, disable closed loop idle control. Set to 0 to disable (allow closed loop idle at any speed)."
	camDecoder2jzPrecision = "Allowed range around detection position"
	minOilPressureAfterStart = "Expected oil pressure after starting the engine. If oil pressure does not reach this level within 5 seconds of engine start, fuel will be cut. Set to 0 to disable and always allow starting."
	timingMode = "Dynamic uses the timing map to decide the ignition timing\nStatic timing fixes the timing to the value set below (only use for checking static timing with a timing light)."
	fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location."
	globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nPositive value in case of synchronization point before TDC and negative in case of synchronization point after TDC\n.Knowing this angle allows us to control timing and other angles in reference to TDC.\nHOWTO:\n1: Switch to fixed timing mode on 'ignition setting' dialog\n2: use an actual timing light to calibrate\n3: add/subtract until timing light confirms desired fixed timing value!'"
	analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v."
	vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading."
	fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius"
	fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius"
	fan2OnTemperature = "Cooling fan turn-on temperature threshold, in Celsius"
	fan2OffTemperature = "Cooling fan turn-off temperature threshold, in Celsius"
	disableFan1WhenStopped = "Inhibit operation of this fan while the engine is not running."
	disableFan2WhenStopped = "Inhibit operation of this fan while the engine is not running."
	driveWheelRevPerKm = "Number of revolutions per kilometer for the wheels your vehicle speed sensor is connected to. Use an online calculator to determine this based on your tire size."
	canSleepPeriodMs = "CANbus thread period in ms"
	tps1_1AdcChannel = "First throttle body, first sensor. See also pedalPositionAdcChannel\nAnalog TPS inputs have 200Hz low-pass cutoff."
	vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB."
	fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined."
	tps2_1AdcChannel = "Second throttle body position sensor, single channel so far"
	idle_derivativeFilterLoss = "0.1 is a good default value"
	trigger_type = "https://github.com/rusefi/rusefi/wiki/All-Supported-Triggers"
	airByRpmTaper = "Extra air taper amount"
	boostControlSafeDutyCycle = "Duty cycle to use in case of a sensor failure. This duty cycle should produce the minimum possible amount of boost. This duty is also used in case any of the minimum RPM/TPS/MAP conditions are not met."
	mapCamDetectionAnglePosition = "Magic engine phase: we compare instant MAP at X to instant MAP at x+360 angle in one complete cycle"
	camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts. 1"
	camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts. 2"
	camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts. 3"
	camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts. 4"
	throttlePedalPositionAdcChannel = "Electronic throttle pedal position first channel\nSee throttlePedalPositionSecondAdcChannel for second channel\nSee also tps1_1AdcChannel\nSee throttlePedalUpVoltage and throttlePedalWOTVoltage"
	etbSplit = "TPS/PPS error threshold"
	baroSensor_lowValue = "kPa/psi value at low volts"
	baroSensor_highValue = "kPa/psi value at high volts"
	knockRetardAggression = "Ignition timing to remove when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),"
	knockRetardReapplyRate = "After a knock event, reapply timing at this rate."
	engineSyncCam = "Select which cam is used for engine sync. Other cams will be used only for VVT measurement, but not engine sync."
	vssGearRatio = "Number of turns of your vehicle speed sensor per turn of the wheels. For example if your sensor is on the transmission output, enter your axle/differential ratio. If you are using a hub-mounted sensor, enter a value of 1.0."
	vssFilterReciprocal = "Set this so your vehicle speed signal is responsive, but not noisy. Larger value give smoother but slower response."
	vssToothCount = "Number of pulses output per revolution of the shaft where your VSS is mounted. For example, GM applications of the T56 output 17 pulses per revolution of the transmission output shaft."
	idleVeOverrideMode = "Allows you to change the default load axis used for the VE table, which is typically MAP (manifold absolute pressure)."
	injectionPins1 = "injectionPins 1"
	injectionPins2 = "injectionPins 2"
	injectionPins3 = "injectionPins 3"
	injectionPins4 = "injectionPins 4"
	injectionPins5 = "injectionPins 5"
	injectionPins6 = "injectionPins 6"
	injectionPins7 = "injectionPins 7"
	injectionPins8 = "injectionPins 8"
	injectionPins9 = "injectionPins 9"
	injectionPins10 = "injectionPins 10"
	injectionPins11 = "injectionPins 11"
	injectionPins12 = "injectionPins 12"
	ignitionPins1 = "ignitionPins 1"
	ignitionPins2 = "ignitionPins 2"
	ignitionPins3 = "ignitionPins 3"
	ignitionPins4 = "ignitionPins 4"
	ignitionPins5 = "ignitionPins 5"
	ignitionPins6 = "ignitionPins 6"
	ignitionPins7 = "ignitionPins 7"
	ignitionPins8 = "ignitionPins 8"
	ignitionPins9 = "ignitionPins 9"
	ignitionPins10 = "ignitionPins 10"
	ignitionPins11 = "ignitionPins 11"
	ignitionPins12 = "ignitionPins 12"
	gapVvtTrackingLengthOverride = "How many consecutive VVT gap rations have to match expected ranges for sync to happen"
	malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot."
	clutchDownPin = "Some cars have a switch to indicate that clutch pedal is all the way down"
	digitalPotentiometerChipSelect1 = "digitalPotentiometerChipSelect 1"
	digitalPotentiometerChipSelect2 = "digitalPotentiometerChipSelect 2"
	digitalPotentiometerChipSelect3 = "digitalPotentiometerChipSelect 3"
	digitalPotentiometerChipSelect4 = "digitalPotentiometerChipSelect 4"
	digitalPotentiometerSpiDevice = "Digital Potentiometer is used by stock ECU stimulation code"
	auxFastSensor1_adcChannel = "Useful in Research&Development phase"
	tps1_2AdcChannel = "First throttle body, second sensor."
	tps2_2AdcChannel = "Second throttle body, second sensor."
	throttlePedalPositionSecondAdcChannel = "Electronic throttle pedal position input\nSecond channel\nSee also tps1_1AdcChannel\nSee throttlePedalSecondaryUpVoltage and throttlePedalSecondaryWOTVoltage"
	afr_type = "AFR, WBO, EGO - whatever you like to call it"
	mc33810_cs1 = "mc33810_cs 1"
	idle_antiwindupFreq = "0.1 is a good default value"
	triggerInputPins1 = "triggerInputPins 1"
	triggerInputPins2 = "triggerInputPins 2"
	mc33_t_min_boost = "Minimum allowed time for the boost phase. If the boost target current is reached before this time elapses, it is assumed that the injector has failed short circuit."
	finalGearRatio = "Ratio between the wheels and your transmission output."
	triggerSimulatorPins1 = "Each rusEFI piece can provide synthetic trigger signal for external ECU. Sometimes these wires are routed back into trigger inputs of the same rusEFI board.\nSee also directSelfStimulation which is different. 1"
	triggerSimulatorPins2 = "Each rusEFI piece can provide synthetic trigger signal for external ECU. Sometimes these wires are routed back into trigger inputs of the same rusEFI board.\nSee also directSelfStimulation which is different. 2"
	triggerSimulatorPinModes1 = "triggerSimulatorPinModes 1"
	triggerSimulatorPinModes2 = "triggerSimulatorPinModes 2"
	o2heaterPin = "On-off O2 sensor heater control. 'ON' if engine is running, 'OFF' if stopped or cranking."
	rusefiVerbose29b = "Use 11 bit (standard) or 29 bit (extended) IDs for rusEFI verbose CAN format."
	useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed."
	enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol"
	measureMapOnlyInOneCylinder = "Useful for individual intakes"
	isFasterEngineSpinUpEnabled = "If enabled, try to fire the engine before a full engine cycle has been completed using RPM estimated from the last 90 degrees of engine rotation. As soon as the trigger syncs plus 90 degrees rotation, fuel and ignition events will occur. If disabled, worst case may require up to 4 full crank rotations before any events are scheduled."
	coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing."
	useIacTableForCoasting = "Override the IAC position during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars or engines that have trouble returning to idle."
	disableEtbWhenEngineStopped = "Allows disabling the ETB when the engine is stopped. You may not like the power draw or PWM noise from the motor, so this lets you turn it off until it's necessary."
	pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle."
	enableAemXSeries = "AEM X-Series or rusEFI Wideband"
	logicAnalyzerPins1 = "logicAnalyzerPins 1"
	logicAnalyzerPins2 = "logicAnalyzerPins 2"
	logicAnalyzerPins3 = "logicAnalyzerPins 3"
	logicAnalyzerPins4 = "logicAnalyzerPins 4"
	mc33_hvolt = "Boost Voltage"
	minimumBoostClosedLoopMap = "Minimum MAP before closed loop boost is enabled. Use to prevent misbehavior upon entering boost."
	idlePidRpmUpperLimit = "How far above idle speed do we consider idling, i.e. coasting detection threshold.\nFor example, if target = 800, this param = 200, then anything below 1000 RPM is considered idle."
	applyNonlinearBelowPulse = "Apply nonlinearity correction below a pulse of this duration. Pulses longer than this duration will receive no adjustment."
	clutchUpPin = "Some vehicles have a switch to indicate that clutch pedal is all the way up"
	max31855_cs1 = "max31855_cs 1"
	max31855_cs2 = "max31855_cs 2"
	max31855_cs3 = "max31855_cs 3"
	max31855_cs4 = "max31855_cs 4"
	max31855_cs5 = "max31855_cs 5"
	max31855_cs6 = "max31855_cs 6"
	max31855_cs7 = "max31855_cs 7"
	max31855_cs8 = "max31855_cs 8"
	flexSensorPin = "Continental/GM flex fuel sensor, 50-150hz type"
	torqueReductionArmingRpm = "Since torque reduction pin is usually shared with launch control, most people have an RPM where behavior under that is Launch Control, over that is Flat Shift/Torque Reduction"
	stoichRatioSecondary = "Stoichiometric ratio for your secondary fuel. This value is used when the Flex Fuel sensor indicates E100, typically 9.0"
	etbMaximumPosition = "Maximum allowed ETB position. Some throttles go past fully open, so this allows you to limit it to fully open."
	sdCardLogFrequency = "Rate the ECU will log to the SD card, in hz (log lines per second)."
	starterRelayDisablePinMode = "On some vehicles we can disable starter once engine is already running"
	secondSolenoidPin = "Some Subaru and some Mazda use double-solenoid idle air valve"
	startStopButtonPin = "See also starterControlPin"
	mapMinBufferLength = "This many MAP samples are used to estimate the current MAP. This many samples are considered, and the minimum taken. Recommended value is 1 for single-throttle engines, and your number of cylinders for individual throttle bodies."
	idlePidDeactivationTpsThreshold = "Below this throttle position, the engine is considered idling. If you have an electronic throttle, this checks accelerator pedal position instead of throttle position, and should be set to 1-2%."
	tps1SecondaryMin = "Closed voltage for secondary throttle position sensor"
	tps1SecondaryMax = "Fully opened voltage for secondary throttle position sensor"
	startCrankingDuration = "Maximum time to crank starter when start/stop button is pressed"
	triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high"
	lambdaProtectionTimeout = "Only respond once lambda is out of range for this period of time. Use to avoid transients triggering lambda protection when not needed"
	scriptSetting1 = "scriptSetting 1"
	scriptSetting2 = "scriptSetting 2"
	scriptSetting3 = "scriptSetting 3"
	scriptSetting4 = "scriptSetting 4"
	scriptSetting5 = "scriptSetting 5"
	scriptSetting6 = "scriptSetting 6"
	scriptSetting7 = "scriptSetting 7"
	scriptSetting8 = "scriptSetting 8"
	cdmInputPin = "UNUSED\nWill remove in 2026 for sure\nSaab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module"
	idleReturnTargetRamp = "Ramp the idle target down from the entry threshold over N seconds when returning to idle. Helps prevent overshooting (below) the idle target while returning to idle from coasting."
	useHbridgesToDriveIdleStepper = "If enabled we use two H-bridges to drive stepper idle air valve"
	consumeObdSensors = "This property is useful if using rusEFI as TCM or BCM only"
	enableCanVss = "Read VSS from OEM CAN bus according to selected CAN vehicle configuration."
	stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise."
	verboseVVTDecoding = "Verbose info in console below engineSnifferRpmThreshold"
	alphaNUseIat = "When set to true, it enables intake air temperature-based corrections for Alpha-N tuning strategies."
	useRawOutputToDriveIdleStepper = "If enabled we use four Push-Pull outputs to directly drive stepper idle air valve coils"
	verboseCan2 = "Print incoming and outgoing second bus CAN messages in rusEFI console"
	etbIo1_controlPin = "Acts as EN pin in two-wire mode"
	etbIo2_controlPin = "Acts as EN pin in two-wire mode"
	boostPid_offset = "Linear addition to PID logic\nAlso known as feedforward."
	boostPid_periodMs = "PID dTime"
	boostPid_minValue = "Output Min Duty Cycle"
	boostPid_maxValue = "Output Max Duty Cycle"
	tpsAccelLookback = "How long to look back for TPS-based acceleration enrichment. Increasing this time will trigger enrichment for longer when a throttle position change occurs."
	tpsDecelEnleanmentThreshold = "For decel we simply multiply delta of TPS and tFor decel we do not use table?!"
	tpsDecelEnleanmentMultiplier = "Magic multiplier, we multiply delta of TPS and get fuel squirt duration"
	accelEnrichmentMode = "Selects the acceleration enrichment strategy."
	noFuelTrimAfterDfcoTime = "Pause closed loop fueling after deceleration fuel cut occurs. Set this to a little longer than however long is required for normal fueling behavior to resume after fuel cut."
	noFuelTrimAfterAccelTime = "Pause closed loop fueling after acceleration fuel occurs. Set this to a little longer than however long is required for normal fueling behavior to resume after fuel accel."
	launchSpeedThreshold = "Launch disabled above this speed if setting is above zero"
	launchRpmWindow = "Starting Launch RPM window to activate (subtracts from Launch RPM)"
	ppsExpAverageAlpha = "A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.\n'100%' means no filtering, 98% would be some filtering."
	mapExpAverageAlpha = "A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.\n'1' means no filtering, 0.98 would be some filtering."
	stft_maxIdleRegionRpm = "Below this RPM, the idle region is active, idle+300 would be a good value"
	stft_maxOverrunLoad = "Below this engine load, the overrun region is active\nWhen tuning by MAP the units are kPa/psi, e.g. 30 would mean 30kPa. When tuning TPS, 30 would be 30%"
	stft_minPowerLoad = "Above this engine load, the power region is active\nWhen tuning by MAP the units are kPa/psi"
	stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required."
	stft_minClt = "Minimum coolant temperature before closed loop operation is allowed."
	stft_minAfr = "Below this AFR, correction is paused"
	stft_maxAfr = "Above this AFR, correction is paused"
	stft_startupDelay = "Time after startup before closed loop operation is allowed."
	stft_cellCfgs1_maxAdd = "Maximum % that the short term fuel trim can add"
	stft_cellCfgs1_maxRemove = "Maximum % that the short term fuel trim can remove"
	stft_cellCfgs1_timeConstant = "Commonly referred as Integral gain.\nTime constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.\nLower values makes the correction more sensitive, higher values slow the correction down."
	stft_cellCfgs2_maxAdd = "Maximum % that the short term fuel trim can add"
	stft_cellCfgs2_maxRemove = "Maximum % that the short term fuel trim can remove"
	stft_cellCfgs2_timeConstant = "Commonly referred as Integral gain.\nTime constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.\nLower values makes the correction more sensitive, higher values slow the correction down."
	stft_cellCfgs3_maxAdd = "Maximum % that the short term fuel trim can add"
	stft_cellCfgs3_maxRemove = "Maximum % that the short term fuel trim can remove"
	stft_cellCfgs3_timeConstant = "Commonly referred as Integral gain.\nTime constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.\nLower values makes the correction more sensitive, higher values slow the correction down."
	stft_cellCfgs4_maxAdd = "Maximum % that the short term fuel trim can add"
	stft_cellCfgs4_maxRemove = "Maximum % that the short term fuel trim can remove"
	stft_cellCfgs4_timeConstant = "Commonly referred as Integral gain.\nTime constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 5.0 means it will try to make most of the correction within 5 seconds, and a value of 1.0 will try to correct within 1 second.\nLower values makes the correction more sensitive, higher values slow the correction down."
	ltft_enabled = "Enables lambda sensor long term fuel corrections data gathering into LTFT trim tables"
	ltft_correctionEnabled = "Apply LTFT trims into fuel calculation on top of VE table.\nWe do not adjust VE table automatically, please click 'Apply to VE' if you want to adjust your VE tables and reset trims."
	ltft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required."
	ltft_maxAdd = "Maximum % that the long term fuel trim can add"
	ltft_maxRemove = "Maximum % that the long term fuel trim can remove"
	ltft_timeConstant = "Commonly referred as Integral gain.\nTime constant for correction while in this cell: this sets responsiveness of the closed loop correction. A value of 30.0 means it will try to make most of the correction within 30 seconds, and a value of 300.0 will try to correct within 5 minutes.\nLower values makes the correction more sensitive, higher values slow the correction down."
	stepperDcIo1_controlPin = "Acts as EN pin in two-wire mode"
	stepperDcIo2_controlPin = "Acts as EN pin in two-wire mode"
	engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online"
	engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online"
	vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online"
	tcu_solenoid1 = "tcu_solenoid 1"
	tcu_solenoid2 = "tcu_solenoid 2"
	tcu_solenoid3 = "tcu_solenoid 3"
	tcu_solenoid4 = "tcu_solenoid 4"
	tcu_solenoid5 = "tcu_solenoid 5"
	tcu_solenoid6 = "tcu_solenoid 6"
	etbFunctions1 = "etbFunctions 1"
	etbFunctions2 = "etbFunctions 2"
	luaOutputPins1 = "luaOutputPins 1"
	luaOutputPins2 = "luaOutputPins 2"
	luaOutputPins3 = "luaOutputPins 3"
	luaOutputPins4 = "luaOutputPins 4"
	luaOutputPins5 = "luaOutputPins 5"
	luaOutputPins6 = "luaOutputPins 6"
	luaOutputPins7 = "luaOutputPins 7"
	luaOutputPins8 = "luaOutputPins 8"
	vvtOffsets1 = "Angle between cam sensor and VVT zero position 1"
	vvtOffsets2 = "Angle between cam sensor and VVT zero position 2"
	vvtOffsets3 = "Angle between cam sensor and VVT zero position 3"
	vvtOffsets4 = "Angle between cam sensor and VVT zero position 4"
	gpPwmNote1 = "gpPwmNote 1"
	gpPwmNote2 = "gpPwmNote 2"
	gpPwmNote3 = "gpPwmNote 3"
	gpPwmNote4 = "gpPwmNote 4"
	widebandOnSecondBus = "Select which bus the wideband controller is attached to."
	fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling."
	alwaysWriteSdCard = "Write SD card log even when powered by USB"
	knockDetectionUseDoubleFrequency = "Second harmonic (aka double) is usually quieter background noise"
	silentTriggerError = "Sometimes we have a performance issue while printing error"
	canReadEnabled = "enable can_read/disable can_read"
	canWriteEnabled = "enable can_write/disable can_write. See also can1ListenMode"
	tachPulseDurationAsDutyCycle = "Treat milliseconds value as duty cycle value, i.e. 0.5ms would become 50%"
	isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings."
	invertPrimaryTriggerSignal = "https://wiki.rusefi.com/Trigger-Configuration-Guide\nThis setting flips the signal from the primary engine speed sensor."
	invertSecondaryTriggerSignal = "https://wiki.rusefi.com/Trigger-Configuration-Guide\nThis setting flips the signal from the secondary engine speed sensor."
	cutFuelOnHardLimit = "When enabled, this option cuts the fuel supply when the RPM limit is reached. Cutting fuel provides a smoother limiting action; however, it may lead to slightly higher combustion chamber temperatures since unburned fuel is not present to cool the combustion process."
	cutSparkOnHardLimit = "When selected, this option cuts the spark to limit RPM. Cutting spark can produce flames from the exhaust due to unburned fuel igniting in the exhaust system. Additionally, this unburned fuel can help cool the combustion chamber, which may be beneficial in high-performance applications.\nBe careful enabling this: some engines are known to self-disassemble their valvetrain with a spark cut. Fuel cut is much safer."
	launchSparkCutEnable = "This is the Cut Mode normally used"
	verboseIsoTp = "Are you a developer troubleshooting TS over CAN ISO/TP?"
	engineSnifferFocusOnInputs = "In this mode only trigger events go into engine sniffer and not coils/injectors etc"
	skippedWheelOnCam = "Where is your primary skipped wheel located?"
	acSwitch = "A/C button input"
	etbNeutralPosition = "Expected neutral position"
	idleMode = "See also idleRpmPid"
	isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders."
	complexWallModel = "Should we use tables to vary tau/beta based on CLT/MAP, or just with fixed values?"
	alwaysInstantRpm = "RPM is measured based on last 720 degrees while instant RPM is measured based on the last 90 degrees of crank revolution"
	useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra advance at low idle speeds will prevent stalling and extra retard at high idle speeds can help reduce engine power and slow the idle speed."
	useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling."
	verboseTriggerSynchDetails = "Verbose info in console below engineSnifferRpmThreshold"
	twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)."
	useFixedBaroCorrFromMap = "Read MAP sensor on ECU start-up to use as baro value."
	useSeparateAdvanceForCranking = "In Constant mode, timing is automatically tapered to running as RPM increases.\nIn Table mode, the "Cranking ignition advance" table is used directly."
	useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT and PID idle).\nYou probably don't need this."
	flexCranking = "Enable a second cranking table to use for E100 flex fuel, interpolating between the two based on flex fuel sensor."
	useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller"
	launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range"
	isPhaseSyncRequiredForIgnition = "Some engines are OK running semi-random sequential while other engine require phase synchronization"
	useCltBasedRpmLimit = "If enabled, use a curve for RPM limit (based on coolant temperature) instead of a constant value."
	forceO2Heating = "If enabled, don't wait for engine start to heat O2 sensors.\nWARNING: this will reduce the life of your sensor, as condensation in the exhaust from a cold start can crack the sensing element."
	invertVvtControlIntake = "If increased VVT duty cycle increases the indicated VVT angle, set this to 'advance'. If it decreases, set this to 'retard'. Most intake cams use 'advance', and most exhaust cams use 'retard'."
	invertVvtControlExhaust = "If increased VVT duty cycle increases the indicated VVT angle, set this to 'advance'. If it decreases, set this to 'retard'. Most intake cams use 'advance', and most exhaust cams use 'retard'."
	sdTriggerLog = "'Trigger' mode will write a high speed log of trigger events (warning: uses lots of space!). 'Normal' mode will write a standard MLG of sensors, engine function, etc. similar to the one captured in TunerStudio."
	acIdleRpmTarget = "Idle target speed when A/C is enabled. Some cars need the extra speed to keep the AC efficient while idling."
	warningPeriod = "set warningPeriod X"
	torqueReductionArmingApp = "Pedal position to realize that we need to reduce torque when the trigger pin is uuuh triggered"
	tachPulseDuractionMs = "Duration in ms or duty cycle depending on selected mode"
	wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration."
	alternatorControl_offset = "Linear addition to PID logic\nAlso known as feedforward."
	alternatorControl_periodMs = "PID dTime"
	alternatorControl_minValue = "Output Min Duty Cycle"
	alternatorControl_maxValue = "Output Max Duty Cycle"
	etb_offset = "Linear addition to PID logic\nAlso known as feedforward."
	etb_periodMs = "PID dTime"
	etb_minValue = "Output Min Duty Cycle"
	etb_maxValue = "Output Max Duty Cycle"
	airTaperRpmRange = "RPM range above upper limit for extra air taper"
	tps2Min = "Closed throttle#2. todo: extract these two fields into a structure\nSee also tps2_1AdcChannel"
	tps2Max = "Full throttle#2. tpsMax value as 10 bit ADC value. Not Voltage!\nSee also tps1_1AdcChannel"
	starterControlPin = "See also startStopButtonPin"
	mapErrorDetectionTooLow = "kPa/psi value which is too low to be true"
	mapErrorDetectionTooHigh = "kPa/psi value which is too high to be true"
	multisparkSparkDuration = "How long to wait for the spark to fire before recharging the coil for another spark."
	multisparkDwell = "This sets the dwell time for subsequent sparks. The main spark's dwell is set by the dwell table."
	idleRpmPid_offset = "Linear addition to PID logic\nAlso known as feedforward."
	idleRpmPid_periodMs = "PID dTime"
	idleRpmPid_minValue = "Output Min Duty Cycle"
	idleRpmPid_maxValue = "Output Max Duty Cycle"
	wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment."
	binarySerialTxPin = "See also EFI_CONSOLE_RX_BRAIN_PIN"
	auxValves1 = "auxValves 1"
	auxValves2 = "auxValves 2"
	throttlePedalWOTVoltage = "Pedal in the floor"
	startUpFuelPumpDuration = "on IGN voltage detection turn fuel pump on to build fuel pressure"
	mafFilterParameter = "larger value = larger intake manifold volume"
	idlePidRpmDeadZone = "If the RPM closer to target than this value, disable closed loop idle correction to prevent oscillation"
	mc33810DisableRecoveryMode = "See Over/Undervoltage Shutdown/Retry bit in documentation"
	enableExtendedCanBroadcast = "Send out board statistics"
	luaCanRxWorkaround = "global_can_data performance hack"
	useAuxSpeedForSlipRatio = "Use Aux Speed 1 as one of speeds for wheel slip ratio?"
	useVssAsSecondWheelSpeed = "VSS and Aux Speed 1 or Aux Speed 1 with Aux Speed 2?"
	enableAemXSeriesEgt = "AEM X-Series EGT gauge kit or rusEFI EGT sensor from Wideband controller"
	enableKnockSpectrogram = "Available via TS Plugin see https://rusefi.com/s/knock"
	iacByTpsTaper = "This value is an added for base idle value. Idle Value added when coasting and transitioning into idle."
	coastingFuelCutVssLow = "Below this speed, disable DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears."
	coastingFuelCutVssHigh = "Above this speed, allow DFCO. Use this to prevent jerkiness from fuel enable/disable in low gears."
	tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in."
	auxSpeedSensorInputPin1 = "auxSpeedSensorInputPin 1"
	auxSpeedSensorInputPin2 = "auxSpeedSensorInputPin 2"
	injectionTimingMode = "Defines when fuel is injected relative to the intake valve opening. Options include End of Injection or other timing references."
	debugMode = "See http://rusefi.com/s/debugmode"
	fan1ExtraIdle = "Additional idle % when fan #1 is active"
	uartConsoleSerialSpeed = "Band rate for primary TTL"
	throttlePedalSecondaryWOTVoltage = "Pedal in the floor"
	veOverrideMode = "Override the Y axis (load) value used for the VE table.\nAdvanced users only: If you aren't sure you need this, you probably don't need this."
	afrOverrideMode = "Override the Y axis (load) value used for the AFR table.\nAdvanced users only: If you aren't sure you need this, you probably don't need this."
	mc33_hpfp_i_hold_off = "How long to deactivate power when hold current is reached before applying power again"
	mc33_hpfp_max_hold = "Maximum amount of time the solenoid can be active before assuming a programming error"
	stepperDcInvertedPins = "Enable if DC-motor driver (H-bridge) inverts the signals (eg. RZ7899 on Hellen boards)"
	canOpenBLT = "Allow OpenBLT on Primary CAN"
	can2OpenBLT = "Allow OpenBLT on Secondary CAN"
	injectorFlowAsMassFlow = "Select whether to configure injector flow in volumetric flow (default, cc/min) or mass flow (g/s)."
	can1ListenMode = "ListenMode is about acknowledging CAN traffic on the protocol level. Different from canWriteEnabled"
	camDecoder2jzPosition = "Angle of tooth detection within engine phase cycle"
	benchTestOnTime = "Duration of each test pulse"
	ignOverrideMode = "Override the Y axis (load) value used for the ignition table.\nAdvanced users only: If you aren't sure you need this, you probably don't need this."
	injectorPressureType = "Select which fuel pressure sensor measures the pressure of the fuel at your injectors."
	boostCutPressure = "Specifies the boost pressure allowed before triggering a cut. Setting this to 0 will DISABLE overboost cut."
	fixedTiming = "Fixed timing, useful for TDC testing"
	mapLowValueVoltage = "MAP voltage for low point"
	mapHighValueVoltage = "MAP voltage for low point"
	egoValueShift = "EGO value correction"
	vvtPins1 = "VVT output solenoid pin for this cam 1"
	vvtPins2 = "VVT output solenoid pin for this cam 2"
	vvtPins3 = "VVT output solenoid pin for this cam 3"
	vvtPins4 = "VVT output solenoid pin for this cam 4"
	minimumIgnitionTiming = "Minimim timing advance allowed. No spark on any cylinder will ever fire after this angle BTDC. For example, setting -10 here means no spark ever fires later than 10 deg ATDC. Note that this only concerns the primary spark: any trailing sparks or multispark may violate this constraint."
	maximumIgnitionTiming = "Maximum timing advance allowed. No spark on any cylinder will ever fire before this angle BTDC. For example, setting 45 here means no spark ever fires earlier than 45 deg BTDC"
	vvtMode1 = "vvtMode 1"
	vvtMode2 = "vvtMode 2"
	fan2ExtraIdle = "Additional idle % when fan #2 is active"
	primingDelay = "Delay to allow fuel pressure to build before firing the priming pulse."
	auxAnalogInputs1 = "auxAnalogInputs 1"
	auxAnalogInputs2 = "auxAnalogInputs 2"
	auxAnalogInputs3 = "auxAnalogInputs 3"
	auxAnalogInputs4 = "auxAnalogInputs 4"
	auxAnalogInputs5 = "auxAnalogInputs 5"
	auxAnalogInputs6 = "auxAnalogInputs 6"
	auxAnalogInputs7 = "auxAnalogInputs 7"
	auxAnalogInputs8 = "auxAnalogInputs 8"
	trailingCoilPins1 = "trailingCoilPins 1"
	trailingCoilPins2 = "trailingCoilPins 2"
	trailingCoilPins3 = "trailingCoilPins 3"
	trailingCoilPins4 = "trailingCoilPins 4"
	trailingCoilPins5 = "trailingCoilPins 5"
	trailingCoilPins6 = "trailingCoilPins 6"
	trailingCoilPins7 = "trailingCoilPins 7"
	trailingCoilPins8 = "trailingCoilPins 8"
	trailingCoilPins9 = "trailingCoilPins 9"
	trailingCoilPins10 = "trailingCoilPins 10"
	trailingCoilPins11 = "trailingCoilPins 11"
	trailingCoilPins12 = "trailingCoilPins 12"
	injectorCompensationMode = "None = I have a MAP-referenced fuel pressure regulator\nFixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)\nSensed rail pressure = I have a fuel pressure sensor\n HPFP fuel mass compensation = manual mode for GDI engines"
	fuelReferencePressure = "This is the pressure at which your injector flow is known.\nFor example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa/50.7psi here.\nThis is gauge pressure/in reference to atmospheric."
	auxTempSensor1_tempC_1 = "these values are in Celcius"
	auxTempSensor1_bias_resistor = "Pull-up resistor value on your board"
	auxTempSensor2_tempC_1 = "these values are in Celcius"
	auxTempSensor2_bias_resistor = "Pull-up resistor value on your board"
	etbWastegatePid_offset = "Linear addition to PID logic\nAlso known as feedforward."
	etbWastegatePid_periodMs = "PID dTime"
	etbWastegatePid_minValue = "Output Min Duty Cycle"
	etbWastegatePid_maxValue = "Output Max Duty Cycle"
	stepperNumMicroSteps = "For micro-stepping, make sure that PWM frequency (etbFreq) is high enough"
	stepperMinDutyCycle = "Use to limit the current when the stepper motor is idle, not moving (100% = no limit)"
	stepperMaxDutyCycle = "Use to limit the max.current through the stepper motor (100% = no limit)"
	timing_offset_cylinder1 = "per-cylinder ignition and fueling timing correction for uneven engines 1"
	timing_offset_cylinder2 = "per-cylinder ignition and fueling timing correction for uneven engines 2"
	timing_offset_cylinder3 = "per-cylinder ignition and fueling timing correction for uneven engines 3"
	timing_offset_cylinder4 = "per-cylinder ignition and fueling timing correction for uneven engines 4"
	timing_offset_cylinder5 = "per-cylinder ignition and fueling timing correction for uneven engines 5"
	timing_offset_cylinder6 = "per-cylinder ignition and fueling timing correction for uneven engines 6"
	timing_offset_cylinder7 = "per-cylinder ignition and fueling timing correction for uneven engines 7"
	timing_offset_cylinder8 = "per-cylinder ignition and fueling timing correction for uneven engines 8"
	timing_offset_cylinder9 = "per-cylinder ignition and fueling timing correction for uneven engines 9"
	timing_offset_cylinder10 = "per-cylinder ignition and fueling timing correction for uneven engines 10"
	timing_offset_cylinder11 = "per-cylinder ignition and fueling timing correction for uneven engines 11"
	timing_offset_cylinder12 = "per-cylinder ignition and fueling timing correction for uneven engines 12"
	vvtControlMinClt = "Minimum coolant temperature to activate VVT"
	spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc."
	mc33816_rstb = "ResetB"
	brakePedalPin = "Brake pedal switch"
	auxPid1_offset = "Linear addition to PID logic\nAlso known as feedforward."
	auxPid1_periodMs = "PID dTime"
	auxPid1_minValue = "Output Min Duty Cycle"
	auxPid1_maxValue = "Output Max Duty Cycle"
	auxPid2_offset = "Linear addition to PID logic\nAlso known as feedforward."
	auxPid2_periodMs = "PID dTime"
	auxPid2_minValue = "Output Min Duty Cycle"
	auxPid2_maxValue = "Output Max Duty Cycle"
	injectorCorrectionPolynomial1 = "injectorCorrectionPolynomial 1"
	injectorCorrectionPolynomial2 = "injectorCorrectionPolynomial 2"
	injectorCorrectionPolynomial3 = "injectorCorrectionPolynomial 3"
	injectorCorrectionPolynomial4 = "injectorCorrectionPolynomial 4"
	injectorCorrectionPolynomial5 = "injectorCorrectionPolynomial 5"
	injectorCorrectionPolynomial6 = "injectorCorrectionPolynomial 6"
	injectorCorrectionPolynomial7 = "injectorCorrectionPolynomial 7"
	injectorCorrectionPolynomial8 = "injectorCorrectionPolynomial 8"
	sentInputPins1 = "sentInputPins 1"
	coastingFuelCutRpmHigh = "This sets the RPM above which fuel cut is active."
	coastingFuelCutRpmLow = "This sets the RPM below which fuel cut is deactivated, this prevents jerking or issues transitioning to idle"
	coastingFuelCutTps = "Throttle position below which fuel cut is active. With an electronic throttle enabled, this checks against pedal position."
	coastingFuelCutClt = "Fuel cutoff is disabled when the engine is cold."
	pidExtraForLowRpm = "Increases PID reaction for RPM<target by adding extra percent to PID-error"
	coastingFuelCutMap = "MAP value above which fuel injection is re-enabled."
	scriptCurveName1 = "scriptCurveName 1"
	scriptCurveName2 = "scriptCurveName 2"
	scriptCurveName3 = "scriptCurveName 3"
	scriptCurveName4 = "scriptCurveName 4"
	scriptCurveName5 = "scriptCurveName 5"
	scriptCurveName6 = "scriptCurveName 6"
	scriptTableName1 = "scriptTableName 1"
	scriptTableName2 = "scriptTableName 2"
	scriptTableName3 = "scriptTableName 3"
	scriptTableName4 = "scriptTableName 4"
	scriptSettingName1 = "scriptSettingName 1"
	scriptSettingName2 = "scriptSettingName 2"
	scriptSettingName3 = "scriptSettingName 3"
	scriptSettingName4 = "scriptSettingName 4"
	scriptSettingName5 = "scriptSettingName 5"
	scriptSettingName6 = "scriptSettingName 6"
	scriptSettingName7 = "scriptSettingName 7"
	scriptSettingName8 = "scriptSettingName 8"
	tChargeAirCoefMin = "Heat transfer coefficient at zero flow.\n0 means the air charge is fully heated to the same temperature as CLT.\n1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT."
	tChargeAirCoefMax = "Heat transfer coefficient at high flow, as defined by "max air flow".\n0 means the air charge is fully heated to the same temperature as CLT.\n1 means the air charge gains no heat, and enters the cylinder at the temperature measured by IAT."
	tChargeAirFlowMax = "High flow point for heat transfer estimation.\nSet this to perhaps 50-75% of your maximum airflow at wide open throttle."
	tChargeAirIncrLimit = "Maximum allowed rate of increase allowed for the estimated charge temperature"
	tChargeAirDecrLimit = "Maximum allowed rate of decrease allowed for the estimated charge temperature"
	etb_iTermMin = "iTerm min value"
	etb_iTermMax = "iTerm max value"
	idleTimingPid_offset = "Linear addition to PID logic\nAlso known as feedforward."
	idleTimingPid_periodMs = "PID dTime"
	idleTimingPid_minValue = "Output Min Duty Cycle"
	idleTimingPid_maxValue = "Output Max Duty Cycle"
	idleTimingSoftEntryTime = "When entering idle, and the PID settings are aggressive, it's good to make a soft entry upon entering closed loop"
	tpsAccelFractionPeriod = "A delay in cycles between fuel-enrich. portions"
	tpsAccelFractionDivisor = "A fraction divisor: 1 or less = entire portion at once, or split into diminishing fractions"
	idlerpmpid_iTermMin = "iTerm min value"
	stoichRatioPrimary = "Stoichiometric ratio for your primary fuel. When Flex Fuel is enabled, this value is used when the Flex Fuel sensor indicates E0.\nE0 = 14.7\nE10 = 14.1\nE85 = 9.9\nE100 = 9.0"
	idlerpmpid_iTermMax = "iTerm max value"
	etbIdleThrottleRange = "This sets the range of the idle control on the ETB. At 100% idle position, the value specified here sets the base ETB position. Can also be interpreted as the maximum allowed TPS% Opening for Idle Control."
	cylinderBankSelect1 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 1"
	cylinderBankSelect2 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 2"
	cylinderBankSelect3 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 3"
	cylinderBankSelect4 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 4"
	cylinderBankSelect5 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 5"
	cylinderBankSelect6 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 6"
	cylinderBankSelect7 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 7"
	cylinderBankSelect8 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 8"
	cylinderBankSelect9 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 9"
	cylinderBankSelect10 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 10"
	cylinderBankSelect11 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 11"
	cylinderBankSelect12 = "Select which fuel correction bank this cylinder belongs to. Group cylinders that share the same O2 sensor 12"
	triggerCompCenterVolt = "Trigger comparator center point voltage"
	triggerCompHystMin = "Trigger comparator hysteresis voltage (Min)"
	triggerCompHystMax = "Trigger comparator hysteresis voltage (Max)"
	triggerCompSensorSatRpm = "VR-sensor saturation RPM"
	gppwm1_pin = "Select a pin to use for PWM or on-off output."
	gppwm1_dutyIfError = "If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.\nThis should be a safe value for whatever hardware is connected to prevent damage."
	gppwm1_pwmFrequency = "Select a frequency to run PWM at.\nSet this to 0hz to enable on-off mode."
	gppwm1_onAboveDuty = "Hysteresis: in on-off mode, turn the output on when the table value is above this duty."
	gppwm1_offBelowDuty = "Hysteresis: in on-off mode, turn the output off when the table value is below this duty."
	gppwm1_loadAxis = "Selects the Y axis to use for the table."
	gppwm1_rpmAxis = "Selects the X axis to use for the table."
	gppwm2_pin = "Select a pin to use for PWM or on-off output."
	gppwm2_dutyIfError = "If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.\nThis should be a safe value for whatever hardware is connected to prevent damage."
	gppwm2_pwmFrequency = "Select a frequency to run PWM at.\nSet this to 0hz to enable on-off mode."
	gppwm2_onAboveDuty = "Hysteresis: in on-off mode, turn the output on when the table value is above this duty."
	gppwm2_offBelowDuty = "Hysteresis: in on-off mode, turn the output off when the table value is below this duty."
	gppwm2_loadAxis = "Selects the Y axis to use for the table."
	gppwm2_rpmAxis = "Selects the X axis to use for the table."
	gppwm3_pin = "Select a pin to use for PWM or on-off output."
	gppwm3_dutyIfError = "If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.\nThis should be a safe value for whatever hardware is connected to prevent damage."
	gppwm3_pwmFrequency = "Select a frequency to run PWM at.\nSet this to 0hz to enable on-off mode."
	gppwm3_onAboveDuty = "Hysteresis: in on-off mode, turn the output on when the table value is above this duty."
	gppwm3_offBelowDuty = "Hysteresis: in on-off mode, turn the output off when the table value is below this duty."
	gppwm3_loadAxis = "Selects the Y axis to use for the table."
	gppwm3_rpmAxis = "Selects the X axis to use for the table."
	gppwm4_pin = "Select a pin to use for PWM or on-off output."
	gppwm4_dutyIfError = "If an error (with a sensor, etc) is detected, this value is used instead of reading from the table.\nThis should be a safe value for whatever hardware is connected to prevent damage."
	gppwm4_pwmFrequency = "Select a frequency to run PWM at.\nSet this to 0hz to enable on-off mode."
	gppwm4_onAboveDuty = "Hysteresis: in on-off mode, turn the output on when the table value is above this duty."
	gppwm4_offBelowDuty = "Hysteresis: in on-off mode, turn the output off when the table value is below this duty."
	gppwm4_loadAxis = "Selects the Y axis to use for the table."
	gppwm4_rpmAxis = "Selects the X axis to use for the table."
	mc33_i_boost = "Boost Current"
	mc33_i_peak = "Peak Current"
	mc33_i_hold = "Hold Current"
	mc33_t_max_boost = "Maximum allowed boost phase time. If the injector current doesn't reach the threshold before this time elapses, it is assumed that the injector is missing or has failed open circuit."
	mc33_t_peak_tot = "Peak phase duration"
	mc33_t_hold_tot = "Hold phase duration"
	tcu_solenoid_mode1 = "tcu_solenoid_mode 1"
	tcu_solenoid_mode2 = "tcu_solenoid_mode 2"
	tcu_solenoid_mode3 = "tcu_solenoid_mode 3"
	tcu_solenoid_mode4 = "tcu_solenoid_mode 4"
	tcu_solenoid_mode5 = "tcu_solenoid_mode 5"
	tcu_solenoid_mode6 = "tcu_solenoid_mode 6"
	triggerGapOverrideFrom1 = "triggerGapOverrideFrom 1"
	triggerGapOverrideFrom2 = "triggerGapOverrideFrom 2"
	triggerGapOverrideFrom3 = "triggerGapOverrideFrom 3"
	triggerGapOverrideFrom4 = "triggerGapOverrideFrom 4"
	triggerGapOverrideFrom5 = "triggerGapOverrideFrom 5"
	triggerGapOverrideFrom6 = "triggerGapOverrideFrom 6"
	triggerGapOverrideFrom7 = "triggerGapOverrideFrom 7"
	triggerGapOverrideFrom8 = "triggerGapOverrideFrom 8"
	triggerGapOverrideFrom9 = "triggerGapOverrideFrom 9"
	triggerGapOverrideFrom10 = "triggerGapOverrideFrom 10"
	triggerGapOverrideFrom11 = "triggerGapOverrideFrom 11"
	triggerGapOverrideFrom12 = "triggerGapOverrideFrom 12"
	triggerGapOverrideFrom13 = "triggerGapOverrideFrom 13"
	triggerGapOverrideFrom14 = "triggerGapOverrideFrom 14"
	triggerGapOverrideFrom15 = "triggerGapOverrideFrom 15"
	triggerGapOverrideFrom16 = "triggerGapOverrideFrom 16"
	triggerGapOverrideFrom17 = "triggerGapOverrideFrom 17"
	triggerGapOverrideFrom18 = "triggerGapOverrideFrom 18"
	triggerGapOverrideTo1 = "triggerGapOverrideTo 1"
	triggerGapOverrideTo2 = "triggerGapOverrideTo 2"
	triggerGapOverrideTo3 = "triggerGapOverrideTo 3"
	triggerGapOverrideTo4 = "triggerGapOverrideTo 4"
	triggerGapOverrideTo5 = "triggerGapOverrideTo 5"
	triggerGapOverrideTo6 = "triggerGapOverrideTo 6"
	triggerGapOverrideTo7 = "triggerGapOverrideTo 7"
	triggerGapOverrideTo8 = "triggerGapOverrideTo 8"
	triggerGapOverrideTo9 = "triggerGapOverrideTo 9"
	triggerGapOverrideTo10 = "triggerGapOverrideTo 10"
	triggerGapOverrideTo11 = "triggerGapOverrideTo 11"
	triggerGapOverrideTo12 = "triggerGapOverrideTo 12"
	triggerGapOverrideTo13 = "triggerGapOverrideTo 13"
	triggerGapOverrideTo14 = "triggerGapOverrideTo 14"
	triggerGapOverrideTo15 = "triggerGapOverrideTo 15"
	triggerGapOverrideTo16 = "triggerGapOverrideTo 16"
	triggerGapOverrideTo17 = "triggerGapOverrideTo 17"
	triggerGapOverrideTo18 = "triggerGapOverrideTo 18"
	maxCamPhaseResolveRpm = "Below this RPM, use camshaft information to synchronize the crank's position for full sequential operation. Use this if your cam sensor does weird things at high RPM. Set to 0 to disable, and always use cam to help sync crank."
	dfcoDelay = "Delay before cutting fuel. Set to 0 to cut immediately with no delay. May cause rumbles and pops out of your exhaust..."
	acDelay = "Delay before engaging the AC compressor. Set to 0 to engage immediately with no delay. Use this to prevent bogging at idle when AC engages."
	etbJamDetectThreshold = "Threshold in ETB error (target vs. actual) above which the jam timer is started. If the timer reaches the time specified in the jam detection timeout period, the throttle is considered jammed, and engine operation limited."
	acLowRpmLimit = "Low engine speed for A/C. Larger engines can survive lower values"
	hpfpMinAngle = "If the requested activation time is below this angle, don't bother running the pump"
	hpfpPumpVolume = "Size of the pump chamber in cc. Typical Bosch HDP5 has a 9.0mm diameter, typical BMW N* stroke is 4.4mm."
	hpfpActivationAngle = "How long to keep the valve activated (in order to allow the pump to build pressure and keep the valve open on its own)\nhttps://rusefi.com/forum/viewtopic.php?t=2192"
	hpfpPid_iTermMin = "iTerm min value"
	hpfpPid_iTermMax = "iTerm max value"
	hpfpTargetDecay = "The fastest rate the target pressure can be reduced by. This is because HPFP have no way to bleed off pressure other than injecting fuel."
	stepper_raw_output1 = "stepper_raw_output 1"
	stepper_raw_output2 = "stepper_raw_output 2"
	stepper_raw_output3 = "stepper_raw_output 3"
	stepper_raw_output4 = "stepper_raw_output 4"
	gearRatio1 = "gearRatio 1"
	gearRatio2 = "gearRatio 2"
	gearRatio3 = "gearRatio 3"
	gearRatio4 = "gearRatio 4"
	gearRatio5 = "gearRatio 5"
	gearRatio6 = "gearRatio 6"
	gearRatio7 = "gearRatio 7"
	gearRatio8 = "gearRatio 8"
	gearRatio9 = "gearRatio 9"
	gearRatio10 = "gearRatio 10"
	vvtActivationDelayMs = "We need to give engine time to build oil pressure without diverting it to VVT"
	acrDisablePhase = "During revolution where ACR should be disabled at what specific angle to disengage"
	etbMinimumPosition = "Set a minimum allowed target position to avoid slamming/driving against the hard mechanical stop in the throttle."
	vinNumber = "Individual characters are accessible using vin(index) Lua function"
	luaDigitalInputPins1 = "luaDigitalInputPins 1"
	luaDigitalInputPins2 = "luaDigitalInputPins 2"
	luaDigitalInputPins3 = "luaDigitalInputPins 3"
	luaDigitalInputPins4 = "luaDigitalInputPins 4"
	luaDigitalInputPins5 = "luaDigitalInputPins 5"
	luaDigitalInputPins6 = "luaDigitalInputPins 6"
	luaDigitalInputPins7 = "luaDigitalInputPins 7"
	luaDigitalInputPins8 = "luaDigitalInputPins 8"
	sentEtbType = "If you have SENT TPS sensor please select type. For analog TPS leave None"
	acPressureEnableHyst = "Hysterisis: if Pressure High Disable is 240kpa, and acPressureEnableHyst is 20, when the ECU sees 240kpa, A/C will be disabled, and stay disabled until 240-20=220kpa is reached"
	tpsSecondaryMaximum = "For Ford TPS, use 53%. For Toyota ETCS-i, use ~65%"
	ppsSecondaryMaximum = "For Toyota ETCS-i, use ~69%"
	luaDigitalInputPinModes1 = "luaDigitalInputPinModes 1"
	luaDigitalInputPinModes2 = "luaDigitalInputPinModes 2"
	luaDigitalInputPinModes3 = "luaDigitalInputPinModes 3"
	luaDigitalInputPinModes4 = "luaDigitalInputPinModes 4"
	luaDigitalInputPinModes5 = "luaDigitalInputPinModes 5"
	luaDigitalInputPinModes6 = "luaDigitalInputPinModes 6"
	luaDigitalInputPinModes7 = "luaDigitalInputPinModes 7"
	luaDigitalInputPinModes8 = "luaDigitalInputPinModes 8"
	hpfpPeakPos = "Crank angle ATDC of first lobe peak"
	rpmSoftLimitWindowSize = "Window that the correction will be added throughout (example, if rpm limit is 7000, and rpmSoftLimitWindowSize is 200, the corrections activate at 6800RPM, creating a 200rpm window)"
	rpmSoftLimitTimingRetard = "Degrees of timing REMOVED from actual timing during soft RPM limit window"
	rpmSoftLimitFuelAdded = "% of fuel ADDED during window"
	rpmHardLimitHyst = "Sets a buffer below the RPM hard limit, helping avoid rapid cycling of cut actions by defining a range within which RPM must drop before cut actions are re-enabled.\nHysterisis: if the hard limit is 7200rpm and rpmHardLimitHyst is 200rpm, then when the ECU sees 7200rpm, fuel/ign will cut, and stay cut until 7000rpm (7200-200) is reached"
	benchTestOffTime = "Time between bench test pulses"
	boostCutPressureHyst = "Defines a pressure range below the cut limit at which boost can resume, providing smoother control over boost cut actions.\nFor example: if hard cut is 240kpa, and boost cut hysteresis is 20, when the ECU sees 240kpa, fuel/ign will cut, and stay cut until 240-20=220kpa is reached"
	gearBasedOpenLoopBoostAdder = "Boost duty cycle modified by gear"
	benchTestCount = "How many test bench pulses do you want"
	iacByTpsHoldTime = "How long initial idle adder is held before starting to decay."
	iacByTpsDecayTime = "How long it takes to remove initial IAC adder to return to normal idle."
	tcu_rangeInput1 = "tcu_rangeInput 1"
	tcu_rangeInput2 = "tcu_rangeInput 2"
	tcu_rangeInput3 = "tcu_rangeInput 3"
	tcu_rangeInput4 = "tcu_rangeInput 4"
	tcu_rangeInput5 = "tcu_rangeInput 5"
	tcu_rangeInput6 = "tcu_rangeInput 6"
	tcu_rangeInputMode1 = "tcu_rangeInputMode 1"
	tcu_rangeInputMode2 = "tcu_rangeInputMode 2"
	tcu_rangeInputMode3 = "tcu_rangeInputMode 3"
	tcu_rangeInputMode4 = "tcu_rangeInputMode 4"
	tcu_rangeInputMode5 = "tcu_rangeInputMode 5"
	tcu_rangeInputMode6 = "tcu_rangeInputMode 6"
	canVssScaling = "Scale the reported vehicle speed value from CAN. Example: Parameter set to 1.1, CAN VSS reports 50kph, ECU will report 55kph instead."
	oilTempSensor_tempC_1 = "these values are in Celcius"
	oilTempSensor_bias_resistor = "Pull-up resistor value on your board"
	fuelTempSensor_tempC_1 = "these values are in Celcius"
	fuelTempSensor_bias_resistor = "Pull-up resistor value on your board"
	ambientTempSensor_tempC_1 = "these values are in Celcius"
	ambientTempSensor_bias_resistor = "Pull-up resistor value on your board"
	compressorDischargeTemperature_tempC_1 = "these values are in Celcius"
	compressorDischargeTemperature_bias_resistor = "Pull-up resistor value on your board"
	throttleInletPressureChannel = "Place the sensor before the throttle, but after any turbocharger/supercharger and intercoolers if fitted. Uses the same calibration as the MAP sensor."
	compressorDischargePressureChannel = "Place the sensor after the turbocharger/supercharger, but before any intercoolers if fitted. Uses the same calibration as the MAP sensor."
	dacOutputPins1 = "dacOutputPins 1"
	dacOutputPins2 = "dacOutputPins 2"
	speedometerPulsePerKm = "Number of speedometer pulses per kilometer travelled."
	simulatorCamPosition1 = "simulatorCamPosition 1"
	simulatorCamPosition2 = "simulatorCamPosition 2"
	simulatorCamPosition3 = "simulatorCamPosition 3"
	simulatorCamPosition4 = "simulatorCamPosition 4"
	triggerVVTGapOverrideFrom1 = "triggerVVTGapOverrideFrom 1"
	triggerVVTGapOverrideFrom2 = "triggerVVTGapOverrideFrom 2"
	triggerVVTGapOverrideFrom3 = "triggerVVTGapOverrideFrom 3"
	triggerVVTGapOverrideFrom4 = "triggerVVTGapOverrideFrom 4"
	triggerVVTGapOverrideTo1 = "triggerVVTGapOverrideTo 1"
	triggerVVTGapOverrideTo2 = "triggerVVTGapOverrideTo 2"
	triggerVVTGapOverrideTo3 = "triggerVVTGapOverrideTo 3"
	triggerVVTGapOverrideTo4 = "triggerVVTGapOverrideTo 4"
	maxInjectorDutyInstant = "This sets an immediate limit on injector duty cycle. If this threshold is reached, the system will immediately cut the injectors."
	maxInjectorDutySustained = "This limit allows injectors to operate up to the specified duty cycle percentage for a short period (as defined by the delay). After this delay, if the duty cycle remains above the limit, it will trigger a cut."
	maxInjectorDutySustainedTimeout = "Timeout period for duty cycle over the sustained limit to trigger duty cycle protection."
	injectionPinsStage21 = "injectionPinsStage2 1"
	injectionPinsStage22 = "injectionPinsStage2 2"
	injectionPinsStage23 = "injectionPinsStage2 3"
	injectionPinsStage24 = "injectionPinsStage2 4"
	injectionPinsStage25 = "injectionPinsStage2 5"
	injectionPinsStage26 = "injectionPinsStage2 6"
	injectionPinsStage27 = "injectionPinsStage2 7"
	injectionPinsStage28 = "injectionPinsStage2 8"
	injectionPinsStage29 = "injectionPinsStage2 9"
	injectionPinsStage210 = "injectionPinsStage2 10"
	injectionPinsStage211 = "injectionPinsStage2 11"
	injectionPinsStage212 = "injectionPinsStage2 12"
	tunerStudioSerialSpeed = "Secondary TTL channel baud rate"
	device_uid1 = "device_uid 1"
	device_uid2 = "device_uid 2"
	device_uid3 = "device_uid 3"
	tcu_rangeAnalogInput1 = "tcu_rangeAnalogInput 1"
	tcu_rangeAnalogInput2 = "tcu_rangeAnalogInput 2"
	tcu_rangeAnalogInput3 = "tcu_rangeAnalogInput 3"
	tcu_rangeAnalogInput4 = "tcu_rangeAnalogInput 4"
	tcu_rangeAnalogInput5 = "tcu_rangeAnalogInput 5"
	tcu_rangeAnalogInput6 = "tcu_rangeAnalogInput 6"
	mc33810Nomi = "Nominal coil charge current, 0.25A step"
	mc33810Maxi = "Maximum coil charge current, 1A step"
	minAcPressure = "value of A/C pressure in kPa/psi before that compressor is disengaged"
	maxAcPressure = "value of A/C pressure in kPa/psi after that compressor is disengaged"
	minimumOilPressureTimeout = "Delay before cutting fuel due to low oil pressure. Use this to ignore short pressure blips and sensor noise."
	knockSuppressMinTps = "Below TPS value all knock suppression will be disabled."
	knockFuelTrimAggression = "Fuel to odd when a knock event occurs. Advice: 5% (mild), 10% (turbo/high comp.), 15% (high knock, e.g. GDI), 20% (spicy lump),"
	knockFuelTrimReapplyRate = "After a knock event, reapply fuel at this rate."
	knockFuelTrim = "Fuel trim when knock, max 30%"
	knockFrequency = "Estimated knock frequency, ignore cylinderBore if this one > 0"
	secondaryInjectorCompensationMode = "None = I have a MAP-referenced fuel pressure regulator\nFixed rail pressure = I have an atmosphere-referenced fuel pressure regulator (returnless, typically)\nSensed rail pressure = I have a fuel pressure sensor"
	secondaryInjectorFuelReferencePressure = "This is the pressure at which your injector flow is known.\nFor example if your injectors flow 400cc/min at 3.5 bar, enter 350kpa here."
	EtbSentInput = "SENT input connected to ETB"
	FuelHighPressureSentInput = "SENT input used for high pressure fuel sensor"
	FuelHighPressureSentType = "If you have SENT High Pressure Fuel Sensor please select type. For analog TPS leave None"
	nitrousControlTriggerPin = "Pin that activates nitrous control"
	dfcoRetardDeg = "Retard timing by this amount during DFCO. Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified."
	dfcoRetardRampInTime = "Smooths the transition back from fuel cut. After fuel is restored, ramp timing back in over the period specified."
	nitrousIgnitionRetard = "Retard timing to remove from actual final timing (after all corrections) due to additional air."
	fuelLevelAveragingAlpha = "Exponential Average Alpha filtering parameter"
	fuelLevelUpdatePeriodSec = "How often do we update fuel level gauge"
	fuelLevelLowThresholdVoltage = "Error below specified value"
	fuelLevelHighThresholdVoltage = "Error above specified value"
	afrExpAverageAlpha = "A higher alpha (closer to 1) means the EMA reacts more quickly to changes in the data.\n'1' means no filtering, 0.98 would be some filtering."
	sparkHardwareLatencyCorrection = "Compensates for trigger delay due to belt stretch, or other electromechanical issues. beware that raising this value advances ignition timing!"
	maxOilPressureTimeout = "Delay before cutting fuel due to extra high oil pressure. Use this to ignore short pressure blips and sensor noise."
	idleReturnTargetRampDuration = "idle return target ramp duration"
	wastegatePositionOpenedVoltage = "Voltage when the wastegate is fully open"
	wastegatePositionClosedVoltage = "Voltage when the wastegate is closed"
	vvlController_ignitionRetard = "Retard timing to remove from actual final timing (after all corrections) due to additional air."
	etbBiasBins = "target TPS value, 0 to 100%\nTODO: use int8 data date once we template interpolation method"
	etbBiasValues = "PWM bias, open loop component of PID closed loop control"
	dcWastegateBiasBins = "target Wastegate value, 0 to 100%"
	dcWastegateBiasValues = "PWM bias, open loop component of PID closed loop control"
	sparkDwellRpmBins = "On Single Coil or Wasted Spark setups you have to lower dwell at high RPM"
	cltIdleRpmBins = "CLT-based target RPM for automatic idle controller"
	cltIdleRpm = "See idleRpmPid"
	ignitionCltCorrTempBins = "CLT-based timing correction"
	crankingTpsCoef = "Cranking fuel correction coefficient based on TPS"
	crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)"
	crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)"
	iacCoastingRpmBins = "RPM-based idle position for coasting"
	iacCoasting = "RPM-based idle position for coasting"
	cltCrankingCorrBins = "CLT-based cranking position %. The values in this curve represent a percentage of the ETB Maximum angle. e.g. If "ETB Idle Maximum Angle" is 10, a value of 70 means 7% ETB Position."
	cltCrankingCorr = "CLT-based cranking position %. The values in this curve represent a percentage of the ETB Maximum angle. e.g. If "ETB Idle Maximum Angle" is 10, a value of 70 means 7% ETB Position."
	afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup.\nShould be 100 once tune is better"
	idleAdvanceBins = "Optional timing advance table for Idle (see useSeparateAdvanceForIdle)"
	idleAdvance = "Optional timing advance table for Idle (see useSeparateAdvanceForIdle)"
	crankingCycleBaseFuel = "Base mass of the per-cylinder fuel injected during cranking. This is then modified by the multipliers for IAT, TPS ect, to give the final cranking pulse width.\nA reasonable starting point is 60mg per liter per cylinder.\nex: 2 liter 4 cyl = 500cc/cyl, so 30mg cranking fuel."
	cltIdleCorrBins = "CLT-based idle position for simple manual idle controller"
	cltIdleCorrTable = "CLT-based idle position for simple manual idle controller"
	ltitTable = "Long Term Idle Trim (LTIT) multiplicativo para idle open loop"
	mafDecoding = "Also known as MAF transfer function.\nkg/hour value.\nBy the way 2.081989116 kg/h = 1 ft3/m"
	mapEstimateTable = "This table represents MAP at a given TPS vs RPM, which we use if our MAP sensor has failed, or if we are using MAP Prediciton. \n This table should be a direct representation of MAP, you can tune it manually by disconnecting MAP sensor, and filling out the table with values that match an external gauge that shows MAP.\nAdditionally, you can also use MLV to get the map values and/or generate the table for you"
	throttleEstimateEffectiveAreaValues = "In units of g/s normalized to choked flow conditions"
	knockBaseNoise = "Knock sensor output knock detection threshold depending on current RPM."
	dynoRpmStep = "RPM Trim Window, Leave on 100 if you dont know what this does"
	dynoSaeTemperatureC = "Air temperature"
	dynoSaeRelativeHumidity = "Relative humidity of air"
	dynoSaeBaro = "Atmospheric pressure"
	dynoCarWheelDiaInch = "Disc diameter"
	dynoCarWheelAspectRatio = "Tyre height"
	dynoCarWheelTireWidthMm = "Tyre width"
	dynoCarGearPrimaryReduction = "Primary reduction"
	dynoCarGearRatio = "Ratio of the gear on which the measurement will be carried out, usually the gear is selected whose ratio is closest to 1"
	dynoCarGearFinalDrive = "Final drive gear ratio"
	dynoCarCarMassKg = "Full car mass"
	dynoCarCargoMassKg = "Mass of passengers and cargo"
	dynoCarCoeffOfDrag = "Resistance of an car in air, for example see list of popular cars: https://ecomodder.com/wiki/Vehicle_Coefficient_of_Drag_List"
	dynoCarFrontalAreaM2 = "The frontal area A represents the frontal projection of the car's area"
	torqueReductionCutXaxis = "Selects the X axis to use for the table."
	torqueReductionIgnitionCutTable = "How many % of ignition events will be cut"
	torqueReductionTimeXaxis = "Selects the X axis to use for the table."
	torqueReductionTimeTable = "For how long after the pin has been triggered will the cut/reduction stay active. After that, even if the pin is still triggered, torque is re-introduced"
	torqueReductionIgnitionRetardXaxis = "Selects the X axis to use for the table."
	torqueReductionIgnitionRetardTable = "How many degrees of timing advance will be reduced during the Torque Reduction Time"


; SettingContextHelpEnd
; CONFIG_DEFINITION_END

; Continue SettingContextHelp
	ltft_table_bank1 = "Read-only table showing the Long-Term Fuel Trims the ECU has calculated for Bank 1 based on lambda sensor feedback."
	ltft_table_bank2 = "Read-only table showing the Long-Term Fuel Trims the ECU has calculated for Bank 2 based on lambda sensor feedback."

[Tuning]
	spotDepth		=	2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
	cursorDepth	=	2 ; Same as spot depth.

	gaugeColumns = 1 ; Only 1 or 2 are valid.

	pageButtons  = "&EGO"
	gauge1		= RPMGauge
#if LAMBDA
	gauge2		= lambda1Gauge
#else
	gauge2		= afr1Gauge
#endif
	gauge3		= MAPGauge
	gauge4		= veValueGauge


[LoggerDefinition]
; valid logger types: composite, tooth, trigger, csv
	loggerDef = compositeLogger, "Trigger Logger", composite
		startCommand = "l\x01"
		stopCommand  = "l\x02"
		dataReadCommand = "l\x03"
		dataReadTimeout = 10000 ; time in ms
		dataReadyCondition = { toothLogReady }
		continuousRead = true

		; recordDef = headerLen, footerLen, recordLen
		recordDef =	0,	0,	5

		; these names are hard-coded inside TS
		recordField = priLevel,			"PriLevel",	0,			1,			1.0,	"Flag"
		recordField = secLevel,			"SecLevel",	1,			1,			1.0,	"Flag"
		recordField = trigger,			"Trigger",		2,			1,			1.0,	"Flag"
		recordField = sync,				"Sync",			3,			1,			1.0,	"Flag"
		recordField = coil,				"Coil",			4,			1,			1.0,	"Flag"
		recordField = inj,					"Injector",	5,			1,			1.0,	"Flag"
		recordField = time,				"Time",			8,			32,			0.001,	"ms"

		; it seems that TS also needs to know the diff.size of a tooth
		calcField = toothTime,			"ToothTime",	"ms", { time - pastValue(time, 1) }

	loggerDef = triggerScope, "Trigger Oscilloscope", csv
		startCommand = "l\x04"
		stopCommand  = "l\x05"
		dataReadCommand = "l\x06"
		dataReadTimeout = 1000
		dataReadyCondition = { triggerScopeReady }
		continuousRead = true

		recordDef = 0, 0, 2
		recordField = channel1, "Channel 1", 0, 8, {6.6 / 255}, "v"
		recordField = channel2, "Channel 2", 8, 8, {6.6 / 255}, "v"

[VeAnalyze]

		;	tableName,  lambdaTargetTableName, lambdaChannel, egoCorrectionChannel, activeCondition
#if LAMBDA
		veAnalyzeMap = veTableTbl, lambdaTableTbl, lambdaValue, egoCorrectionForVeAnalyze, { 1 }
		lambdaTargetTables = lambdaTableTbl, afrTSCustom
#else
		veAnalyzeMap = veTableTbl, afrTableTbl, afrGasolineScale, egoCorrectionForVeAnalyze, { 1 }
		lambdaTargetTables = afrTableTbl, afrTSCustom
#endif

		; filter =  Name,		"DisplayName", outputChannel, operator, defaultVal, userAdjustable
		filter = minRPMFilter, "Minimum RPM", RPMValue,			<		, 500,		, true

		filter = minCltFilter, "Minimum CLT", coolant,		<		, 60,		, true

		filter = deltaTps, "dTPS", deltaTps		>		, 50,		, true

		filter = VBatt, "VBatt", VBatt		<		, 12,		, true

		filter = minTps, "Minimum TPS", TPSValue,		<		, 1,		, true
		filter = std_Custom



;
; in order to add new TunerStudio data point you need to change one of *.txt files mentioned in LiveData.yaml
;
[BurstMode]
	getCommand       = "A"

[OutputChannels]

	ochGetCommand	= "O%2o%2c"

; see TS_OUTPUT_SIZE in console source code
	ochBlockSize	= 2068

; 11.2.3 Full Optimized – High Speed
;	scatteredOchGetCommand = 9
;	scatteredOffsetArray = highSpeedOffsets
;#if CONN_SLOW
;	scatteredGetEnabled = { 1 }
;#else
;	scatteredGetEnabled = { 0 }
;#endif

;
; see TunerStudioOutputChannels struct
;

sd_present = bits, U32, 0, [0:0]
sd_logging_internal = bits, U32, 0, [1:1]
triggerScopeReady = bits, U32, 0, [2:2]
antilagTriggered = bits, U32, 0, [3:3]
isO2HeaterOn = bits, U32, 0, [4:4]
checkEngine = bits, U32, 0, [5:5]
needBurn = bits, U32, 0, [6:6]
sd_msd = bits, U32, 0, [7:7]
toothLogReady = bits, U32, 0, [8:8]
isTpsError = bits, U32, 0, [9:9]
isCltError = bits, U32, 0, [10:10]
isMapError = bits, U32, 0, [11:11]
isIatError = bits, U32, 0, [12:12]
isTriggerError = bits, U32, 0, [13:13]
hasCriticalError = bits, U32, 0, [14:14]
isWarnNow = bits, U32, 0, [15:15]
isPedalError = bits, U32, 0, [16:16]
launchTriggered = bits, U32, 0, [17:17]
isTps2Error = bits, U32, 0, [18:18]
injectorFault = bits, U32, 0, [19:19]
ignitionFault = bits, U32, 0, [20:20]
isUsbConnected = bits, U32, 0, [21:21]
dfcoActive = bits, U32, 0, [22:22]
sd_active_wr = bits, U32, 0, [23:23]
sd_active_rd = bits, U32, 0, [24:24]
isMapValid = bits, U32, 0, [25:25]
triggerPageRefreshFlag = bits, U32, 0, [26:26]
hasFaultReportFile = bits, U32, 0, [27:27]
isAnalogFailure = bits, U32, 0, [28:28]
isTuningNow = bits, U32, 0, [29:29]
sd_formating = bits, U32, 0, [30:30]
isMapAveraging = bits, U32, 0, [31:31]
RPMValue = scalar, U16, 4, "RPM", 1, 0
rpmAcceleration = scalar, S16, 6, "RPM acceleration/Rate of Change/ROC", 1, 0
speedToRpmRatio = scalar, U16, 8, "value", 0.01, 0
internalMcuTemperature = scalar, S08, 10, "deg C", 1, 0
internalVref = scalar, S16, 12, "V", 0.001, 0
coolant = scalar, S16, 14, "deg C", 0.01, 0
intake = scalar, S16, 16, "deg C", 0.01, 0
auxTemp1 = scalar, S16, 18, "deg C", 0.01, 0
auxTemp2 = scalar, S16, 20, "deg C", 0.01, 0
TPSValue = scalar, S16, 22, "%", 0.01, 0
throttlePedalPosition = scalar, S16, 24, "%", 0.01, 0
tpsADC = scalar, U16, 26, "ADC", 1, 0
rawMaf = scalar, U16, 28, "V", 0.001, 0
mafMeasured = scalar, U16, 30, "kg/h", 0.1, 0
MAPValue = scalar, U16, 32, "kPa", 0.03333333333333333, 0
baroPressure = scalar, U16, 34, "kPa", 0.03333333333333333, 0
lambdaValue = scalar, U16, 36, "", 1.0E-4, 0
VBatt = scalar, U16, 38, "V", 0.001, 0
oilPressure = scalar, U16, 40, "kPa", 0.03333333333333333, 0
vvtPositionB1I = scalar, S16, 42, "deg", 0.02, 0
actualLastInjection = scalar, U16, 44, "ms", 0.0033333333333333335, 0
actualLastInjectionRatio = scalar, F32, 48, "", 1, 0
stopEngineCode = scalar, U08, 52, "", 1, 0
injectorDutyCycle = scalar, U08, 53, "%", 0.5, 0
tempLogging1 = scalar, U08, 54, "", 1, 0
injectionOffset = scalar, S16, 56, "deg", 1, 0
engineMakeCodeNameCrc16 = scalar, U16, 58, "crc16", 1, 0
wallFuelAmount = scalar, U16, 60, "mg", 0.01, 0
wallFuelCorrectionValue = scalar, S16, 62, "mg", 0.01, 0
revolutionCounterSinceStart = scalar, U16, 64, "", 1, 0
canReadCounter = scalar, U16, 66, "", 1, 0
tpsAccelFuel = scalar, S16, 68, "ms", 0.0033333333333333335, 0
currentIgnitionMode = scalar, U08, 70, "", 1, 0
currentInjectionMode = scalar, U08, 71, "", 1, 0
coilDutyCycle = scalar, U16, 72, "%", 0.01, 0
etb1DutyCycle = scalar, S16, 74, "%", 0.01, 0
fuelTankLevel = scalar, S16, 76, "%", 0.01, 0
totalFuelConsumption = scalar, U16, 78, "grams", 1, 0
fuelFlowRate = scalar, U16, 80, "gram/s", 0.005, 0
TPS2Value = scalar, S16, 82, "%", 0.01, 0
tuneCrc16 = scalar, U16, 84, "crc16", 1, 0
veValue = scalar, U16, 86, "ratio", 0.1, 0
seconds = scalar, U32, 88, "sec", 1, 0
engineMode = scalar, U32, 92, "em", 1, 0
firmwareVersion = scalar, U32, 96, "version_f", 1, 0
rawIdlePositionSensor = scalar, S16, 100, "V", 0.001, 0
rawWastegatePosition = scalar, S16, 102, "V", 0.001, 0
accelerationLat = scalar, S16, 104, "G", 0.001, 0
accelerationLon = scalar, S16, 106, "G", 0.001, 0
detectedGear = scalar, U08, 108, "", 1, 0
maxTriggerReentrant = scalar, U08, 109, "", 1, 0
rawLowFuelPressure = scalar, S16, 110, "V", 0.001, 0
rawHighFuelPressure = scalar, S16, 112, "V", 0.001, 0
lowFuelPressure = scalar, S16, 114, "kpa", 0.03333333333333333, 0
tcuDesiredGear = scalar, S08, 116, "gear", 1, 0
flexPercent = scalar, U08, 117, "%", 0.5, 0
wastegatePositionSensor = scalar, S16, 118, "%", 0.01, 0
highFuelPressure = scalar, S16, 120, "bar", 0.1, 0
tempLogging3 = scalar, U08, 122, "", 1, 0
tempLogging4 = scalar, U08, 123, "", 1, 0
calibrationValue = scalar, F32, 124, "", 1, 0
calibrationMode = scalar, U08, 128, "", 1, 0
idleStepperTargetPosition = scalar, U08, 129, "", 1, 0
totalTriggerErrorCounter = scalar, U32, 132, "counter", 1, 0
orderingErrorCounter = scalar, U32, 136, "", 1, 0
warningCounter = scalar, U16, 140, "count", 1, 0
lastErrorCode = scalar, U16, 142, "error", 1, 0
recentErrorCode1 = scalar, U16, 144, "error", 1, 0
recentErrorCode2 = scalar, U16, 146, "error", 1, 0
recentErrorCode3 = scalar, U16, 148, "error", 1, 0
recentErrorCode4 = scalar, U16, 150, "error", 1, 0
recentErrorCode5 = scalar, U16, 152, "error", 1, 0
recentErrorCode6 = scalar, U16, 154, "error", 1, 0
recentErrorCode7 = scalar, U16, 156, "error", 1, 0
recentErrorCode8 = scalar, U16, 158, "error", 1, 0
debugFloatField1 = scalar, F32, 160, "val", 1, 0
debugFloatField2 = scalar, F32, 164, "val", 1, 0
debugFloatField3 = scalar, F32, 168, "val", 1, 0
debugFloatField4 = scalar, F32, 172, "val", 1, 0
debugFloatField5 = scalar, F32, 176, "val", 1, 0
debugFloatField6 = scalar, F32, 180, "val", 1, 0
debugFloatField7 = scalar, F32, 184, "val", 1, 0
debugIntField1 = scalar, U32, 188, "val", 1, 0
debugIntField2 = scalar, U32, 192, "val", 1, 0
debugIntField3 = scalar, U32, 196, "val", 1, 0
debugIntField4 = scalar, U32, 200, "val", 1, 0
debugIntField5 = scalar, U32, 204, "val", 1, 0
egt1 = scalar, S16, 208, "deg C", 0.25, 0
egt2 = scalar, S16, 210, "deg C", 0.25, 0
egt3 = scalar, S16, 212, "deg C", 0.25, 0
egt4 = scalar, S16, 214, "deg C", 0.25, 0
egt5 = scalar, S16, 216, "deg C", 0.25, 0
egt6 = scalar, S16, 218, "deg C", 0.25, 0
egt7 = scalar, S16, 220, "deg C", 0.25, 0
egt8 = scalar, S16, 222, "deg C", 0.25, 0
rawTps1Primary = scalar, S16, 224, "V", 0.001, 0
rawClt = scalar, S16, 226, "V", 0.001, 0
rawIat = scalar, S16, 228, "V", 0.001, 0
rawOilPressure = scalar, S16, 230, "V", 0.001, 0
rawAcPressure = scalar, S16, 232, "V", 0.001, 0
rawFuelLevel = scalar, S16, 234, "V", 0.001, 0
rawPpsPrimary = scalar, F32, 236, "V", 1, 0
rawPpsSecondary = scalar, F32, 240, "V", 1, 0
rawRawPpsPrimary = scalar, F32, 244, "V", 1, 0
rawRawPpsSecondary = scalar, F32, 248, "V", 1, 0
idlePositionSensor = scalar, S16, 252, "%", 0.01, 0
AFRValue = scalar, U16, 254, "AFR", 0.001, 0
AFRValue2 = scalar, U16, 256, "AFR", 0.001, 0
SmoothedAFRValue = scalar, U16, 258, "AFR", 0.001, 0
SmoothedAFRValue2 = scalar, U16, 260, "AFR", 0.001, 0
VssAcceleration = scalar, U16, 262, "m/s2", 0.0033333333333333335, 0
lambdaValue2 = scalar, U16, 264, "", 1.0E-4, 0
vvtPositionB1E = scalar, S16, 266, "deg", 0.02, 0
vvtPositionB2I = scalar, S16, 268, "deg", 0.02, 0
vvtPositionB2E = scalar, S16, 270, "deg", 0.02, 0
rawTps1Secondary = scalar, S16, 272, "V", 0.001, 0
rawTps2Primary = scalar, S16, 274, "V", 0.001, 0
rawTps2Secondary = scalar, S16, 276, "V", 0.001, 0
accelerationVert = scalar, S16, 278, "G", 0.001, 0
gyroYaw = scalar, S16, 280, "deg/sec", 0.001, 0
vvtTargets1 = scalar, S08, 282, "deg", 1, 0
vvtTargets2 = scalar, S08, 283, "deg", 1, 0
vvtTargets3 = scalar, S08, 284, "deg", 1, 0
vvtTargets4 = scalar, S08, 285, "deg", 1, 0
turboSpeed = scalar, U16, 286, "hz", 1, 0
ignitionAdvanceCyl1 = scalar, S16, 288, "deg", 0.02, 0
ignitionAdvanceCyl2 = scalar, S16, 290, "deg", 0.02, 0
ignitionAdvanceCyl3 = scalar, S16, 292, "deg", 0.02, 0
ignitionAdvanceCyl4 = scalar, S16, 294, "deg", 0.02, 0
ignitionAdvanceCyl5 = scalar, S16, 296, "deg", 0.02, 0
ignitionAdvanceCyl6 = scalar, S16, 298, "deg", 0.02, 0
ignitionAdvanceCyl7 = scalar, S16, 300, "deg", 0.02, 0
ignitionAdvanceCyl8 = scalar, S16, 302, "deg", 0.02, 0
ignitionAdvanceCyl9 = scalar, S16, 304, "deg", 0.02, 0
ignitionAdvanceCyl10 = scalar, S16, 306, "deg", 0.02, 0
ignitionAdvanceCyl11 = scalar, S16, 308, "deg", 0.02, 0
ignitionAdvanceCyl12 = scalar, S16, 310, "deg", 0.02, 0
tps1Split = scalar, S16, 312, "%", 0.01, 0
tps2Split = scalar, S16, 314, "%", 0.01, 0
tps12Split = scalar, S16, 316, "%", 0.01, 0
accPedalSplit = scalar, S16, 318, "%", 0.01, 0
accPedalUnfiltered = scalar, S16, 320, "%", 0.01, 0
sparkCutReason = scalar, S08, 322, "code", 1, 0
fuelCutReason = scalar, S08, 323, "code", 1, 0
mafEstimate = scalar, U16, 324, "kg/h", 0.1, 0
instantRpm = scalar, U16, 326, "rpm", 1, 0
rawMap = scalar, U16, 328, "V", 0.001, 0
rawMapFast = scalar, U16, 330, "V", 0.001, 0
rawAfr = scalar, U16, 332, "V", 0.001, 0
calibrationValue2 = scalar, F32, 336, "", 1, 0
luaInvocationCounter = scalar, U32, 340, "count", 1, 0
luaLastCycleDuration = scalar, U32, 344, "nt", 1, 0
vssEdgeCounter = scalar, U32, 348, "", 1, 0
issEdgeCounter = scalar, U32, 352, "", 1, 0
auxLinear1 = scalar, F32, 356, "", 1, 0
auxLinear2 = scalar, F32, 360, "", 1, 0
auxLinear3 = scalar, F32, 364, "", 1, 0
auxLinear4 = scalar, F32, 368, "", 1, 0
fallbackMap = scalar, U16, 372, "kPa", 0.1, 0
effectiveMap = scalar, U16, 374, "kPa", 0.1, 0
instantMAPValue = scalar, U16, 376, "kPa", 0.03333333333333333, 0
maxLockedDuration = scalar, U16, 378, "us", 1, 0
canWriteOk = scalar, U16, 380, "", 1, 0
canWriteNotOk = scalar, U16, 382, "", 1, 0
triggerPrimaryFall = scalar, U32, 384, "", 1, 0
triggerPrimaryRise = scalar, U32, 388, "", 1, 0
triggerSecondaryFall = scalar, U32, 392, "", 1, 0
triggerSecondaryRise = scalar, U32, 396, "", 1, 0
starterState = scalar, U08, 400, "", 1, 0
starterRelayDisable = scalar, U08, 401, "", 1, 0
multiSparkCounter = scalar, U08, 402, "", 1, 0
extiOverflowCount = scalar, U08, 403, "", 1, 0
alternatorStatus_pTerm = scalar, F32, 404, "", 1, 0
alternatorStatus_iTerm = scalar, S16, 408, "", 0.01, 0
alternatorStatus_dTerm = scalar, S16, 410, "", 0.01, 0
alternatorStatus_output = scalar, S16, 412, "", 0.01, 0
alternatorStatus_error = scalar, S16, 414, "", 0.01, 0
alternatorStatus_resetCounter = scalar, U32, 416, "", 1, 0
idleStatus_pTerm = scalar, F32, 420, "", 1, 0
idleStatus_iTerm = scalar, S16, 424, "", 0.01, 0
idleStatus_dTerm = scalar, S16, 426, "", 0.01, 0
idleStatus_output = scalar, S16, 428, "", 0.01, 0
idleStatus_error = scalar, S16, 430, "", 0.01, 0
idleStatus_resetCounter = scalar, U32, 432, "", 1, 0
etbStatus_pTerm = scalar, F32, 436, "", 1, 0
etbStatus_iTerm = scalar, S16, 440, "", 0.01, 0
etbStatus_dTerm = scalar, S16, 442, "", 0.01, 0
etbStatus_output = scalar, S16, 444, "", 0.01, 0
etbStatus_error = scalar, S16, 446, "", 0.01, 0
etbStatus_resetCounter = scalar, U32, 448, "", 1, 0
boostStatus_pTerm = scalar, F32, 452, "", 1, 0
boostStatus_iTerm = scalar, S16, 456, "", 0.01, 0
boostStatus_dTerm = scalar, S16, 458, "", 0.01, 0
boostStatus_output = scalar, S16, 460, "", 0.01, 0
boostStatus_error = scalar, S16, 462, "", 0.01, 0
boostStatus_resetCounter = scalar, U32, 464, "", 1, 0
wastegateDcStatus_pTerm = scalar, F32, 468, "", 1, 0
wastegateDcStatus_iTerm = scalar, S16, 472, "", 0.01, 0
wastegateDcStatus_dTerm = scalar, S16, 474, "", 0.01, 0
wastegateDcStatus_output = scalar, S16, 476, "", 0.01, 0
wastegateDcStatus_error = scalar, S16, 478, "", 0.01, 0
wastegateDcStatus_resetCounter = scalar, U32, 480, "", 1, 0
vvtStatus1_pTerm = scalar, F32, 484, "", 1, 0
vvtStatus1_iTerm = scalar, S16, 488, "", 0.01, 0
vvtStatus1_dTerm = scalar, S16, 490, "", 0.01, 0
vvtStatus1_output = scalar, S16, 492, "", 0.01, 0
vvtStatus1_error = scalar, S16, 494, "", 0.01, 0
vvtStatus1_resetCounter = scalar, U32, 496, "", 1, 0
vvtStatus2_pTerm = scalar, F32, 500, "", 1, 0
vvtStatus2_iTerm = scalar, S16, 504, "", 0.01, 0
vvtStatus2_dTerm = scalar, S16, 506, "", 0.01, 0
vvtStatus2_output = scalar, S16, 508, "", 0.01, 0
vvtStatus2_error = scalar, S16, 510, "", 0.01, 0
vvtStatus2_resetCounter = scalar, U32, 512, "", 1, 0
vvtStatus3_pTerm = scalar, F32, 516, "", 1, 0
vvtStatus3_iTerm = scalar, S16, 520, "", 0.01, 0
vvtStatus3_dTerm = scalar, S16, 522, "", 0.01, 0
vvtStatus3_output = scalar, S16, 524, "", 0.01, 0
vvtStatus3_error = scalar, S16, 526, "", 0.01, 0
vvtStatus3_resetCounter = scalar, U32, 528, "", 1, 0
vvtStatus4_pTerm = scalar, F32, 532, "", 1, 0
vvtStatus4_iTerm = scalar, S16, 536, "", 0.01, 0
vvtStatus4_dTerm = scalar, S16, 538, "", 0.01, 0
vvtStatus4_output = scalar, S16, 540, "", 0.01, 0
vvtStatus4_error = scalar, S16, 542, "", 0.01, 0
vvtStatus4_resetCounter = scalar, U32, 544, "", 1, 0
auxSpeed1 = scalar, U16, 548, "s", 1, 0
auxSpeed2 = scalar, U16, 550, "s", 1, 0
ISSValue = scalar, U16, 552, "RPM", 1, 0
rawAnalogInput1 = scalar, S16, 554, "V", 0.001, 0
rawAnalogInput2 = scalar, S16, 556, "V", 0.001, 0
rawAnalogInput3 = scalar, S16, 558, "V", 0.001, 0
rawAnalogInput4 = scalar, S16, 560, "V", 0.001, 0
rawAnalogInput5 = scalar, S16, 562, "V", 0.001, 0
rawAnalogInput6 = scalar, S16, 564, "V", 0.001, 0
rawAnalogInput7 = scalar, S16, 566, "V", 0.001, 0
rawAnalogInput8 = scalar, S16, 568, "V", 0.001, 0
gppwmOutput1 = scalar, U08, 570, "%", 0.5, 0
gppwmOutput2 = scalar, U08, 571, "%", 0.5, 0
gppwmOutput3 = scalar, U08, 572, "%", 0.5, 0
gppwmOutput4 = scalar, U08, 573, "%", 0.5, 0
gppwmXAxis1 = scalar, S16, 574, "", 1, 0
gppwmXAxis2 = scalar, S16, 576, "", 1, 0
gppwmXAxis3 = scalar, S16, 578, "", 1, 0
gppwmXAxis4 = scalar, S16, 580, "", 1, 0
gppwmYAxis1 = scalar, S16, 582, "", 0.1, 0
gppwmYAxis2 = scalar, S16, 584, "", 0.1, 0
gppwmYAxis3 = scalar, S16, 586, "", 0.1, 0
gppwmYAxis4 = scalar, S16, 588, "", 0.1, 0
rawBattery = scalar, S16, 590, "V", 0.001, 0
ignBlendParameter1 = scalar, S16, 592, "", 0.1, 0
ignBlendParameter2 = scalar, S16, 594, "", 0.1, 0
ignBlendParameter3 = scalar, S16, 596, "", 0.1, 0
ignBlendParameter4 = scalar, S16, 598, "", 0.1, 0
ignBlendBias1 = scalar, U08, 600, "%", 0.5, 0
ignBlendBias2 = scalar, U08, 601, "%", 0.5, 0
ignBlendBias3 = scalar, U08, 602, "%", 0.5, 0
ignBlendBias4 = scalar, U08, 603, "%", 0.5, 0
ignBlendOutput1 = scalar, S16, 604, "deg", 0.01, 0
ignBlendOutput2 = scalar, S16, 606, "deg", 0.01, 0
ignBlendOutput3 = scalar, S16, 608, "deg", 0.01, 0
ignBlendOutput4 = scalar, S16, 610, "deg", 0.01, 0
ignBlendYAxis1 = scalar, S16, 612, "", 0.1, 0
ignBlendYAxis2 = scalar, S16, 614, "", 0.1, 0
ignBlendYAxis3 = scalar, S16, 616, "", 0.1, 0
ignBlendYAxis4 = scalar, S16, 618, "", 0.1, 0
veBlendParameter1 = scalar, S16, 620, "", 0.1, 0
veBlendParameter2 = scalar, S16, 622, "", 0.1, 0
veBlendParameter3 = scalar, S16, 624, "", 0.1, 0
veBlendParameter4 = scalar, S16, 626, "", 0.1, 0
veBlendBias1 = scalar, U08, 628, "%", 0.5, 0
veBlendBias2 = scalar, U08, 629, "%", 0.5, 0
veBlendBias3 = scalar, U08, 630, "%", 0.5, 0
veBlendBias4 = scalar, U08, 631, "%", 0.5, 0
veBlendOutput1 = scalar, S16, 632, "%", 0.01, 0
veBlendOutput2 = scalar, S16, 634, "%", 0.01, 0
veBlendOutput3 = scalar, S16, 636, "%", 0.01, 0
veBlendOutput4 = scalar, S16, 638, "%", 0.01, 0
veBlendYAxis1 = scalar, S16, 640, "", 0.1, 0
veBlendYAxis2 = scalar, S16, 642, "", 0.1, 0
veBlendYAxis3 = scalar, S16, 644, "", 0.1, 0
veBlendYAxis4 = scalar, S16, 646, "", 0.1, 0
boostOpenLoopBlendParameter1 = scalar, S16, 648, "", 0.1, 0
boostOpenLoopBlendParameter2 = scalar, S16, 650, "", 0.1, 0
boostOpenLoopBlendBias1 = scalar, U08, 652, "%", 0.5, 0
boostOpenLoopBlendBias2 = scalar, U08, 653, "%", 0.5, 0
boostOpenLoopBlendOutput1 = scalar, S08, 654, "%", 1, 0
boostOpenLoopBlendOutput2 = scalar, S08, 655, "%", 1, 0
boostOpenLoopBlendYAxis1 = scalar, S16, 656, "", 0.1, 0
boostOpenLoopBlendYAxis2 = scalar, S16, 658, "", 0.1, 0
boostClosedLoopBlendParameter1 = scalar, S16, 660, "", 0.1, 0
boostClosedLoopBlendParameter2 = scalar, S16, 662, "", 0.1, 0
boostClosedLoopBlendBias1 = scalar, U08, 664, "%", 0.5, 0
boostClosedLoopBlendBias2 = scalar, U08, 665, "%", 0.5, 0
boostClosedLoopBlendOutput1 = scalar, S16, 666, "%", 0.1, 0
boostClosedLoopBlendOutput2 = scalar, S16, 668, "%", 0.1, 0
boostClosedLoopBlendYAxis1 = scalar, S16, 670, "", 0.1, 0
boostClosedLoopBlendYAxis2 = scalar, S16, 672, "", 0.1, 0
targetAfrBlendParameter1 = scalar, S16, 674, "", 0.1, 0
targetAfrBlendParameter2 = scalar, S16, 676, "", 0.1, 0
targetAfrBlendBias1 = scalar, U08, 678, "%", 0.5, 0
targetAfrBlendBias2 = scalar, U08, 679, "%", 0.5, 0
targetAfrBlendOutput1 = scalar, S16, 680, "%", 0.1, 0
targetAfrBlendOutput2 = scalar, S16, 682, "%", 0.1, 0
targetAfrBlendYAxis1 = scalar, S16, 684, "", 0.1, 0
targetAfrBlendYAxis2 = scalar, S16, 686, "", 0.1, 0
coilState1 = bits, U32, 688, [0:0]
coilState2 = bits, U32, 688, [1:1]
coilState3 = bits, U32, 688, [2:2]
coilState4 = bits, U32, 688, [3:3]
coilState5 = bits, U32, 688, [4:4]
coilState6 = bits, U32, 688, [5:5]
coilState7 = bits, U32, 688, [6:6]
coilState8 = bits, U32, 688, [7:7]
coilState9 = bits, U32, 688, [8:8]
coilState10 = bits, U32, 688, [9:9]
coilState11 = bits, U32, 688, [10:10]
coilState12 = bits, U32, 688, [11:11]
injectorState1 = bits, U32, 688, [12:12]
injectorState2 = bits, U32, 688, [13:13]
injectorState3 = bits, U32, 688, [14:14]
injectorState4 = bits, U32, 688, [15:15]
injectorState5 = bits, U32, 688, [16:16]
injectorState6 = bits, U32, 688, [17:17]
injectorState7 = bits, U32, 688, [18:18]
injectorState8 = bits, U32, 688, [19:19]
injectorState9 = bits, U32, 688, [20:20]
injectorState10 = bits, U32, 688, [21:21]
injectorState11 = bits, U32, 688, [22:22]
injectorState12 = bits, U32, 688, [23:23]
triggerChannel1 = bits, U32, 688, [24:24]
triggerChannel2 = bits, U32, 688, [25:25]
vvtChannel1 = bits, U32, 688, [26:26]
vvtChannel2 = bits, U32, 688, [27:27]
vvtChannel3 = bits, U32, 688, [28:28]
vvtChannel4 = bits, U32, 688, [29:29]
isMapPredictionActive = bits, U32, 688, [30:30]
outputRequestPeriod = scalar, U32, 692, "", 1, 0
mapFast = scalar, F32, 696, "", 1, 0
luaGauges1 = scalar, F32, 700, "value", 1, 0
luaGauges2 = scalar, F32, 704, "value", 1, 0
luaGauges3 = scalar, F32, 708, "value", 1, 0
luaGauges4 = scalar, F32, 712, "value", 1, 0
luaGauges5 = scalar, F32, 716, "value", 1, 0
luaGauges6 = scalar, F32, 720, "value", 1, 0
luaGauges7 = scalar, F32, 724, "value", 1, 0
luaGauges8 = scalar, F32, 728, "value", 1, 0
rawMaf2 = scalar, U16, 732, "V", 0.001, 0
mafMeasured2 = scalar, U16, 734, "kg/h", 0.1, 0
schedulingUsedCount = scalar, U16, 736, "", 1,0
vehicleSpeedKph = scalar, U16, 738, "kph", 0.01, 0
Gego = scalar, U16, 740, "%", 0.01,0
testBenchIter = scalar, U16, 742, "count", 1, 0
oilTemp = scalar, S16, 744, "deg C", 0.01, 0
fuelTemp = scalar, S16, 746, "deg C", 0.01, 0
ambientTemp = scalar, S16, 748, "deg C", 0.01, 0
compressorDischargeTemp = scalar, S16, 750, "deg C", 0.01, 0
compressorDischargePressure = scalar, U16, 752, "kPa", 0.03333333333333333, 0
throttleInletPressure = scalar, U16, 754, "kPa", 0.03333333333333333, 0
ignitionOnTime = scalar, U16, 756, "sec", 1,0
engineRunTime = scalar, U16, 758, "sec", 1,0
distanceTraveled = scalar, U16, 760, "km", 0.1,0
afrGasolineScale = scalar, U16, 762, "AFR", 0.001, 0
afr2GasolineScale = scalar, U16, 764, "AFR", 0.001, 0
wheelSlipRatio = scalar, F32, 768, "", 1, 0
ignitorDiagnostic1 = scalar, U08, 772, "", 1, 0
ignitorDiagnostic2 = scalar, U08, 773, "", 1, 0
ignitorDiagnostic3 = scalar, U08, 774, "", 1, 0
ignitorDiagnostic4 = scalar, U08, 775, "", 1, 0
ignitorDiagnostic5 = scalar, U08, 776, "", 1, 0
ignitorDiagnostic6 = scalar, U08, 777, "", 1, 0
ignitorDiagnostic7 = scalar, U08, 778, "", 1, 0
ignitorDiagnostic8 = scalar, U08, 779, "", 1, 0
ignitorDiagnostic9 = scalar, U08, 780, "", 1, 0
ignitorDiagnostic10 = scalar, U08, 781, "", 1, 0
ignitorDiagnostic11 = scalar, U08, 782, "", 1, 0
ignitorDiagnostic12 = scalar, U08, 783, "", 1, 0
injectorDiagnostic1 = scalar, U08, 784, "", 1, 0
injectorDiagnostic2 = scalar, U08, 785, "", 1, 0
injectorDiagnostic3 = scalar, U08, 786, "", 1, 0
injectorDiagnostic4 = scalar, U08, 787, "", 1, 0
injectorDiagnostic5 = scalar, U08, 788, "", 1, 0
injectorDiagnostic6 = scalar, U08, 789, "", 1, 0
injectorDiagnostic7 = scalar, U08, 790, "", 1, 0
injectorDiagnostic8 = scalar, U08, 791, "", 1, 0
injectorDiagnostic9 = scalar, U08, 792, "", 1, 0
injectorDiagnostic10 = scalar, U08, 793, "", 1, 0
injectorDiagnostic11 = scalar, U08, 794, "", 1, 0
injectorDiagnostic12 = scalar, U08, 795, "", 1, 0
actualLastInjectionStage2 = scalar, U16, 796, "ms", 0.0033333333333333335, 0
actualLastInjectionRatioStage2 = scalar, F32, 800, "", 1, 0
injectorDutyCycleStage2 = scalar, U08, 804, "%", 0.5, 0
rawFlexFreq = scalar, U08, 805, "", 1, 0
canReWidebandCmdStatus = scalar, U08, 806, "", 1, 0
deviceUid = scalar, U08, 807, "", 1, 0
mc33810spiErrorCounter = scalar, U16, 808, "", 1, 0
injectionPrimingCounter = scalar, U08, 810, "", 1, 0
tempLogging2 = scalar, U08, 811, "", 1, 0
acPressure = scalar, F32, 812, "kPa", 1, 0
rawAuxAnalog1 = scalar, S16, 816, "V", 0.001, 0
rawAuxAnalog2 = scalar, S16, 818, "V", 0.001, 0
rawAuxAnalog3 = scalar, S16, 820, "V", 0.001, 0
rawAuxAnalog4 = scalar, S16, 822, "V", 0.001, 0
fastAdcErrorCount = scalar, U08, 824, "", 1, 0
slowAdcErrorCount = scalar, U08, 825, "", 1, 0
rawAuxTemp1 = scalar, S16, 826, "V", 0.001, 0
rawAuxTemp2 = scalar, S16, 828, "V", 0.001, 0
rawAmbientTemp = scalar, S16, 830, "V", 0.001, 0
rtcUnixEpochTime = scalar, U32, 832, "", 1, 0
sparkCutReasonBlinker = scalar, S08, 836, "", 1, 0
fuelCutReasonBlinker = scalar, S08, 837, "", 1, 0
hp = scalar, S16, 838, "", 1, 0
torque = scalar, S16, 840, "", 1, 0
throttlePressureRatio = scalar, F32, 844, "", 1, 0
throttleEffectiveAreaOpening = scalar, F32, 848, "", 1, 0
mcuSerial = scalar, U32, 852, "", 1, 0
sd_error = scalar, U08, 856, "", 1, 0
fastAdcOverrunCount = scalar, U08, 857, "", 1, 0
slowAdcOverrunCount = scalar, U08, 858, "", 1, 0
fastAdcLastError = scalar, U08, 859, "", 1, 0
fastAdcPeriod = scalar, U16, 860, "ticks", 1, 0
fastAdcConversionCount = scalar, U16, 862, "N", 1, 0
canReWidebandVersion = scalar, U08, 864, "", 1, 0
canReWidebandFwDay = scalar, U08, 865, "", 1, 0
canReWidebandFwMon = scalar, U08, 866, "", 1, 0
canReWidebandFwYear = scalar, U08, 867, "", 1, 0
transitionEventCode = scalar, U16, 868, "", 1, 0
transitionEventsCounter = scalar, U16, 870, "", 1, 0
mapPerCylinder1 = scalar, U08, 872, "kPa", 1, 0
mapPerCylinder2 = scalar, U08, 873, "kPa", 1, 0
mapPerCylinder3 = scalar, U08, 874, "kPa", 1, 0
mapPerCylinder4 = scalar, U08, 875, "kPa", 1, 0
mapPerCylinder5 = scalar, U08, 876, "kPa", 1, 0
mapPerCylinder6 = scalar, U08, 877, "kPa", 1, 0
mapPerCylinder7 = scalar, U08, 878, "kPa", 1, 0
mapPerCylinder8 = scalar, U08, 879, "kPa", 1, 0
mapPerCylinder9 = scalar, U08, 880, "kPa", 1, 0
mapPerCylinder10 = scalar, U08, 881, "kPa", 1, 0
mapPerCylinder11 = scalar, U08, 882, "kPa", 1, 0
mapPerCylinder12 = scalar, U08, 883, "kPa", 1, 0
; total TS size = 884
totalFuelCorrection = scalar, F32, 884, "mult", 1,0
running_postCrankingFuelCorrection = scalar, F32, 888, "", 1, 0
running_intakeTemperatureCoefficient = scalar, F32, 892, "", 1, 0
running_coolantTemperatureCoefficient = scalar, F32, 896, "", 1, 0
running_timeSinceCrankingInSecs = scalar, F32, 900, "secs", 1,0
running_baseFuel = scalar, U16, 904, "mg", 0.01, 0
running_fuel = scalar, U16, 906, "mg", 0.01, 0
afrTableYAxis = scalar, U16, 908, "%", 0.01,0
targetLambda = scalar, U16, 910, "", 1.0E-4,0
targetAFR = scalar, U16, 912, "ratio", 0.001,0
stoichiometricRatio = scalar, U16, 914, "ratio", 0.001, 0
sdTcharge_coff = scalar, F32, 916, "", 1, 0
sdAirMassInOneCylinder = scalar, F32, 920, "g", 1, 0
normalizedCylinderFilling = scalar, F32, 924, "%", 1, 0
brokenInjector = scalar, U08, 928, "", 1, 0
unused88 = scalar, U08, 929, "", 1, 0
idealEngineTorque = scalar, U16, 930, "", 1, 0
injectorHwIssue = bits, U32, 932, [0:0]
; total TS size = 936
baseDwell = scalar, F32, 936, "ms", 1,0
sparkDwell = scalar, F32, 940, "ms", 1,0
dwellDurationAngle = scalar, F32, 944, "deg", 1,0
cltTimingCorrection = scalar, S16, 948, "deg", 0.01,0
timingIatCorrection = scalar, S16, 950, "deg", 0.01,0
timingPidCorrection = scalar, S16, 952, "deg", 0.01,0
dfcoTimingRetard = scalar, S16, 954, "deg", 0.01, 0
baseIgnitionAdvance = scalar, S16, 956, "deg", 0.02, 0
correctedIgnitionAdvance = scalar, S16, 958, "deg", 0.02, 0
tractionAdvanceDrop = scalar, S16, 960, "deg", 0.02, 0
dwellVoltageCorrection = scalar, F32, 964, "", 1, 0
luaTimingAdd = scalar, F32, 968, "deg", 1, 0
luaTimingMult = scalar, F32, 972, "deg", 1, 0
luaIgnitionSkip = bits, U32, 976, [0:0]
trailingSparkAngle = scalar, S16, 980, "deg", 0.01,0
rpmForIgnitionTableDot = scalar, S16, 982, "", 1, 0
rpmForIgnitionIdleTableDot = scalar, S16, 984, "", 1, 0
loadForIgnitionTableDot = scalar, F32, 988, "", 1, 0
; total TS size = 992
m_knockLevel = scalar, F32, 992, "Volts", 1, 0
m_knockCyl1 = scalar, S08, 996, "dBv", 1, 0
m_knockCyl2 = scalar, S08, 997, "dBv", 1, 0
m_knockCyl3 = scalar, S08, 998, "dBv", 1, 0
m_knockCyl4 = scalar, S08, 999, "dBv", 1, 0
m_knockCyl5 = scalar, S08, 1000, "dBv", 1, 0
m_knockCyl6 = scalar, S08, 1001, "dBv", 1, 0
m_knockCyl7 = scalar, S08, 1002, "dBv", 1, 0
m_knockCyl8 = scalar, S08, 1003, "dBv", 1, 0
m_knockCyl9 = scalar, S08, 1004, "dBv", 1, 0
m_knockCyl10 = scalar, S08, 1005, "dBv", 1, 0
m_knockCyl11 = scalar, S08, 1006, "dBv", 1, 0
m_knockCyl12 = scalar, S08, 1007, "dBv", 1, 0
m_knockRetard = scalar, F32, 1008, "deg", 1,0
m_knockThreshold = scalar, F32, 1012, "", 1, 0
m_knockCount = scalar, U32, 1016, "", 1, 0
m_maximumRetard = scalar, F32, 1020, "", 1, 0
m_knockSpectrum1 = scalar, U32, 1024, "compressed data", 1, 0
m_knockSpectrum2 = scalar, U32, 1028, "compressed data", 1, 0
m_knockSpectrum3 = scalar, U32, 1032, "compressed data", 1, 0
m_knockSpectrum4 = scalar, U32, 1036, "compressed data", 1, 0
m_knockSpectrum5 = scalar, U32, 1040, "compressed data", 1, 0
m_knockSpectrum6 = scalar, U32, 1044, "compressed data", 1, 0
m_knockSpectrum7 = scalar, U32, 1048, "compressed data", 1, 0
m_knockSpectrum8 = scalar, U32, 1052, "compressed data", 1, 0
m_knockSpectrum9 = scalar, U32, 1056, "compressed data", 1, 0
m_knockSpectrum10 = scalar, U32, 1060, "compressed data", 1, 0
m_knockSpectrum11 = scalar, U32, 1064, "compressed data", 1, 0
m_knockSpectrum12 = scalar, U32, 1068, "compressed data", 1, 0
m_knockSpectrum13 = scalar, U32, 1072, "compressed data", 1, 0
m_knockSpectrum14 = scalar, U32, 1076, "compressed data", 1, 0
m_knockSpectrum15 = scalar, U32, 1080, "compressed data", 1, 0
m_knockSpectrum16 = scalar, U32, 1084, "compressed data", 1, 0
m_knockSpectrumChannelCyl = scalar, U16, 1088, "compressed N + N", 1, 0
m_knockFrequencyStart = scalar, U16, 1090, "Hz", 1, 0
m_knockFrequencyStep = scalar, F32, 1092, "Hz", 1, 0
m_knockFuelTrimMultiplier = scalar, F32, 1096, "multiplier", 1, 0
; total TS size = 1100
m_isPriming = bits, U32, 1100, [0:0]
; total TS size = 1104
tcuCurrentGear = scalar, S08, 1104, "gear", 1, 0
tcRatio = scalar, U16, 1106, "value", 0.01, 0
lastShiftTime = scalar, F32, 1108, "", 1, 0
tcu_currentRange = scalar, U08, 1112, "", 1, 0
pressureControlDuty = scalar, S08, 1113, "%", 1,0
torqueConverterDuty = scalar, S08, 1114, "%", 1,0
isShifting = bits, U32, 1116, [0:0]
; total TS size = 1120
throttleUseWotModel = bits, U32, 1120, [0:0]
throttleModelCrossoverAngle = scalar, S16, 1124, "%", 0.01, 0
throttleEstimatedFlow = scalar, F32, 1128, "g/s", 1, 0
; total TS size = 1132
m_requested_pump = scalar, F32, 1132, "", 1, 0
fuel_requested_percent = scalar, F32, 1136, "%", 1, 0
fuel_requested_percent_pi = scalar, F32, 1140, "", 1, 0
noValve = bits, U32, 1144, [0:0]
angleAboveMin = bits, U32, 1144, [1:1]
isHpfpActive = bits, U32, 1144, [2:2]
HpfpValveState = bits, U32, 1144, [3:3]
m_pressureTarget_kPa = scalar, F32, 1148, "", 1, 0
hpfp_p_control_percent = scalar, F32, 1152, "", 1, 0
hpfp_i_control_percent = scalar, F32, 1156, "", 1, 0
nextLobe = scalar, F32, 1160, "", 1, 0
di_nextStart = scalar, F32, 1164, "v", 1, 0
HpfdActivationPhase = scalar, F32, 1168, "", 1, 0
HpfdDeactivationPhase = scalar, F32, 1172, "", 1, 0
; total TS size = 1176
m_deadtime = scalar, F32, 1176, "ms", 1, 0
pressureDelta = scalar, F32, 1180, "kPa", 1, 0
pressureRatio = scalar, F32, 1184, "", 1, 0
pressureCorrectionReference = scalar, F32, 1188, "kPa", 1, 0
; total TS size = 1192
retardThresholdRpm = scalar, S32, 1192, "", 1, 0
launchActivatePinState = bits, U32, 1196, [0:0]
isPreLaunchCondition = bits, U32, 1196, [1:1]
isLaunchCondition = bits, U32, 1196, [2:2]
isSwitchActivated = bits, U32, 1196, [3:3]
isClutchActivated = bits, U32, 1196, [4:4]
isBrakePedalActivated = bits, U32, 1196, [5:5]
isValidInputPin = bits, U32, 1196, [6:6]
activateSwitchCondition = bits, U32, 1196, [7:7]
rpmLaunchCondition = bits, U32, 1196, [8:8]
rpmPreLaunchCondition = bits, U32, 1196, [9:9]
speedCondition = bits, U32, 1196, [10:10]
tpsCondition = bits, U32, 1196, [11:11]
luaLaunchState = bits, U32, 1196, [12:12]
; total TS size = 1200
isTorqueReductionTriggerPinValid = bits, U32, 1200, [0:0]
torqueReductionTriggerPinState = bits, U32, 1200, [1:1]
isTimeConditionSatisfied = bits, U32, 1200, [2:2]
isRpmConditionSatisfied = bits, U32, 1200, [3:3]
isAppConditionSatisfied = bits, U32, 1200, [4:4]
isFlatShiftConditionSatisfied = bits, U32, 1200, [5:5]
isBelowTemperatureThreshold = bits, U32, 1200, [6:6]
; total TS size = 1204
isAntilagCondition = bits, U32, 1204, [0:0]
ALSMinRPMCondition = bits, U32, 1204, [1:1]
ALSMaxRPMCondition = bits, U32, 1204, [2:2]
ALSMinCLTCondition = bits, U32, 1204, [3:3]
ALSMaxCLTCondition = bits, U32, 1204, [4:4]
ALSMaxThrottleIntentCondition = bits, U32, 1204, [5:5]
isALSSwitchActivated = bits, U32, 1204, [6:6]
ALSActivatePinState = bits, U32, 1204, [7:7]
ALSSwitchCondition = bits, U32, 1204, [8:8]
ALSTimerCondition = bits, U32, 1204, [9:9]
luaAntilagState = bits, U32, 1204, [10:10]
fuelALSCorrection = scalar, F32, 1208, "", 1, 0
timingALSCorrection = scalar, S16, 1212, "deg", 0.01, 0
timingALSSkip = scalar, S16, 1214, "deg", 0.01, 0
; total TS size = 1216
isTpsInvalid = bits, U32, 1216, [0:0]
m_shouldResetPid = bits, U32, 1216, [1:1]
isBelowClosedLoopThreshold = bits, U32, 1216, [2:2]
isNotClosedLoop = bits, U32, 1216, [3:3]
isZeroRpm = bits, U32, 1216, [4:4]
hasInitBoost = bits, U32, 1216, [5:5]
rpmTooLow = bits, U32, 1216, [6:6]
tpsTooLow = bits, U32, 1216, [7:7]
mapTooLow = bits, U32, 1216, [8:8]
isPlantValid = bits, U32, 1216, [9:9]
isBoostControlled = bits, U32, 1216, [10:10]
luaTargetAdd = scalar, S16, 1220, "percent", 0.5,0
luaTargetMult = scalar, F32, 1224, "", 1,0
boostControlTarget = scalar, S16, 1228, "kPa", 0.03333333333333333,0
openLoopPart = scalar, F32, 1232, "percent", 1,0
openLoopYAxis = scalar, S16, 1236, "", 0.1, 0
luaOpenLoopAdd = scalar, F32, 1240, "percent", 1,0
boostControllerClosedLoopPart = scalar, S08, 1244, "%", 0.5,0
boostOutput = scalar, S16, 1246, "percent", 0.01,0
; total TS size = 1248
acButtonState = scalar, S08, 1248, "", 1, 0
m_acEnabled = bits, U32, 1252, [0:0]
engineTooSlow = bits, U32, 1252, [1:1]
engineTooFast = bits, U32, 1252, [2:2]
noClt = bits, U32, 1252, [3:3]
engineTooHot = bits, U32, 1252, [4:4]
tpsTooHigh = bits, U32, 1252, [5:5]
isDisabledByLua = bits, U32, 1252, [6:6]
acCompressorState = bits, U32, 1252, [7:7]
acPressureTooLow = bits, U32, 1252, [8:8]
acPressureTooHigh = bits, U32, 1252, [9:9]
; total TS size = 1256
isNitrousArmed = bits, U32, 1256, [0:0]
isNitrousSpeedCondition = bits, U32, 1256, [1:1]
isNitrousTpsCondition = bits, U32, 1256, [2:2]
isNitrousCltCondition = bits, U32, 1256, [3:3]
isNitrousMapCondition = bits, U32, 1256, [4:4]
isNitrousAfrCondition = bits, U32, 1256, [5:5]
isNitrousRpmCondition = bits, U32, 1256, [6:6]
isNitrousCondition = bits, U32, 1256, [7:7]
; total TS size = 1260
fan1cranking = bits, U32, 1260, [0:0]
fan1notRunning = bits, U32, 1260, [1:1]
fan1disabledWhileEngineStopped = bits, U32, 1260, [2:2]
fan1brokenClt = bits, U32, 1260, [3:3]
fan1enabledForAc = bits, U32, 1260, [4:4]
fan1hot = bits, U32, 1260, [5:5]
fan1cold = bits, U32, 1260, [6:6]
fan1disabledBySpeed = bits, U32, 1260, [7:7]
fan1m_state = bits, U32, 1260, [8:8]
fan1radiatorFanStatus = scalar, U08, 1264, "", 1, 0
; total TS size = 1268
fan2cranking = bits, U32, 1268, [0:0]
fan2notRunning = bits, U32, 1268, [1:1]
fan2disabledWhileEngineStopped = bits, U32, 1268, [2:2]
fan2brokenClt = bits, U32, 1268, [3:3]
fan2enabledForAc = bits, U32, 1268, [4:4]
fan2hot = bits, U32, 1268, [5:5]
fan2cold = bits, U32, 1268, [6:6]
fan2disabledBySpeed = bits, U32, 1268, [7:7]
fan2m_state = bits, U32, 1268, [8:8]
fan2radiatorFanStatus = scalar, U08, 1272, "", 1, 0
; total TS size = 1276
isPrime = bits, U32, 1276, [0:0]
engineTurnedRecently = bits, U32, 1276, [1:1]
isFuelPumpOn = bits, U32, 1276, [2:2]
ignitionOn = bits, U32, 1276, [3:3]
; total TS size = 1280
isBenchTest = bits, U32, 1280, [0:0]
hasIgnitionVoltage = bits, U32, 1280, [1:1]
mainRelayState = bits, U32, 1280, [2:2]
delayedShutoffRequested = bits, U32, 1280, [3:3]
; total TS size = 1284
injectionMass1 = scalar, F32, 1284, "", 1, 0
injectionMass2 = scalar, F32, 1288, "", 1, 0
injectionMass3 = scalar, F32, 1292, "", 1, 0
injectionMass4 = scalar, F32, 1296, "", 1, 0
injectionMass5 = scalar, F32, 1300, "", 1, 0
injectionMass6 = scalar, F32, 1304, "", 1, 0
injectionMass7 = scalar, F32, 1308, "", 1, 0
injectionMass8 = scalar, F32, 1312, "", 1, 0
injectionMass9 = scalar, F32, 1316, "", 1, 0
injectionMass10 = scalar, F32, 1320, "", 1, 0
injectionMass11 = scalar, F32, 1324, "", 1, 0
injectionMass12 = scalar, F32, 1328, "", 1, 0
lua_fuelAdd = scalar, F32, 1332, "g", 1, 0
lua_fuelMult = scalar, F32, 1336, "", 1, 0
lua_clutchUpState = bits, U32, 1340, [0:0]
lua_brakePedalState = bits, U32, 1340, [1:1]
lua_acRequestState = bits, U32, 1340, [2:2]
lua_luaDisableEtb = bits, U32, 1340, [3:3]
lua_luaIgnCut = bits, U32, 1340, [4:4]
lua_luaFuelCut = bits, U32, 1340, [5:5]
lua_clutchDownState = bits, U32, 1340, [6:6]
lua_disableDecelerationFuelCutOff = bits, U32, 1340, [7:7]
lua_torqueReductionState = bits, U32, 1340, [8:8]
sd_tCharge = scalar, S16, 1344, "deg C", 0.01, 0
sd_tChargeK = scalar, F32, 1348, "", 1, 0
crankingFuel_coolantTemperatureCoefficient = scalar, F32, 1352, "", 1, 0
crankingFuel_tpsCoefficient = scalar, F32, 1356, "", 1, 0
crankingFuel_baseFuel = scalar, U16, 1360, "mg", 0.01, 0
crankingFuel_fuel = scalar, U16, 1362, "mg", 0.01, 0
baroCorrection = scalar, F32, 1364, "", 1, 0
hellenBoardId = scalar, S16, 1368, "id", 1, 0
clutchUpState = scalar, S08, 1370, "", 1, 0
brakePedalState = scalar, S08, 1371, "", 1, 0
startStopState = scalar, S08, 1372, "", 1, 0
smartChipState = scalar, S08, 1373, "", 1, 0
smartChipRestartCounter = scalar, S08, 1374, "", 1, 0
smartChipAliveCounter = scalar, S08, 1375, "", 1, 0
startStopPhysicalState = bits, U32, 1376, [0:0]
acrActive = bits, U32, 1376, [1:1]
acrEngineMovedRecently = bits, U32, 1376, [2:2]
heaterControlEnabled = bits, U32, 1376, [3:3]
luaDigitalState0 = bits, U32, 1376, [4:4]
luaDigitalState1 = bits, U32, 1376, [5:5]
luaDigitalState2 = bits, U32, 1376, [6:6]
luaDigitalState3 = bits, U32, 1376, [7:7]
clutchDownState = bits, U32, 1376, [8:8]
startStopStateToggleCounter = scalar, U32, 1380, "", 1, 0
currentVe = scalar, F32, 1384, "", 1, 0
luaSoftSparkSkip = scalar, F32, 1388, "", 1, 0
luaHardSparkSkip = scalar, F32, 1392, "", 1, 0
tractionControlSparkSkip = scalar, F32, 1396, "", 1, 0
fuelInjectionCounter = scalar, U32, 1400, "", 1, 0
globalSparkCounter = scalar, U32, 1404, "", 1, 0
fuelingLoad = scalar, F32, 1408, "", 1, 0
ignitionLoad = scalar, F32, 1412, "", 1, 0
veTableYAxis = scalar, U16, 1416, "%", 0.01, 0
veTableIdleYAxis = scalar, S16, 1418, "", 0.1, 0
overDwellCanceledCounter = scalar, U08, 1420, "", 1, 0
overDwellNotScheduledCounter = scalar, U08, 1421, "", 1, 0
sparkOutOfOrderCounter = scalar, U08, 1422, "", 1, 0
dwellUnderChargeCounter = scalar, U08, 1423, "", 1, 0
dwellOverChargeCounter = scalar, U08, 1424, "", 1, 0
dwellActualRatio = scalar, F32, 1428, "%", 100.0, -1.0
stftCorrection1 = scalar, F32, 1432,  "%", 100.0, -1.0
stftCorrection2 = scalar, F32, 1436,  "%", 100.0, -1.0
; total TS size = 1440
tpsFrom = scalar, F32, 1440
tpsTo = scalar, F32, 1444
deltaTps = scalar, F32, 1448
extraFuel = scalar, F32, 1452, "", 1, 0
valueFromTable = scalar, F32, 1456, "", 1, 0
isAboveAccelThreshold = bits, U32, 1460, [0:0]
isBelowDecelThreshold = bits, U32, 1460, [1:1]
isTimeToResetAccumulator = bits, U32, 1460, [2:2]
isFractionalEnrichment = bits, U32, 1460, [3:3]
belowEpsilon = bits, U32, 1460, [4:4]
tooShort = bits, U32, 1460, [5:5]
fractionalInjFuel = scalar, F32, 1464, "", 1, 0
accumulatedValue = scalar, F32, 1468, "", 1, 0
maxExtraPerCycle = scalar, F32, 1472, "", 1, 0
maxExtraPerPeriod = scalar, F32, 1476, "", 1, 0
maxInjectedPerPeriod = scalar, F32, 1480, "", 1, 0
cycleCnt = scalar, S32, 1484, "", 1, 0
; total TS size = 1488
hwEventCounters1 = scalar, U16, 1488, "", 1, 0
hwEventCounters2 = scalar, U16, 1490, "", 1, 0
hwEventCounters3 = scalar, U16, 1492, "", 1, 0
hwEventCounters4 = scalar, U16, 1494, "", 1, 0
vvtEventRiseCounter1 = scalar, U16, 1496, "", 1, 0
vvtEventRiseCounter2 = scalar, U16, 1498, "", 1, 0
vvtEventRiseCounter3 = scalar, U16, 1500, "", 1, 0
vvtEventRiseCounter4 = scalar, U16, 1502, "", 1, 0
vvtEventFallCounter1 = scalar, U16, 1504, "", 1, 0
vvtEventFallCounter2 = scalar, U16, 1506, "", 1, 0
vvtEventFallCounter3 = scalar, U16, 1508, "", 1, 0
vvtEventFallCounter4 = scalar, U16, 1510, "", 1, 0
vvtCamCounter = scalar, U16, 1512, "", 1, 0
mapVvt_MAP_AT_SPECIAL_POINT = scalar, F32, 1516, "kPa", 1, 0
mapVvt_MAP_AT_DIFF = scalar, F32, 1520, "kPa", 1, 0
mapVvt_MAP_AT_CYCLE_COUNT = scalar, S08, 1524, "distance", 1, 0
mapVvt_sync_counter = scalar, U08, 1525, "counter", 1, 0
mapVvt_min_point_counter = scalar, U08, 1526, "", 1, 0
temp_mapVvt_index = scalar, U32, 1528, "", 1, 0
mapVvt_CycleDelta = scalar, F32, 1532, "", 1, 0
currentEngineDecodedPhase = scalar, F32, 1536, "deg", 1, 0
triggerToothAngleError = scalar, F32, 1540, "deg", 1, 0
triggerIgnoredToothCount = scalar, U08, 1544, "", 1, 0
mapCamPrevToothAngle = scalar, F32, 1548, "deg", 1, 0
isDecodingMapCam = bits, U32, 1552, [0:0]
triggerElapsedUs = scalar, U32, 1556, "", 1, 0
; total TS size = 1560
trgsynchronizationCounter = scalar, U32, 1560, "", 1, 0
trgvvtToothDurations0 = scalar, U32, 1564, "us", 1, 0
trgvvtCurrentPosition = scalar, F32, 1568, "", 1, 0
trgvvtToothPosition1 = scalar, F32, 1572, "", 1, 0
trgvvtToothPosition2 = scalar, F32, 1576, "", 1, 0
trgvvtToothPosition3 = scalar, F32, 1580, "", 1, 0
trgvvtToothPosition4 = scalar, F32, 1584, "", 1, 0
trgtriggerSyncGapRatio = scalar, F32, 1588, "", 1, 0
trgtriggerStateIndex = scalar, U08, 1592, "", 1, 0
trgtriggerCountersError = scalar, S08, 1593, "", 1, 0
; total TS size = 1596
vvt1isynchronizationCounter = scalar, U32, 1596, "", 1, 0
vvt1ivvtToothDurations0 = scalar, U32, 1600, "us", 1, 0
vvt1ivvtCurrentPosition = scalar, F32, 1604, "", 1, 0
vvt1ivvtToothPosition1 = scalar, F32, 1608, "", 1, 0
vvt1ivvtToothPosition2 = scalar, F32, 1612, "", 1, 0
vvt1ivvtToothPosition3 = scalar, F32, 1616, "", 1, 0
vvt1ivvtToothPosition4 = scalar, F32, 1620, "", 1, 0
vvt1itriggerSyncGapRatio = scalar, F32, 1624, "", 1, 0
vvt1itriggerStateIndex = scalar, U08, 1628, "", 1, 0
vvt1itriggerCountersError = scalar, S08, 1629, "", 1, 0
; total TS size = 1632
vvt1esynchronizationCounter = scalar, U32, 1632, "", 1, 0
vvt1evvtToothDurations0 = scalar, U32, 1636, "us", 1, 0
vvt1evvtCurrentPosition = scalar, F32, 1640, "", 1, 0
vvt1evvtToothPosition1 = scalar, F32, 1644, "", 1, 0
vvt1evvtToothPosition2 = scalar, F32, 1648, "", 1, 0
vvt1evvtToothPosition3 = scalar, F32, 1652, "", 1, 0
vvt1evvtToothPosition4 = scalar, F32, 1656, "", 1, 0
vvt1etriggerSyncGapRatio = scalar, F32, 1660, "", 1, 0
vvt1etriggerStateIndex = scalar, U08, 1664, "", 1, 0
vvt1etriggerCountersError = scalar, S08, 1665, "", 1, 0
; total TS size = 1668
vvt2isynchronizationCounter = scalar, U32, 1668, "", 1, 0
vvt2ivvtToothDurations0 = scalar, U32, 1672, "us", 1, 0
vvt2ivvtCurrentPosition = scalar, F32, 1676, "", 1, 0
vvt2ivvtToothPosition1 = scalar, F32, 1680, "", 1, 0
vvt2ivvtToothPosition2 = scalar, F32, 1684, "", 1, 0
vvt2ivvtToothPosition3 = scalar, F32, 1688, "", 1, 0
vvt2ivvtToothPosition4 = scalar, F32, 1692, "", 1, 0
vvt2itriggerSyncGapRatio = scalar, F32, 1696, "", 1, 0
vvt2itriggerStateIndex = scalar, U08, 1700, "", 1, 0
vvt2itriggerCountersError = scalar, S08, 1701, "", 1, 0
; total TS size = 1704
vvt2esynchronizationCounter = scalar, U32, 1704, "", 1, 0
vvt2evvtToothDurations0 = scalar, U32, 1708, "us", 1, 0
vvt2evvtCurrentPosition = scalar, F32, 1712, "", 1, 0
vvt2evvtToothPosition1 = scalar, F32, 1716, "", 1, 0
vvt2evvtToothPosition2 = scalar, F32, 1720, "", 1, 0
vvt2evvtToothPosition3 = scalar, F32, 1724, "", 1, 0
vvt2evvtToothPosition4 = scalar, F32, 1728, "", 1, 0
vvt2etriggerSyncGapRatio = scalar, F32, 1732, "", 1, 0
vvt2etriggerStateIndex = scalar, U08, 1736, "", 1, 0
vvt2etriggerCountersError = scalar, S08, 1737, "", 1, 0
; total TS size = 1740
camResyncCounter = scalar, U08, 1740, "", 1, 0
m_hasSynchronizedPhase = bits, U32, 1744, [0:0]
; total TS size = 1748
wallFuelCorrection = scalar, F32, 1748, "", 1, 0
wallFuel = scalar, F32, 1752, "", 1, 0
; total TS size = 1756
isStableIdle = bits, U32, 1756, [0:0]
emaError = scalar, F32, 1760, "", 1, 0
; total TS size = 1764
liveDataExampleField = scalar, F32, 1764, "", 1, 0
; total TS size = 1768
idleState = bits, S32, 1768, [0:2], "not important"
baseIdlePosition = scalar, F32, 1772
iacByTpsTaper = scalar, F32, 1776
mightResetPid = bits, U32, 1780, [0:0]
shouldResetPid = bits, U32, 1780, [1:1]
wasResetPid = bits, U32, 1780, [2:2]
isCranking = bits, U32, 1780, [3:3]
isIacTableForCoasting = bits, U32, 1780, [4:4]
needReset = bits, U32, 1780, [5:5]
isInDeadZone = bits, U32, 1780, [6:6]
isBlipping = bits, U32, 1780, [7:7]
badTps = bits, U32, 1780, [8:8]
looksLikeRunning = bits, U32, 1780, [9:9]
looksLikeCoasting = bits, U32, 1780, [10:10]
looksLikeCrankToIdle = bits, U32, 1780, [11:11]
isIdleCoasting = bits, U32, 1780, [12:12]
isIdleClosedLoop = bits, U32, 1780, [13:13]
isIdling = bits, U32, 1780, [14:14]
idleTarget = scalar, U16, 1784, "", 1, 0
idleEntryRpm = scalar, U16, 1786, "", 1, 0
idleExitRpm = scalar, U16, 1788, "", 1, 0
targetRpmByClt = scalar, S32, 1792, "", 1, 0
targetRpmAc = scalar, S32, 1796, "", 1, 0
iacByRpmTaper = scalar, F32, 1800
luaAdd = scalar, F32, 1804
m_lastTargetRpm = scalar, S32, 1808, "", 1, 0
idleClosedLoop = scalar, F32, 1812
currentIdlePosition = scalar, F32, 1816
idleTargetAirmass = scalar, U16, 1820, "mg", 1, 0
idleTargetFlow = scalar, U16, 1822, "kg/h", 0.01, 0
; total TS size = 1824
etb1targetWithIdlePosition = scalar, F32, 1824, "%", 1,0
etb1trim = scalar, F32, 1828, "", 1, 0
etb1boardEtbAdjustment = scalar, F32, 1832, "", 1, 0
etb1luaAdjustment = scalar, F32, 1836, "%", 1,0
etb1m_wastegatePosition = scalar, F32, 1840, "%", 1,0
etb1m_lastPidDtMs = scalar, F32, 1844, "mS", 1, 0
etb1etbFeedForward = scalar, F32, 1848
etb1integralError = scalar, F32, 1852,  "", 1, 0
etb1etbCurrentTarget = scalar, F32, 1856, "%", 1, 0
etb1m_adjustedTarget = scalar, S16, 1860, "%", 0.01, 0
etb1etbRevLimitActive = bits, U32, 1864, [0:0]
etb1jamDetected = bits, U32, 1864, [1:1]
etb1validPlantPosition = bits, U32, 1864, [2:2]
etb1etbTpsErrorCounter = scalar, U16, 1868, "count", 1,0
etb1etbPpsErrorCounter = scalar, U16, 1870, "count", 1,0
etb1etbErrorCode = scalar, S08, 1872, "", 1, 0
etb1etbErrorCodeBlinker = scalar, S08, 1873, "", 1, 0
etb1tcEtbDrop = scalar, S08, 1874, "%", 1, 0
etb1jamTimer = scalar, U16, 1876, "sec", 0.01, 0
etb1adjustedEtbTarget = scalar, S08, 1878, "%", 1, 0
etb1state = scalar, U08, 1879, "", 1, 0
; total TS size = 1880
etb2targetWithIdlePosition = scalar, F32, 1880, "%", 1,0
etb2trim = scalar, F32, 1884, "", 1, 0
etb2boardEtbAdjustment = scalar, F32, 1888, "", 1, 0
etb2luaAdjustment = scalar, F32, 1892, "%", 1,0
etb2m_wastegatePosition = scalar, F32, 1896, "%", 1,0
etb2m_lastPidDtMs = scalar, F32, 1900, "mS", 1, 0
etb2etbFeedForward = scalar, F32, 1904
etb2integralError = scalar, F32, 1908,  "", 1, 0
etb2etbCurrentTarget = scalar, F32, 1912, "%", 1, 0
etb2m_adjustedTarget = scalar, S16, 1916, "%", 0.01, 0
etb2etbRevLimitActive = bits, U32, 1920, [0:0]
etb2jamDetected = bits, U32, 1920, [1:1]
etb2validPlantPosition = bits, U32, 1920, [2:2]
etb2etbTpsErrorCounter = scalar, U16, 1924, "count", 1,0
etb2etbPpsErrorCounter = scalar, U16, 1926, "count", 1,0
etb2etbErrorCode = scalar, S08, 1928, "", 1, 0
etb2etbErrorCodeBlinker = scalar, S08, 1929, "", 1, 0
etb2tcEtbDrop = scalar, S08, 1930, "%", 1, 0
etb2jamTimer = scalar, U16, 1932, "sec", 0.01, 0
etb2adjustedEtbTarget = scalar, S08, 1934, "%", 1, 0
etb2state = scalar, U08, 1935, "", 1, 0
; total TS size = 1936
wb1faultCode = scalar, U08, 1936, "", 1, 0
wb1heaterDuty = scalar, U08, 1937, "%", 1, 0
wb1pumpDuty = scalar, U08, 1938, "%", 1, 0
wb1isValid = bits, U32, 1940, [0:0]
wb1fwUnsupported = bits, U32, 1940, [1:1]
wb1fwOutdated = bits, U32, 1940, [2:2]
wb1tempC = scalar, U16, 1944, "C", 1, 0
wb1nernstVoltage = scalar, U16, 1946, "V", 0.001, 0
wb1esr = scalar, U16, 1948, "ohm", 1, 0
; total TS size = 1952
wb2faultCode = scalar, U08, 1952, "", 1, 0
wb2heaterDuty = scalar, U08, 1953, "%", 1, 0
wb2pumpDuty = scalar, U08, 1954, "%", 1, 0
wb2isValid = bits, U32, 1956, [0:0]
wb2fwUnsupported = bits, U32, 1956, [1:1]
wb2fwOutdated = bits, U32, 1956, [2:2]
wb2tempC = scalar, U16, 1960, "C", 1, 0
wb2nernstVoltage = scalar, U16, 1962, "V", 0.001, 0
wb2esr = scalar, U16, 1964, "ohm", 1, 0
; total TS size = 1968
dcOutput0 = scalar, F32, 1968, "%", 1,0
isEnabled0_int = scalar, U08, 1972, "%", 1,0
isEnabled0 = bits, U32, 1976, [0:0]
; total TS size = 1980
value0 = scalar, U16, 1980, "RAW", 1,0
value1 = scalar, U16, 1982, "RAW", 1,0
errorRate = scalar, F32, 1984, "% (don't belive me)", 1,0
; total TS size = 1988
vvtTarget = scalar, S16, 1988, "deg", 0.1, 0
vvtOutput = scalar, U08, 1990, "%", 0.5, 0
; total TS size = 1992
lambdaCurrentlyGood = bits, U32, 1992, [0:0]
lambdaMonitorCut = bits, U32, 1992, [1:1]
lambdaTimeSinceGood = scalar, U16, 1996, "sec", 0.01, 0
; total TS size = 2000
sparkDuration1 = scalar, F32, 2000, "ms", 1, 0
sparkDuration2 = scalar, F32, 2004, "ms", 1, 0
sparkDuration3 = scalar, F32, 2008, "ms", 1, 0
sparkDuration4 = scalar, F32, 2012, "ms", 1, 0
; total TS size = 2016
ltftCntHit = scalar, U32, 2016, "cnt", 1, 0
ltftCntMiss = scalar, U32, 2020, "cnt", 1, 0
ltftCntDeadband = scalar, U32, 2024, "cnt", 1, 0
ltftLearning = bits, U32, 2028, [0:0]
ltftCorrecting = bits, U32, 2028, [1:1]
ltftSavePending = bits, U32, 2028, [2:2]
ltftLoadPending = bits, U32, 2028, [3:3]
ltftLoadError = bits, U32, 2028, [4:4]
ltftPageRefreshFlag = bits, U32, 2028, [5:5]
ltftCorrection1 = scalar, F32, 2032,  "%", 100.0, -1.0
ltftCorrection2 = scalar, F32, 2036,  "%", 100.0, -1.0
ltftAccummulatedCorrection1 = scalar, F32, 2040,  "%", 100.0, 0
ltftAccummulatedCorrection2 = scalar, F32, 2044,  "%", 100.0, 0
; total TS size = 2048
stftCorrectionBinIdx = scalar, U08, 2048, "Bin", 1, 0
stftLearningBinIdx = scalar, U08, 2049, "Bin", 1, 0
stftCorrectionState = bits, U08, 2050, [0:2], "STFT state"
stftLearningState1 = bits, U08, 2051, [0:2], "STFT state"
stftLearningState2 = bits, U08, 2052, [0:2], "STFT state"
stftInputError1 = scalar, F32, 2056,  "%", 100.0, 0
stftInputError2 = scalar, F32, 2060,  "%", 100.0, 0
; total TS size = 2064
isVvlTpsCondition = bits, U32, 2064, [0:0]
isVvlCltCondition = bits, U32, 2064, [1:1]
isVvlMapCondition = bits, U32, 2064, [2:2]
isVvlAfrCondition = bits, U32, 2064, [3:3]
isVvlRpmCondition = bits, U32, 2064, [4:4]
isVvlCondition = bits, U32, 2064, [5:5]
; total TS size = 2068


	time				= { timeNow }

	; TODO: add stftCorrection2?
	egoCorrectionForVeAnalyze = { 100 + stftCorrection1 }

	wbo0_hasFault = { enableAemXSeries && ((wb1faultCode >= 1) || !wb1isValid) }

; calculated temperatures by F/C
; "USE_METRIC_UNITS" set to true means that all units displayed to the user will be in Metrics units.
;#if USE_METRIC_UNITS
	; this output channels are used on tables/curves, so we need to make a new output chanel and then override it here with the celsius conditional
	coolantTemperature = { coolant }
	intakeTemperature = { intake }
	OilTemp = { oilTemp }
	; this are used in the 3D table axis
	cltHighXaxis = { 120 }
	iatHighXaxis = { 120 }

	MapPressure = { MAPValue }
	BaroPressure = { baroPressure }
	OilPressure = { oilPressure }
	mapHighXaxis = { 100 }
	vehicleSpeed = { vehicleSpeedKph }
;#else
;	intakeTemperature = { intake * 1.8 + 32 }
;	coolantTemperature = { coolant * 1.8 + 32 }
;	OilTemp = { oilTemp * 1.8 + 32 }

	; note this output channels are not used on any table/curve, so we can simply add the "F" variants,
	; and use it on the corresponding Gauge with the celsius conditional
;	wb1tempF = { wb1tempC * 1.8 + 32 }
;	wb2tempF = { wb1tempC * 1.8 + 32 }
;	auxTemp1F = { auxTemp1 * 1.8 + 32 }
;	auxTemp2F = { auxTemp2 * 1.8 + 32 }
;	ambientTempF = { ambientTemp * 1.8 + 32 }
;	lowFuelPressureF = { lowFuelPressure * 1.8 + 32 }
;	acPressureF = { acPressure * 1.8 + 32 }
;	fuelTempF = { fuelTemp * 1.8 + 32 }
;	egt1F = { egt1 * 1.8 + 32 }
;	egt2F = { egt2 * 1.8 + 32 }
;	egt3F = { egt3 * 1.8 + 32 }
;	egt4F = { egt4 * 1.8 + 32 }
;	egt5F = { egt5 * 1.8 + 32 }
;	egt6F = { egt6 * 1.8 + 32 }
;	egt7F = { egt7 * 1.8 + 32 }
;	egt8F = { egt8 * 1.8 + 32 }

;	cltHighXaxis = { 248 }
;	iatHighXaxis = { 248 }

;	MapPressure = { MAPValue * 0.145038 }
;	BaroPressure = { baroPressure * 0.145038 }
;	OilPressure = { oilPressure * 0.145038 }
;	mapHighXaxis = { 14.5 }
;	vehicleSpeed = { vehicleSpeedKph * 0.62137119 }
;#endif

	isEtb1Enabled = { etbFunctions1 == 1 || etbFunctions2 == 1 }
	isEtb2Enabled = { etbFunctions1 == 2 || etbFunctions2 == 2 }
	isEtbEnabled = { isEtb1Enabled || isEtb2Enabled }

	isTps1Primary = { tps1_1AdcChannel != 0 }
	isTps1Secondary = { tps1_2AdcChannel != 0 }
	isTps2Primary = { tps2_1AdcChannel != 0 }
	isTps2Secondary = { tps2_2AdcChannel != 0 }

	isPpsPrimary = { throttlePedalPositionAdcChannel != 0 }
	isPpsSecondary = { throttlePedalPositionSecondAdcChannel != 0 }

	; Closed Loop Fuel Correction / Short Term Fuel Trims
	isSTFT = { fuelClosedLoopCorrectionEnabled == 1 }

[PcVariables]
	fuelUnits = bits, U08, [0:2], "kPa", "MAF", "%TPS", "Lua"
	pwmAxisLabels = bits, U08, [0:5], "Zero", "TPS %", "MAP kPa", "CLT C", "IAT C", "Fuel Load", "Ignition Load", "Aux Temp 1 C", "Aux Temp 2 C", "Accel Pedal %", "Battery Voltage Volts", "VVT 1 I Deg", "VVT 1 E Deg", "VVT 2 I Deg", "VVT 2 E Deg", "Ethanol (Flex) %", "Aux Linear 1 *", "Aux Linear 2 *", "GPPWM Output 1 %", "GPPWM Output 2 %", "GPPWM Output 3 %", "GPPWM Output 4 %", "Lua Gauge 1", "Lua Gauge 2", "RPM", "Gear (detected)", "Baro pressure kPa", "EGT 1 C", "EGT 2 C", "Aux Linear 3", "Aux Linear 4", "Vehicle Speed KPH", "Oil pressure kPa", "Oil temp C", "Fuel Pressure", "Throttle Pressure Ratio"
	veAxisLabels = bits, U08, [0:1], "load", "MAP", "TPS"
	targetAfrAxisLabels = bits, U08, [0:2], "load", "MAP", "TPS", "Acc Pedal", "Cyl Filling %"

	tuneCrcPcVariable = continuousChannelValue, tuneCrc16

	wueAfrTargetOffset = array, S16, [ 16], ":1",	0.1, 0.0, -3.0, 3.0, 1
	wueAnalRecommend	= array, U08, [ 16], "%",  1.00, 0.0, 100, 255.00, 0

	gearCountArray = array, S08, [10], "Gear", 1, 0, -1, { 10 - 2 }, 0, noMsqSave
	solenoidCountArray = array, U08, [6], "Solenoid", 1, 0, 1, 6, 0, noMsqSave

	rangeInputArray = array, U08, [6], "Input", 1, 0, 0, 6, 0, noMsqSave
	rangeStateArray = array, U08, [9], "State", 1, 0, 0, 9, 0, noMsqSave

; wall of debug mode :)
; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields
;											Alternator					TPS Acceleration						Idle										Engine Load Acc		Trigger Counters									VVT1 PID													Cranking						Ignition Timing		Fu Corr  VSS			SD Card	Knock								Wall Wetting			ETB PID						Executor																				InstantRpm											CJ125				CAN			MAP													TLE8888			Analog inputs 2												Start									ETB Autotune																												DYNO_VIEW	LOGIC_ANALYZER	Wideband				TCU					Lua					VVT2 PID						VVT3 PID						VVT4 PID
;														0								1							2				3											4							5									6				7								8						9								10						11		12			13			14				15				16						17							18						19				20				21					22					23			24				25					26			27				28		29		30		31					32							33	34		35		36 37					38				39					40					41			42				43										44				45					46						47						48					49								50								51
;														DBG_ALTERNATOR_PID			DBG_TPS_ACCEL							DBG_IDLE_CONTROL
	debugFieldF1List = bits,	U08,	[0:7], "Alt: Controller Output",  "From TPS",			"",			"Idle: Controller Output",		"Idle output",			"							",	"",			"VVT1: Controller Output","						", "",							"Ign IAT Corr",		"",		"",			"Total SD", "last volts",	"",			"WW: Alpha",			"ETB Controller Output", "",						"",			"df1",			"df1",			"InstantRpm",	"",		"24:df1",	"CJ125: output",  "",			"MAP Average",  "",		"",	"",	"",					"TPS1 Pri/Sec Diff",	"",	"",		"",		"","S unused"		"",			"Osc Amplitude",  "",				"",			"",				""									, "VSS",		"",					"WB: Pump DAC duty",  "",						"Lua Debug 1",	"VVT2: Controller Output","VVT3: Controller Output","VVT4: Controller Output"
	debugFieldF2List = bits,	U08,	[0:7], "Alt: I Term",				"To TPS",				"",			"Idle: I Term",						"Idle df2",				"							",	"",			"VVT1: I Term",				"			",			"",							"Ign CLT Corr",		"",		"",			"Write Cnt","last filtered","",			"WW: Beta",			"ETB I Term",				"",						"",			"df2",			"df2",			"InstantRPM Ratio","",		"24:df2",	"CJ125: i term",  "",			"MAP Duration", "",		"",	"",	"",					"TPS2 Pri/Sec Diff",	"",	"",		"",		"","S unused"		"",			"Duty Amplitude", "",				"",			"",				""								,	"Speed",		"",					"WB: ESR",				"",						"Lua Debug 2",	"VVT2: I Term",			"VVT3: I Term",			"VVT4: I Term"
	debugFieldF3List = bits,	U08,	[0:7], "Alt: Previous Error",	"Current TPS<>TPS",	"",			"Idle: prev error",					"Idle df3",				"ICU sum",						"",			"VVT1: prev error",		"",						"",							"",						"",		"",			"Sync Cnt", "",				"",			"WW: film mass",	"ETB err",					"",						"",			"df3",			"df3",			"22df3",			"",		"24:df3",	"CJ125: err",	"",			"MAP Fast",	"",		"",	"",	"",					"TPS1/2 Diff",			"",	"",		"",		"","S unused"		"",			"Tu",				"",				"",			"",				""								,	"DeltaSpeed", "",					"WB: Nernst Voltage", "",						"Lua Debug 3",	"VVT2: prev error",		"VVT3: prev error",		"VVT4: prev error"
	debugFieldF4List = bits,	U08,	[0:7], "Alt: I Gain",				"Extra Fuel",			"",			"Idle: I Gain",						"Idle df4",				"		",						"",			"VVT1: I Gain",				"",						"",							"Ign PID Adj",		"",		"",			"File Cnt", "",				"",			"WW: m_cmd",			"ETB I setting",			"",						"",			"df4",			"df4",			"22df4",			"",		"24:df4",	"CJ125: UA",		"",			"MAP Estimate", "",		"",	"",	"",					"Acc Pedal Pri/Sec Diff","",	"",		"",		"","S unused"		"",			"Ku",				"",				"",			"",				"",										"accel",		"",					"WB: Lambda",			"",						"Lua Debug 4",	"VVT2: I Gain",			"VVT3: I Gain",			"VVT4: I Gain"
	debugFieldF5List = bits,	U08,	[0:7], "Alt: D Gain",				"df5",					"",			"Idle: D Gain",						"Idle df5",				"		",						"df5",		"VVT1: D Gain",				"",						"",							"",						"",		"",			"",			"",				"",			"WW: film mass next","ETB D setting",			"df5",					"df5",		"df5",			"df5",			"22df5",			"",		"24:df5",	"CJ125: UR",		"",			"MAP Instant",  "",		"",	"",	"",					"TPS1 Pri/Sec Ratio",	"",	"",		"",		"","S unused"		"",			"Kp",				"",				"",			"",				"",										"",			"",					"",						"",						"Lua Debug 5",	"VVT2: D Gain",			"VVT3: D Gain",			"VVT4: D Gain"
	debugFieldF6List = bits,	U08,	[0:7], "Alt: D Term",				"",						"",			"Idle: D Term",						"Idle df6",				"			",					"",			"VVT1: D Term",				"",						"",							"",						"",		"",			"",			"",				"",			"",						"ETB df6",					"",						"",			"df6",			"df6",			"22df6",			"",		"24:df6",	"cj: f7",			"",			"",				"",		"",	"",	"",					"",							"",	"",		"",		"","S unused"		"",			"Ki",				"",				"",			"",				"",										"",			"",					"",						"",						"Lua Debug 6",	"VVT2: D Term",			"VVT3: D Term",			"VVT4: D Term"
	debugFieldF7List = bits,	U08,	[0:7], "Alt: Max-Value",			"",						"",			"Idle: Max-Value",					"Idle df7",				"",								"",			"VVT1: Max-Value",			"",						"",							"",						"",		"",			"",			"",				"",			"",						"ETB df7",					"",						"",			"df7",			"df7",			"22df7",			"",		"24:df7",	"cj: f7",			"",			"",				"",		"",	"",	"",					"",							"",	"",		"",		"","S unused"		"",			"Kd",				"",				"",			"",				"",										"",			"",					"",						"",						"Lua Debug 7",	"",							"",							""
	debugFieldI1List = bits,	U08,	[0:7], "Alt: P Gain",				"",						"",			"Idle: P Gain",						"Idle di1",				"							",	"",			"VVT1: P Gain",				"					",  "Cycle Counter",			"Multispark Count",  "",		"",			"",			"hip corr",	"",			"",						"ETB P-Gain",				"t counter",			"",			"di1",			"di1",			"Spark Event Gap","",		"24:di1",	"CJ125: state",	"read count","MAP counter",  "",		"",	"",	"SPI Counter",	"",							"",	"",		"",		"","Start Count",	"",			"",					"",				"",			"",				"",										"deltatime",  "",					"",						"Solenoid 1 State",  "Lua memory used","VVT2: P Gain",			"VVT3: P Gain",			"VVT4: P Gain"
	debugFieldI2List = bits,	U08,	[0:7], "Alt: Offset",				"",						"",			"Idle: Offset",						"Idle di2",				"							",	"",			"VVT1: Offset",				"",						"",							"",						"",		"",			"",			"hip incor",	"",			"",						"ETB di2",					"invocationcounter", "",			"di2",			"di2",			"Inj Event Gap",  "",		"24:di2",	"",					"write count","MAP raw ADC", "",		"",	"",	"Latest Transmit","",							"",	"",		"",		"","Starter Enable", "",			"",					"",				"",			"",				"",										"",			"",					"",						"Solenoid 2 State",  "",					"VVT2: Offset",			"VVT3: Offset",			"VVT4: Offset"
	debugFieldI3List = bits,	U08,	[0:7], "Alt: Reset Cnt",			"",						"",			"Idle: Reset Cnt",					"Idle di3",				"			",					"",			"VVT1: 10xTarget",			"",						"",							"",						"",		"",			"",			"",				"",			"",						"ETB di3",					"s counter",			"",			"di3",			"di3",			"22di3",			"",		"24:di3",	"",					"write err", "",				"",		"",	"",	"Latest Received","",							"",	"",		"",		"","Starter Disable","",			"",					"",				"",			"",				"",										"",			"",					"",						"Solenoid 3 State",  "",					"VVT2: 10xTarger",		"VVT3: 10xTarger",		"VVT4: 10xTarger"
	debugFieldI4List = bits,	U08,	[0:7], "Alt: Period",				"",						"",			"Idle: State",						"Idle di4",				"Cycle Cnt 1",					"",			"",								"",						"",							"",						"",		"",			"",			"",				"",			"",						"ETB di4",					"executor",			"",			"di4",			"di4",			"22di4",			"",		"24:di4",		"",				"",			"",				"",		"",	"",	"Init Count",	"",							"",	"",		"",		"",""					"",			"",					"",				"",			"",				"",										"",			"",					"",						"Solenoid 4 State",  "",					"",							"",							""
	debugFieldI5List = bits,	U08,	[0:7], "",								"",						"",			"",										"Idle di5",				"Cycle Cnt 2",					"",			"",								"",						"",							"",						"",		"",			"",			"",				"di5",		"di5",					"ETB di5",					"max executor",		"di5",		"di5",			"di5",			"22di5",			"di5",	"di5",		"di5",				"di5",		"di5",			"",		"di5",  "di5",  "di5",				"",							"di5", "di5",	"di5",	"",""					"",			"",					"",				"",			"",				"",										"",			"",					"",						"Solenoid 5 State",  "",					"",							"",							""

	wboFaultCodeList = bits, U08, [0:3], "out of range", "CAN silent", "cranking", "failed to heat", "overheat", "underheat", "no supply", "sensor fault"

	injModeList = bits, U08, [0:3], "Simultaneous", "Sequential", "Batch", "Single Point"
	ignModeList = bits, U08, [0:3], "Single Coil", "Sequential", "Wasted", "Two Coils"

; ClearReason
	fuelIgnCutCodeList = bits, U08, [0:7], "None", "fatal error", "setting disabled", "RPM limit", "ETB RPM limit", "boost cut", "oil pressure", "stop requested", "ETB problem", "launch control", "max injector duty", "flood clear", "engine sync", "kickstart", "ign off", "Lua", "ACR", "Lambda Prot", "GDI Comms", "Brake", "Fatal", "GDI limits", "Pump limit"

; TpsState
	etbCutCodeList = bits, U08, [0:7], "None", "engine stopped", "TPS error", "PPS error", "TPS noise", "Autotune", "Lua", "TPS Calib", "N/A", "Redundancy", "PPS noise", "Jam"

	outputDiagErrorList = bits, U08, [0:3], "Not used", "No error", "Open Load", "Short to Gnd", "Short to Battery", "Overload", "Driver Overtemp", "Driver disabled", "Unknown"

	canReWidebandCmdStatusList = bits, U08, [0:7], "Idle", "Done", "Busy", "Failed"
	canReWidebandHwIndex = bits, U08, [0:3], "INVALID", "First", "INVALID", "INVALID", "INVALID", "Second", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"
	; TODO: reuse $can_wbo_re_id_list
	canReWidebandCanId = bits, U08, [0:3], "ID1 0x190/191", "ID2 0x192/193", "ID3 0x194/195", "ID4 0x196/197", "ID5 0x198/199", "ID6 0x19A/19B", "ID7 0x19C/19D", "ID8 0x19E/19F", "ID9 0x200/201", "ID10 0x202/203", "ID11 0x204/205", "ID12 0x206/207", "ID13 0x208/209", "ID14 0x20A/20B", "ID15 0x20C/20D", "ID16 0x20E/20F"

	; TODO: keep in sync with SensorType from wideband_can.h
	canReWidebandSensorType = bits, U08, [0:1], "Bosch LSU4.9", "Bosch LSU4.2", "Bosch LSU ADV", "FAE LSU4.9"

	stftBinIdxList = bits, U08, [0:1], "Idle", "Overrun", "Power", "Normal"
	; keep in sync with stft_state_e in rusefi_ennums.h
	stftStateList = bits, U08, [0:3], "Enabled", "Settings", "Tuning", "RPM", "Cranking Delay", "Clt", "AFR out of range", "DFCO", "TPS Accel", "Fuel Cut"


[ConstantsExtensions]
	; defaultValue is used to provide TunerStudio with a value to use in the case of
	; the constant not yet being initialized. This is primarily important if the
	; constant is used as a variable in the ini.
	; defaultValue = constantName, value;
	defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0

	; this magic is best described in output_channels.txt search for 'maintainConstantValue'
	; TPS 1 Primary
	maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax }
	maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin }

	; TPS 1 Secondary
	maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax }
	maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin }

	; TPS 2 Primary
	maintainConstantValue = tps2Max, { (calibrationMode == 8 ) ? calibrationValue : tps2Max }
	maintainConstantValue = tps2Min, { (calibrationMode == 9 ) ? calibrationValue : tps2Min }

	; TPS 2 Secondary
	maintainConstantValue = tps2SecondaryMax, { (calibrationMode == 10 ) ? calibrationValue : tps2SecondaryMax }
	maintainConstantValue = tps2SecondaryMin, { (calibrationMode == 11 ) ? calibrationValue : tps2SecondaryMin }

	; ETB Auto Gain Calibration
	maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor }
	maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor }
	maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor }

	maintainConstantValue = throttlePedalUpVoltage, { (calibrationMode == 12 ) ? calibrationValue  : throttlePedalUpVoltage }
	maintainConstantValue = throttlePedalSecondaryUpVoltage, { (calibrationMode == 12 ) ? calibrationValue2 : throttlePedalSecondaryUpVoltage }

	maintainConstantValue = throttlePedalWOTVoltage, { (calibrationMode == 13 ) ? calibrationValue  : throttlePedalWOTVoltage }
	maintainConstantValue = throttlePedalSecondaryWOTVoltage, { (calibrationMode == 13 ) ? calibrationValue2 : throttlePedalSecondaryWOTVoltage }

	maintainConstantValue = wastegatePositionOpenedVoltage, { (calibrationMode == 14 ) ? calibrationValue : wastegatePositionOpenedVoltage }
	maintainConstantValue = wastegatePositionClosedVoltage, { (calibrationMode == 15 ) ? calibrationValue : wastegatePositionClosedVoltage }

  requiresPowerCycle = afr_hwChannel
  requiresPowerCycle = afr_hwChannel2

  requiresPowerCycle = gppwm1_pin
  requiresPowerCycle = gppwm2_pin
  requiresPowerCycle = gppwm3_pin
  requiresPowerCycle = gppwm4_pin
  requiresPowerCycle = isSdCardEnabled
  requiresPowerCycle = sdCardSpiDevice
  requiresPowerCycle = sdCardCsPin
	requiresPowerCycle = boardUseCanTerminator
	requiresPowerCycle = injectorCompensationMode
	requiresPowerCycle = lps25BaroSensorScl
	requiresPowerCycle = lps25BaroSensorSda
	requiresPowerCycle = binarySerialTxPin
	requiresPowerCycle = binarySerialRxPin
	requiresPowerCycle = tunerStudioSerialSpeed

	requiresPowerCycle = is_enabled_spi_1
	requiresPowerCycle = is_enabled_spi_2
	requiresPowerCycle = is_enabled_spi_3
	requiresPowerCycle = is_enabled_spi_4
	requiresPowerCycle = is_enabled_spi_5
	requiresPowerCycle = is_enabled_spi_6

	requiresPowerCycle = canWriteEnabled
	requiresPowerCycle = canReadEnabled
	requiresPowerCycle = can1ListenMode
	requiresPowerCycle = can2ListenMode

	requiresPowerCycle = startStopButtonPin
	requiresPowerCycle = startStopButtonMode

	requiresPowerCycle = enableAemXSeries
	requiresPowerCycle = enableAemXSeriesEgt

	requiresPowerCycle = etb_use_two_wires
	requiresPowerCycle = etbSplit
	requiresPowerCycle = etbFreq
	requiresPowerCycle = etbFunctions1
	requiresPowerCycle = etbFunctions2

	requiresPowerCycle = idle_solenoidFrequency
	requiresPowerCycle = boostPwmFrequency
	requiresPowerCycle = alternatorPwmFrequency
	requiresPowerCycle = vvtOutputFrequency
	requiresPowerCycle = vvtPins1
	requiresPowerCycle = vvtPins2
	requiresPowerCycle = vvtPins3
	requiresPowerCycle = vvtPins4

	requiresPowerCycle = auxAnalogInputs1
	requiresPowerCycle = auxAnalogInputs2
	requiresPowerCycle = auxAnalogInputs3
	requiresPowerCycle = auxAnalogInputs4
	requiresPowerCycle = auxAnalogInputs5
	requiresPowerCycle = auxAnalogInputs6
	requiresPowerCycle = auxAnalogInputs7
	requiresPowerCycle = auxAnalogInputs8

	requiresPowerCycle = cylinderBore
	requiresPowerCycle = knockFrequency

	readOnly = device_uid1
	readOnly = device_uid2
	readOnly = device_uid3



	defaultValue = gearCountArray, -1 0 1 2 3 4 5 6 7 8
	readOnly = gearCountArray
	defaultValue = solenoidCountArray, 1 2 3 4 5 6 7 8
	readOnly = solenoidCountArray

	defaultValue = rangeStateArray, 0 1 2 3 4 5 6 7 8
	readOnly = rangeStateArray
	defaultValue = rangeInputArray, 0 1 2 3 4 5
	readOnly = solenoidCountArray

[CurveEditor]
;	xAxis		=  leftValue, rightValue, step
;	yAxis		=  bottomValue, topValue, step



	curve = knockThresholdCurve, "Engine Knock Threshold RPM Based"
		columnLabel = "RPM", "Threshold"
		xAxis		=  0, 8000, 9
		yAxis		=  0,  8, 10
		xBins		= knockNoiseRpmBins, RPMValue
		yBins		= knockBaseNoise
		gauge		= RPMGauge

	curve = scriptCurve1, "Script Curve #1"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -155,  150, 10
		xBins		= scriptCurve1Bins
		yBins		= scriptCurve1
		showTextValues = true

	curve = scriptCurve2, "Script Curve #2"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -150,  150, 10
		xBins		= scriptCurve2Bins
		yBins		= scriptCurve2
		showTextValues = true

	curve = scriptCurve3, "Script Curve #3"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -5,  5, 10
		xBins		= scriptCurve3Bins
		yBins		= scriptCurve3
		showTextValues = true

	curve = scriptCurve4, "Script Curve #4"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -5,  5, 10
		xBins		= scriptCurve4Bins
		yBins		= scriptCurve4
		showTextValues = true

	curve = scriptCurve5, "Script Curve #5"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -5,  5, 10
		xBins		= scriptCurve5Bins
		yBins		= scriptCurve5
		showTextValues = true

	curve = scriptCurve6, "Script Curve #6"
		columnLabel = "X", "Y"
		xAxis		=  0, 128, 10
		yAxis		= -5,  5, 10
		xBins		= scriptCurve6Bins
		yBins		= scriptCurve6
		showTextValues = true

	curve = dwellCorrection, "Dwell time base"
		columnLabel = "RPM", "Dwell"
		xAxis		=  0, 8000, 9
		yAxis		=  0,  8, 9
		xBins		= sparkDwellRpmBins, RPMValue
		yBins		= sparkDwellValues
		gauge		= RPMGauge

	curve = dwellVoltageCorrection, "Dwell voltage correction"
		columnLabel = "Battery Volts", "Multiplier"
		xAxis		=  6, 16, 11
		yAxis		=  0, 3, 7
		xBins		= dwellVoltageCorrVoltBins, VBatt
		yBins		= dwellVoltageCorrValues
		gauge		= VBattGauge

	curve = tpsTspRpmCorrection, "Transient RPM correction"
		columnLabel = "RPM", "Multiplier"
		xAxis		=  0, 8000, 9
		yAxis		=  0, 3, 7
		xBins		= tpsTspCorrValuesBins, RPMValue
		yBins		= tpsTspCorrValues
		gauge		= RPMGauge

	curve = predictiveMapBlendDuration, "Predictive Map Blend Duration"
		columnLabel = "RPM", "Duration"
		xAxis		=  0, 8000, 9
		yAxis		=  0, 3, 7
		xBins		= predictiveMapBlendDurationBins, RPMValue
		yBins		= predictiveMapBlendDurationValues
		gauge		= RPMGauge

	curve = primingPulse, "Priming pulse fuel mass"
		columnLabel = "Coolant", "Prime Pulse"
		xAxis		=  -40, { cltHighXaxis }, 9
		yAxis		=  0, 150, 9
		xBins		= primeBins, coolantTemperature
		yBins		= primeValues
		gauge		= CLTGauge

	curve = map_samplingAngleCurve, "MAP Sampling Start Angle"
		columnLabel = "RPM", "Angle"
		xAxis		=  0, 8000, 9
		yAxis		=  0,  180, 10
		xBins		= map_samplingAngleBins, RPMValue
		yBins		= map_samplingAngle
		gauge		= MAPGauge

	curve = map_samplingWindowCurve, "MAP Sampling Duration"
		columnLabel = "RPM", "Window"
		xAxis		=  0, 8000, 9
		yAxis		=  0,  180, 10
		xBins		= map_samplingWindowBins, RPMValue
		yBins		= map_samplingWindow
		gauge		= MAPGauge

	curve = vrThresholdCurve1, "VR 1 Threshold"
		columnLabel = "RPM", "Voltage"
		xAxis		= 0, 8000, 9
		yAxis		= 0, 2.5, 6
		xBins		= vrThreshold1_rpmBins, RPMValue
		yBins		= vrThreshold1_values

	curve = vrThresholdCurve2, "VR 2 Threshold"
		columnLabel = "RPM", "Voltage"
		xAxis		= 0, 8000, 9
		yAxis		= 0, 2.5, 6
		xBins		= vrThreshold2_rpmBins, RPMValue
		yBins		= vrThreshold2_values

	curve = mafDecodingCurve, "MAF sensor"
		columnLabel = "Voltage", "kg/hour"
		xAxis		=  -1, 6, 10
		yAxis		= -30,  1300, 10
		xBins		= mafDecodingBins, rawMaf
		yBins		= mafDecoding
		gauge		= rawMafGauge

	curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier"
	    topicHelp = "iatFuelCorrCurveHelp"
		columnLabel = "Air Temp", "Multiplier"
		xAxis		=  -40, { iatHighXaxis }, 9
		yAxis		=  0,  2, 11
		xBins		= iatFuelCorrBins, intakeTemperature
		yBins		= iatFuelCorr
		gauge		= IATGauge

	curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier"
		columnLabel = "Coolant", "Multiplier"
		xAxis		=  -40, { cltHighXaxis }, 9
		yAxis		=  0,  3, 10
		xBins		= cltFuelCorrBins, coolantTemperature
		yBins		= cltFuelCorr
		gauge		= CLTGauge

	curve = cltBoostCorrCurve, "Coolant Temperature Boost Duty Multiplier"
		columnLabel = "Coolant", "Multiplier"
		xAxis		=  -40, 120, 9
		yAxis		=  0,  3, 10
		xBins		= cltBoostCorrBins, coolant
		yBins		= cltBoostCorr
		gauge		= CLTGauge

	curve = iatBoostCorrCurve, "Intake Air Temperature Boost Duty Multiplier"
		columnLabel = "Air Temp", "Multiplier"
		xAxis		=  -40, 120, 9
		yAxis		=  0,  2, 11
		xBins		= iatBoostCorrBins, intake
		yBins		= iatBoostCorr
		gauge		= IATGauge

	curve = cltBoostAdderCurve, "Coolant Temperature Boost Target Adder"
		columnLabel = "Coolant", "Adder"
		xAxis		=  -40, 120, 9
		yAxis		=  0,  3, 10
		xBins		= cltBoostAdderBins, coolant
		yBins		= cltBoostAdder
		gauge		= CLTGauge

	curve = iatBoostAdderCurve, "Intake Air Temperature Boost Target Adder"
		columnLabel = "Air Temp", "Adder"
		xAxis		=  -40, 120, 9
		yAxis		=  0,  2, 11
		xBins		= iatBoostAdderBins, intake
		yBins		= iatBoostAdder
		gauge		= IATGauge

	curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier"
		columnLabel = "Coolant", "Multiplier"
		xAxis		=  -40, { cltHighXaxis }, 9
		yAxis		=  0,  3, 10
		xBins		= crankingFuelBins, coolantTemperature
		yBins		= crankingFuelCoef
		gauge		= CLTGauge

	curve = crankingCltCurveE100, "Cranking Coolant Temperature Multiplier (Flex Fuel E85)"
		columnLabel = "Coolant", "Multiplier"
		xAxis		=  -40, { cltHighXaxis }, 9
		yAxis		=  0,  3, 10
		xBins		= crankingFuelBins, coolantTemperature
		yBins		= crankingFuelCoefE100
		gauge		= CLTGauge

	curve = cltRevLimitCurve, ""
		columnLabel = "Coolant", "RPM Limit"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		= 0, 8000, 9
		xBins		= cltRevLimitRpmBins, coolantTemperature
		yBins		= cltRevLimitRpm
		gauge		= CLTGauge

	curve = etbTpsBiasCurve, "Electronic Throttle Body Bias Curve"
		columnLabel = "TPS", "duty bias"
		xAxis		=  0, 100, 11
		yAxis		=  -40, 40, 9
		xBins		= etbBiasBins, TPSValue
		yBins		= etbBiasValues, etb1DutyCycle
		gauge		= TPSGauge

	curve = ewgBiasCurve, "Electronic Wastegate Actuator Bias Curve"
		columnLabel = "DC Position", "duty bias"
		xAxis		=  0, 100, 11
		yAxis		=  -40, 40, 9
		xBins		= dcWastegateBiasBins
		yBins		= dcWastegateBiasValues

	curve = crankingTpsCurve, "Cranking TPS Multiplier"
		columnLabel = "TPS", "Multiplier"
		xAxis		=  0, 100, 11
		yAxis		=  0,  3, 10
		xBins		= crankingTpsBins, TPSValue
		yBins		= crankingTpsCoef
		gauge		= TPSGauge


	curve = iacCoastingCurve, "Coasting IAC Position"
		columnLabel = "RPM", "Multiplier"
		xAxis		= -40, 120, 9
		yAxis		=  0,  100, 10
		xBins		= iacCoastingRpmBins, RPMValue
		yBins		= iacCoasting
		gauge		= idleAirValvePositionGauge

	curve = cltCrankingCurve, "Cranking Idle Valve Curve"
		columnLabel = "Coolant", "Percent"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		=  0,  100, 10
		xBins		= cltCrankingCorrBins, coolantTemperature
		yBins		= cltCrankingCorr
		gauge		= CLTGauge

	curve = afterCrankingIACtaperCurve, "Idle valve Crank-to-Run Taper"
		columnLabel = "Coolant", "cyles"
		xAxis		= -40, { cltHighXaxis }, 7
		yAxis		=  0,  500, 11
		xBins		= afterCrankingIACtaperDurationBins, coolantTemperature
		yBins		= afterCrankingIACtaperDuration
		gauge		= CLTGauge

	curve = cltIdleRPMCurve, "Idle Target RPM"
		columnLabel = "Coolant", "RPM"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		= 0, 2400, 13
		xBins		= cltIdleRpmBins, coolantTemperature
		yBins		= cltIdleRpm, RPMValue
		gauge		= CLTGauge

	curve = idleAdvanceCurve, "Idle Advance Angle"
		columnLabel = "RPM", "degrees"
		xAxis		= 0, 2400, 13
		yAxis		= -20, 90, 12
		xBins		= idleAdvanceBins, rpmForIgnitionIdleTableDot
		yBins		= idleAdvance
		gauge		= RPMGauge

	curve = crankingAdvanceCurve, "Cranking Advance Angle"
		columnLabel = "RPM", "degrees"
		xAxis		= 0, 1200, 13
		yAxis		= -30, 30, 11
		xBins		= crankingAdvanceBins, RPMValue
		yBins		= crankingAdvance
		gauge		= RPMGauge

	curve = fuelLevelCurve, "Fuel Level"
		columnLabel = "Voltage", "%"
		xAxis		= 0, 5, 6
		yAxis		= 0, 100, 11
		xBins		= fuelLevelBins
		yBins		= fuelLevelValues

	curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment"
		columnLabel = "Coolant", "AFR Offset"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		=	-3,  1, 5
		xBins		= cltFuelCorrBins, coolantTemperature
		yBins		= wueAfrTargetOffset
		gauge		= cltGauge

	curve = wueAnalyzer_warmup_curve, "Warmup Enrichment"
		columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		=	90,  500, 6
		xBins		= cltFuelCorrBins, coolantTemperature
		yBins		= cltFuelCorr
		yBins		= wueAnalRecommend
		;gauge		= cltGauge

		lineLabel	= "Warmup Correction"
		lineLabel	= "Recommended WUE"

	curve = hpfpLobeProfileCurve, "HPFP Lobe Profile"
		columnLabel = "% pump volume", "angle"
		xAxis		= 0, 100, 11
		yAxis		= 0, 240, 13
		xBins		= hpfpLobeProfileQuantityBins
		yBins		= hpfpLobeProfileAngle

	curve = hpfpDeadtimeCurve, "HPFP Valve Deadtime"
		columnLabel = "volts", "ms"
		xAxis		= 5, 15, 11
		yAxis		= 0, 5, 6
		xBins		= hpfpDeadtimeVoltsBins
		yBins		= hpfpDeadtimeMS

	curve = wwTauCltCurve, "Evap time vs. CLT"
		columnLabel = "coolant", "seconds"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		= 0, 2, 9
		xBins		= wwCltBins, coolantTemperature
		yBins		= wwTauCltValues
		gauge		= CLTGauge

	curve = wwTauMapCurve, "Evap time vs. MAP"
		columnLabel = "MAP", "mult"
		xAxis		= 0, { mapHighXaxis }, 5
		yAxis		= 0, 2, 9
		xBins		= wwMapBins, MapPressure
		yBins		= wwTauMapValues
		gauge		= MAPGauge

	curve = wwBetaCltCurve, "Impact fraction vs. CLT"
		columnLabel = "coolant", "fraction"
		xAxis		= -40, { cltHighXaxis }, 9
		yAxis		= 0, 2, 9
		xBins		= wwCltBins, coolantTemperature
		yBins		= wwBetaCltValues
		gauge		= CLTGauge

	curve = wwBetaMapCurve, "Impact fraction vs. MAP"
		columnLabel = "MAP", "mult"
		xAxis		= 0, { mapHighXaxis }, 5
		yAxis		= 0, 2, 9
		xBins		= wwMapBins, MapPressure
		yBins		= wwBetaMapValues
		gauge		= MAPGauge

	curve = tchargeCurve, "Charge temperature estimation coefficient"
		columnLabel = "flow", "coefficient"
		xAxis = 0, 500, 6
		yAxis = 0, 100, 5
		xBins = tchargeBins, mafEstimate
		yBins = tchargeValues
		gauge = tChargeGauge

	curve = tccLockCurve, "TCC Lock Curve"
		columnLabel = "TPS", "Lock Speed", "Unlock Speed"
		xAxis = 0, 100, 10
		yAxis = 0, 100, 10
		xBins = tcu_tccTpsBins, TPSValue
		yBins = tcu_tccLockSpeed
		yBins = tcu_tccUnlockSpeed
		gauge = TPSGauge

curve = shiftSpeedCurve, "Automatic Shift Points"
		columnLabel = "Throttle", ""
		xAxis = 0, 100, 10
		yAxis = 0, 200, 10
		xBins = tcu_shiftTpsBins, TPSValue
		yBins = tcu_shiftSpeed12
		yBins = tcu_shiftSpeed23
		yBins = tcu_shiftSpeed34
		yBins = tcu_shiftSpeed21
		yBins = tcu_shiftSpeed32
		yBins = tcu_shiftSpeed43
		lineLabel = "1->2"
		lineLabel = "2->3"
		lineLabel = "3->4"
		lineLabel = "2->1"
		lineLabel = "3->2"
		lineLabel = "4->3"

curve = pcPerGearCurve, "Transmission Line Pressure Control"
		columnLabel = "Airmass", ""
		xAxis = 0, 5, 10
		yAxis = 0, 100, 10
		xBins = tcu_pcAirmassBins, mafEstimate
		yBins = tcu_pcValsR
		yBins = tcu_pcValsN
		yBins = tcu_pcVals1
		yBins = tcu_pcVals2
		yBins = tcu_pcVals3
		yBins = tcu_pcVals4
		lineLabel = "R%"
		lineLabel = "N%"
		lineLabel = "1%"
		lineLabel = "2%"
		lineLabel = "3%"
		lineLabel = "4%"

curve = pcPerShiftCurve, "Transmission Line Pressure Control - Shift"
		columnLabel = "Airmass", ""
		xAxis = 0, 5, 10
		yAxis = 0, 100, 10
		xBins = tcu_pcAirmassBins, mafEstimate
		yBins = tcu_pcVals12
		yBins = tcu_pcVals23
		yBins = tcu_pcVals34
		yBins = tcu_pcVals21
		yBins = tcu_pcVals32
		yBins = tcu_pcVals43
		lineLabel = "1->2%"
		lineLabel = "2->3%"
		lineLabel = "3->4%"
		lineLabel = "2->1%"
		lineLabel = "3->2%"
		lineLabel = "4->3%"

curve = 32Curve, "3-2 Shift Solenoid Percent by Speed"
		columnLabel = "Speed", "%"
		xAxis = 0, 200, 20
		yAxis = 0, 100, 10
		xBins = tcu_32SpeedBins, vehicleSpeedKph
		yBins = tcu_32Vals

curve = rangeMatrix, "Range Switch Input Matrix"
    columnLabel = "Pin", ""
    xAxis = 0, 6, 6
    yAxis = 0, 3, 3
    xBins = rangeInputArray
		yBins = tcu_rangeP
		yBins = tcu_rangeR
		yBins = tcu_rangeN
		yBins = tcu_rangeD
		yBins = tcu_rangeM
		yBins = tcu_rangeM3
		yBins = tcu_rangeM2
		yBins = tcu_rangeM1
		yBins = tcu_rangePlus
		yBins = tcu_rangeMinus
		yBins = tcu_rangeLow
		lineLabel = "Park"
		lineLabel = "Reverse"
		lineLabel = "Neutral"
		lineLabel = "Drive"
		lineLabel = "Manual"
		lineLabel = "Manual 3rd"
		lineLabel = "Manual 2nd"
		lineLabel = "Manual 1st"
		lineLabel = "Manual +"
		lineLabel = "Manual -"
		lineLabel = "Low"

	curve = ignAdder1Bias, "Ignition adder 1 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = ignBlends1_blendBins, ignBlendParameter1
		yBins = ignBlends1_blendValues

	curve = ignAdder2Bias, "Ignition adder 2 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = ignBlends2_blendBins, ignBlendParameter2
		yBins = ignBlends2_blendValues

	curve = ignAdder3Bias, "Ignition adder 3 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = ignBlends3_blendBins, ignBlendParameter3
		yBins = ignBlends3_blendValues

	curve = ignAdder4Bias, "Ignition adder 4 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = ignBlends4_blendBins, ignBlendParameter4
		yBins = ignBlends4_blendValues

	curve = veBlend1Bias, "VE blend 1 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, veBlends1_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = veBlends1_blendBins, veBlendParameter1
		yBins = veBlends1_blendValues

	curve = veBlend2Bias, "VE blend 2 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, veBlends2_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = veBlends2_blendBins, veBlendParameter2
		yBins = veBlends2_blendValues

	curve = veBlend3Bias, "VE blend 3 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, veBlends3_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = veBlends3_blendBins, veBlendParameter3
		yBins = veBlends3_blendValues

	curve = veBlend4Bias, "VE blend 4 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, veBlends4_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = veBlends4_blendBins, veBlendParameter4
		yBins = veBlends4_blendValues

	curve = boostOpenLoopBlend1Bias, "Boost open loop blend 1 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = boostOpenLoopBlends1_blendBins, boostOpenLoopBlendParameter1
		yBins = boostOpenLoopBlends1_blendValues

	curve = boostOpenLoopBlend2Bias, "Boost open loop blend 2 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = boostOpenLoopBlends2_blendBins, boostOpenLoopBlendParameter2
		yBins = boostOpenLoopBlends2_blendValues

	curve = boostClosedLoopBlend1Bias, "Boost Closed loop blend 1 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = boostClosedLoopBlends1_blendBins, boostClosedLoopBlendParameter1
		yBins = boostClosedLoopBlends1_blendValues

	curve = boostClosedLoopBlend2Bias, "Boost Closed loop blend 2 bias"
		columnLabel = "param", "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = boostClosedLoopBlends2_blendBins, boostClosedLoopBlendParameter2
		yBins = boostClosedLoopBlends2_blendValues

	curve = throttleEffectiveArea, "Throttle effective area"
		columnLabel = "TPS", "normalized flow"
		xAxis = 0, 100, 11
		yAxis = 0, 2, 5
		xBins = throttleEstimateEffectiveAreaBins, TPSValue
		yBins = throttleEstimateEffectiveAreaValues
		gauge = TPSGauge

	curve = boostOpenLoopGearAdderCurve, "Boost Open Loop gear-based modifier"
		columnLabel = "Gear", "duty cycle"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = gearCountArray, tcuCurrentGear
		yBins = gearBasedOpenLoopBoostAdder

	curve = minimumOilPressure, "Minimum oil pressure"
		columnLabel = "RPM", "min pressure"
		xAxis = 0, 8000, 9
		yAxis = 0, 500, 6
		xBins = minimumOilPressureBins, RPMValue
		yBins = minimumOilPressureValues
		gauge = OilPressGauge

	curve = maximumOilPressure, "Maximum oil pressure"
		columnLabel = "RPM", "max pressure"
		xAxis = 0, 8000, 5
		yAxis = 0, 2000, 5
		xBins = maximumOilPressureBins, RPMValue
		yBins = maximumOilPressureValues
		gauge = OilPressGauge

	curve = targetAfrBlend1Bias, "Target AFR adder 1 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, targetAfrBlends1_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = targetAfrBlends1_blendBins, targetAfrBlendParameter1
		yBins = targetAfrBlends1_blendValues

	curve = targetAfrBlend2Bias, "Target AFR adder 2 bias"
		columnLabel = {bitStringValue(pwmAxisLabels, targetAfrBlends2_blendParameter)}, "bias"
		xAxis = 0, 100, 11
		yAxis = 0, 100, 5
		xBins = targetAfrBlends2_blendBins, targetAfrBlendParameter2
		yBins = targetAfrBlends2_blendValues

	curve = idleFlowEstimate, "Idle flow estimate"
		columnLabel = "Flow", "Idle %"
		xAxis = 0, 20, 9
		yAxis = 0, 100, 7
		xBins = idleFlowEstimateFlow
		yBins = idleFlowEstimatePosition

	curve = idleAirmassTimingEquivalence, "Idle airmass/timing equivalence"
		columnLabel = "Airmass delta", "Timing adjustment"
		xAxis = -30, 30, 7
		yAxis = -20, 20, 5
		xBins = airmassToTimingBins
		yBins = airmassToTimingValues

[TableEditor]
	;		table_id,	map3d_id,	"title",		page


; move table into a panel? or find a way to add a link to https://rusefi.com/s/tpstps https://github.com/rusefi/rusefi/issues/5130
	table = tpsTpsAccelTbl,  tpsTpsAccelMap,  "TPS/TPS Acceleration Extra Fuel(ms)",	1
	topicHelp = "tpstpsHelp"
		xBins		= tpsTpsAccelFromRpmBins,  tpsFrom
		yBins		= tpsTpsAccelToRpmBins,  tpsTo
		zBins		= tpsTpsAccelTable

		table = tractionEtbTableTbl,  tractionEtb,  "Traction Control ETB drop",	1
		xBins		= tractionControlSpeedBins,  vehicleSpeedKph
		yBins		= tractionControlSlipBins,  wheelSlipRatio
		zBins		= tractionControlEtbDrop

		table = tractionTimingTableTbl,  tractionEtb,  "Traction Control Timing drop",	1
		xBins		= tractionControlSpeedBins,  vehicleSpeedKph
		yBins		= tractionControlSlipBins,  wheelSlipRatio
		zBins		= tractionControlTimingDrop

		table = tractionIgnitionSkipTableTbl,  tractionEtb,  "Traction Control Skip Ignition",	1
		xBins		= tractionControlSpeedBins,  vehicleSpeedKph
		yBins		= tractionControlSlipBins,  wheelSlipRatio
		zBins		= tractionControlIgnitionSkip

	table = boostTableTbl,  boostMapOpen,  "Boost control duty cycle (open loop)",	1
		xyLabels	= "RPMValue", {bitStringValue(pwmAxisLabels, boostOpenLoopYAxis)}
		xBins		= boostRpmBins,  RPMValue
		yBins		= boostOpenLoopLoadBins,  openLoopYAxis
		zBins		= boostTableOpenLoop

	table = boostClosedTbl,  boostMapClosed,  "Boost control target / Closed Loop (kPa)",	1
		xBins		= boostRpmBins,  RPMValue
		yBins		= boostClosedLoopLoadBins,  TPSValue
		zBins		= boostTableClosedLoop

	table = vvtTable1Tbl,  vvtTable1Map,  "Intake VVT closed loop Target",	1
		xBins		= vvtTable1RpmBins,  RPMValue
		yBins		= vvtTable1LoadBins,  fuelingLoad
		zBins		= vvtTable1

	table = vvtTable2Tbl,  vvtTable2Map,  "Exhaust VVT closed loop Target",	1
		xBins		= vvtTable2RpmBins,  RPMValue
		yBins		= vvtTable2LoadBins,  fuelingLoad
		zBins		= vvtTable2


	table = scriptTable1Tbl,  scriptTable1Map,  "Script Table #1",	1
		xBins		= scriptTable1RpmBins,  RPMValue
		yBins		= scriptTable1LoadBins,  fuelingLoad
		zBins		= scriptTable1

	table = scriptTable2Tbl,  scriptTable2Map,  "Script Table #2",	1
		xBins		= scriptTable2RpmBins,  RPMValue
		yBins		= scriptTable2LoadBins,  fuelingLoad
		zBins		= scriptTable2

	table = scriptTable3Tbl,  scriptTable3Map,  "Script Table #3",	1
		xBins		= scriptTable3RpmBins,  RPMValue
		yBins		= scriptTable3LoadBins,  fuelingLoad
		zBins		= scriptTable3

	table = scriptTable4Tbl,  scriptTable4Map,  "Script Table #4",	1
		xBins		= scriptTable4RpmBins,  RPMValue
		yBins		= scriptTable4LoadBins,  fuelingLoad
		zBins		= scriptTable4

	table = IgnRetardTableALS, IgnRetardALS,  "Ignition adjustment",   1
      xBins       = alsIgnRetardrpmBins,  RPMValue
      yBins       = alsIgnRetardLoadBins,  TPSValue
      zBins       = ALSTimingRetardTable
	  gridHeight  = 4.0
      gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.
      upDownLabel = "(RICHER)", "(LEANER)"

   table = FuelAdderTableALS, FuelAdderALS,  "Fuel adjustment",   1
      xBins       = alsFuelAdjustmentrpmBins,  RPMValue
      yBins       = alsFuelAdjustmentLoadBins,  TPSValue
      zBins       = ALSFuelAdjustment
	  gridHeight  = 4.0
      gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.
      upDownLabel = "(RICHER)", "(LEANER)"

	table = IgnSkipTableALS, IgnSkipALS,  "Ignition Skip",   1
      ;       constant, variable
      xBins       = alsIgnSkiprpmBins,  RPMValue
      yBins       = alsIgnSkipLoadBins,  TPSValue
      zBins       = ALSIgnSkipTable
	  gridHeight  = 4.0
      gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.
      upDownLabel = "(RICHER)", "(LEANER)"

	table = baroCorrTbl,  baroCorrMap,  "Baro Correction",	1
    topicHelp = "baroCorrectionHelp"
		xyLabels = "RPM", "Pressure"
		xBins		= baroCorrRpmBins,  RPMValue
		yBins		= baroCorrPressureBins,  BaroPressure
		zBins		= baroCorrTable
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = ignitionTableTbl,  ignitionTableMap,  "Ignition Table",	1
		xyLabels = "RPM", "Ignition Load"
		xBins		= ignitionRpmBins,  rpmForIgnitionTableDot
		yBins		= ignitionLoadBins,  loadForIgnitionTableDot
		zBins		= ignitionTable
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = ignAdder1Table, ignAdder1Map, "Ignition adder 1", 1
		xyLabels = "RPM", "Ignition Load"
		xBins		= ignBlends1_rpmBins, RPMValue
		yBins		= ignBlends1_loadBins, ignBlendYAxis1
		zBins		= ignBlends1_table
		gridOrient  = 250, 0, 340

	table = ignAdder2Table, ignAdder2Map, "Ignition adder 2", 1
		xyLabels = "RPM", "Ignition Load"
		xBins		= ignBlends2_rpmBins, RPMValue
		yBins		= ignBlends2_loadBins, ignBlendYAxis2
		zBins		= ignBlends2_table
		gridOrient  = 250, 0, 340

	table = ignAdder3Table, ignAdder3Map, "Ignition adder 3", 1
		xyLabels = "RPM", "Ignition Load"
		xBins		= ignBlends3_rpmBins, RPMValue
		yBins		= ignBlends3_loadBins, ignBlendYAxis3
		zBins		= ignBlends3_table
		gridOrient  = 250, 0, 340

	table = ignAdder4Table, ignAdder4Map, "Ignition adder 4", 1
		xyLabels = "RPM", "Ignition Load"
		xBins		= ignBlends4_rpmBins, RPMValue
		yBins		= ignBlends4_loadBins, ignBlendYAxis4
		zBins		= ignBlends4_table
		gridOrient  = 250, 0, 340

	table = veBlend1Table, veBlend1Map, "VE blend 1", 1
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, veBlends1_yAxisOverride)}
		xBins		= veBlends1_rpmBins, RPMValue
		yBins		= veBlends1_loadBins, veBlendYAxis1
		zBins		= veBlends1_table
		gridOrient  = 250, 0, 340

	table = veBlend2Table, veBlend2Map, "VE blend 2", 1
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, veBlends2_yAxisOverride)}
		xBins		= veBlends2_rpmBins, RPMValue
		yBins		= veBlends2_loadBins, veBlendYAxis2
		zBins		= veBlends2_table
		gridOrient  = 250, 0, 340

	table = veBlend3Table, veBlend3Map, "VE blend 3", 1
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, veBlends3_yAxisOverride)}
		xBins		= veBlends3_rpmBins, RPMValue
		yBins		= veBlends3_loadBins, veBlendYAxis3
		zBins		= veBlends3_table
		gridOrient  = 250, 0, 340

	table = veBlend4Table, veBlend4Map, "VE blend 4", 1
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, veBlends4_yAxisOverride)}
		xBins		= veBlends4_rpmBins, RPMValue
		yBins		= veBlends4_loadBins, veBlendYAxis4
		zBins		= veBlends4_table
		gridOrient  = 250, 0, 340

	table = boostOpenBlend1Table, boostOpenBlend1Map, "Boost open loop blend 1", 1
		xyLabels = "RPM", "TPS"
		xBins		= boostOpenLoopBlends1_rpmBins, RPMValue
		yBins		= boostOpenLoopBlends1_loadBins, boostOpenLoopBlendYAxis1
		zBins		= boostOpenLoopBlends1_table
		gridOrient  = 250, 0, 340

	table = boostOpenBlend2Table, boostOpenBlend2Map, "Boost open loop blend 2", 1
		xyLabels = "RPM", "TPS"
		xBins		= boostOpenLoopBlends2_rpmBins, RPMValue
		yBins		= boostOpenLoopBlends2_loadBins, boostOpenLoopBlendYAxis2
		zBins		= boostOpenLoopBlends2_table
		gridOrient  = 250, 0, 340

	table = boostClosedBlend1Table, boostClosedBlend1Map, "Boost closed loop blend 1", 1
	  topicHelp = "blendUniversalHelp"
		xyLabels = "RPM", "TPS"
		xBins		= boostClosedLoopBlends1_rpmBins, RPMValue
		yBins		= boostClosedLoopBlends1_loadBins, boostClosedLoopBlendYAxis1
		zBins		= boostClosedLoopBlends1_table
		gridOrient  = 250, 0, 340

	table = boostClosedBlend2Table, boostClosedBlend2Map, "Boost closed loop blend 2", 1
		xyLabels = "RPM", "TPS"
		xBins		= boostClosedLoopBlends2_rpmBins, RPMValue
		yBins		= boostClosedLoopBlends2_loadBins, boostClosedLoopBlendYAxis2
		zBins		= boostClosedLoopBlends2_table
		gridOrient  = 250, 0, 340

	table = targetAfrBlend1Table, targetAfrBlend1Map, "Target AFR adder 1", 1
	  topicHelp = "blendUniversalHelp"
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, targetAfrBlends1_yAxisOverride)}
		xBins		= targetAfrBlends1_rpmBins, RPMValue
		yBins		= targetAfrBlends1_loadBins, targetAfrBlendYAxis1
		zBins		= targetAfrBlends1_table
		gridOrient	= 250, 0, 340

	table = targetAfrBlend2Table, targetAfrBlend2Map, "Target AFR adder 2", 1
		xyLabels = "RPM", {bitStringValue(pwmAxisLabels, targetAfrBlends2_yAxisOverride)}
		xBins		= targetAfrBlends2_rpmBins, RPMValue
		yBins		= targetAfrBlends2_loadBins, targetAfrBlendYAxis2
		zBins		= targetAfrBlends2_table
		gridOrient	= 250, 0, 340

	table = ignitionIatCorrTableTbl,  ignitionIatCorrTableMap,  "Ignition Intake Air Temp correction",	1
		xyLabels = "Air Temp", "Ignition Load"
		xBins		= ignitionIatCorrTempBins,  intakeTemperature
		yBins		= ignitionIatCorrLoadBins,  ignitionLoad
		zBins		= ignitionIatCorrTable
;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = ignitionCltCorrTable, ignitionCltCorrMap, "Warmup timing correction", 1
		xyLabels = "CLT Temp", "Ignition Load"
		xBins		= ignitionCltCorrTempBins,  coolantTemperature
		yBins		= ignitionCltCorrLoadBins,  ignitionLoad
		zBins		= ignitionCltCorrTable
		;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = trailingSparkTable, trailingSparkMap, "Trailing spark", 1
		xyLabels = "RPM", "Ignition Load"
		xBins		= trailingSparkRpmBins,  RPMValue
		yBins		= trailingSparkLoadBins,  ignitionLoad
		zBins		= trailingSparkTable

	table = torqueTableTbl, torqueTableMap, "Engine Torque", 1
		xBins		= torqueRpmBins, RPMValue
		yBins		= torqueLoadBins, veTableYAxis
		zBins		= torqueTable

	table = torque2TableTbl, torque2TableMap, "TMF", 1
		xBins		= tmfRatioBins,  throttlePressureRatio
		yBins		= tmfOpeningBins, throttleEffectiveAreaOpening
		zBins		= tmfTable

	table = veTableTbl,  veTableMap,  "VE Table",	1
		xyLabels	= "RPM", {bitStringValue(veAxisLabels, veOverrideMode)}
		xBins		= veRpmBins,  RPMValue
		yBins		= veLoadBins, veTableYAxis
		zBins		= veTable
;		gridHeight	= 2.0
		gridOrient	= 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel	= "(RICHER)", "(LEANER)"

	table = idleVeTableTbl, idleVeTable, "Idle VE"
		xyLabels = "RPM", "load"
		xBins		= idleVeRpmBins,  RPMValue
		yBins		= idleVeLoadBins, veTableIdleYAxis
		zBins		= idleVeTable
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl1,  fuelTrimMap1,  "Fuel trim cyl 1",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims1_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl2,  fuelTrimMap2,  "Fuel trim cyl 2",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims2_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl3,  fuelTrimMap3,  "Fuel trim cyl 3",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims3_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl4,  fuelTrimMap4,  "Fuel trim cyl 4",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims4_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl5,  fuelTrimMap5,  "Fuel trim cyl 5",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims5_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl6,  fuelTrimMap6,  "Fuel trim cyl 6",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims6_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl7,  fuelTrimMap7,  "Fuel trim cyl 7",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims7_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl8,  fuelTrimMap8,  "Fuel trim cyl 8",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims8_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl9,  fuelTrimMap9,  "Fuel trim cyl 9",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims9_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl10,  fuelTrimMap10,  "Fuel trim cyl 10",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims10_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl11,  fuelTrimMap11,  "Fuel trim cyl 11",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims11_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = fuelTrimTbl12,  fuelTrimMap12,  "Fuel trim cyl 12",	1
		xBins = fuelTrimRpmBins,  RPMValue
		yBins = fuelTrimLoadBins, fuelingLoad
		zBins = fuelTrims12_table
		upDownLabel = "(RICHER)", "(LEANER)"

	table = ignTrimTbl1,  ignTrimMap1,  "Ignition trim cyl 1",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims1_table

	table = ignTrimTbl2,  ignTrimMap2,  "Ignition trim cyl 2",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims2_table

	table = ignTrimTbl3,  ignTrimMap3,  "Ign trim cyl 3",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims3_table

	table = ignTrimTbl4,  ignTrimMap4,  "Ign trim cyl 4",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims4_table

	table = ignTrimTbl5,  ignTrimMap5,  "Ign trim cyl 5",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims5_table

	table = ignTrimTbl6,  ignTrimMap6,  "Ign trim cyl 6",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims6_table

	table = ignTrimTbl7,  ignTrimMap7,  "Ign trim cyl 7",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims7_table

	table = ignTrimTbl8,  ignTrimMap8,  "Ign trim cyl 8",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims8_table

	table = ignTrimTbl9,  ignTrimMap9,  "Ign trim cyl 9",	1
		xBins =ignTrimRpmBins,  RPMValue
		yBins =ignTrimLoadBins, ignitionLoad
		zBins =ignTrims9_table

	table = ignTrimTbl10,  ignTrimMap10,  "Ign trim cyl 10",	1
		xBins = ignTrimRpmBins,  RPMValue
		yBins = ignTrimLoadBins, ignitionLoad
		zBins = ignTrims10_table

	table = ignTrimTbl11,  ignTrimMap11,  "Ign trim cyl 11",	1
		xBins = ignTrimRpmBins,  RPMValue
		yBins = ignTrimLoadBins, ignitionLoad
		zBins = ignTrims11_table

	table = ignTrimTbl12,  ignTrimMap12,  "Ign trim cyl 12",	1
		xBins = ignTrimRpmBins,  RPMValue
		yBins = ignTrimLoadBins, ignitionLoad
		zBins = ignTrims12_table

	table = mapEstimateTableTbl, mapEstimateTableMap, "MAP Estimate", 1
		xBins = mapEstimateRpmBins, RPMValue
		yBins = mapEstimateTpsBins, TPSValue
		zBins = mapEstimateTable

	table = injPhaseTableTbl,  injPhaseTableMap,  "Injection Timing",	1
		topicHelp = "fuelHelp"
		xBins		= injPhaseRpmBins,  RPMValue
		yBins		= injPhaseLoadBins,  fuelingLoad
		zBins		= injectionPhase
;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(Later)", "(Sooner)"

	table = pedalToTpsTbl,  pedalToTpsMap,  "ETB pedal target",	1
		xBins		= pedalToTpsRpmBins,  RPMValue
		yBins		= pedalToTpsPedalBins,  throttlePedalPosition
		zBins		= pedalToTpsTable
;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(Later)", "(Sooner)"

	table = throttle2TrimTbl, throttle2TrimMap,  "ETB #2 Trim",	1
		xBins		= throttle2TrimRpmBins,  RPMValue
		yBins		= throttle2TrimTpsBins,  TPSValue
		zBins		= throttle2TrimTable
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.

	table = maxKnockRetardTbl, maxKnockRetardMap,  "Max knock retard",	1
		xBins		= maxKnockRetardRpmBins,  RPMValue
		yBins		= maxKnockRetardLoadBins,  TPSValue
		zBins		= maxKnockRetardTable
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.

#if LAMBDA
	table = lambdaTableTbl,  lambdaTableMap,  "Target Lambda Table",	1
#else
	table = afrTableTbl,  afrTableMap,  "Target AFR Table",	1
#endif
		xyLabels	= "RPM", {bitStringValue(targetAfrAxisLabels, afrOverrideMode)}
		xBins		= lambdaRpmBins,  RPMValue
		yBins		= lambdaLoadBins, afrTableYAxis
		zBins		= lambdaTable
;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(RICHER)", "(LEANER)"

	table = lambdaMaxDeviationTableTbl, lambdaMaxDeviationTableMap, "Maximum Lambda Deviation", 1
		xyLabels = "RPM", ""
		xBins = lambdaMaxDeviationRpmBins, RPMValue
		yBins = lambdaMaxDeviationLoadBins, afrTableYAxis
		zBins = lambdaMaxDeviationTable

	table = iacPidMultTbl,  iacPidMultMap,  "IAC PID Multiplier Table",	1
		xBins		= iacPidMultRpmBins,  RPMValue
		yBins		= iacPidMultLoadBins,  fuelingLoad
		zBins		= iacPidMultTable
;		gridHeight  = 2.0
		gridOrient  = 250,	0, 340 ; Space 123 rotation of grid in degrees.
		upDownLabel = "(Later)", "(Sooner)"

	table = gppwm1Tbl, gppwm1Map, "GP#1", 1
		xyLabels = {bitStringValue(pwmAxisLabels, gppwm1_rpmAxis)}, {bitStringValue(pwmAxisLabels, gppwm1_loadAxis)}
		xBins = gppwm1_rpmBins, gppwmXAxis1
		yBins = gppwm1_loadBins, gppwmYAxis1
		zBins = gppwm1_table

	table = gppwm2Tbl, gppwm2Map, "GP#2", 1
    xyLabels = {bitStringValue(pwmAxisLabels, gppwm2_rpmAxis)}, {bitStringValue(pwmAxisLabels, gppwm2_loadAxis)}
		xBins = gppwm2_rpmBins, gppwmXAxis2
		yBins = gppwm2_loadBins, gppwmYAxis2
		zBins = gppwm2_table

	table = gppwm3Tbl, gppwm3Map, "GP#3", 1
    xyLabels = {bitStringValue(pwmAxisLabels, gppwm3_rpmAxis)}, {bitStringValue(pwmAxisLabels, gppwm3_loadAxis)}
		xBins = gppwm3_rpmBins, gppwmXAxis3
		yBins = gppwm3_loadBins, gppwmYAxis3
		zBins = gppwm3_table

	table = gppwm4Tbl, gppwm4Map, "GP#4", 1
    xyLabels = {bitStringValue(pwmAxisLabels, gppwm4_rpmAxis)}, {bitStringValue(pwmAxisLabels, gppwm4_loadAxis)}
		xBins = gppwm4_rpmBins, gppwmXAxis4
		yBins = gppwm4_loadBins, gppwmYAxis4
		zBins = gppwm4_table

	table = stagedInjectionTbl, stagedInjectionMap, "Staged Injection %", 1
		xyLabels = "RPM", ""
		xBins = injectorStagingRpmBins, RPMValue
		yBins = injectorStagingLoadBins, afrTableYAxis
		zBins = injectorStagingTable

	table = tcuSolenoidTableTbl,  tcuSolenoidTableMap,  "Solenoids Active By Gear",	1
		xBins		= gearCountArray, tcuCurrentGear
		yBins		= solenoidCountArray, tcuCurrentGear
		zBins		= tcuSolenoidTable
		xyLabels	= "Gear", "Solenoid"

	table = hpfpTargetTable, hpfpTargetTableId, "HPFP Target Fuel Pressure", 1
		xBins	= hpfpTargetRpmBins, RPMValue
		yBins	= hpfpTargetLoadBins, veTableYAxis
		zBins	= hpfpTarget

	table = hpfpCompensationTable, hpfpCompensationTableId, "HPFP Pump Feed Forward", 1
		xBins	= hpfpCompensationRpmBins, RPMValue
		yBins	= hpfpCompensationLoadBins, running_fuel
		zBins	= hpfpCompensation

	table = hpfpFuelMassCompensationTable, hpfpFuelMassCompensationTableId, "HPFP Fuel mass compensation Factor", 1
		xyLabels	= "mg", "BAR"
		xBins	= hpfpFuelMassCompensationFuelMass, running_baseFuel
		yBins	= hpfpFuelMassCompensationFuelPressure, highFuelPressure
		zBins	= hpfpFuelMassCompensation

	table = injectorFlowLinearizationTable, injectorFlowLinearizationTableId, "Plain Injector Model", 1
		xyLabels	= "mg", "BAR"
		xBins	= injectorFlowLinearizationFuelMassBins, running_baseFuel
		yBins	= injectorFlowLinearizationPressureBins, highFuelPressure
		zBins	= injectorFlowLinearization

	table = postCrankingEnrichmentTbl, postCrankingEnrichmentMap, "After start enrichment", 1
		xyLabels	= "Engine Cycles", "Coolant Temp"
		xBins		= postCrankingDurationBins, revolutionCounterSinceStart
		yBins		= postCrankingCLTBins, coolantTemperature
		zBins		= postCrankingFactor

	table = crankingCycleFuelMultTbl, crankingCycleFuelMultMap, "Cranking Cycle Base Fuel", 1
		xyLabels	= "Engine Cycles", "Coolant Temp"
		xBins		= crankingCycleBins, revolutionCounterSinceStart
		yBins		= crankingCycleFuelCltBins, coolantTemperature
		zBins		= crankingCycleBaseFuel

	table = alternatorVoltageTargetTableTbl,  alternatorVoltageTargetTableMap,  "Alternator Voltage Target Table",	1
		xBins		= alternatorVoltageTargetRpmBins,  RPMValue
		yBins		= alternatorVoltageTargetLoadBins,  ignitionLoad
		zBins		= alternatorVoltageTargetTable

	table = injectorsDeadTime, injectorsDeadTimeMap, "Injector dead time"
		xyLabels = "Battery", "Pressure"
		xBins		= injector_battLagCorrBattBins, VBatt
		yBins		= injector_battLagCorrPressBins, pressureCorrectionReference
		zBins		= injector_battLagCorrTable

	table = injectorsSecondaryDeadTime, injectorsSecondaryDeadTimeMap, "Secondary injector dead time"
		xyLabels = "Battery", "Pressure"
		xBins		= injectorSecondary_battLagCorrBattBins, VBatt
		yBins		= injectorSecondary_battLagCorrPressBins, pressureCorrectionReference
		zBins		= injectorSecondary_battLagCorrTable

	table = cltIdleTable, cltIdleTableMap, "Idle position by Engine Temperature"
		xyLabels    = "Coolant", "RPM"
		xBins		= cltIdleCorrBins, coolantTemperature
		yBins		= rpmIdleCorrBins, m_lastTargetRpm
		zBins		= cltIdleCorrTable

	table = torqueReductionIgnitionCutTlb, torqueReductionIgnitionCutMap, "Torque reduction cut table"
		xyLabels    = {bitStringValue(pwmAxisLabels, torqueReductionCutXaxis)}, "Current Gear"
		xBins		= torqueReductionCutXBins, gppwmXAxis1
		yBins		= torqueReductionCutGearBins, tcuCurrentGear
		zBins		= torqueReductionIgnitionCutTable

	table = torqueReductionIgnitionRetardTlb, torqueReductionIgnitionRetardMap, "Torque reduction ignition retard table"
		xyLabels    = {bitStringValue(pwmAxisLabels, torqueReductionIgnitionRetardXaxis)}, "Current Gear"
		xBins		= torqueReductionIgnitionRetardXBins, gppwmXAxis1
		yBins		= torqueReductionIgnitionRetardGearBins, tcuCurrentGear
		zBins		= torqueReductionIgnitionRetardTable

	table = torqueReductionTimeTlb, torqueReductionTimeMap, "Torque reduction time table"
		xyLabels    = {bitStringValue(pwmAxisLabels, torqueReductionTimeXaxis)}, "Current Gear"
		xBins		= torqueReductionTimeXBins, gppwmXAxis1
		yBins		= torqueReductionTimeGearBins, tcuCurrentGear
		zBins		= torqueReductionTimeTable

	table = ltftBank1Tbl, ltftBank1Map, "Long Term Fuel Trim Bank 1"
		xyLabels	= "RPM", {bitStringValue(veAxisLabels, veOverrideMode)}
		xBins		= veRpmBins,  RPMValue, readOnly
		yBins		= veLoadBins, veTableYAxis, readOnly
		zBins       = ltft_table_bank1
		upDownLabel = "RICHER", "LEANER"
		gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.

	table = ltftBank2Tbl, ltftBank2Map, "Long Term Fuel Trim Bank 2"
		xyLabels	= "RPM", {bitStringValue(veAxisLabels, veOverrideMode)}
		xBins		= veRpmBins,  RPMValue, readOnly
		yBins		= veLoadBins, veTableYAxis, readOnly
		zBins       = ltft_table_bank2
		upDownLabel = "RICHER", "LEANER"
		gridOrient  = 250,   0, 340 ; Space 123 rotation of grid in degrees.

[GaugeConfigurations]
	gaugeCategory = "Fuel: math"
totalFuelCorrectionGauge = totalFuelCorrection,"Fuel: Total correction", "mult", 0.0,3.0, 0.0,3.0, 0.0,3.0, 2,2
running_timeSinceCrankingInSecsGauge = running_timeSinceCrankingInSecs,"running_ timeSinceCrankingInSecs", "secs", 0.0,600000.0, 0.0,600000.0, 0.0,600000.0, 0,0
targetLambdaGauge = targetLambda,"Fuel: target lambda", "", 0.5,1.5, 0.5,1.5, 0.5,1.5, 2,2
targetAFRGauge = targetAFR,"Fuel: target AFR", "ratio", 10.0,20.0, 10.0,20.0, 10.0,20.0, 2,2
	gaugeCategory = "Timing"
baseDwellGauge = baseDwell,"Ignition: base dwell", "ms", 0.0,30.0, 0.0,30.0, 0.0,30.0, 1,1
sparkDwellGauge = sparkDwell,"Ignition: coil charge time", "ms", 0.0,30.0, 0.0,30.0, 0.0,30.0, 1,1
dwellDurationAngleGauge = dwellDurationAngle,"Ignition: dwell duration", "deg", 0.0,120.0, 0.0,120.0, 0.0,120.0, 1,1
cltTimingCorrectionGauge = cltTimingCorrection,"Ign: CLT correction", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
timingIatCorrectionGauge = timingIatCorrection,"Ign: IAT correction", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
timingPidCorrectionGauge = timingPidCorrection,"Idle: Timing adjustment", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
luaTimingAddGauge = luaTimingAdd,"Ign: Lua timing add", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
luaTimingMultGauge = luaTimingMult,"Ign: Lua timing mult", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
trailingSparkAngleGauge = trailingSparkAngle,"Ign: Trailing spark deg", "deg", -20.0,20.0, -20.0,20.0, -20.0,20.0, 2,2
sparkDuration1Gauge = sparkDuration1,"Spark duration 1", "ms", 0.0,5.0, 0.0,5.0, 0.0,5.0, 3,3
sparkDuration2Gauge = sparkDuration2,"Spark duration 2", "ms", 0.0,5.0, 0.0,5.0, 0.0,5.0, 3,3
sparkDuration3Gauge = sparkDuration3,"Spark duration 3", "ms", 0.0,5.0, 0.0,5.0, 0.0,5.0, 3,3
sparkDuration4Gauge = sparkDuration4,"Spark duration 4", "ms", 0.0,5.0, 0.0,5.0, 0.0,5.0, 3,3
	gaugeCategory = "Boost Control"
luaTargetAddGauge = luaTargetAdd,"Boost: Lua target add", "percent", -100.0,100.0, -100.0,100.0, -100.0,100.0, 1,1
luaTargetMultGauge = luaTargetMult,"Boost: Lua target mult", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 1,1
boostControlTargetGauge = boostControlTarget,"Boost: Target", "kPa", 0.0,300.0, 0.0,300.0, 0.0,300.0, 1,1
openLoopPartGauge = openLoopPart,"Boost: Open loop", "percent", -100.0,100.0, -100.0,100.0, -100.0,100.0, 1,1
luaOpenLoopAddGauge = luaOpenLoopAdd,"Boost: Lua open loop add", "percent", -100.0,100.0, -100.0,100.0, -100.0,100.0, 1,1
boostControllerClosedLoopPartGauge = boostControllerClosedLoopPart,"Boost: Closed loop", "%", -50.0,50.0, -50.0,50.0, -50.0,50.0, 1,1
boostOutputGauge = boostOutput,"Boost: Output", "percent", -100.0,100.0, -100.0,100.0, -100.0,100.0, 2,2
	gaugeCategory = "Sync"
currentEngineDecodedPhaseGauge = currentEngineDecodedPhase,"Sync: Engine Phase", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	gaugeCategory = "ETB more"
etb1targetWithIdlePositionGauge = etb1targetWithIdlePosition,"etb1 ETB: target with idle", "%", 0.0,10.0, 0.0,10.0, 0.0,10.0, 2,2
etb1luaAdjustmentGauge = etb1luaAdjustment,"etb1 ETB: luaAdjustment", "%", 0.0,3.0, 0.0,3.0, 0.0,3.0, 2,2
etb1m_wastegatePositionGauge = etb1m_wastegatePosition,"etb1 DC: wastegatePosition", "%", 0.0,3.0, 0.0,3.0, 0.0,3.0, 2,2
etb1m_lastPidDtMsGauge = etb1m_lastPidDtMs,"etb1 EBT: last PID dT", "mS", 0.0,4.0, 0.0,4.0, 0.0,4.0, 3,3
etb1integralErrorGauge = etb1integralError,"etb1 Integral error", "", 0.0,100.0, 0.0,100.0, 0.0,100.0, 3,3
etb1etbTpsErrorCounterGauge = etb1etbTpsErrorCounter,"etb1 ETB TPS error counter", "count", 0.0,3.0, 0.0,3.0, 0.0,3.0, 0,0
etb1etbPpsErrorCounterGauge = etb1etbPpsErrorCounter,"etb1 ETB pedal error counter", "count", 0.0,3.0, 0.0,3.0, 0.0,3.0, 0,0
etb2targetWithIdlePositionGauge = etb2targetWithIdlePosition,"etb2 ETB: target with idle", "%", 0.0,10.0, 0.0,10.0, 0.0,10.0, 2,2
etb2luaAdjustmentGauge = etb2luaAdjustment,"etb2 ETB: luaAdjustment", "%", 0.0,3.0, 0.0,3.0, 0.0,3.0, 2,2
etb2m_wastegatePositionGauge = etb2m_wastegatePosition,"etb2 DC: wastegatePosition", "%", 0.0,3.0, 0.0,3.0, 0.0,3.0, 2,2
etb2m_lastPidDtMsGauge = etb2m_lastPidDtMs,"etb2 EBT: last PID dT", "mS", 0.0,4.0, 0.0,4.0, 0.0,4.0, 3,3
etb2integralErrorGauge = etb2integralError,"etb2 Integral error", "", 0.0,100.0, 0.0,100.0, 0.0,100.0, 3,3
etb2etbTpsErrorCounterGauge = etb2etbTpsErrorCounter,"etb2 ETB TPS error counter", "count", 0.0,3.0, 0.0,3.0, 0.0,3.0, 0,0
etb2etbPpsErrorCounterGauge = etb2etbPpsErrorCounter,"etb2 ETB pedal error counter", "count", 0.0,3.0, 0.0,3.0, 0.0,3.0, 0,0
dcOutput0Gauge = dcOutput0,"DC: output0", "%", -1.0,1.0, -1.0,1.0, -1.0,1.0, 2,2
isEnabled0_intGauge = isEnabled0_int,"DC: en0", "%", 0.0,10.0, 0.0,10.0, 0.0,10.0, 2,2
	gaugeCategory = "Sensors - SENT"
value0Gauge = value0,"SENT ch0 value0", "RAW", 0.0,4095.0, 0.0,4095.0, 0.0,4095.0, 0,0
value1Gauge = value1,"SENT ch0 value1", "RAW", 0.0,4095.0, 0.0,4095.0, 0.0,4095.0, 0,0
errorRateGauge = errorRate,"SENT ch0 error rate", "% (don't belive me)", 0.0,100.0, 0.0,100.0, 0.0,100.0, 2,2



       ;Name               Var            Title                 Units     Lo,Hi     LowDanger,LowWarning,HiWarning,HiDanger vd,ld
gaugeCategory = Trigger
	triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count",	0,	15000,	0,	0,	10,  300,	0,	0
	triggerSyncGapRatioGauge = trgtriggerSyncGapRatio,"triggerSyncGapRatio", "", -10000,10000, -10000,-10000, 10000,10000, 3,3
	triggerStateIndexGauge = trgtriggerStateIndex,"triggerStateIndex", "",       -10000,10000, -10000,-10000, 10000,10000, 3,3
	triggerPrimaryFallCounterGauge = triggerPrimaryFall,"triggerPrimaryFall", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerPrimaryRiseCounterGauge = triggerPrimaryRise,"triggerPrimaryRise", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerSecondaryFallCounterGauge = triggerSecondaryFall,"triggerSecondaryFall", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerSecondaryRiseCounterGauge = triggerSecondaryRise,"triggerSecondaryRise", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerVvt1FallCounterGauge = vvtEventFallCounter1,"triggerVvtFall", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerVvt1RiseCounterGauge = vvtEventRiseCounter1,"triggerVvtRise", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerVvt2FallCounterGauge = vvtEventFallCounter2,"triggerVvt2Fall", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	triggerVvt2RiseCounterGauge = vvtEventRiseCounter2,"triggerVvt2Rise", "", 0,10000.0, 0,10000.0, 0,10000.0, 3,3
	currentEnginePhaseGauge = currentEngineDecodedPhase, "Engine Phase", "deg", 0, 720, 0, 0, 720, 720, 0, 0
	revolutionCounterSinceStartGauge = revolutionCounterSinceStart, "Engine Cycle Count", "count",	0,	15000,	0,	0,	10,  300,	0,	0

gaugeCategory = Test Bench
	testBenchIterGauge = testBenchIter, "Test Bench Iterations", "count", -10, {benchTestCount + 10}, -5, 0, {benchTestCount}, {benchTestCount + 5}, 1, 1

gaugeCategory = LUA
	luaInvocationCounterGauge = luaInvocationCounter,"luaInvocationCounter", "count", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	luaLastCycleDurationGauge = luaLastCycleDuration,"luaLastCycleDuration", "nt", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	luaGauges1gauge = luaGauges1, "Lua Gauge 1", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges2gauge = luaGauges2, "Lua Gauge 2", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges3gauge = luaGauges3, "Lua Gauge 3", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges4gauge = luaGauges4, "Lua Gauge 4", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges5gauge = luaGauges5, "Lua Gauge 5", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges6gauge = luaGauges6, "Lua Gauge 6", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges7gauge = luaGauges7, "Lua Gauge 7", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3
	luaGauges8gauge = luaGauges8, "Lua Gauge 8", "lua", -30000,30000, 0, 0, 30000, 30000, 3, 3

gaugeCategory = Alternator PID
	alternatorStatus_iTermGauge = alternatorStatus_iTerm,"Alternator PID iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	alternatorStatus_dTermGauge = alternatorStatus_dTerm,"Alternator PID dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	alternatorStatus_outputGauge = alternatorStatus_output,"Alternator PID output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	alternatorStatus_errorGauge = alternatorStatus_error,"Alternator PID error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	alternatorStatus_resetCounterGauge = alternatorStatus_resetCounter,"Alternator PID resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0

gaugeCategory = Boost PID
	boostStatus_iTermGauge = boostStatus_iTerm,"Boost PID iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	boostStatus_dTermGauge = boostStatus_dTerm,"Boost PID dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	boostStatus_outputGauge = boostStatus_output,"Boost PID output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	boostStatus_errorGauge = boostStatus_error,"Boost PID error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	boostStatus_resetCounterGauge = boostStatus_resetCounter,"Boost PID resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0

gaugeCategory = Idle
	idlePosSensGauge  = idlePositionSensor,		"Idle: Position sensor",		"%",		0,	100,		0,		0,	100,	100,	1,	1
	idleAirValvePositionGauge = currentIdlePosition, "Idle position", "%",	0,	100,	0,	0,	100,  100,	1,	1
	idleStepperTargetPositionGauge = idleStepperTargetPosition, "Idle steps", "#",	0,	idleStepperTotalSteps,	0,	0,	idleStepperTotalSteps,  idleStepperTotalSteps,	1,	1
	idleStatus_iTermGauge = idleStatus_iTerm,"Idle PID iTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	idleStatus_dTermGauge = idleStatus_dTerm,"Idle PID dTerm", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	idleStatus_outputGauge = idleStatus_output,"Idle PID output", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	idleStatus_errorGauge = idleStatus_error,"Idle PID error", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 3,3
	idleStatus_resetCounterGauge = idleStatus_resetCounter,"Idle PID resetCounter", "", -10000.0,10000.0, -10000.0,10000.0, -10000.0,10000.0, 0,0

gaugeCategory = Etb PID
	etbStatus_iTermGauge = etbStatus_iTerm,"ETB 1 PID iTerm", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	etbStatus_dTermGauge = etbStatus_dTerm,"ETB 1 PID dTerm", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	etbStatus_outputGauge = etbStatus_output,"ETB 1 PID output", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	etbStatus_errorGauge = etbStatus_error,"ETB 1 PID error", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	etbStatus_resetCounterGauge = etbStatus_resetCounter,"ETB 1 PID resetCounter", "", 0,100.0, 0,100.0, 0,100.0, 0,0

	wgStatus_iTermGauge = wastegateDcStatus_iTerm,"WG PID iTerm", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	wgStatus_dTermGauge = wastegateDcStatus_dTerm,"WG PID dTerm", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	wgStatus_outputGauge = wastegateDcStatus_output,"WG PID output", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	wgStatus_errorGauge = wastegateDcStatus_error,"WG PID error", "", -100.0,100.0, -100.0,100.0, -100.0,100.0, 3,3
	wgStatus_resetCounterGauge = wastegateDcStatus_resetCounter,"WG PID resetCounter", "", 0,100.0, 0,100.0, 0,100.0, 0,0

gaugeCategory = CAN
	canReadCounterGauge = canReadCounter,"CAN: Rx", "", 0,64000, 0,64000, 0,64000, 0,0
	canWriteOkGauge = canWriteOk,"CAN: Tx OK",        "", 0,64000, 0,64000, 0,64000, 0,0
	canWriteNotOkGauge = canWriteNotOk,"CAN: Tx err", "", 0,64000, 0,64000, 0,64000, 0,0

gaugeCategory = GDI
	di_nextStartGauge = di_nextStart,"DI: next start", "v", 0.0,100.0, 0.0,100.0, 0.0,100.0, 0,0
	m_requested_pumpGauge = m_requested_pump,"DI: Pump Angle", "deg", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	fuel_requested_percentGauge = fuel_requested_percent,"DI: HPFP requested duty", "%", 0.0, 100.0, 0.0, 0.0, 80.0, 90.0, 0,0
	fuel_requested_percent_piGauge = fuel_requested_percent_pi,"DI: fuel_requested_percent_pi", "v", 0.0,100.0, 0.0,100.0, 0.0,100.0, 0,0
	;todo see comment in HpfpQuantity class definition
	;m_I_sum_percentGauge = m_I_sum_percent,"DI: m_I_sum_percent", "v", 0.0,100.0, 0.0,100.0, 0.0,100.0, 0,0
	;m_pressureTarget_kPaGauge = m_pressureTarget_kPa,"DI: m_pressureTarget_kPa", "v", 0.0,100.0, 0.0,100.0, 0.0,100.0, 0,0
	highFuelPressureGauge = highFuelPressure, "Fuel pressure (high)", "bar", 0, 200, 0, 0, 200, 200, 1, 0

gaugeCategory = ECU Status
	warningCounterGauge = warningCounter, "Warning: counter", "",	0,	100,	0,	0,	100,  100,	0,	0
	lastErrorCodeGauge = lastErrorCode, "Warning: last", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C",	0,	100,	0,	0,	75,  100,	1,1
	internalVrefGauge = internalVref, "ECU Vref voltage", "V", 2, 6, { adcVcc - 0.3 } , { adcVcc - 0.15 }, { adcVcc + 0.15 } , { adcVcc + 0.3 }, 2, 1
	recentErrorCode1Gauge = recentErrorCode1, "Error#1", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode2Gauge = recentErrorCode2, "Error#2", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode3Gauge = recentErrorCode3, "Error#3", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode4Gauge = recentErrorCode4, "Error#4", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode5Gauge = recentErrorCode5, "Error#5", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode6Gauge = recentErrorCode6, "Error#6", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode7Gauge = recentErrorCode7, "Error#7", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	recentErrorCode8Gauge = recentErrorCode8, "Error#8", "",	0,  18000,	0,	0,	18000, 18000,	0,	0
	firmwareVersionGauge  = firmwareVersion , "ECU: Software Version", "%",	0,	100,	0,	0,	100,  100,	0,	0
	timeSecondsGauge	=	seconds, "Uptime", "sec",	0,	100,	0,	0,	100,  100,	0,	0
	tuneCrc16Gauge = tuneCrc16, "Tune CRC16", "",	0,  64000,	0,	0,	64000, 64000,	0,	0
	rtcUnixEpochTimeGauge	=	rtcUnixEpochTime, "Epoch Time", "sec",	0,	100,	0,	0,	100,  100,	0,	0

gaugeCategory = Debug
	debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	4,	4
	debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List,  debugMode )}, "",  -100,	100,	0,	0,	100,  100,	4,	4
	debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List,  debugMode )}, "",  -100,	100,	0,	0,	100,  100,	4,	4
	debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	4,	4
	debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	4,	4
	debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List,  debugMode )}, "",  -100,	100,	0,	0,	100,  100,	4,	4
	debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	4,	4
	debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	0,	0
	debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	0,	0
	debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	0,	0
	debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	0,	0
	debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List,  debugMode )}, "",	0,	100,	0,	0,	100,  100,	0,	0

gaugeCategory = Sensors - Basic
	RPMGauge			= RPMValue,			"RPM - engine speed",		"RPM",		0, {rpmHardLimit + 2000},	200, {cranking_rpm}, {rpmHardLimit - 500},  {rpmHardLimit},	0,	0

;#if USE_METRIC_UNITS
	CLTGauge			= coolantTemperature,		"Coolant temp",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
	IATGauge			= intakeTemperature,		"Intake air temp",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
;#else
;	CLTGauge			= coolantTemperature,		"Coolant temp",		"F",		-40,	284,	5,		33.8,		203,	230,	1,2
;	IATGauge			= intakeTemperature,		"IAT",				"F",		-40,	140,	-15,		1,		95,		110,	1,2
;#endif

	afr1Gauge			= AFRValue, "Air/Fuel Ratio",			"",		10,	19.4,		12,	13,		15,	16,	2,	2
	afr2Gauge			= AFRValue2, "Air/Fuel Ratio 2",		"",		10,	19.4,		12,	13,		15,	16,	2,	2
	smoothedAfr1Gauge			= SmoothedAFRValue, "Smoothed Air/Fuel Ratio",			"",		10,	19.4,		12,	13,		15,	16,	2,	2
	smoothedAfr2Gauge			= SmoothedAFRValue2, "Smoothed Air/Fuel Ratio 2",		"",		10,	19.4,		12,	13,		15,	16,	2,	2
	afrGasScale1Gauge	= afrGasolineScale, "Air/Fuel Ratio (Gas Scale)",	"",		10,	19.4,		12,	13,		15,	16,	2,	2
	afrGasScale2Gauge	= afr2GasolineScale, "Air/Fuel Ratio 2 (Gas Scale)",	"",		10,	19.4,		12,	13,		15,	16,	2,	2
	lambda1Gauge		= lambdaValue, "Lambda",	"",		0.65,	1.2,		0.7,	0.75,		1.1,	1.15,	3,	2
	lambda2Gauge		= lambdaValue2, "Lambda 2",  "",		0.65,	1.2,		0.7,	0.75,		1.1,	1.15,	3,	2
	VBattGauge		= VBatt,		"Battery",			"V",		8,	21,		9,	10,		17,	19,	1,	1
;#if USE_METRIC_UNITS
	MAPGauge		= MapPressure,					"MAP",		"kPa",		0,	300,		10,	10,	200,	200,	0,	0
;#else
;	MAPGauge		= MapPressure,					"MAP",		"psi",		0,	43,		1.45,	1.45,	29,	29,	0,	0
;#endif
	massAirFlowValueGa = mafMeasured, "MAF",		"kg/h",		0,	50,	-999,	-999,	999,	999,	1,	1
	massAirFlowEstimateGa = mafEstimate, "Air: Flow estimate",		"kg/h",		0,	50,	-999,	-999,	999,	999,	1,	1

gaugeCategory = Sensors - Extra 1
;#if USE_METRIC_UNITS
	VSSGauge			= vehicleSpeed,		"Vehicle Speed",					"kmh",		0,	200,		0,		5,		110,	130,	1,	1
	baroPressureGauge	= BaroPressure,		"Barometric pressure",		"kPa",		0,	130,		40,		50,		110,	120,	2,	0
	OilPressGauge		= OilPressure,		"Oil Pressure",		"kPa",		0,	750,		35,	75,	550,	700,	0,	0
	OilTempGauge		= OilTemp,			"Oil Temperature",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
;#else
;	VSSGauge			= vehicleSpeed,		"Vehicle Speed",					"mph",		0,	125,		0,		5,		68,	80,	1,	1
;	baroPressureGauge	= BaroPressure,		"Barometric pressure",		"psi",		0,	18.8,		5.8,		7.25,		15.95,	17.4,	2,	0
;	OilPressGauge		= OilPressure,		"Oil Pressure",		"psi",		0,	108.77,		5.07,	10.87,	79.77,	101,	0,	0
;	OilTempGauge		= OilTemp,			"Oil Temperature",		"F",	-40,	284,	-5,		1,		203,	230,	1,2
;endif
	wheelSlipRatioGauge			= wheelSlipRatio,		"Wheel Slip Ratio",			"",		0,	200,		0,		1,		3,	4,	3,	3
	turboSpeedGauge	= turboSpeed,			"Turbocharger Speed", "hz",			0,	200,		0,		1,		3,	4,	1,	1
;#if USE_METRIC_UNITS
	AuxT1Gauge		= auxTemp1,	"Aux temp 1",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
	AuxT2Gauge		= auxTemp2,	"Aux temp 2",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
	ambientTempGauge		= ambientTemp,	"Ambient Temperature",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
	lowFuelPressureGauge = lowFuelPressure, "Fuel pressure (low)", "kPa", 0, 700, 0, 0, 700, 700, 1, 0
	acPressureGauge		= acPressure,	"A/C pressure", "kPa", 0, 900, 0, 0, 900, 900, 0, 0
	fuelTempGauge = fuelTemp, "Fuel Temperature", "C",	0,	100,	0,	0,	75,  100,	1,1
;#else
;	AuxT1Gauge				= auxTemp1,			"Aux temp 1",			"F",		-40,	284,	5,		1,		203,	230,	1,2
;	AuxT2Gauge				= auxTemp2,			"Aux temp 2",			"F",		-40,	284,	5,		1,		203,	230,	1,2
;	ambientTempGauge		= ambientTemp,		"Ambient Temperature",			"F",		-40,	284,	5,		1,		203,	230,	1,2
;	lowFuelPressureGauge 	= lowFuelPressure,	"Fuel pressure (low)",	"psi", 0, 101.526, 0, 0, 101.526, 101.526, 1, 0
;	acPressureGauge			= acPressure,		"A/C pressure", 		"psi", 0, 130.5, 0, 0, 130.5, 130.5, 0, 0
;	fuelTempGauge 			= fuelTemp,			"Fuel Temperature",	"C",	0,	212,	0,	0,	167,  212,	1,2
;#endif
	fuelTankLevelGauge	= fuelTankLevel,"Fuel level",			"%",		0,		100,		10,	20,	100,	100,	1,	1
	flexPercentGauge = flexPercent, "Flex Ethanol %", "%", 0, 100, 0, 0, 100, 100, 0, 0
	AuxL1Gauge		= auxLinear1,	"Aux linear #1", "", -1000, 1000, -1000, -1000, 1000, 1000, 2, 2
	AuxL2Gauge		= auxLinear2,	"Aux linear #2", "", -1000, 1000, -1000, -1000, 1000, 1000, 2, 2
	AuxL3Gauge		= auxLinear3,	"Aux linear #3", "", -100, 100, -100, -100, 100, 100, 2, 2
	AuxL4Gauge		= auxLinear4,	"Aux linear #4", "", -100, 100, -100, -100, 100, 100, 2, 2

gaugeCategory = Sensors - Extra 2
	accelerationLatGauge = accelerationLat,		"Accel: Lateral",		"acc",		-2,	2,	-2,	-1,		1,	2,	3, 1
	accelerationLonGauge = accelerationLon,		"Accel: Longitudinal",		"acc",		-2,	2,	-2,	-1,		1,	2,	3, 1
	accelerationVertGauge = accelerationVert,	"Accel: Vertical",		"acc",		0,	1.5,	0.5,	0.6,		1.4,	1.5,	3, 1
	gyroYawGauge 		  = gyroYaw,			"Gyro: Yaw rate",		"acc",		-100,	100, -100, -100, 100, 100, 3, 1
	rpmAccelerationGa = rpmAcceleration,	"rpm delta",		"RPM/s",		-2000,		2000,		-2000,		2000,		-2000,	2000,	0,	0
	wastegatePosGauge = wastegatePositionSensor, "Wastegate position sensor",  "%",		0,	100,		0,		0,	100,	100,	1,	1
	auxSpeed1Gauge = auxSpeed1, "Aux Freq Input1", "hz", 0, 30000, 0, 0, 30000, 30000, 0, 0
	auxSpeed2Gauge = auxSpeed2, "Aux Freq Input2", "hz", 0, 30000, 0, 0, 30000, 30000, 0, 0
  throttleInletPressureGauge		= throttleInletPressure,					"throttleInletPressure",		"kPa",		0,	300,		10,	10,	200,	200,	0,	0

gaugeCategory = Sensors - EGT
;#if USE_METRIC_UNITS
	egt1Gauge			= egt1, "EGT#1", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt2Gauge			= egt2, "EGT#2", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt3Gauge			= egt3, "EGT#3", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt4Gauge			= egt4, "EGT#4", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt5Gauge			= egt5, "EGT#5", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt6Gauge			= egt6, "EGT#6", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt7Gauge			= egt7, "EGT#7", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
	egt8Gauge			= egt8, "EGT#8", "C", -100, 1400, 100, 200, 900, 1000, 2, 1
;#else
;	egt1Gauge			= egt1F, "EGT#1", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt2Gauge			= egt2F, "EGT#2", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt3Gauge			= egt3F, "EGT#3", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt4Gauge			= egt4F, "EGT#4", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt5Gauge			= egt5F, "EGT#5", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt6Gauge			= egt6F, "EGT#6", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt7Gauge			= egt7F, "EGT#7", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;	egt8Gauge			= egt8F, "EGT#8", "F", -100, 1400, 100, 200, 900, 1000, 2, 1
;#endif

gaugeCategory = Sensors - O2
	afr1Gauge			= AFRValue,           "Air/Fuel Ratio",        "",        10,     19.4,        12,         13,         15,          16,     2,     2
	afr2Gauge			= AFRValue2,          "Air/Fuel Ratio 2",       "",        10,     19.4,        12,         13,         15,          16,     2,     2
	wb1heaterDuty		= wb1heaterDuty,      "WBO1: Heater Duty",       "%",      0.0,    100.0,       1.0,        3.0,         90,          95,     1,     1,		{ canWbo1_type == 0 }
;#if USE_METRIC_UNITS
	wb1tempC			= wb1tempC,           "WBO1: Sensor t",          "C",      500,     1050,       500,        650,        800,         950,     0,     0,		{ canWbo1_type == 0 }
;#else
;	wb1tempC			= wb1tempF,           "WBO1: Sensor t",          "F",      932,     1922,       932,       1202,      1472,         1742,     0,     0,		{ canWbo1_type == 0 }
;#endif
	wb1nernstVoltage    = wb1nernstVoltage,   "WBO1: nernst V",          "V",     -0.2,      1.1,      0.35,       0.40,       0.50,        0.55,     3,     3,		{ canWbo1_type == 0 }
	wb1esr				= wb1esr,             "WBO1: ESR",            "ohms",        0,      600,       200,        200,        350,         400,     0,     0,		{ canWbo1_type == 0 }
	wb2heaterDuty		= wb2heaterDuty,      "WBO2: Heater Duty",       "%",      0.0,    100.0,       1.0,        3.0,         90,          95,     1,     1,		{ canWbo2_type == 0 }
;#if USE_METRIC_UNITS
	wb2tempC			= wb2tempC,           "WBO2: Sensor t",          "C",      500,     1050,       500,        650,        800,         950,     0,     0,		{ canWbo2_type == 0 }
;#else
;	wb2tempC			= wb2tempF,           "WBO2: Sensor t",          "F",      932,     1922,       932,       1202,      1472,         1742,     0,     0,		{ canWbo2_type == 0 }
;#endif
	wb2nernstVoltage    = wb2nernstVoltage,   "WBO2: nernst V",          "V",     -0.2,      1.1,      0.35,       0.40,       0.50,        0.55,     3,     3,		{ canWbo2_type == 0 }
	wb2esr				= wb2esr,             "WBO2: ESR",            "ohms",        0,      600,       200,        200,        350,         400,     0,     0,		{ canWbo2_type == 0 }

gaugeCategory = VVT
	vvtPositionB1IGauge = vvtPositionB1I, "VVT: bank 1 intake", "deg", -60, 60, -60, -60, 60, 60, 1, 1
	vvtPositionB1EGauge = vvtPositionB1E, "VVT: bank 1 exhaust", "deg", -60, 60, -60, -60, 60, 60, 1, 1
	vvtPositionB2IGauge = vvtPositionB2I, "VVT: bank 2 intake", "deg", -60, 60, -60, -60, 60, 60, 1, 1
	vvtPositionB2EGauge = vvtPositionB2E, "VVT: bank 2 exhaust", "deg", -60, 60, -60, -60, 60, 60, 1, 1
	vvtTargets1Gauge = vvtTargets1, "VVT: bank 1 intake target", "deg", -60, 60, -60, -60, 60, 60, 0, 0
	vvtTargets2Gauge = vvtTargets2, "VVT: bank 1 exhaust target", "deg", -60, 60, -60, -60, 60, 60, 0, 0
	vvtTargets3Gauge = vvtTargets3, "VVT: bank 2 intake target", "deg", -60, 60, -60, -60, 60, 60, 0, 0
	vvtTargets4Gauge = vvtTargets4, "VVT: bank 2 exhaust target", "deg", -60, 60, -60, -60, 60, 60, 0, 0
	vvtOutput1Gauge = vvtStatus1_output, "vvt: output 1", "", 00, 100, -60, -60, 60, 60, 0, 0
	vvtOutput2Gauge = vvtStatus2_output, "vvt: output 2", "", 00, 100, -60, -60, 60, 60, 0, 0
	vvtOutput3Gauge = vvtStatus3_output, "vvt: output 3", "", 00, 100, -60, -60, 60, 60, 0, 0
	vvtOutput4Gauge = vvtStatus4_output, "vvt: output 4", "", 00, 100, -60, -60, 60, 60, 0, 0


gaugeCategory = Ignition
	sparkCutReasonGauge = sparkCutReason,"Spark Cut Code", "code", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	baseIgnAdvGauge = baseIgnitionAdvance,		"Timing: base ignition",	"degrees",	-100,	100,	-999,	-999,	999,	999,	1, 1
	correctedIgnAdvGauge = correctedIgnitionAdvance,		"Timing: ignition",	"degrees",	-100,	100,	-999,	-999,	999,	999,	1, 1
	dwellGauge		= sparkDwell,			"Dwell",		"mSec",		0,	10,	0.5,	1.0,	6.0,	8.0,	1, 1
	coilDutyCycleGauge = coilDutyCycle,		"Ignition: coil duty cycle",		"%",		0,	110,	0,	0,		90,	100,	1, 1
	ignitionLoadGauge = ignitionLoad, "Ignition: load", "%", 0, 300, 0, 0, 300, 300, 1, 1

gaugeCategory = Acceleration Enrichment
	deltaTpsGauge	= deltaTps,					"AE: TPS change",				"",		0,	120,		10,	10,	100,	100,	1,	1
	tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich",				"ms",		0,	120,		10,	10,	100,	100,	1,	1
	wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "mg",	0,	100,	0,	0,	100,  100,	0,	0
	wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "mg",	-20,	20,	-100,	-100,	100,  100,	1,	1

gaugeCategory = Fueling
	;Name					Var				Title					Units		Lo		Hi		LoD	LoW		HiW	HiD	vd  ld
	fuelCutReasonGauge = fuelCutReason,"Fuel Cut Code", "code", 0.0,0.0, 0.0,0.0, 0.0,0.0, 0,0
	tChargeGauge			= sd_tCharge,	"Fuel: Estimated charge temperature",		"C",		-40,	140,	-15,		1,		95,	110,	1,1
	baroCorrectionGauge  = baroCorrection,"Fuel: Barometric pressure mult",			"ratio",		0.5,	1.5,		0.6,	0.7,	1.3,	1.4,	1,	1
	crankingFuelGauge = crankingFuel_fuel,	"Fuel: cranking",		"mg",		0,	100,	0, 0,		100,	100,	3, 1
	iatCorrectionGauge = running_intakeTemperatureCoefficient, "Fuel: IAT correction", "mult",	0,	3,	0,	0,	3,  3,	2,	2
	cltCorrectionGauge = running_coolantTemperatureCoefficient, "Fuel: CLT correction", "mult",	0,	3,	0,	0,	3,  3,	2,	2
	injectorDutyCycleGauge=injectorDutyCycle, "Fuel: injector duty cycle","%",		0,	120,		10,	10,	100,	100,	1,	1
	injectorDutyCycleStg2Gauge=injectorDutyCycleStage2, "Fuel: injector duty cycle stage 2","%",		0,	120,		10,	10,	100,	100,	1,	1
	actualLastInjectionGauge	= actualLastInjection,	"Fuel: Last inj pulse width", "mSec",		0,	25.5,	1.0,	1.2,		20,	25,	3, 1
	actualLastInjectionStg2Gauge	= actualLastInjectionStage2,	"Fuel: Last inj pulse width stg 2", "mSec",		0,	25.5,	1.0,	1.2,		20,	25,	3, 1
	actualLastInjectionRatioGauge	= actualLastInjectionRatio,	"Fuel: Last inj pulse growth", "",		0,	10,	0.2,	0.5,		2,	5,	3, 1
	actualLastInjectionRatioStg2Gauge	= actualLastInjectionRatioStage2,	"Fuel: Last inj pulse growth stg 2", "",		0,	10,	0.2,	0.5,		2,	5,	3, 1
	veValueGauge		= veValue,					"Fuel: VE",				"",		0,	120,		10,	10,	100,	100,	1,	1
  gegoGauge            = Gego,                                      "EGO",                             "",             50,      160,            10,     10,     100,    100,    1,      1

	injectorLagMsGauge = m_deadtime,		"Fuel: injector lag",		"mSec",		0,	10,	0,	0,		10,	10,	3, 1
	fuelRunningGauge	= running_fuel,		"Fuel: running",		"mg",		0,	100,	0,	0,		100,	100,	3, 1
	baseFuelGauge	= running_baseFuel,		"Fuel: base cycle mass",		"mg",		0,	100, 0, 0, 100, 100,	2, 0
	fuelStftInputError1Gauge = stftInputError1,		"STFT input lambda error: Bank 1",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelStftInputError2Gauge = stftInputError2,		"STFT input lambda error: Bank 2",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelStftCorrection1Gauge = stftCorrection1,		"Short Term Fuel Trim: Bank 1",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelStftCorrection2Gauge = stftCorrection2,		"Short Term Fuel Trim: Bank 2",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelLtftCorrection1Gauge = ltftCorrection1,		"Long Term Fuel Trim: Bank 1",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelLtftCorrection2Gauge = ltftCorrection2,		"Long Term Fuel Trim: Bank 2",		"%",		-30,	30,	-15, -5, 5, 15,	1, 0
	fuelLtftCntHitGauge = ltftCntHit, "LTFT learning: hits", "cnt", 0, 1000, 0, 1000, 0, 1000, 1, 0
	fuelLtftCntMissGauge = ltftCntMiss, "LTFT learning: miss", "cnt", 0, 1000, 0, 1000, 0, 1000, 1, 0
	fuelLtftCntDeadbandGauge = ltftCntDeadband, "LTFT learning: deadband", "cnt", 0, 1000, 0, 1000, 0, 1000, 1, 0
	fuelLtftAccumulatedCorrection1Gauge = ltftAccummulatedCorrection1,		"LTFT learned accumulator: Bank 1",		"%",		-100,	100,	-90, -75, 75, 90,	1, 0
	fuelLtftAccumulatedCorrection2Gauge = ltftAccummulatedCorrection2,		"LTFT learned accumulator: Bank 2",		"%",		-100,	100,	-90, -75, 75, 90,	1, 0
	fuelingLoadGauge = fuelingLoad, "Fuel: Load", "%", 0, 300, 0, 0, 300, 300, 1, 1
	totalFuelConsumptionGauge = totalFuelConsumption, "Fuel: Total consumed", "g", 0, 10000, 0, 0, 10000, 10000, 0, 0
	fuelFlowRateGauge = fuelFlowRate, "Fuel: Flow rate", "g/s", 0, 50, 0, 0, 50, 50, 2, 0
	targetLambdaGauge = targetLambda,"fuel: target lambda", "",		10,	19.4,		12,	13,		15,	16,	2,	2
	currentTargetAfrGauge = targetAFR,"fuel: target AFR", "",		0.65,	1.2,		0.7,	0.75,		1.1,	1.15,	3,	2
	fuelPressureCorrectionReferenceGauge  = pressureCorrectionReference,	"Fuel: corr reference pressure", "kPa", 0, 1000, 0, 0, 1000, 1000, 0, 0
	fuelClosedLoopBinIdxGauge			= stftCorrectionBinIdx		, "STFT using",			"bin", 0, 5, 0, 0, 4, 5, 3, 0
	fuelClosedLoopLearningBinIdxGauge	= stftLearningBinIdx, "STFT learning",		"bin", 0, 5, 0, 0, 4, 5, 3, 0

gaugeCategory = Torque
  throttlePressureRatioGauge		= throttlePressureRatio,					"throttlePressureRatio",		"",		0,	300,		10,	10,	200,	200,	0,	0
  throttleEffectiveAreaOpeningGauge		= throttleEffectiveAreaOpening,					"throttleEffectiveAreaOpening",		"",		0,	300,		10,	10,	200,	200,	0,	0

gaugeCategory = Throttle Body (incl. ETB)
	pedalPositionGauge = throttlePedalPosition, "Throttle pedal position",		"%",	-20,	120,		-10,	-5,	105,	110,	1,	1
	tpsADCGauge		= tpsADC,			"tps1 ADC",		"ADC",		0,	1024,		0,		0,		0,	0,	0,	0
	TPSGauge			= TPSValue,		"Throttle position",			"%",		0,	100,		0,		0,	100,	100,	1,	1
	TPS2Gauge		= TPS2Value,	"Throttle position #2",			"%",		0,	100,		0,		0,	100,	100,	1,	1

	etbTargetGauge	= etb1m_adjustedTarget,	"ETB: position target", "%",	0,	100,	0,	0,	100,	100,	1,	1
	etbErrorGauge		= etbStatus_error,	"ETB: position error",  "%",	-20,  20,	-10,	-5,	5,	10,  2, 0
	tps1SplitGauge	= tps1Split,	"TPS1 Sensor Split",  "%",	-20,  20,	-10,	-5,	5,	10,  2, 0
	tps2SplitGauge	= tps2Split,	"TPS2 Sensor Split",  "%",	-20,  20,	-10,	-5,	5,	10,  2, 0
	accPedalSplitGauge	= accPedalSplit,	"Pedal Sensor Split",  "%",	-20,  20,	-10,	-5,	5,	10,  2, 0
	etbDutyCycleGauge  = etb1DutyCycle, "ETB: Duty",					"%",	-100, 100,	-75,	-50,	50,	75,  0, 0

gaugeCategory = Sensors - Raw
	rawTps1PrimaryGauge  = rawTps1Primary, "Raw TPS 1 Primary", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawTps1SecondaryGauge  = rawTps1Secondary, "Raw TPS 1 Secondary", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawTps2PrimaryGauge  = rawTps2Primary, "Raw TPS 2 Primary", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawTps2SecondaryGauge  = rawTps2Secondary, "Raw TPS 2 Secondary", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput1Gauge  = rawAnalogInput1, "Raw Aux 1", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput2Gauge  = rawAnalogInput2, "Raw Aux 2", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput3Gauge  = rawAnalogInput3, "Raw Aux 3", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput4Gauge  = rawAnalogInput4, "Raw Aux 4", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput5Gauge  = rawAnalogInput5, "Raw Aux 5", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput6Gauge  = rawAnalogInput6, "Raw Aux 6", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput7Gauge  = rawAnalogInput7, "Raw Aux 7", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAnalogInput8Gauge  = rawAnalogInput8, "Raw Aux 8", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawPpsPrimaryGauge	= rawPpsPrimary , "Raw Pedal Primary", "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawPpsSecondaryGauge = rawPpsSecondary,"Raw Pedal Secondary","V",0, 5, 0, 0, 5, 5, 3, 0
	rawCltGauge			= rawClt		, "Raw CLT",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawBatteryGauge		= rawBattery	, "Raw Battery",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawIatGauge			= rawIat		, "Raw IAT",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAuxTemp1Gauge			= rawAuxTemp1		, "Raw Aux Temp1",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAuxTemp2Gauge			= rawAuxTemp2		, "Raw Aux Temp2",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAmbientTempGauge			= rawAmbientTemp		, "Raw Ambient Temp",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawOilPressureGauge  = rawOilPressure, "Raw Oil Pressure",  "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawFuelLevelGauge  = rawFuelLevel, "Raw Fuel Level",  "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAcPressureGauge  = rawAcPressure, "Raw A/C Pressure",  "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawIdlePositionSensorGauge  = rawIdlePositionSensor, "Raw Idle Position",  "V", 0, 5, 0, 0, 5, 5, 3, 0
	rawWastegatePositionGauge = rawWastegatePosition,"Raw Wastegate Position","V", 0, 5, 0, 0, 5, 5, 3, 0
	rawLowFuelPressureGauge = rawLowFuelPressure,"Raw fuel pressure (low) voltage","V", 0, 5, 0, 0, 5, 5, 3, 0
	rawHighFuelPressureGauge = rawHighFuelPressure,"Raw fuel pressure (high) voltage","V", 0, 5, 0, 0, 5, 5, 3, 0
	rawMafGauge			= rawMaf		, "Raw MAF",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawMapGauge			= rawMap		, "Raw MAP",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawMapFastGauge		= rawMapFast	, "Raw MAP Fast",		"V", 0, 5, 0, 0, 5, 5, 3, 0
	rawAfrGauge			= rawAfr		, "Raw EGO",			"V", 0, 5, 0, 0, 5, 5, 3, 0
	vssEdgeCounterGauge  = vssEdgeCounter, "Raw VSS",			"counter", 0, 5, 0, 0, 5, 5, 0, 0
	issEdgeCounterGauge  = issEdgeCounter, "Raw ISS",			"counter", 0, 5, 0, 0, 5, 5, 0, 0
	rawFlexFreqGauge = rawFlexFreq, "Raw Flex",			"Hz", 0, 5, 0, 0, 5, 5, 3, 0

gaugeCategory = Transmission
	detectedGearGauge = detectedGear, "Detected Gear", "gear", 0, 10, 0, 0, 10, 10, 0, 0
	speedToRpmRatioGauge = speedToRpmRatio, "Gearbox Ratio", "",	0,	100,	0,	0,	100,  100,	4,	4
	shiftTimeGauge = lastShiftTime, "Last Shift Time", "S", 0, 2, 0, 0, 2, 2, 4, 4
	idealEngineTorqueGauge = idealEngineTorque, "idealEngineTorque", "",	0,	100,	0,	0,	100,  100,	4,	4
	pressureControlGauge = pressureControlDuty, "EPC Duty Cycle", "%", 0, 100, 0, 0, 100, 100, 0, 0
	torqueConverterGauge = torqueConverterDuty, "TC Duty Cycle", "%", 0, 100, 0, 0, 100, 100, 0, 0

gaugeCategory = Knock
	knock1Gauge = m_knockCyl1, "Knock Cyl 1", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock2Gauge = m_knockCyl2, "Knock Cyl 2", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock3Gauge = m_knockCyl3, "Knock Cyl 3", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock4Gauge = m_knockCyl4, "Knock Cyl 4", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock5Gauge = m_knockCyl5, "Knock Cyl 5", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock6Gauge = m_knockCyl6, "Knock Cyl 6", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock7Gauge = m_knockCyl7, "Knock Cyl 7", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock8Gauge = m_knockCyl8, "Knock Cyl 8", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock9Gauge = m_knockCyl9, "Knock Cyl 9", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock10Gauge = m_knockCyl10, "Knock Cyl 10", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock11Gauge = m_knockCyl11, "Knock Cyl 11", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knock12Gauge = m_knockCyl12, "Knock Cyl 12", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knockLevelGauge = m_knockLevel,"Knock level", "dBv", -60, 10, -60, -60, 10, 10, 0, 0
	knockRetardGauge = m_knockRetard, "Knock retard", "deg", 0, 10, 0, 0, 10, 10, 1, 1
	knockCountGauge = m_knockCount, "Knock count", "count", 0, 10000, 0, 0, 10000, 10000, 0, 0
	knockSpectrumChannelCylGauge = m_knockSpectrumChannelCyl, "Knock Frequency Start", "Hz", 0, 0, 0, 0, 10000, 10000, 0, 0
	knockFrequencyStartGauge = m_knockFrequencyStart, "Knock Frequency Start", "Hz", 0, 0, 0, 0, 10000, 10000, 0, 0
	knockFrequencyStepGauge = m_knockFrequencyStep, "Knock Frequency Step", "Hz", 0, 0, 0, 0, 10000, 10000, 0, 0
	knockFuelTrimMultiplier = m_knockFuelTrimMultiplier, "Knock Fuel Trim", "mult", 0, 0, 0, 0, 0, 30, 1, 1
	knockSpectrum1 = m_knockSpectrum1, "Knock Spectrum1", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum2 = m_knockSpectrum2, "knockSpectrum2", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum3 = m_knockSpectrum3, "knockSpectrum3", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum4 = m_knockSpectrum4, "knockSpectrum4", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum5 = m_knockSpectrum5, "knockSpectrum5", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum6 = m_knockSpectrum6, "knockSpectrum6", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum7 = m_knockSpectrum7, "knockSpectrum7", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum8 = m_knockSpectrum8, "knockSpectrum8", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum9 = m_knockSpectrum9, "knockSpectrum9", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum10 = m_knockSpectrum10, "knockSpectrum10", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum11 = m_knockSpectrum11, "knockSpectrum11", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum12 = m_knockSpectrum12, "knockSpectrum12", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum13 = m_knockSpectrum13, "knockSpectrum13", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum14 = m_knockSpectrum14, "knockSpectrum14", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum15 = m_knockSpectrum15, "knockSpectrum15", "Volume", 0, 0, 0, 0, 0, 256, 0, 0
	knockSpectrum16 = m_knockSpectrum16, "knockSpectrum16", "Volume", 0, 0, 0, 0, 0, 256, 0, 0

gaugeCategory = DynoView
	accelGauge = VssAcceleration, "Vehicle acceleration",	"m/s2",		-10,	10,		-6,	-4,		4,	6,	2,	2

gaugeCategory = GPPWM Outputs
	gppwmGauge1 = gppwmOutput1, { stringValue(gpPwmNote1) }, "%", 0, 100, 0, 0, 100, 100, 1, 1
	gppwmGauge2 = gppwmOutput2, { stringValue(gpPwmNote2) }, "%", 0, 100, 0, 0, 100, 100, 1, 1
	gppwmGauge3 = gppwmOutput3, { stringValue(gpPwmNote3) }, "%", 0, 100, 0, 0, 100, 100, 1, 1
	gppwmGauge4 = gppwmOutput4, { stringValue(gpPwmNote4) }, "%", 0, 100, 0, 0, 100, 100, 1, 1

[WueAnalyze]

;						wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition
#if LAMBDA
	wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, lambdaTableTbl, lambdaValue, coolant, running_coolantTemperatureCoefficient, egoCorrectionForVeAnalyze
	lambdaTargetTables = lambdaTableTbl, afrTSCustom
#else
	wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, running_coolantTemperatureCoefficient, egoCorrectionForVeAnalyze
	lambdaTargetTables = afrTableTbl, afrTSCustom
#endif

	wuePercentOffset = 0 ; for working with 0 based enrichment set to 100
	option = disableLiveUpdates
	option = burnOnSend

;	filter = std_DeadLambda ; Auto build

	filter = decelFilterMap,"After Start Enrich", engine,			&	, 4 ,		, false
	filter = accelFilterTp, "TP Accel Enrich"	, engine,			&	, 16,		, false
	filter = decelFilterTp, "TP Decel Enrich"	, engine,			&	, 32,		, false
	filter = accelFilterMap,"MAP Accel Enrich"  , engine,			&	, 64,		, false
	filter = decelFilterMap,"MAP Decel Enrich"  , engine,			&	, 128,		, false
	; this works, just another way to skin a cat
	;filter = decelFilter, "Decel Flag" , tpsaccden,			>		, 0,		, false
	filter = overrunFilter, "Overrun"	, pulseWidth1,  =		, 0,				, false
	filter = highThrottle, "High Throttle"	, throttle,  >		, 15,			, true
	filter = lowRpm,		"Low RPM"	,		rpm,		<		, 300,		, false
	filter = std_Custom ; Standard Custom Expression Filter.


[FrontPage]
	; Gauges are numbered left to right, top to bottom.
	;
	;	1  2  3  4
	;	5  6  7  8

	gauge1 = RPMGauge
	gauge2 = CLTGauge
	gauge3 = TPSGauge
	gauge4 = MAPGauge
#if LAMBDA
	gauge5 = lambda1Gauge
#else
	gauge5 = afr1Gauge
#endif
	gauge6 = VBattGauge
	gauge7 = dwellGauge
	gauge8 = correctedIgnAdvGauge

	;			=							expression,				off-label,				on-label, off-bg, off-fg,  on-bg,  on-fg
	; Line 1
	; important status
	; this is required so that the "config error" feature works in TS
	; DO NOT CHANGE THIS LINE - TS is looking for an indicator with particular text/styling
	; you don't even have to show it by default
	; DO NOT CHANGE THE LINE BELOW
	indicator = { hasCriticalError }, "Config Error", "Config Error", white, black, red, black
	; DO NOT CHANGE THE LINE ABOVE
	indicator =						{ needBurn },	"Settings saved",	"Unsaved changes",  white,  black, yellow,  black
	indicator =						{ isWarnNow },		"No warnings",			"Warning",  white,  black, yellow,  black
;	indicator =					{ checkEngine },	"No Check Engine",		"Check Engine",  white,  black,	red,  black
	indicator =					{ isTriggerError},			"Trigger OK",		"Trigger ERR",  white,  black,	red,  black
	indicator = { fuelCutReasonBlinker  != 0 }, "Injection OK", { Fuel cut: bitStringValue(fuelIgnCutCodeList, fuelCutReason)}, white, black, yellow, black
	indicator = { sparkCutReasonBlinker != 0 }, "Ignition OK",  { Ign cut: bitStringValue(fuelIgnCutCodeList, sparkCutReason)}, white, black, yellow, black
	indicator = { etb1etbErrorCodeBlinker != 0 }, "ETB OK",  { ETB: bitStringValue(etbCutCodeList, etb1etbErrorCodeBlinker)}, white, black, yellow, black

	; minor info
	indicator =						{ fan1m_state },				"Fan off",				"Fan on",  white,  black,  green,  black
	indicator =						{ fan2m_state },			"Fan 2 off",			"Fan 2 on",  white,  black,  green,  black
	indicator =				{ mainRelayState },		"Main relay off",	"Main relay on",  white,  black,  green,  black
	; Line 2
	;			=							expression,				off-label,				on-label, off-bg, off-fg,  on-bg,  on-fg
	indicator =					{ isFuelPumpOn },		"Fuel pump off",		"Fuel pump on",  white,  black,  green,  black
	indicator =				{ clutchUpState },		"No clutch Up",			"Clutch Up",  white,  black,	red,  black
	indicator =				{ clutchDownState },		"No clutch down",		"Clutch down",  white,  black, yellow,  black
	indicator =				{ brakePedalState },			"No braking",		"Brake down",  white,  black,	red,  black
	indicator =				{ acButtonState },		"AC Switch off",		"AC Switch on",  white,  black,	blue,  white
	indicator =					{ m_acEnabled },		"AC Relay off",		"AC Relay on",  white,  black,	blue,  white
	indicator =			{ isIdling },			"Not idling",				"Idling",  white,  black,  green,  black
	indicator =				{ isIdleCoasting },		"Not coasting",			"Coasting",  white,  black,  green,  black
	indicator =					{ dfcoActive },  "Not decel fuel cut",	"Decel fuel cut",  white,  black, yellow,  black
	indicator =				{ isAboveAccelThreshold },		"No TPS accel",  "TPS accel active",  white,  black, yellow,  black
	; error codes
	indicator =					{ isTpsError },				"TPS OK",			"TPS error",	white, black,	red,  black

	; Line 3
	;			=							expression,				off-label,				on-label, off-bg, off-fg,  on-bg,  on-fg
	indicator =					{ isTps2Error },				"TPS 2 OK",		"TPS 2 error",  white,  black,	red,  black
	indicator =					{ isPedalError },				"Pedal OK",		"Pedal error",  white,  black,	red,  black
	indicator =					{ isCltError },				"CLT OK",			"CLT error",  white,  black,	red,  black
	indicator =					{ isIatError },				"IAT OK",			"IAT error",  white,  black,	red,  black
	; not implemented
	; indicator = { ind_map_error}, "map",	"map error",	white, black, red,	black
	indicator =					{ sd_present },			"No SD card",	"SD card present",  white,  black,  green,  black
	indicator =		{ sd_logging_internal },		"No SD logging",		"SD logging",  white,  black,  green,  black
	indicator =							{ sd_msd },			"No SD USB",				"SD USB",  white,  black,  green,  black
;	indicator =		{ sd_active_wr },		"SD WR",		"SD WR",  white,  black,  green,  black
;	indicator =		{ sd_active_rd },		"SD RD",		"SD RD",  white,  black,  green,  black
	indicator =		{ isTuningNow },		"",		"Tuning Detected",  white,  black,  green,  black
	indicator =			{ etb1etbRevLimitActive },	"No ETB RPM Limit",	"ETB RPM Limit",  white,  black, yellow,  black

	indicator = { wbo0_hasFault }, "WBO0: Ok", { WBO0: bitStringValue(wboFaultCodeList, wb1faultCode) }, white, black, red, black
	indicator =		{ isAnalogFailure },					"Analog Ok",	"Analog error",	white, black,	red,  black

	; indicator = { isInjectionEnabled && fuelCutReason == 0 }, { Inj: bitStringValue(injModeList, currentInjectionMode) }, { Inj: bitStringValue(injModeList, currentInjectionMode) }, white, black, white, black
	; indicator = { isIgnitionEnabled && sparkCutReason == 0 }, { Ign: bitStringValue(ignModeList, currentIgnitionMode) }, { Ign: bitStringValue(ignModeList, currentIgnitionMode) }, white, black, white, black

	indicatorTemplate = {isShifting}, "In Gear", "Shifting", white, black, green, black
	

; looks like TS would append four system indicators below: Data Logging, ???, Not Connected, Protocol Error

[KeyActions]
	showPanel = spi,  spiBuses
	showPanel = con,  connection

;
; this section defines how we log output channels
; see [OutputChannels]
;
[Datalog]
	;		Channel			Label			Type	Format
	entry = time,				"Time",		float,  "%.3f"
entry = sd_present, "SD: Present", int,    "%d"
entry = sd_logging_internal, "SD: Logging", int,    "%d"
entry = triggerScopeReady, "triggerScopeReady", int,    "%d"
entry = antilagTriggered, "antilagTriggered", int,    "%d"
entry = isO2HeaterOn, "isO2HeaterOn", int,    "%d"
entry = checkEngine, "checkEngine", int,    "%d"
entry = needBurn, "needBurn", int,    "%d"
entry = sd_msd, "SD: MSD", int,    "%d"
entry = toothLogReady, "Tooth Logger Ready", int,    "%d"
entry = isTpsError, "Error: TPS", int,    "%d"
entry = isCltError, "Error: CLT", int,    "%d"
entry = isMapError, "Error: MAP", int,    "%d"
entry = isIatError, "Error: IAT", int,    "%d"
entry = isTriggerError, "Error: Trigger", int,    "%d"
entry = hasCriticalError, "Error: Active", int,    "%d"
entry = isWarnNow, "Warning: Active", int,    "%d"
entry = isPedalError, "Error: Pedal", int,    "%d"
entry = launchTriggered, "Launch Control Triggered", int,    "%d"
entry = isTps2Error, "Error: TPS2", int,    "%d"
entry = injectorFault, "Injector Fault", int,    "%d"
entry = ignitionFault, "Ignition Fault", int,    "%d"
entry = isUsbConnected, "isUsbConnected", int,    "%d"
entry = dfcoActive, "dfcoActive", int,    "%d"
entry = sd_active_wr, "SD card writing", int,    "%d"
entry = sd_active_rd, "SD card reading", int,    "%d"
entry = isMapValid, "MAP from sensor seems valid", int,    "%d"
entry = triggerPageRefreshFlag, "triggerPageRefreshFlag", int,    "%d"
entry = hasFaultReportFile, "hasFaultReportFile", int,    "%d"
entry = isAnalogFailure, "Analog sensors supply failure", int,    "%d"
entry = isTuningNow, "isTuningNow", int,    "%d"
entry = sd_formating, "SD: formating is in progress", int,    "%d"
entry = isMapAveraging, "isMapAveraging", int,    "%d"
entry = RPMValue, "RPM", int,    "%d"
entry = rpmAcceleration, "dRPM", int,    "%d"
entry = speedToRpmRatio, "Gearbox Ratio", float,  "%.3f"
entry = internalMcuTemperature, "ECU: CPU Temperature", int,    "%d"
entry = internalVref, "internalVref", float,  "%.3f"
entry = coolant, "CLT", float,  "%.3f"
entry = intake, "IAT", float,  "%.3f"
entry = auxTemp1, "auxTemp1", float,  "%.3f"
entry = auxTemp2, "auxTemp2", float,  "%.3f"
entry = TPSValue, "TPS", float,  "%.3f"
entry = throttlePedalPosition, "Throttle pedal position", float,  "%.3f"
entry = tpsADC, "tpsADC", int,    "%d"
entry = rawMaf, "rawMaf", float,  "%.3f"
entry = mafMeasured, "MAF", float,  "%.3f"
entry = MAPValue, "MAP", float,  "%.3f"
entry = baroPressure, "baroPressure", float,  "%.3f"
entry = lambdaValue, "Lambda", float,  "%.3f"
entry = VBatt, "VBatt", float,  "%.3f"
entry = oilPressure, "Oil Pressure", float,  "%.3f"
entry = vvtPositionB1I, "VVT: bank 1 intake", float,  "%.3f"
entry = actualLastInjection, "Fuel: Last inj pulse width", float,  "%.3f"
entry = actualLastInjectionRatio, "Fuel: Last inj pulse growth", float,  "%.3f"
entry = stopEngineCode, "stopEngineCode", int,    "%d"
entry = injectorDutyCycle, "Fuel: injector duty cycle", float,  "%.3f"
entry = tempLogging1, "tempLogging1", int,    "%d"
entry = injectionOffset, "Fuel: Injection timing SOI", int,    "%d"
entry = engineMakeCodeNameCrc16, "Engine CRC16", int,    "%d"
entry = wallFuelAmount, "Fuel: wall amount", float,  "%.3f"
entry = wallFuelCorrectionValue, "Fuel: wall correction", float,  "%.3f"
entry = revolutionCounterSinceStart, "revolutionCounterSinceStart", int,    "%d"
entry = canReadCounter, "CAN: Rx", int,    "%d"
entry = tpsAccelFuel, "Fuel: TPS acceleration add fuel ms", float,  "%.3f"
entry = currentIgnitionMode, "Ignition: Mode", int,    "%d"
entry = currentInjectionMode, "Fuel: Injection mode", int,    "%d"
entry = coilDutyCycle, "Ignition: coil duty cycle", float,  "%.3f"
entry = etb1DutyCycle, "ETB: Duty", float,  "%.3f"
entry = fuelTankLevel, "Fuel level", float,  "%.3f"
entry = totalFuelConsumption, "Fuel: Total consumed", int,    "%d"
entry = fuelFlowRate, "Fuel: Flow rate", float,  "%.3f"
entry = TPS2Value, "TPS2", float,  "%.3f"
entry = tuneCrc16, "Tune CRC16", int,    "%d"
entry = veValue, "Fuel: VE", float,  "%.3f"
entry = seconds, "Uptime", int,    "%d"
entry = engineMode, "Engine Mode", int,    "%d"
entry = firmwareVersion, "firmware", int,    "%d"
entry = rawIdlePositionSensor, "rawIdlePositionSensor", float,  "%.3f"
entry = rawWastegatePosition, "rawWastegatePosition", float,  "%.3f"
entry = accelerationLat, "Accel: Lateral", float,  "%.3f"
entry = accelerationLon, "Accel: Longitudinal", float,  "%.3f"
entry = detectedGear, "Detected Gear", int,    "%d"
entry = maxTriggerReentrant, "maxTriggerReentrant", int,    "%d"
entry = rawLowFuelPressure, "rawLowFuelPressure", float,  "%.3f"
entry = rawHighFuelPressure, "rawHighFuelPressure", float,  "%.3f"
entry = lowFuelPressure, "Fuel pressure (low)", float,  "%.3f"
entry = tcuDesiredGear, "TCU: Desired Gear", int,    "%d"
entry = flexPercent, "Flex Ethanol %", float,  "%.3f"
entry = wastegatePositionSensor, "Wastegate position sensor", float,  "%.3f"
entry = highFuelPressure, "Fuel pressure (high)", float,  "%.3f"
entry = tempLogging3, "tempLogging3", int,    "%d"
entry = tempLogging4, "tempLogging4", int,    "%d"
entry = calibrationValue, "calibrationValue", float,  "%.3f"
entry = calibrationMode, "calibrationMode", int,    "%d"
entry = idleStepperTargetPosition, "Idle: Stepper target position", int,    "%d"
entry = totalTriggerErrorCounter, "Trigger Error Counter", int,    "%d"
entry = orderingErrorCounter, "orderingErrorCounter", int,    "%d"
entry = warningCounter, "Warning: counter", int,    "%d"
entry = lastErrorCode, "Warning: last", int,    "%d"
entry = recentErrorCode1, "Warning code 1", int,    "%d"
entry = recentErrorCode2, "Warning code 2", int,    "%d"
entry = recentErrorCode3, "Warning code 3", int,    "%d"
entry = recentErrorCode4, "Warning code 4", int,    "%d"
entry = recentErrorCode5, "Warning code 5", int,    "%d"
entry = recentErrorCode6, "Warning code 6", int,    "%d"
entry = recentErrorCode7, "Warning code 7", int,    "%d"
entry = recentErrorCode8, "Warning code 8", int,    "%d"
entry = debugFloatField1, "debugFloatField1", float,  "%.3f"
entry = debugFloatField2, "debugFloatField2", float,  "%.3f"
entry = debugFloatField3, "debugFloatField3", float,  "%.3f"
entry = debugFloatField4, "debugFloatField4", float,  "%.3f"
entry = debugFloatField5, "debugFloatField5", float,  "%.3f"
entry = debugFloatField6, "debugFloatField6", float,  "%.3f"
entry = debugFloatField7, "debugFloatField7", float,  "%.3f"
entry = debugIntField1, "debugIntField1", int,    "%d"
entry = debugIntField2, "debugIntField2", int,    "%d"
entry = debugIntField3, "debugIntField3", int,    "%d"
entry = debugIntField4, "debugIntField4", int,    "%d"
entry = debugIntField5, "debugIntField5", int,    "%d"
entry = egt1, "EGT 1", float,  "%.3f"
entry = egt2, "EGT 2", float,  "%.3f"
entry = egt3, "EGT 3", float,  "%.3f"
entry = egt4, "EGT 4", float,  "%.3f"
entry = egt5, "EGT 5", float,  "%.3f"
entry = egt6, "EGT 6", float,  "%.3f"
entry = egt7, "EGT 7", float,  "%.3f"
entry = egt8, "EGT 8", float,  "%.3f"
entry = rawTps1Primary, "rawTps1Primary", float,  "%.3f"
entry = rawClt, "rawClt", float,  "%.3f"
entry = rawIat, "rawIat", float,  "%.3f"
entry = rawOilPressure, "rawOilPressure", float,  "%.3f"
entry = rawAcPressure, "rawAcPressure", float,  "%.3f"
entry = rawFuelLevel, "rawFuelLevel", float,  "%.3f"
entry = rawPpsPrimary, "rawPpsPrimary", float,  "%.3f"
entry = rawPpsSecondary, "rawPpsSecondary", float,  "%.3f"
entry = rawRawPpsPrimary, "rawRawPpsPrimary", float,  "%.3f"
entry = rawRawPpsSecondary, "rawRawPpsSecondary", float,  "%.3f"
entry = idlePositionSensor, "Idle: Position sensor", float,  "%.3f"
entry = AFRValue, "Air/Fuel Ratio", float,  "%.3f"
entry = AFRValue2, "Air/Fuel Ratio 2", float,  "%.3f"
entry = SmoothedAFRValue, "Smoothed Air/Fuel Ratio", float,  "%.3f"
entry = SmoothedAFRValue2, "Smoothed Air/Fuel Ratio 2", float,  "%.3f"
entry = VssAcceleration, "Vss Accel", float,  "%.3f"
entry = lambdaValue2, "Lambda 2", float,  "%.3f"
entry = vvtPositionB1E, "VVT: bank 1 exhaust", float,  "%.3f"
entry = vvtPositionB2I, "VVT: bank 2 intake", float,  "%.3f"
entry = vvtPositionB2E, "VVT: bank 2 exhaust", float,  "%.3f"
entry = rawTps1Secondary, "rawTps1Secondary", float,  "%.3f"
entry = rawTps2Primary, "rawTps2Primary", float,  "%.3f"
entry = rawTps2Secondary, "rawTps2Secondary", float,  "%.3f"
entry = accelerationVert, "Accel: Vertical", float,  "%.3f"
entry = gyroYaw, "Gyro: Yaw rate", float,  "%.3f"
entry = vvtTargets1, "vvtTargets 1", int,    "%d"
entry = vvtTargets2, "vvtTargets 2", int,    "%d"
entry = vvtTargets3, "vvtTargets 3", int,    "%d"
entry = vvtTargets4, "vvtTargets 4", int,    "%d"
entry = turboSpeed, "Turbocharger Speed", int,    "%d"
entry = ignitionAdvanceCyl1, "Ign: Timing Cyl 1", float,  "%.3f"
entry = ignitionAdvanceCyl2, "Ign: Timing Cyl 2", float,  "%.3f"
entry = ignitionAdvanceCyl3, "Ign: Timing Cyl 3", float,  "%.3f"
entry = ignitionAdvanceCyl4, "Ign: Timing Cyl 4", float,  "%.3f"
entry = ignitionAdvanceCyl5, "Ign: Timing Cyl 5", float,  "%.3f"
entry = ignitionAdvanceCyl6, "Ign: Timing Cyl 6", float,  "%.3f"
entry = ignitionAdvanceCyl7, "Ign: Timing Cyl 7", float,  "%.3f"
entry = ignitionAdvanceCyl8, "Ign: Timing Cyl 8", float,  "%.3f"
entry = ignitionAdvanceCyl9, "Ign: Timing Cyl 9", float,  "%.3f"
entry = ignitionAdvanceCyl10, "Ign: Timing Cyl 10", float,  "%.3f"
entry = ignitionAdvanceCyl11, "Ign: Timing Cyl 11", float,  "%.3f"
entry = ignitionAdvanceCyl12, "Ign: Timing Cyl 12", float,  "%.3f"
entry = tps1Split, "tps1Split", float,  "%.3f"
entry = tps2Split, "tps2Split", float,  "%.3f"
entry = tps12Split, "tps12Split", float,  "%.3f"
entry = accPedalSplit, "accPedalSplit", float,  "%.3f"
entry = accPedalUnfiltered, "accPedalUnfiltered", float,  "%.3f"
entry = sparkCutReason, "Ign: Cut Code", int,    "%d"
entry = fuelCutReason, "Fuel: Cut Code", int,    "%d"
entry = mafEstimate, "Air: Flow estimate", float,  "%.3f"
entry = instantRpm, "sync: instant RPM", int,    "%d"
entry = rawMap, "rawMap", float,  "%.3f"
entry = rawMapFast, "rawMapFast", float,  "%.3f"
entry = rawAfr, "rawAfr", float,  "%.3f"
entry = calibrationValue2, "calibrationValue2", float,  "%.3f"
entry = luaInvocationCounter, "Lua: Tick counter", int,    "%d"
entry = luaLastCycleDuration, "Lua: Last tick duration", int,    "%d"
entry = vssEdgeCounter, "vssEdgeCounter", int,    "%d"
entry = issEdgeCounter, "issEdgeCounter", int,    "%d"
entry = auxLinear1, "Aux linear #1", float,  "%.3f"
entry = auxLinear2, "Aux linear #2", float,  "%.3f"
entry = auxLinear3, "Aux linear #3", float,  "%.3f"
entry = auxLinear4, "Aux linear #4", float,  "%.3f"
entry = fallbackMap, "fallbackMap", float,  "%.3f"
entry = effectiveMap, "Effective MAP", float,  "%.3f"
entry = instantMAPValue, "Instant MAP", float,  "%.3f"
entry = maxLockedDuration, "maxLockedDuration", int,    "%d"
entry = canWriteOk, "CAN: Tx OK", int,    "%d"
entry = canWriteNotOk, "CAN: Tx err", int,    "%d"
entry = triggerPrimaryFall, "triggerPrimaryFall", int,    "%d"
entry = triggerPrimaryRise, "triggerPrimaryRise", int,    "%d"
entry = triggerSecondaryFall, "triggerSecondaryFall", int,    "%d"
entry = triggerSecondaryRise, "triggerSecondaryRise", int,    "%d"
entry = starterState, "starterState", int,    "%d"
entry = starterRelayDisable, "starterRelayDisable", int,    "%d"
entry = multiSparkCounter, "Ign: Multispark count", int,    "%d"
entry = extiOverflowCount, "extiOverflowCount", int,    "%d"
entry = alternatorStatus_pTerm, "alternatorStatus_pTerm", float,  "%.3f"
entry = alternatorStatus_iTerm, "alternatorStatus_iTerm", float,  "%.3f"
entry = alternatorStatus_dTerm, "alternatorStatus_dTerm", float,  "%.3f"
entry = alternatorStatus_output, "alternatorStatus_output", float,  "%.3f"
entry = alternatorStatus_error, "alternatorStatus_error", float,  "%.3f"
entry = alternatorStatus_resetCounter, "alternatorStatus_resetCounter", int,    "%d"
entry = idleStatus_pTerm, "idleStatus_pTerm", float,  "%.3f"
entry = idleStatus_iTerm, "idleStatus_iTerm", float,  "%.3f"
entry = idleStatus_dTerm, "idleStatus_dTerm", float,  "%.3f"
entry = idleStatus_output, "idleStatus_output", float,  "%.3f"
entry = idleStatus_error, "idleStatus_error", float,  "%.3f"
entry = idleStatus_resetCounter, "idleStatus_resetCounter", int,    "%d"
entry = etbStatus_pTerm, "etbStatus_pTerm", float,  "%.3f"
entry = etbStatus_iTerm, "etbStatus_iTerm", float,  "%.3f"
entry = etbStatus_dTerm, "etbStatus_dTerm", float,  "%.3f"
entry = etbStatus_output, "etbStatus_output", float,  "%.3f"
entry = etbStatus_error, "etbStatus_error", float,  "%.3f"
entry = etbStatus_resetCounter, "etbStatus_resetCounter", int,    "%d"
entry = boostStatus_pTerm, "boostStatus_pTerm", float,  "%.3f"
entry = boostStatus_iTerm, "boostStatus_iTerm", float,  "%.3f"
entry = boostStatus_dTerm, "boostStatus_dTerm", float,  "%.3f"
entry = boostStatus_output, "boostStatus_output", float,  "%.3f"
entry = boostStatus_error, "boostStatus_error", float,  "%.3f"
entry = boostStatus_resetCounter, "boostStatus_resetCounter", int,    "%d"
entry = wastegateDcStatus_pTerm, "wastegateDcStatus_pTerm", float,  "%.3f"
entry = wastegateDcStatus_iTerm, "wastegateDcStatus_iTerm", float,  "%.3f"
entry = wastegateDcStatus_dTerm, "wastegateDcStatus_dTerm", float,  "%.3f"
entry = wastegateDcStatus_output, "wastegateDcStatus_output", float,  "%.3f"
entry = wastegateDcStatus_error, "wastegateDcStatus_error", float,  "%.3f"
entry = wastegateDcStatus_resetCounter, "wastegateDcStatus_resetCounter", int,    "%d"
entry = vvtStatus1_pTerm, "vvtStatus1_pTerm", float,  "%.3f"
entry = vvtStatus1_iTerm, "vvtStatus1_iTerm", float,  "%.3f"
entry = vvtStatus1_dTerm, "vvtStatus1_dTerm", float,  "%.3f"
entry = vvtStatus1_output, "vvtStatus1_output", float,  "%.3f"
entry = vvtStatus1_error, "vvtStatus1_error", float,  "%.3f"
entry = vvtStatus1_resetCounter, "vvtStatus1_resetCounter", int,    "%d"
entry = vvtStatus2_pTerm, "vvtStatus2_pTerm", float,  "%.3f"
entry = vvtStatus2_iTerm, "vvtStatus2_iTerm", float,  "%.3f"
entry = vvtStatus2_dTerm, "vvtStatus2_dTerm", float,  "%.3f"
entry = vvtStatus2_output, "vvtStatus2_output", float,  "%.3f"
entry = vvtStatus2_error, "vvtStatus2_error", float,  "%.3f"
entry = vvtStatus2_resetCounter, "vvtStatus2_resetCounter", int,    "%d"
entry = vvtStatus3_pTerm, "vvtStatus3_pTerm", float,  "%.3f"
entry = vvtStatus3_iTerm, "vvtStatus3_iTerm", float,  "%.3f"
entry = vvtStatus3_dTerm, "vvtStatus3_dTerm", float,  "%.3f"
entry = vvtStatus3_output, "vvtStatus3_output", float,  "%.3f"
entry = vvtStatus3_error, "vvtStatus3_error", float,  "%.3f"
entry = vvtStatus3_resetCounter, "vvtStatus3_resetCounter", int,    "%d"
entry = vvtStatus4_pTerm, "vvtStatus4_pTerm", float,  "%.3f"
entry = vvtStatus4_iTerm, "vvtStatus4_iTerm", float,  "%.3f"
entry = vvtStatus4_dTerm, "vvtStatus4_dTerm", float,  "%.3f"
entry = vvtStatus4_output, "vvtStatus4_output", float,  "%.3f"
entry = vvtStatus4_error, "vvtStatus4_error", float,  "%.3f"
entry = vvtStatus4_resetCounter, "vvtStatus4_resetCounter", int,    "%d"
entry = auxSpeed1, "Aux speed 1", int,    "%d"
entry = auxSpeed2, "Aux speed 2", int,    "%d"
entry = ISSValue, "TCU: Input Shaft Speed", int,    "%d"
entry = rawAnalogInput1, "rawAnalogInput 1", float,  "%.3f"
entry = rawAnalogInput2, "rawAnalogInput 2", float,  "%.3f"
entry = rawAnalogInput3, "rawAnalogInput 3", float,  "%.3f"
entry = rawAnalogInput4, "rawAnalogInput 4", float,  "%.3f"
entry = rawAnalogInput5, "rawAnalogInput 5", float,  "%.3f"
entry = rawAnalogInput6, "rawAnalogInput 6", float,  "%.3f"
entry = rawAnalogInput7, "rawAnalogInput 7", float,  "%.3f"
entry = rawAnalogInput8, "rawAnalogInput 8", float,  "%.3f"
entry = gppwmOutput1, "GPPWM Output 1", float,  "%.3f"
entry = gppwmOutput2, "GPPWM Output 2", float,  "%.3f"
entry = gppwmOutput3, "GPPWM Output 3", float,  "%.3f"
entry = gppwmOutput4, "GPPWM Output 4", float,  "%.3f"
entry = gppwmXAxis1, "gppwmXAxis 1", int,    "%d"
entry = gppwmXAxis2, "gppwmXAxis 2", int,    "%d"
entry = gppwmXAxis3, "gppwmXAxis 3", int,    "%d"
entry = gppwmXAxis4, "gppwmXAxis 4", int,    "%d"
entry = gppwmYAxis1, "gppwmYAxis 1", float,  "%.3f"
entry = gppwmYAxis2, "gppwmYAxis 2", float,  "%.3f"
entry = gppwmYAxis3, "gppwmYAxis 3", float,  "%.3f"
entry = gppwmYAxis4, "gppwmYAxis 4", float,  "%.3f"
entry = rawBattery, "rawBattery", float,  "%.3f"
entry = ignBlendParameter1, "ignBlendParameter 1", float,  "%.3f"
entry = ignBlendParameter2, "ignBlendParameter 2", float,  "%.3f"
entry = ignBlendParameter3, "ignBlendParameter 3", float,  "%.3f"
entry = ignBlendParameter4, "ignBlendParameter 4", float,  "%.3f"
entry = ignBlendBias1, "ignBlendBias 1", float,  "%.3f"
entry = ignBlendBias2, "ignBlendBias 2", float,  "%.3f"
entry = ignBlendBias3, "ignBlendBias 3", float,  "%.3f"
entry = ignBlendBias4, "ignBlendBias 4", float,  "%.3f"
entry = ignBlendOutput1, "ignBlendOutput 1", float,  "%.3f"
entry = ignBlendOutput2, "ignBlendOutput 2", float,  "%.3f"
entry = ignBlendOutput3, "ignBlendOutput 3", float,  "%.3f"
entry = ignBlendOutput4, "ignBlendOutput 4", float,  "%.3f"
entry = ignBlendYAxis1, "ignBlendYAxis 1", float,  "%.3f"
entry = ignBlendYAxis2, "ignBlendYAxis 2", float,  "%.3f"
entry = ignBlendYAxis3, "ignBlendYAxis 3", float,  "%.3f"
entry = ignBlendYAxis4, "ignBlendYAxis 4", float,  "%.3f"
entry = veBlendParameter1, "veBlendParameter 1", float,  "%.3f"
entry = veBlendParameter2, "veBlendParameter 2", float,  "%.3f"
entry = veBlendParameter3, "veBlendParameter 3", float,  "%.3f"
entry = veBlendParameter4, "veBlendParameter 4", float,  "%.3f"
entry = veBlendBias1, "veBlendBias 1", float,  "%.3f"
entry = veBlendBias2, "veBlendBias 2", float,  "%.3f"
entry = veBlendBias3, "veBlendBias 3", float,  "%.3f"
entry = veBlendBias4, "veBlendBias 4", float,  "%.3f"
entry = veBlendOutput1, "veBlendOutput 1", float,  "%.3f"
entry = veBlendOutput2, "veBlendOutput 2", float,  "%.3f"
entry = veBlendOutput3, "veBlendOutput 3", float,  "%.3f"
entry = veBlendOutput4, "veBlendOutput 4", float,  "%.3f"
entry = veBlendYAxis1, "veBlendYAxis 1", float,  "%.3f"
entry = veBlendYAxis2, "veBlendYAxis 2", float,  "%.3f"
entry = veBlendYAxis3, "veBlendYAxis 3", float,  "%.3f"
entry = veBlendYAxis4, "veBlendYAxis 4", float,  "%.3f"
entry = boostOpenLoopBlendParameter1, "boostOpenLoopBlendParameter 1", float,  "%.3f"
entry = boostOpenLoopBlendParameter2, "boostOpenLoopBlendParameter 2", float,  "%.3f"
entry = boostOpenLoopBlendBias1, "boostOpenLoopBlendBias 1", float,  "%.3f"
entry = boostOpenLoopBlendBias2, "boostOpenLoopBlendBias 2", float,  "%.3f"
entry = boostOpenLoopBlendOutput1, "boostOpenLoopBlendOutput 1", int,    "%d"
entry = boostOpenLoopBlendOutput2, "boostOpenLoopBlendOutput 2", int,    "%d"
entry = boostOpenLoopBlendYAxis1, "boostOpenLoopBlendYAxis 1", float,  "%.3f"
entry = boostOpenLoopBlendYAxis2, "boostOpenLoopBlendYAxis 2", float,  "%.3f"
entry = boostClosedLoopBlendParameter1, "boostClosedLoopBlendParameter 1", float,  "%.3f"
entry = boostClosedLoopBlendParameter2, "boostClosedLoopBlendParameter 2", float,  "%.3f"
entry = boostClosedLoopBlendBias1, "boostClosedLoopBlendBias 1", float,  "%.3f"
entry = boostClosedLoopBlendBias2, "boostClosedLoopBlendBias 2", float,  "%.3f"
entry = boostClosedLoopBlendOutput1, "boostClosedLoopBlendOutput 1", float,  "%.3f"
entry = boostClosedLoopBlendOutput2, "boostClosedLoopBlendOutput 2", float,  "%.3f"
entry = boostClosedLoopBlendYAxis1, "boostClosedLoopBlendYAxis 1", float,  "%.3f"
entry = boostClosedLoopBlendYAxis2, "boostClosedLoopBlendYAxis 2", float,  "%.3f"
entry = targetAfrBlendParameter1, "targetAfrBlendParameter 1", float,  "%.3f"
entry = targetAfrBlendParameter2, "targetAfrBlendParameter 2", float,  "%.3f"
entry = targetAfrBlendBias1, "targetAfrBlendBias 1", float,  "%.3f"
entry = targetAfrBlendBias2, "targetAfrBlendBias 2", float,  "%.3f"
entry = targetAfrBlendOutput1, "targetAfrBlendOutput 1", float,  "%.3f"
entry = targetAfrBlendOutput2, "targetAfrBlendOutput 2", float,  "%.3f"
entry = targetAfrBlendYAxis1, "targetAfrBlendYAxis 1", float,  "%.3f"
entry = targetAfrBlendYAxis2, "targetAfrBlendYAxis 2", float,  "%.3f"
entry = coilState1, "coilState1", int,    "%d"
entry = coilState2, "coilState2", int,    "%d"
entry = coilState3, "coilState3", int,    "%d"
entry = coilState4, "coilState4", int,    "%d"
entry = coilState5, "coilState5", int,    "%d"
entry = coilState6, "coilState6", int,    "%d"
entry = coilState7, "coilState7", int,    "%d"
entry = coilState8, "coilState8", int,    "%d"
entry = coilState9, "coilState9", int,    "%d"
entry = coilState10, "coilState10", int,    "%d"
entry = coilState11, "coilState11", int,    "%d"
entry = coilState12, "coilState12", int,    "%d"
entry = injectorState1, "injectorState1", int,    "%d"
entry = injectorState2, "injectorState2", int,    "%d"
entry = injectorState3, "injectorState3", int,    "%d"
entry = injectorState4, "injectorState4", int,    "%d"
entry = injectorState5, "injectorState5", int,    "%d"
entry = injectorState6, "injectorState6", int,    "%d"
entry = injectorState7, "injectorState7", int,    "%d"
entry = injectorState8, "injectorState8", int,    "%d"
entry = injectorState9, "injectorState9", int,    "%d"
entry = injectorState10, "injectorState10", int,    "%d"
entry = injectorState11, "injectorState11", int,    "%d"
entry = injectorState12, "injectorState12", int,    "%d"
entry = triggerChannel1, "triggerChannel1", int,    "%d"
entry = triggerChannel2, "triggerChannel2", int,    "%d"
entry = vvtChannel1, "bank 1 intake cam input", int,    "%d"
entry = vvtChannel2, "bank 1 exhaust cam input", int,    "%d"
entry = vvtChannel3, "bank 2 intake cam input", int,    "%d"
entry = vvtChannel4, "bank 2 exhaust cam input", int,    "%d"
entry = isMapPredictionActive, "AE: Map Prediction Active", int,    "%d"
entry = outputRequestPeriod, "outputRequestPeriod", int,    "%d"
entry = mapFast, "mapFast", float,  "%.3f"
entry = luaGauges1, "Lua: Gauge 1", float,  "%.3f"
entry = luaGauges2, "Lua: Gauge 2", float,  "%.3f"
entry = luaGauges3, "Lua: Gauge 3", float,  "%.3f"
entry = luaGauges4, "Lua: Gauge 4", float,  "%.3f"
entry = luaGauges5, "Lua: Gauge 5", float,  "%.3f"
entry = luaGauges6, "Lua: Gauge 6", float,  "%.3f"
entry = luaGauges7, "Lua: Gauge 7", float,  "%.3f"
entry = luaGauges8, "Lua: Gauge 8", float,  "%.3f"
entry = rawMaf2, "rawMaf2", float,  "%.3f"
entry = mafMeasured2, "MAF #2", float,  "%.3f"
entry = schedulingUsedCount, "schedulingUsedCount", int,    "%d"
entry = vehicleSpeedKph, "Vehicle Speed", float,  "%.3f"
entry = Gego, "Gego", float,  "%.3f"
entry = testBenchIter, "testBenchIter", int,    "%d"
entry = oilTemp, "oilTemp", float,  "%.3f"
entry = fuelTemp, "fuelTemp", float,  "%.3f"
entry = ambientTemp, "ambientTemp", float,  "%.3f"
entry = compressorDischargeTemp, "compressorDischargeTemp", float,  "%.3f"
entry = compressorDischargePressure, "compressorDischargePressure", float,  "%.3f"
entry = throttleInletPressure, "throttleInletPressure", float,  "%.3f"
entry = ignitionOnTime, "ignitionOnTime", int,    "%d"
entry = engineRunTime, "engineRunTime", int,    "%d"
entry = distanceTraveled, "distanceTraveled", float,  "%.3f"
entry = afrGasolineScale, "Air/Fuel Ratio (Gas Scale)", float,  "%.3f"
entry = afr2GasolineScale, "Air/Fuel Ratio 2 (Gas Scale)", float,  "%.3f"
entry = wheelSlipRatio, "wheelSlipRatio", float,  "%.3f"
entry = ignitorDiagnostic1, "ignitorDiagnostic 1", int,    "%d"
entry = ignitorDiagnostic2, "ignitorDiagnostic 2", int,    "%d"
entry = ignitorDiagnostic3, "ignitorDiagnostic 3", int,    "%d"
entry = ignitorDiagnostic4, "ignitorDiagnostic 4", int,    "%d"
entry = ignitorDiagnostic5, "ignitorDiagnostic 5", int,    "%d"
entry = ignitorDiagnostic6, "ignitorDiagnostic 6", int,    "%d"
entry = ignitorDiagnostic7, "ignitorDiagnostic 7", int,    "%d"
entry = ignitorDiagnostic8, "ignitorDiagnostic 8", int,    "%d"
entry = ignitorDiagnostic9, "ignitorDiagnostic 9", int,    "%d"
entry = ignitorDiagnostic10, "ignitorDiagnostic 10", int,    "%d"
entry = ignitorDiagnostic11, "ignitorDiagnostic 11", int,    "%d"
entry = ignitorDiagnostic12, "ignitorDiagnostic 12", int,    "%d"
entry = injectorDiagnostic1, "injectorDiagnostic 1", int,    "%d"
entry = injectorDiagnostic2, "injectorDiagnostic 2", int,    "%d"
entry = injectorDiagnostic3, "injectorDiagnostic 3", int,    "%d"
entry = injectorDiagnostic4, "injectorDiagnostic 4", int,    "%d"
entry = injectorDiagnostic5, "injectorDiagnostic 5", int,    "%d"
entry = injectorDiagnostic6, "injectorDiagnostic 6", int,    "%d"
entry = injectorDiagnostic7, "injectorDiagnostic 7", int,    "%d"
entry = injectorDiagnostic8, "injectorDiagnostic 8", int,    "%d"
entry = injectorDiagnostic9, "injectorDiagnostic 9", int,    "%d"
entry = injectorDiagnostic10, "injectorDiagnostic 10", int,    "%d"
entry = injectorDiagnostic11, "injectorDiagnostic 11", int,    "%d"
entry = injectorDiagnostic12, "injectorDiagnostic 12", int,    "%d"
entry = actualLastInjectionStage2, "Fuel: Last inj pulse width stg 2", float,  "%.3f"
entry = actualLastInjectionRatioStage2, "Fuel: Last inj pulse growth stg 2", float,  "%.3f"
entry = injectorDutyCycleStage2, "Fuel: injector duty cycle stage 2", float,  "%.3f"
entry = rawFlexFreq, "rawFlexFreq", int,    "%d"
entry = canReWidebandCmdStatus, "canReWidebandCmdStatus", int,    "%d"
entry = deviceUid, "deviceUid", int,    "%d"
entry = mc33810spiErrorCounter, "mc33810spiErrorCounter", int,    "%d"
entry = injectionPrimingCounter, "injectionPrimingCounter", int,    "%d"
entry = tempLogging2, "tempLogging2", int,    "%d"
entry = acPressure, "A/C pressure", float,  "%.3f"
entry = rawAuxAnalog1, "rawAuxAnalog1", float,  "%.3f"
entry = rawAuxAnalog2, "rawAuxAnalog2", float,  "%.3f"
entry = rawAuxAnalog3, "rawAuxAnalog3", float,  "%.3f"
entry = rawAuxAnalog4, "rawAuxAnalog4", float,  "%.3f"
entry = fastAdcErrorCount, "ECU: Fast ADC errors", int,    "%d"
entry = slowAdcErrorCount, "ECU: Slow ADC errors", int,    "%d"
entry = rawAuxTemp1, "rawAuxTemp1", float,  "%.3f"
entry = rawAuxTemp2, "rawAuxTemp2", float,  "%.3f"
entry = rawAmbientTemp, "rawAmbientTemp", float,  "%.3f"
entry = rtcUnixEpochTime, "rtcUnixEpochTime", int,    "%d"
entry = sparkCutReasonBlinker, "sparkCutReasonBlinker", int,    "%d"
entry = fuelCutReasonBlinker, "fuelCutReasonBlinker", int,    "%d"
entry = hp, "hp", int,    "%d"
entry = torque, "torque", int,    "%d"
entry = throttlePressureRatio, "throttlePressureRatio", float,  "%.3f"
entry = throttleEffectiveAreaOpening, "throttleEffectiveAreaOpening", float,  "%.3f"
entry = mcuSerial, "mcuSerial", int,    "%d"
entry = sd_error, "sd_error", int,    "%d"
entry = fastAdcOverrunCount, "ECU: Fast ADC overruns", int,    "%d"
entry = slowAdcOverrunCount, "ECU: Slow ADC overruns", int,    "%d"
entry = fastAdcLastError, "ECU: Fast ADC error type", int,    "%d"
entry = fastAdcPeriod, "ECU: Fast ADC period", int,    "%d"
entry = fastAdcConversionCount, "ECU: Fast ADC conversions", int,    "%d"
entry = canReWidebandVersion, "canReWidebandVersion", int,    "%d"
entry = canReWidebandFwDay, "canReWidebandFwDay", int,    "%d"
entry = canReWidebandFwMon, "canReWidebandFwMon", int,    "%d"
entry = canReWidebandFwYear, "canReWidebandFwYear", int,    "%d"
entry = transitionEventCode, "transitionEventCode", int,    "%d"
entry = transitionEventsCounter, "transitionEventsCounter", int,    "%d"
entry = mapPerCylinder1, "mapPerCylinder 1", int,    "%d"
entry = mapPerCylinder2, "mapPerCylinder 2", int,    "%d"
entry = mapPerCylinder3, "mapPerCylinder 3", int,    "%d"
entry = mapPerCylinder4, "mapPerCylinder 4", int,    "%d"
entry = mapPerCylinder5, "mapPerCylinder 5", int,    "%d"
entry = mapPerCylinder6, "mapPerCylinder 6", int,    "%d"
entry = mapPerCylinder7, "mapPerCylinder 7", int,    "%d"
entry = mapPerCylinder8, "mapPerCylinder 8", int,    "%d"
entry = mapPerCylinder9, "mapPerCylinder 9", int,    "%d"
entry = mapPerCylinder10, "mapPerCylinder 10", int,    "%d"
entry = mapPerCylinder11, "mapPerCylinder 11", int,    "%d"
entry = mapPerCylinder12, "mapPerCylinder 12", int,    "%d"
entry = totalFuelCorrection, "Fuel: Total correction", float,  "%.3f"
entry = running_postCrankingFuelCorrection, "Fuel: Post cranking mult", float,  "%.3f"
entry = running_intakeTemperatureCoefficient, "Fuel: IAT correction", float,  "%.3f"
entry = running_coolantTemperatureCoefficient, "Fuel: CLT correction", float,  "%.3f"
entry = running_timeSinceCrankingInSecs, "running_timeSinceCrankingInSecs", float,  "%.3f"
entry = running_baseFuel, "Fuel: base cycle mass", float,  "%.3f"
entry = running_fuel, "Fuel: running", float,  "%.3f"
entry = afrTableYAxis, "afrTableYAxis", float,  "%.3f"
entry = targetLambda, "Fuel: target lambda", float,  "%.3f"
entry = targetAFR, "Fuel: target AFR", float,  "%.3f"
entry = stoichiometricRatio, "Fuel: Stoich ratio", float,  "%.3f"
entry = sdTcharge_coff, "sdTcharge_coff", float,  "%.3f"
entry = sdAirMassInOneCylinder, "Air: Cylinder airmass", float,  "%.3f"
entry = normalizedCylinderFilling, "Air: Normalized cyl filling", float,  "%.3f"
entry = brokenInjector, "brokenInjector", int,    "%d"
entry = idealEngineTorque, "idealEngineTorque", int,    "%d"
entry = injectorHwIssue, "injectorHwIssue", int,    "%d"
entry = baseDwell, "Ignition: base dwell", float,  "%.3f"
entry = sparkDwell, "Ignition: coil charge time", float,  "%.3f"
entry = dwellDurationAngle, "Ignition: dwell duration", float,  "%.3f"
entry = cltTimingCorrection, "Ign: CLT correction", float,  "%.3f"
entry = timingIatCorrection, "Ign: IAT correction", float,  "%.3f"
entry = timingPidCorrection, "Idle: Timing adjustment", float,  "%.3f"
entry = dfcoTimingRetard, "DFCO: Timing retard", float,  "%.3f"
entry = baseIgnitionAdvance, "Timing: base ignition", float,  "%.3f"
entry = correctedIgnitionAdvance, "Timing: ignition", float,  "%.3f"
entry = tractionAdvanceDrop, "Traction: timing correction", float,  "%.3f"
entry = dwellVoltageCorrection, "Ign: Dwell voltage correction", float,  "%.3f"
entry = luaTimingAdd, "Ign: Lua timing add", float,  "%.3f"
entry = luaTimingMult, "Ign: Lua timing mult", float,  "%.3f"
entry = luaIgnitionSkip, "Ign: Lua Spark Skip", int,    "%d"
entry = trailingSparkAngle, "Ign: Trailing spark deg", float,  "%.3f"
entry = rpmForIgnitionTableDot, "rpmForIgnitionTableDot", int,    "%d"
entry = rpmForIgnitionIdleTableDot, "rpmForIgnitionIdleTableDot", int,    "%d"
entry = loadForIgnitionTableDot, "loadForIgnitionTableDot", float,  "%.3f"
entry = m_knockLevel, "Knock: Current level", float,  "%.3f"
entry = m_knockCyl1, "Knock: Cyl 1", int,    "%d"
entry = m_knockCyl2, "Knock: Cyl 2", int,    "%d"
entry = m_knockCyl3, "Knock: Cyl 3", int,    "%d"
entry = m_knockCyl4, "Knock: Cyl 4", int,    "%d"
entry = m_knockCyl5, "Knock: Cyl 5", int,    "%d"
entry = m_knockCyl6, "Knock: Cyl 6", int,    "%d"
entry = m_knockCyl7, "Knock: Cyl 7", int,    "%d"
entry = m_knockCyl8, "Knock: Cyl 8", int,    "%d"
entry = m_knockCyl9, "Knock: Cyl 9", int,    "%d"
entry = m_knockCyl10, "Knock: Cyl 10", int,    "%d"
entry = m_knockCyl11, "Knock: Cyl 11", int,    "%d"
entry = m_knockCyl12, "Knock: Cyl 12", int,    "%d"
entry = m_knockRetard, "Knock: Retard", float,  "%.3f"
entry = m_knockThreshold, "Knock: Threshold", float,  "%.3f"
entry = m_knockCount, "Knock: Count", int,    "%d"
entry = m_maximumRetard, "Knock: Max retard", float,  "%.3f"
entry = m_knockSpectrum1, "Knock: SpectrumData 1", int,    "%d"
entry = m_knockSpectrum2, "Knock: SpectrumData 2", int,    "%d"
entry = m_knockSpectrum3, "Knock: SpectrumData 3", int,    "%d"
entry = m_knockSpectrum4, "Knock: SpectrumData 4", int,    "%d"
entry = m_knockSpectrum5, "Knock: SpectrumData 5", int,    "%d"
entry = m_knockSpectrum6, "Knock: SpectrumData 6", int,    "%d"
entry = m_knockSpectrum7, "Knock: SpectrumData 7", int,    "%d"
entry = m_knockSpectrum8, "Knock: SpectrumData 8", int,    "%d"
entry = m_knockSpectrum9, "Knock: SpectrumData 9", int,    "%d"
entry = m_knockSpectrum10, "Knock: SpectrumData 10", int,    "%d"
entry = m_knockSpectrum11, "Knock: SpectrumData 11", int,    "%d"
entry = m_knockSpectrum12, "Knock: SpectrumData 12", int,    "%d"
entry = m_knockSpectrum13, "Knock: SpectrumData 13", int,    "%d"
entry = m_knockSpectrum14, "Knock: SpectrumData 14", int,    "%d"
entry = m_knockSpectrum15, "Knock: SpectrumData 15", int,    "%d"
entry = m_knockSpectrum16, "Knock: SpectrumData 16", int,    "%d"
entry = m_knockSpectrumChannelCyl, "Knock: ChannelAndCylNumber", int,    "%d"
entry = m_knockFrequencyStart, "Knock: Start Freq", int,    "%d"
entry = m_knockFrequencyStep, "Knock: Step Freq", float,  "%.3f"
entry = m_knockFuelTrimMultiplier, "Knock: Fuel trim when knock", float,  "%.3f"
entry = m_isPriming, "IsFuelPriming", int,    "%d"
entry = tcuCurrentGear, "TCU: Current Gear", int,    "%d"
entry = tcRatio, "TCU: Torque Converter Ratio", float,  "%.3f"
entry = lastShiftTime, "lastShiftTime", float,  "%.3f"
entry = tcu_currentRange, "TCU: Current Range", int,    "%d"
entry = pressureControlDuty, "TCU: EPC Duty", int,    "%d"
entry = torqueConverterDuty, "TCU: TC Duty", int,    "%d"
entry = isShifting, "isShifting", int,    "%d"
entry = throttleUseWotModel, "Air: Throttle model WOT", int,    "%d"
entry = throttleModelCrossoverAngle, "Air: Throttle crossover pos", float,  "%.3f"
entry = throttleEstimatedFlow, "Air: Throttle flow estimate", float,  "%.3f"
entry = m_requested_pump, "GDI: HPFP duration", float,  "%.3f"
entry = fuel_requested_percent, "GDI: HPFP requested duty", float,  "%.3f"
entry = fuel_requested_percent_pi, "GDI: percent_pi", float,  "%.3f"
entry = noValve, "GDI: HPFP no Valve control output", int,    "%d"
entry = angleAboveMin, "GDI: HPFP angle above min", int,    "%d"
entry = isHpfpActive, "GDI: HPFP Active", int,    "%d"
entry = HpfpValveState, "GDI: HPFP Valve state", int,    "%d"
entry = m_pressureTarget_kPa, "GDI: target pressure", float,  "%.3f"
entry = hpfp_p_control_percent, "hpfp_p_control_percent", float,  "%.3f"
entry = hpfp_i_control_percent, "hpfp_i_control_percent", float,  "%.3f"
entry = nextLobe, "GDI: next lobe N", float,  "%.3f"
entry = di_nextStart, "GDI: valve activation angle", float,  "%.3f"
entry = HpfdActivationPhase, "GDI: HPFP activation angle", float,  "%.3f"
entry = HpfdDeactivationPhase, "GDI: HPFP deactivation angle", float,  "%.3f"
entry = m_deadtime, "Fuel: injector lag", float,  "%.3f"
entry = pressureDelta, "Fuel: Injector pressure delta", float,  "%.3f"
entry = pressureRatio, "Fuel: Injector pressure ratio", float,  "%.3f"
entry = pressureCorrectionReference, "Fuel: corr reference pressure", float,  "%.3f"
entry = retardThresholdRpm, "Launch: Retard threshold RPM", int,    "%d"
entry = launchActivatePinState, "launchActivatePinState", int,    "%d"
entry = isPreLaunchCondition, "isPreLaunchCondition", int,    "%d"
entry = isLaunchCondition, "Launch: isLaunchCondition", int,    "%d"
entry = isSwitchActivated, "Launch: isSwitchActivated", int,    "%d"
entry = isClutchActivated, "Launch: isClutchActivated", int,    "%d"
entry = isBrakePedalActivated, "isBrakePedalActivated", int,    "%d"
entry = isValidInputPin, "Launch: isValidInputPin", int,    "%d"
entry = activateSwitchCondition, "Launch: activateSwitchCondition", int,    "%d"
entry = rpmLaunchCondition, "rpmLaunchCondition", int,    "%d"
entry = rpmPreLaunchCondition, "rpmPreLaunchCondition", int,    "%d"
entry = speedCondition, "Launch: speedCondition", int,    "%d"
entry = tpsCondition, "Launch: tpsCondition", int,    "%d"
entry = luaLaunchState, "luaLaunchState", int,    "%d"
entry = isTorqueReductionTriggerPinValid, "isTorqueReductionTriggerPinValid", int,    "%d"
entry = torqueReductionTriggerPinState, "torqueReductionTriggerPinState", int,    "%d"
entry = isTimeConditionSatisfied, "isTimeConditionSatisfied", int,    "%d"
entry = isRpmConditionSatisfied, "isRpmConditionSatisfied", int,    "%d"
entry = isAppConditionSatisfied, "isAppConditionSatisfied", int,    "%d"
entry = isFlatShiftConditionSatisfied, "isFlatShiftConditionSatisfied", int,    "%d"
entry = isBelowTemperatureThreshold, "isBelowTemperatureThreshold", int,    "%d"
entry = isAntilagCondition, "isAntilagCondition", int,    "%d"
entry = ALSMinRPMCondition, "ALSMinRPMCondition", int,    "%d"
entry = ALSMaxRPMCondition, "ALSMaxRPMCondition", int,    "%d"
entry = ALSMinCLTCondition, "ALSMinCLTCondition", int,    "%d"
entry = ALSMaxCLTCondition, "ALSMaxCLTCondition", int,    "%d"
entry = ALSMaxThrottleIntentCondition, "ALSMaxThrottleIntentCondition", int,    "%d"
entry = isALSSwitchActivated, "isALSSwitchActivated", int,    "%d"
entry = ALSActivatePinState, "ALSActivatePinState", int,    "%d"
entry = ALSSwitchCondition, "ALSSwitchCondition", int,    "%d"
entry = ALSTimerCondition, "ALSTimerCondition", int,    "%d"
entry = luaAntilagState, "luaAntilagState", int,    "%d"
entry = fuelALSCorrection, "fuelALSCorrection", float,  "%.3f"
entry = timingALSCorrection, "timingALSCorrection", float,  "%.3f"
entry = timingALSSkip, "timingALSSkip", float,  "%.3f"
entry = isTpsInvalid, "isTpsInvalid", int,    "%d"
entry = m_shouldResetPid, "m_shouldResetPid", int,    "%d"
entry = isBelowClosedLoopThreshold, "isBelowClosedLoopThreshold", int,    "%d"
entry = isNotClosedLoop, "isNotClosedLoop", int,    "%d"
entry = isZeroRpm, "isZeroRpm", int,    "%d"
entry = hasInitBoost, "hasInitBoost", int,    "%d"
entry = rpmTooLow, "rpmTooLow", int,    "%d"
entry = tpsTooLow, "tpsTooLow", int,    "%d"
entry = mapTooLow, "mapTooLow", int,    "%d"
entry = isPlantValid, "isPlantValid", int,    "%d"
entry = isBoostControlled, "isBoostControlled", int,    "%d"
entry = luaTargetAdd, "Boost: Lua target add", float,  "%.3f"
entry = luaTargetMult, "Boost: Lua target mult", float,  "%.3f"
entry = boostControlTarget, "Boost: Target", float,  "%.3f"
entry = openLoopPart, "Boost: Open loop", float,  "%.3f"
entry = openLoopYAxis, "openLoopYAxis", float,  "%.3f"
entry = luaOpenLoopAdd, "Boost: Lua open loop add", float,  "%.3f"
entry = boostControllerClosedLoopPart, "Boost: Closed loop", float,  "%.3f"
entry = boostOutput, "Boost: Output", float,  "%.3f"
entry = acButtonState, "AC switch", int,    "%d"
entry = m_acEnabled, "AC enabled", int,    "%d"
entry = engineTooSlow, "AC engine too slow", int,    "%d"
entry = engineTooFast, "AC engine too fast", int,    "%d"
entry = noClt, "AC no CLT", int,    "%d"
entry = engineTooHot, "AC engine too hot", int,    "%d"
entry = tpsTooHigh, "AC tps too high", int,    "%d"
entry = isDisabledByLua, "AC disabled by Lua", int,    "%d"
entry = acCompressorState, "AC compressor on", int,    "%d"
entry = acPressureTooLow, "AC pressure too low", int,    "%d"
entry = acPressureTooHigh, "AC pressure too high", int,    "%d"
entry = isNitrousArmed, "isNitrousArmed", int,    "%d"
entry = isNitrousSpeedCondition, "isNitrousSpeedCondition", int,    "%d"
entry = isNitrousTpsCondition, "isNitrousTpsCondition", int,    "%d"
entry = isNitrousCltCondition, "isNitrousCltCondition", int,    "%d"
entry = isNitrousMapCondition, "isNitrousMapCondition", int,    "%d"
entry = isNitrousAfrCondition, "isNitrousAfrCondition", int,    "%d"
entry = isNitrousRpmCondition, "isNitrousRpmCondition", int,    "%d"
entry = isNitrousCondition, "isNitrousCondition", int,    "%d"
entry = fan1cranking, "fan1cranking", int,    "%d"
entry = fan1notRunning, "fan1notRunning", int,    "%d"
entry = fan1disabledWhileEngineStopped, "fan1Engine stopped", int,    "%d"
entry = fan1brokenClt, "fan1Broken CLT", int,    "%d"
entry = fan1enabledForAc, "fan1Enable for AC", int,    "%d"
entry = fan1hot, "fan1Above hot threshold", int,    "%d"
entry = fan1cold, "fan1Below cold threshold", int,    "%d"
entry = fan1disabledBySpeed, "fan1disabledBySpeed", int,    "%d"
entry = fan1m_state, "fan1On", int,    "%d"
entry = fan1radiatorFanStatus, "fan1radiatorFanStatus", int,    "%d"
entry = fan2cranking, "fan2cranking", int,    "%d"
entry = fan2notRunning, "fan2notRunning", int,    "%d"
entry = fan2disabledWhileEngineStopped, "fan2Engine stopped", int,    "%d"
entry = fan2brokenClt, "fan2Broken CLT", int,    "%d"
entry = fan2enabledForAc, "fan2Enable for AC", int,    "%d"
entry = fan2hot, "fan2Above hot threshold", int,    "%d"
entry = fan2cold, "fan2Below cold threshold", int,    "%d"
entry = fan2disabledBySpeed, "fan2disabledBySpeed", int,    "%d"
entry = fan2m_state, "fan2On", int,    "%d"
entry = fan2radiatorFanStatus, "fan2radiatorFanStatus", int,    "%d"
entry = isPrime, "isPrime", int,    "%d"
entry = engineTurnedRecently, "engineTurnedRecently", int,    "%d"
entry = isFuelPumpOn, "isFuelPumpOn", int,    "%d"
entry = ignitionOn, "ignitionOn", int,    "%d"
entry = isBenchTest, "Main relay: Bench test", int,    "%d"
entry = hasIgnitionVoltage, "Main relay: Has IGN voltage", int,    "%d"
entry = mainRelayState, "Main relay: On", int,    "%d"
entry = delayedShutoffRequested, "Main relay: Delayed shutoff", int,    "%d"
entry = injectionMass1, "injectionMass 1", float,  "%.3f"
entry = injectionMass2, "injectionMass 2", float,  "%.3f"
entry = injectionMass3, "injectionMass 3", float,  "%.3f"
entry = injectionMass4, "injectionMass 4", float,  "%.3f"
entry = injectionMass5, "injectionMass 5", float,  "%.3f"
entry = injectionMass6, "injectionMass 6", float,  "%.3f"
entry = injectionMass7, "injectionMass 7", float,  "%.3f"
entry = injectionMass8, "injectionMass 8", float,  "%.3f"
entry = injectionMass9, "injectionMass 9", float,  "%.3f"
entry = injectionMass10, "injectionMass 10", float,  "%.3f"
entry = injectionMass11, "injectionMass 11", float,  "%.3f"
entry = injectionMass12, "injectionMass 12", float,  "%.3f"
entry = lua_fuelAdd, "Lua: Fuel add", float,  "%.3f"
entry = lua_fuelMult, "Lua: Fuel mult", float,  "%.3f"
entry = lua_clutchUpState, "lua_clutchUpState", int,    "%d"
entry = lua_brakePedalState, "lua_brakePedalState", int,    "%d"
entry = lua_acRequestState, "lua_acRequestState", int,    "%d"
entry = lua_luaDisableEtb, "lua_luaDisableEtb", int,    "%d"
entry = lua_luaIgnCut, "lua_luaIgnCut", int,    "%d"
entry = lua_luaFuelCut, "lua_luaFuelCut", int,    "%d"
entry = lua_clutchDownState, "lua_clutchDownState", int,    "%d"
entry = lua_disableDecelerationFuelCutOff, "lua_disableDecelerationFuelCutOff", int,    "%d"
entry = lua_torqueReductionState, "lua_torqueReductionState", int,    "%d"
entry = sd_tCharge, "Air: Charge temperature estimate", float,  "%.3f"
entry = sd_tChargeK, "Air: Charge temperature estimate K", float,  "%.3f"
entry = crankingFuel_coolantTemperatureCoefficient, "Fuel: cranking CLT mult", float,  "%.3f"
entry = crankingFuel_tpsCoefficient, "Fuel: cranking TPS mult", float,  "%.3f"
entry = crankingFuel_baseFuel, "Fuel: Cranking cycle base mass", float,  "%.3f"
entry = crankingFuel_fuel, "Fuel: Cranking cycle mass", float,  "%.3f"
entry = baroCorrection, "Fuel: Barometric pressure mult", float,  "%.3f"
entry = hellenBoardId, "Detected Board ID", int,    "%d"
entry = clutchUpState, "Clutch: up", int,    "%d"
entry = brakePedalState, "Brake switch", int,    "%d"
entry = startStopState, "startStopState", int,    "%d"
entry = smartChipState, "smartChipState", int,    "%d"
entry = smartChipRestartCounter, "smartChipRestartCounter", int,    "%d"
entry = smartChipAliveCounter, "smartChipAliveCounter", int,    "%d"
entry = startStopPhysicalState, "startStopPhysicalState", int,    "%d"
entry = acrActive, "Harley ACR Active", int,    "%d"
entry = acrEngineMovedRecently, "acrEngineMovedRecently", int,    "%d"
entry = heaterControlEnabled, "heaterControlEnabled", int,    "%d"
entry = luaDigitalState0, "luaDigitalState0", int,    "%d"
entry = luaDigitalState1, "luaDigitalState1", int,    "%d"
entry = luaDigitalState2, "luaDigitalState2", int,    "%d"
entry = luaDigitalState3, "luaDigitalState3", int,    "%d"
entry = clutchDownState, "Clutch: down", int,    "%d"
entry = startStopStateToggleCounter, "startStopStateToggleCounter", int,    "%d"
entry = currentVe, "currentVe", float,  "%.3f"
entry = luaSoftSparkSkip, "luaSoftSparkSkip", float,  "%.3f"
entry = luaHardSparkSkip, "luaHardSparkSkip", float,  "%.3f"
entry = tractionControlSparkSkip, "tractionControlSparkSkip", float,  "%.3f"
entry = fuelInjectionCounter, "Fuel: Injection counter", int,    "%d"
entry = globalSparkCounter, "Ign: Spark counter", int,    "%d"
entry = fuelingLoad, "Fuel: Load", float,  "%.3f"
entry = ignitionLoad, "Ignition: load", float,  "%.3f"
entry = veTableYAxis, "veTableYAxis", float,  "%.3f"
entry = veTableIdleYAxis, "veTableIdleYAxis", float,  "%.3f"
entry = overDwellCanceledCounter, "Ignition: overcharge canceled", int,    "%d"
entry = overDwellNotScheduledCounter, "Ignition: overDwellNotScheduled", int,    "%d"
entry = sparkOutOfOrderCounter, "Ignition: sparkOutOfOrder", int,    "%d"
entry = dwellUnderChargeCounter, "Ignition: undecharge warnings", int,    "%d"
entry = dwellOverChargeCounter, "Ignition: overcharge warnings", int,    "%d"
entry = dwellActualRatio, "Ignition: Dwell deviation", float,  "%.3f"
entry = stftCorrection1, "STFT: Bank 1", float,  "%.3f"
entry = stftCorrection2, "STFT: Bank 2", float,  "%.3f"
entry = tpsFrom, "Fuel: TPS AE from", float,  "%.3f"
entry = tpsTo, "Fuel: TPS AE to", float,  "%.3f"
entry = deltaTps, "Fuel: TPS AE change", float,  "%.3f"
entry = extraFuel, "Fuel: TPS extraFuel", float,  "%.3f"
entry = valueFromTable, "Fuel: TPS valueFromTable", float,  "%.3f"
entry = isAboveAccelThreshold, "Fuel: TPS AE Active", int,    "%d"
entry = isBelowDecelThreshold, "isBelowDecelThreshold", int,    "%d"
entry = isTimeToResetAccumulator, "Fuel: TPS AE: reset time", int,    "%d"
entry = isFractionalEnrichment, "isFractionalEnrichment", int,    "%d"
entry = belowEpsilon, "Fuel: TPS AE: below threshold", int,    "%d"
entry = tooShort, "Fuel: TPS AE: too short", int,    "%d"
entry = fractionalInjFuel, "Fuel: TPS AE fractionalInjFuel", float,  "%.3f"
entry = accumulatedValue, "accumulatedValue", float,  "%.3f"
entry = maxExtraPerCycle, "maxExtraPerCycle", float,  "%.3f"
entry = maxExtraPerPeriod, "maxExtraPerPeriod", float,  "%.3f"
entry = maxInjectedPerPeriod, "maxInjectedPerPeriod", float,  "%.3f"
entry = cycleCnt, "cycleCnt", int,    "%d"
entry = hwEventCounters1, "Hardware events since boot 1", int,    "%d"
entry = hwEventCounters2, "Hardware events since boot 2", int,    "%d"
entry = hwEventCounters3, "Hardware events since boot 3", int,    "%d"
entry = hwEventCounters4, "Hardware events since boot 4", int,    "%d"
entry = vvtEventRiseCounter1, "vvtEventRiseCounter 1", int,    "%d"
entry = vvtEventRiseCounter2, "vvtEventRiseCounter 2", int,    "%d"
entry = vvtEventRiseCounter3, "vvtEventRiseCounter 3", int,    "%d"
entry = vvtEventRiseCounter4, "vvtEventRiseCounter 4", int,    "%d"
entry = vvtEventFallCounter1, "vvtEventFallCounter 1", int,    "%d"
entry = vvtEventFallCounter2, "vvtEventFallCounter 2", int,    "%d"
entry = vvtEventFallCounter3, "vvtEventFallCounter 3", int,    "%d"
entry = vvtEventFallCounter4, "vvtEventFallCounter 4", int,    "%d"
entry = vvtCamCounter, "Sync: total cams front counter", int,    "%d"
entry = mapVvt_MAP_AT_SPECIAL_POINT, "InstantMAP at readout angle", float,  "%.3f"
entry = mapVvt_MAP_AT_DIFF, "InstantMAP delta @ readout angles", float,  "%.3f"
entry = mapVvt_MAP_AT_CYCLE_COUNT, "mapVvt_MAP_AT_CYCLE_COUNT", int,    "%d"
entry = mapVvt_sync_counter, "Instant MAP sync counter", int,    "%d"
entry = mapVvt_min_point_counter, "mapVvt_min_point_counter", int,    "%d"
entry = temp_mapVvt_index, "temp_mapVvt_index", int,    "%d"
entry = mapVvt_CycleDelta, "mapVvt_CycleDelta", float,  "%.3f"
entry = currentEngineDecodedPhase, "Sync: Engine Phase", float,  "%.3f"
entry = triggerToothAngleError, "Sync: trigger angle error", float,  "%.3f"
entry = triggerIgnoredToothCount, "triggerIgnoredToothCount", int,    "%d"
entry = mapCamPrevToothAngle, "Sync: MAP: prev angle", float,  "%.3f"
entry = isDecodingMapCam, "isDecodingMapCam", int,    "%d"
entry = triggerElapsedUs, "triggerElapsedUs", int,    "%d"
entry = trgsynchronizationCounter, "trgsync: wheel sync counter", int,    "%d"
entry = trgvvtToothDurations0, "trgvvtToothDurations0", int,    "%d"
entry = trgvvtCurrentPosition, "trgsync: Primary Position", float,  "%.3f"
entry = trgvvtToothPosition1, "trgsync: Cam Position 1", float,  "%.3f"
entry = trgvvtToothPosition2, "trgsync: Cam Position 2", float,  "%.3f"
entry = trgvvtToothPosition3, "trgsync: Cam Position 3", float,  "%.3f"
entry = trgvvtToothPosition4, "trgsync: Cam Position 4", float,  "%.3f"
entry = trgtriggerSyncGapRatio, "trgSync: Trigger Latest Ratio", float,  "%.3f"
entry = trgtriggerStateIndex, "trgtriggerStateIndex", int,    "%d"
entry = trgtriggerCountersError, "trgtriggerCountersError", int,    "%d"
entry = vvt1isynchronizationCounter, "vvt1isync: wheel sync counter", int,    "%d"
entry = vvt1ivvtToothDurations0, "vvt1ivvtToothDurations0", int,    "%d"
entry = vvt1ivvtCurrentPosition, "vvt1isync: Primary Position", float,  "%.3f"
entry = vvt1ivvtToothPosition1, "vvt1isync: Cam Position 1", float,  "%.3f"
entry = vvt1ivvtToothPosition2, "vvt1isync: Cam Position 2", float,  "%.3f"
entry = vvt1ivvtToothPosition3, "vvt1isync: Cam Position 3", float,  "%.3f"
entry = vvt1ivvtToothPosition4, "vvt1isync: Cam Position 4", float,  "%.3f"
entry = vvt1itriggerSyncGapRatio, "vvt1iSync: Trigger Latest Ratio", float,  "%.3f"
entry = vvt1itriggerStateIndex, "vvt1itriggerStateIndex", int,    "%d"
entry = vvt1itriggerCountersError, "vvt1itriggerCountersError", int,    "%d"
entry = vvt1esynchronizationCounter, "vvt1esync: wheel sync counter", int,    "%d"
entry = vvt1evvtToothDurations0, "vvt1evvtToothDurations0", int,    "%d"
entry = vvt1evvtCurrentPosition, "vvt1esync: Primary Position", float,  "%.3f"
entry = vvt1evvtToothPosition1, "vvt1esync: Cam Position 1", float,  "%.3f"
entry = vvt1evvtToothPosition2, "vvt1esync: Cam Position 2", float,  "%.3f"
entry = vvt1evvtToothPosition3, "vvt1esync: Cam Position 3", float,  "%.3f"
entry = vvt1evvtToothPosition4, "vvt1esync: Cam Position 4", float,  "%.3f"
entry = vvt1etriggerSyncGapRatio, "vvt1eSync: Trigger Latest Ratio", float,  "%.3f"
entry = vvt1etriggerStateIndex, "vvt1etriggerStateIndex", int,    "%d"
entry = vvt1etriggerCountersError, "vvt1etriggerCountersError", int,    "%d"
entry = vvt2isynchronizationCounter, "vvt2isync: wheel sync counter", int,    "%d"
entry = vvt2ivvtToothDurations0, "vvt2ivvtToothDurations0", int,    "%d"
entry = vvt2ivvtCurrentPosition, "vvt2isync: Primary Position", float,  "%.3f"
entry = vvt2ivvtToothPosition1, "vvt2isync: Cam Position 1", float,  "%.3f"
entry = vvt2ivvtToothPosition2, "vvt2isync: Cam Position 2", float,  "%.3f"
entry = vvt2ivvtToothPosition3, "vvt2isync: Cam Position 3", float,  "%.3f"
entry = vvt2ivvtToothPosition4, "vvt2isync: Cam Position 4", float,  "%.3f"
entry = vvt2itriggerSyncGapRatio, "vvt2iSync: Trigger Latest Ratio", float,  "%.3f"
entry = vvt2itriggerStateIndex, "vvt2itriggerStateIndex", int,    "%d"
entry = vvt2itriggerCountersError, "vvt2itriggerCountersError", int,    "%d"
entry = vvt2esynchronizationCounter, "vvt2esync: wheel sync counter", int,    "%d"
entry = vvt2evvtToothDurations0, "vvt2evvtToothDurations0", int,    "%d"
entry = vvt2evvtCurrentPosition, "vvt2esync: Primary Position", float,  "%.3f"
entry = vvt2evvtToothPosition1, "vvt2esync: Cam Position 1", float,  "%.3f"
entry = vvt2evvtToothPosition2, "vvt2esync: Cam Position 2", float,  "%.3f"
entry = vvt2evvtToothPosition3, "vvt2esync: Cam Position 3", float,  "%.3f"
entry = vvt2evvtToothPosition4, "vvt2esync: Cam Position 4", float,  "%.3f"
entry = vvt2etriggerSyncGapRatio, "vvt2eSync: Trigger Latest Ratio", float,  "%.3f"
entry = vvt2etriggerStateIndex, "vvt2etriggerStateIndex", int,    "%d"
entry = vvt2etriggerCountersError, "vvt2etriggerCountersError", int,    "%d"
entry = camResyncCounter, "sync: Phase Re-Sync Counter", int,    "%d"
entry = m_hasSynchronizedPhase, "sync: We Know Engine Phase", int,    "%d"
entry = wallFuelCorrection, "fuel wallwetting injection time", float,  "%.3f"
entry = wallFuel, "Fuel on the wall", float,  "%.3f"
entry = isStableIdle, "isStableIdle", int,    "%d"
entry = emaError, "emaError", float,  "%.3f"
entry = liveDataExampleField, "liveDataExampleField", float,  "%.3f"
entry = idleState, "idleState", int,    "%d"
entry = baseIdlePosition, "idle: base value", float,  "%.3f"
entry = iacByTpsTaper, "idle: iacByTpsTaper portion", float,  "%.3f"
entry = mightResetPid, "idle: mightResetPid", int,    "%d"
entry = shouldResetPid, "Idle: shouldResetPid", int,    "%d"
entry = wasResetPid, "Idle: wasResetPid", int,    "%d"
entry = isCranking, "Idle: cranking", int,    "%d"
entry = isIacTableForCoasting, "isIacTableForCoasting", int,    "%d"
entry = needReset, "Idle: reset", int,    "%d"
entry = isInDeadZone, "Idle: dead zone", int,    "%d"
entry = isBlipping, "isBlipping", int,    "%d"
entry = badTps, "badTps", int,    "%d"
entry = looksLikeRunning, "looksLikeRunning", int,    "%d"
entry = looksLikeCoasting, "looksLikeCoasting", int,    "%d"
entry = looksLikeCrankToIdle, "looksLikeCrankToIdle", int,    "%d"
entry = isIdleCoasting, "Idle: coasting", int,    "%d"
entry = isIdleClosedLoop, "Idle: Closed loop active", int,    "%d"
entry = isIdling, "Idle: idling", int,    "%d"
entry = idleTarget, "Idle: Target RPM", int,    "%d"
entry = idleEntryRpm, "Idle: Entry threshold", int,    "%d"
entry = idleExitRpm, "Idle: Exit threshold", int,    "%d"
entry = targetRpmByClt, "Idle: Target RPM base", int,    "%d"
entry = targetRpmAc, "Idle: Target A/C RPM", int,    "%d"
entry = iacByRpmTaper, "idle: iacByRpmTaper portion", float,  "%.3f"
entry = luaAdd, "idle: Lua Adder", float,  "%.3f"
entry = m_lastTargetRpm, "m_lastTargetRpm", int,    "%d"
entry = idleClosedLoop, "Closed loop", float,  "%.3f"
entry = currentIdlePosition, "Idle: Position", float,  "%.3f"
entry = idleTargetAirmass, "Target airmass", int,    "%d"
entry = idleTargetFlow, "Target airflow", float,  "%.3f"
entry = etb1targetWithIdlePosition, "etb1ETB: target with idle", float,  "%.3f"
entry = etb1trim, "etb1ETB: trim", float,  "%.3f"
entry = etb1boardEtbAdjustment, "etb1boardEtbAdjustment", float,  "%.3f"
entry = etb1luaAdjustment, "etb1ETB: luaAdjustment", float,  "%.3f"
entry = etb1m_wastegatePosition, "etb1DC: wastegatePosition", float,  "%.3f"
entry = etb1m_lastPidDtMs, "etb1EBT: last PID dT", float,  "%.3f"
entry = etb1etbFeedForward, "etb1etbFeedForward", float,  "%.3f"
entry = etb1integralError, "etb1Integral error", float,  "%.3f"
entry = etb1etbCurrentTarget, "etb1ETB: target for current pedal", float,  "%.3f"
entry = etb1m_adjustedTarget, "etb1Adjusted target", float,  "%.3f"
entry = etb1etbRevLimitActive, "etb1etbRevLimitActive", int,    "%d"
entry = etb1jamDetected, "etb1jamDetected", int,    "%d"
entry = etb1validPlantPosition, "etb1validPlantPosition", int,    "%d"
entry = etb1etbTpsErrorCounter, "etb1ETB TPS error counter", int,    "%d"
entry = etb1etbPpsErrorCounter, "etb1ETB pedal error counter", int,    "%d"
entry = etb1etbErrorCode, "etb1etbErrorCode", int,    "%d"
entry = etb1etbErrorCodeBlinker, "etb1etbErrorCodeBlinker", int,    "%d"
entry = etb1tcEtbDrop, "etb1ETB traction control", int,    "%d"
entry = etb1jamTimer, "etb1ETB jam timer", float,  "%.3f"
entry = etb1adjustedEtbTarget, "etb1ETB with adjustments", int,    "%d"
entry = etb1state, "etb1state", int,    "%d"
entry = etb2targetWithIdlePosition, "etb2ETB: target with idle", float,  "%.3f"
entry = etb2trim, "etb2ETB: trim", float,  "%.3f"
entry = etb2boardEtbAdjustment, "etb2boardEtbAdjustment", float,  "%.3f"
entry = etb2luaAdjustment, "etb2ETB: luaAdjustment", float,  "%.3f"
entry = etb2m_wastegatePosition, "etb2DC: wastegatePosition", float,  "%.3f"
entry = etb2m_lastPidDtMs, "etb2EBT: last PID dT", float,  "%.3f"
entry = etb2etbFeedForward, "etb2etbFeedForward", float,  "%.3f"
entry = etb2integralError, "etb2Integral error", float,  "%.3f"
entry = etb2etbCurrentTarget, "etb2ETB: target for current pedal", float,  "%.3f"
entry = etb2m_adjustedTarget, "etb2Adjusted target", float,  "%.3f"
entry = etb2etbRevLimitActive, "etb2etbRevLimitActive", int,    "%d"
entry = etb2jamDetected, "etb2jamDetected", int,    "%d"
entry = etb2validPlantPosition, "etb2validPlantPosition", int,    "%d"
entry = etb2etbTpsErrorCounter, "etb2ETB TPS error counter", int,    "%d"
entry = etb2etbPpsErrorCounter, "etb2ETB pedal error counter", int,    "%d"
entry = etb2etbErrorCode, "etb2etbErrorCode", int,    "%d"
entry = etb2etbErrorCodeBlinker, "etb2etbErrorCodeBlinker", int,    "%d"
entry = etb2tcEtbDrop, "etb2ETB traction control", int,    "%d"
entry = etb2jamTimer, "etb2ETB jam timer", float,  "%.3f"
entry = etb2adjustedEtbTarget, "etb2ETB with adjustments", int,    "%d"
entry = etb2state, "etb2state", int,    "%d"
entry = wb1faultCode, "wb1WBO: Fault code", int,    "%d"
entry = wb1heaterDuty, "wb1WBO: Heater duty", int,    "%d"
entry = wb1pumpDuty, "wb1WBO: Pump duty", int,    "%d"
entry = wb1isValid, "wb1isValid", int,    "%d"
entry = wb1fwUnsupported, "wb1fwUnsupported", int,    "%d"
entry = wb1fwOutdated, "wb1fwOutdated", int,    "%d"
entry = wb1tempC, "wb1WBO: Temperature", int,    "%d"
entry = wb1nernstVoltage, "wb1WBO: Nernst Voltage", float,  "%.3f"
entry = wb1esr, "wb1WBO: ESR", int,    "%d"
entry = wb2faultCode, "wb2WBO: Fault code", int,    "%d"
entry = wb2heaterDuty, "wb2WBO: Heater duty", int,    "%d"
entry = wb2pumpDuty, "wb2WBO: Pump duty", int,    "%d"
entry = wb2isValid, "wb2isValid", int,    "%d"
entry = wb2fwUnsupported, "wb2fwUnsupported", int,    "%d"
entry = wb2fwOutdated, "wb2fwOutdated", int,    "%d"
entry = wb2tempC, "wb2WBO: Temperature", int,    "%d"
entry = wb2nernstVoltage, "wb2WBO: Nernst Voltage", float,  "%.3f"
entry = wb2esr, "wb2WBO: ESR", int,    "%d"
entry = dcOutput0, "DC: output0", float,  "%.3f"
entry = isEnabled0_int, "DC: en0", int,    "%d"
entry = isEnabled0, "isEnabled0", int,    "%d"
entry = value0, "SENT ch0 value0", int,    "%d"
entry = value1, "SENT ch0 value1", int,    "%d"
entry = errorRate, "SENT ch0 error rate", float,  "%.3f"
entry = vvtTarget, "vvtTarget", float,  "%.3f"
entry = vvtOutput, "vvtOutput", float,  "%.3f"
entry = lambdaCurrentlyGood, "lambdaCurrentlyGood", int,    "%d"
entry = lambdaMonitorCut, "lambdaMonitorCut", int,    "%d"
entry = lambdaTimeSinceGood, "lambdaTimeSinceGood", float,  "%.3f"
entry = sparkDuration1, "Spark duration 1", float,  "%.3f"
entry = sparkDuration2, "Spark duration 2", float,  "%.3f"
entry = sparkDuration3, "Spark duration 3", float,  "%.3f"
entry = sparkDuration4, "Spark duration 4", float,  "%.3f"
entry = ltftCntHit, "LTFT learning: hits", int,    "%d"
entry = ltftCntMiss, "LTFT learning: miss", int,    "%d"
entry = ltftCntDeadband, "LTFT learning: in deadband", int,    "%d"
entry = ltftLearning, "LTFT learning", int,    "%d"
entry = ltftCorrecting, "LTFT correcting", int,    "%d"
entry = ltftSavePending, "LTFT saving", int,    "%d"
entry = ltftLoadPending, "LTFT loading calibration", int,    "%d"
entry = ltftLoadError, "LTFT loading calibration error", int,    "%d"
entry = ltftPageRefreshFlag, "LTFT page refresh frag", int,    "%d"
entry = ltftCorrection1, "LTFT: Bank 1", float,  "%.3f"
entry = ltftCorrection2, "LTFT: Bank 2", float,  "%.3f"
entry = ltftAccummulatedCorrection1, "LTFT: Total Bank 1", float,  "%.3f"
entry = ltftAccummulatedCorrection2, "LTFT: Total Bank 2", float,  "%.3f"
entry = stftCorrectionBinIdx, "STFT: used bin", int,    "%d"
entry = stftLearningBinIdx, "STFT: learning bin", int,    "%d"
entry = stftCorrectionState, "stftCorrectionState", int,    "%d"
entry = stftLearningState1, "stftLearningState 1", int,    "%d"
entry = stftLearningState2, "stftLearningState 2", int,    "%d"
entry = stftInputError1, "STFT: input Lambda error 1", float,  "%.3f"
entry = stftInputError2, "STFT: input Lambda error 2", float,  "%.3f"
entry = isVvlTpsCondition, "isVvlTpsCondition", int,    "%d"
entry = isVvlCltCondition, "isVvlCltCondition", int,    "%d"
entry = isVvlMapCondition, "isVvlMapCondition", int,    "%d"
entry = isVvlAfrCondition, "isVvlAfrCondition", int,    "%d"
entry = isVvlRpmCondition, "isVvlRpmCondition", int,    "%d"
entry = isVvlCondition, "isVvlCondition", int,    "%d"


[Menu]

menuDialog = main
; see #1653
;	menu = "Data Logging"
;		subMenu = std_ms3SdConsole, "Browse / Import SD Card"

	menu = "&Setup"
		subMenu = engineChars,				"Vehicle Information"

		groupMenu = "Limits and protection"
			groupChildMenu = limitsAndFallback,			"Limits and fallbacks"
			groupChildMenu = lowOilPressureProtection,	"Low oil pressure protection"
			groupChildMenu = highOilPressureProtection,	"High oil pressure protection"
			groupChildMenu = lambdaProtection,			"Lambda protection", 0, { isInjectionEnabled }

		subMenu = triggerConfiguration,		"Trigger"
		subMenu = trigger_advanced, "Advanced Trigger", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = triggerConfiguration_gap, "Trigger Gap Override", {1}, { uiMode == 0 || uiMode == 1 }
		subMenu = std_separator
		subMenu = energySystems,			"Battery and alternator"
		subMenu = ignitionInputDialog,		"Ignition key input Settings"
		subMenu = std_separator

		# Digital outputs
		subMenu = outputsDialog,			"Outputs"
		subMenu = acSettings,				"Air Conditioning"
		subMenu = statusLeds,				"Status LEDs"

	menu = "Fuel"
		# basic
		subMenu = injectionSettings,		"Injection hardware", {isInjectionEnabled == 1}, { uiMode == 0 || uiMode == 1 }
		subMenu = injectorConfig,			"Injection configuration"
		subMenu = cylinderBankSelect,		"Cylinder bank selection", {isInjectionEnabled == 1}, { uiMode == 0 || uiMode == 1 }
		subMenu = injectorNonlinear,		"Injector small-pulse correction", {isInjectionEnabled == 1}, { uiMode == 0 || uiMode == 1 }
		subMenu = injectorFlowLinearizationTable, "Injector Flow Linearization", {isInjectionEnabled == 1}

		subMenu = stagedInjection,			"Staged injection", 0, {isInjectionEnabled}
		subMenu = stagedInjectionOutputs,	"Staged injection outputs", 0, {isInjectionEnabled && enableStagedInjection}
		subMenu = stagedInjectionTbl,		"Staged injection % table", 0, {isInjectionEnabled && enableStagedInjection}

		groupMenu = "Cylinder fuel trims"
		groupChildMenu = fuelTrimTbl1,		"Fuel trim cyl 1"
		groupChildMenu = fuelTrimTbl2,		"Fuel trim cyl 2", 0, { isInjectionEnabled && cylindersCount >= 2 }
		groupChildMenu = fuelTrimTbl3,		"Fuel trim cyl 3", 0, { isInjectionEnabled && cylindersCount >= 3 }
		groupChildMenu = fuelTrimTbl4,		"Fuel trim cyl 4", 0, { isInjectionEnabled && cylindersCount >= 4 }
		groupChildMenu = fuelTrimTbl5,		"Fuel trim cyl 5", 0, { isInjectionEnabled && cylindersCount >= 5 }
		groupChildMenu = fuelTrimTbl6,		"Fuel trim cyl 6", 0, { isInjectionEnabled && cylindersCount >= 6 }
		groupChildMenu = fuelTrimTbl7,		"Fuel trim cyl 7", 0, { isInjectionEnabled && cylindersCount >= 7 }
		groupChildMenu = fuelTrimTbl8,		"Fuel trim cyl 8", 0, { isInjectionEnabled && cylindersCount >= 8 }
		groupChildMenu = fuelTrimTbl9,		"Fuel trim cyl 9", 0, { isInjectionEnabled && cylindersCount >= 9 }
		groupChildMenu = fuelTrimTbl10,		"Fuel trim cyl 10", 0, { isInjectionEnabled && cylindersCount >= 10 }
		groupChildMenu = fuelTrimTbl11,		"Fuel trim cyl 11", 0, { isInjectionEnabled && cylindersCount >= 11 }
		groupChildMenu = fuelTrimTbl12,		"Fuel trim cyl 12", 0, { isInjectionEnabled && cylindersCount >= 12 }

		subMenu = std_separator

		# Air mass model
		subMenu = veTableDialog,			"VE", 0, {isInjectionEnabled == 1}
    subMenu = veTableMap,    "VE 3D view", 0, {isInjectionEnabled}
		

		groupMenu = "VE blend tables"
		groupChildMenu = veBlend1Cfg,		"VE blend 1 bias", 0, {isInjectionEnabled}
		groupChildMenu = veBlend1Table,		"VE blend table 1", 0, { isInjectionEnabled && veBlends1_blendParameter != 0 }
		groupChildMenu = veBlend2Cfg,		"VE blend 2 bias", 0, {isInjectionEnabled}
		groupChildMenu = veBlend2Table,		"VE blend table 2", 0, { isInjectionEnabled && veBlends2_blendParameter != 0 }
		groupChildMenu = veBlend3Cfg,		"VE blend 3 bias", 0, {isInjectionEnabled}
		groupChildMenu = veBlend3Table,		"VE blend table 3", 0, { isInjectionEnabled && veBlends3_blendParameter != 0 }
		groupChildMenu = veBlend4Cfg,		"VE blend 4 bias", 0, {isInjectionEnabled}
		groupChildMenu = veBlend4Table,		"VE blend table 4", 0, { isInjectionEnabled && veBlends4_blendParameter != 0 }

#if LAMBDA
		subMenu = lambdaTableDialog,			"Target lambda", 0, {isInjectionEnabled == 1}
#else
		subMenu = afrTableDialog,				"Target AFR", 0, {isInjectionEnabled == 1}
#endif

		groupMenu = "Target AFR adder tables"
		groupChildMenu = targetAfrBlend1Cfg,	"Target AFR 1 bias"
		groupChildMenu = targetAfrBlend1Table,	"Target AFR 1 adder",	{ targetAfrBlends1_blendParameter != 0 }
		groupChildMenu = targetAfrBlend2Cfg,	"Target AFR 2 bias"
		groupChildMenu = targetAfrBlend2Table,	"Target AFR 2 adder",	{ targetAfrBlends2_blendParameter != 0 }

		subMenu = std_separator

		subMenu = tChargeSettings,			"Charge temperature estimation", 0, {isInjectionEnabled == 1}
		subMenu = baroCorrTbl,				"Barometric pressure correction", {isInjectionEnabled == 1 && fuelAlgorithm == 0}, { uiMode == 0 || uiMode == 1 }
		subMenu = mapEstimateTableTbl,		"MAP estimate table", {isInjectionEnabled == 1 && fuelAlgorithm == 0}, { uiMode == 0 || uiMode == 1 }

		subMenu = std_separator

		subMenu = cltFuelCorrCurveDialog,			"Warmup enrichment", 0, {isInjectionEnabled == 1}
		subMenu = iatFuelCorrCurve,			"IAT multiplier", 0, {isInjectionEnabled == 1}
		subMenu = coastingFuelCutControl,	"Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1}
		subMenu = std_separator

		subMenu = fuelClosedLoopDialog,	"Short term fuel trim/Closed loop", 0, {isInjectionEnabled == 1}
		subMenu = fuelLTFCDialog, "Long term fuel trims", 0, {isInjectionEnabled == 1}
		subMenu = ltftBank1Tbl, "Long Term Fuel Trim Bank 1", { ltft_enabled }
		subMenu = ltftBank2Tbl, "Long Term Fuel Trim Bank 2", { ltft_enabled }
		subMenu = std_separator

		# Injector model
		subMenu = injPhaseTableTbl,			"Injection Timing", 0, {isInjectionEnabled == 1}
		subMenu = std_separator

		# Accel enrichment
		subMenu = AccelEnrich,				"Acceleration enrichment", 0, {isInjectionEnabled == 1}
		subMenu = tpsTpsDialog,			"TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1}
		subMenu = tpsTspRpmCorrection,      "TPS/TPS extra fuel RPM correction", 0, {isInjectionEnabled == 1}
		subMenu = predictiveMapBlendDuration,      "Predictive Map Blend Duration", 0, {isInjectionEnabled == 1}

		groupMenu = "Wall wetting AE"
		groupChildMenu = wwTauCurves, "Evap time", 0, { complexWallModel != 0 }
		groupChildMenu = wwBetaCurves, "Impact fraction", 0, { complexWallModel != 0 }

	menu = "Ignition"
		subMenu = ignitionSettings,			"Ignition settings"
		subMenu = std_separator

		subMenu = IgnitionTableDialog,			"Ignition advance", 0, {isIgnitionEnabled}
    

		subMenu = ignitionCltCorrTable,			"Engine Temp timing correction", 0, {isIgnitionEnabled == 1}
		subMenu = ignitionIatCorrTableTbl,	"Intake Air Temp timing correction", 0, {isIgnitionEnabled == 1}
		subMenu = std_separator

		subMenu = dwellSettings,				"Dwell", 0, {isIgnitionEnabled == 1}
		groupMenu = "Ignition blend tables"
			groupChildMenu = ignAdder1Cfg,			"Ignition blend 1 bias", 0, {isIgnitionEnabled}
			groupChildMenu = ignAdder1Table,		"Ignition blend table 1", 0, { isIgnitionEnabled && ignBlends1_blendParameter != 0 }
			groupChildMenu = ignAdder2Cfg,			"Ignition blend 2 bias", 0, {isIgnitionEnabled}
			groupChildMenu = ignAdder2Table,		"Ignition blend table 2", 0, { isIgnitionEnabled && ignBlends2_blendParameter != 0 }
			groupChildMenu = ignAdder3Cfg,			"Ignition blend 3 bias", 0, {isIgnitionEnabled}
			groupChildMenu = ignAdder3Table,		"Ignition blend table 3", 0, { isIgnitionEnabled && ignBlends3_blendParameter != 0 }
			groupChildMenu = ignAdder4Cfg,			"Ignition blend 4 bias", 0, {isIgnitionEnabled}
			groupChildMenu = ignAdder4Table,		"Ignition blend table 4", 0, { isIgnitionEnabled && ignBlends4_blendParameter != 0 }
		groupMenu = "Cylinder ign trims"
			groupChildMenu = ignTrimTbl1,		"Ignition trim cyl 1"
			groupChildMenu = ignTrimTbl2,		"Ignition trim cyl 2", 0, { isInjectionEnabled && cylindersCount >= 2 }
			groupChildMenu = ignTrimTbl3,		"Ignition trim cyl 3", 0, { isInjectionEnabled && cylindersCount >= 3 }
			groupChildMenu = ignTrimTbl4,		"Ignition trim cyl 4", 0, { isInjectionEnabled && cylindersCount >= 4 }
			groupChildMenu = ignTrimTbl5,		"Ignition trim cyl 5", 0, { isInjectionEnabled && cylindersCount >= 5 }
			groupChildMenu = ignTrimTbl6,		"Ignition trim cyl 6", 0, { isInjectionEnabled && cylindersCount >= 6 }
			groupChildMenu = ignTrimTbl7,		"Ignition trim cyl 7", 0, { isInjectionEnabled && cylindersCount >= 7 }
			groupChildMenu = ignTrimTbl8,		"Ignition trim cyl 8", 0, { isInjectionEnabled && cylindersCount >= 8 }
			groupChildMenu = ignTrimTbl9,		"Ignition trim cyl 9", 0, { isInjectionEnabled && cylindersCount >= 9 }
			groupChildMenu = ignTrimTbl10,	"Ignition trim cyl 10", 0, { isInjectionEnabled && cylindersCount >= 10 }
			groupChildMenu = ignTrimTbl11,	"Ignition trim cyl 11", 0, { isInjectionEnabled && cylindersCount >= 11 }
			groupChildMenu = ignTrimTbl12,	"Ignition trim cyl 12", 0, { isInjectionEnabled && cylindersCount >= 12 }
		subMenu = std_separator

		subMenu = multisparkSettings,		"Multispark", 0, {isIgnitionEnabled == 1}
		subMenu = softwareKnock,			"Knock Control" 
		subMenu = maxKnockRetardTbl,		"Max knock retard" 

	menu = "&Cranking"
		subMenu = crankingDialog,			"Cranking settings"
		subMenu = postCrankingEnrichmentTbl,"After-start enrichment", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = primingFuelPulsePanel,	"Priming pulse", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = std_separator

		subMenu = crankingCycleFuelMultTbl,	"Cranking Base Fuel"
		subMenu = crankingCltCurve,			"Cranking Fuel multiplier"
		subMenu = crankingCltCurveE100,		"Fuel Engine Temp (Flex Fuel E85)", { flexSensorPin != 0 && flexCranking }, { uiMode == 0 || uiMode == 1 }
		subMenu = crankingTpsCurve,			"Cranking Fuel TPS multiplier"
		subMenu = std_separator

		subMenu = crankingAdvanceCurve,		"Cranking ignition advance", {useSeparateAdvanceForCranking == 1}, { uiMode == 0 || uiMode == 1 }


	menu = "&Idle"
		subMenu = idleSettings,				"Idle settings"
		subMenu = idlehw,					"Idle hardware"
		subMenu = std_separator
		subMenu = cltIdleRPMCurve,			"Target RPM"
		subMenu = cltIdleTable,				"Base Idle Valve Position"
		subMenu = cltCrankingCurveDialog,			"Cranking Idle Valve Curve", 1, { uiMode == 0 || uiMode == 1 }
		subMenu = afterCrankingIACtaperDurationDialog, "Idle Valve Crank-to-Run Taper"
		subMenu = std_separator
		subMenu = idleTimingPidCorrDialog,	"Closed-loop idle timing"
		subMenu = iacPidMultTbl,			"IAC PID multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1}
		subMenu = iacCoastingCurve,			"Coasting IAC position", 0, {useIacTableForCoasting == 1}
		subMenu = std_separator
		subMenu = idleVeTableTbl,				"Idle VE", 0, {useSeparateVeForIdle == 1}
		subMenu = idleAdvanceCurve,			"Idle Ignition advance", 0, {useSeparateAdvanceForIdle == 1}

	menu = "&Advanced"
		subMenu = smLaunchControl,				"Launch Control"
		subMenu = antiLagDialog,                "Anti-Lag ALS"
		subMenu = ShiftTorqueReductionDialog,	"Shift Torque Reduction (Flat Shift)"
		subMenu = torqueReductionTimeDialog,			"Shift Torque Reduction Time table"
		subMenu = torqueReductionIgnitionRetardDialog,	"Torque Reduction Ignition Retard Table"
		subMenu = torqueReductionIgnitionCutDialog,		"Torque Reduction Ignition Cut Table"
		subMenu = NitrousControlDialog,			"Nitrous Control"
		subMenu = VvlControlDialog,				"VVL Control"
		subMenu = ignitionCylExtra,				"Cylinder offsets", 0

		subMenu = std_separator
		subMenu = boostDialog,					"Boost control"
		subMenu = boostOpenLoopDialog,			"Boost control open loop", { isBoostControlEnabled }
		subMenu = boostOpenLoopGearAdderDialog,	"Boost control open loop gear adder", { isBoostControlEnabled }
		subMenu = boostPidDialog,				"Boost control PID", { isBoostControlEnabled && boostType == 1 }
		subMenu = boostTargetDialog,			"Boost control target", { isBoostControlEnabled && boostType == 1 }
		subMenu = cltBoostCorrCurve,			"CLT boost duty multiplier", { isBoostControlEnabled }, { uiMode == 0 || uiMode == 1 }
		subMenu = iatBoostCorrCurve,			"IAT boost duty multiplier", { isBoostControlEnabled }, { uiMode == 0 || uiMode == 1 }
		subMenu = cltBoostAdderCurve,			"CLT boost target adder", { isBoostControlEnabled && boostType == 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = iatBoostAdderCurve,			"IAT boost target adder", { isBoostControlEnabled && boostType == 1 }, { uiMode == 0 || uiMode == 1 }

		groupMenu = "Boost blend tables"
		groupChildMenu = boostOpenBlend1Cfg,		"Open loop 1 bias",		{ isBoostControlEnabled }
		groupChildMenu = boostOpenBlend1Table,		"Open loop 1 adder",	{ isBoostControlEnabled && boostOpenLoopBlends1_blendParameter != 0 }
		groupChildMenu = boostOpenBlend2Cfg,		"Open loop 2 bias",		{ isBoostControlEnabled }
		groupChildMenu = boostOpenBlend2Table,		"Open loop 2 adder",	{ isBoostControlEnabled && boostOpenLoopBlends2_blendParameter != 0 }
		groupChildMenu = boostClosedBlend1Cfg,		"Closed loop 1 bias",	{ isBoostControlEnabled && boostType == 1 }
		groupChildMenu = boostClosedBlend1Table,	"Closed loop 1 adder",	{ isBoostControlEnabled && boostType == 1 && boostClosedLoopBlends1_blendParameter != 0 }
		groupChildMenu = boostClosedBlend2Cfg,		"Closed loop 2 bias",	{ isBoostControlEnabled && boostType == 1 }
		groupChildMenu = boostClosedBlend2Table,	"Closed loop 2 adder",	{ isBoostControlEnabled && boostType == 1 && boostClosedLoopBlends2_blendParameter != 0 }

		subMenu = std_separator
		subMenu = gppwm1, "General Purpose PWM 1", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = gppwm2, "General Purpose PWM 2", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = gppwm3, "General Purpose PWM 3", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = gppwm4, "General Purpose PWM 4", { 1 }, { uiMode == 0 || uiMode == 1 }

		subMenu = std_separator				
		subMenu = dcMotorActuatorHw			"DC motor actuator(s) hardware", { 1 }, { uiMode == 0 || uiMode == 1 } 
		subMenu = dcMotorActuatorFunction,	"DC motor actuator(s) function", { 1 }, { uiMode == 0 || uiMode == 1 } 

		subMenu = std_separator				
		subMenu = etbDialog,				"Electronic Throttle Body actuator"
		subMenu = etbTpsBiasCurve,			"ETB bias curve (feed forward)"
		subMenu = pedalToTpsTbl,			"ETB pedal target" 
		subMenu = throttle2TrimTbl,			"ETB #2 Trim", { isTps2Primary } 

		subMenu = std_separator				
		subMenu = ewgDialog,				"Electronic Wastegate actuator", { (etbFunctions1 == 4 || etbFunctions2 == 4) && isBoostControlEnabled } 
		subMenu = ewgBiasCurve,				"EWG bias curve (feed forward)", { (etbFunctions1 == 4 || etbFunctions2 == 4) && isBoostControlEnabled } 

		subMenu = std_separator
		subMenu = vvtPidDialog,				"VVT outputs and PID", { vvtMode1 != 0 }, { uiMode == 0 || uiMode == 1 }
		subMenu = vvtTable1Tbl,				"VVT intake target",  { vvtMode1 != 0 && vvtPins1 != 0 }
		subMenu = vvtTable2Tbl,				"VVT exhaust target", { vvtMode2 != 0 && vvtPins2 != 0 }

		subMenu = std_separator
		groupMenu = "Lua", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = auxInputsDialog,			"Lua Analog Inputs", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = luaDigitalInputsDialog,   "Lua Digital Inputs", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = luaOutputs,				"Lua Script PWM Outputs", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = luaCommands, "Lua Buttons", { 1 }, { uiMode == 0 || uiMode == 1 }

		groupMenu = "Lua Calibrations", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = scriptSetting,		"Lua Script Settings"

		groupChildMenu = scriptTable1TblSettings,			"Script Table #1"
		groupChildMenu = scriptTable2TblSettings,			"Script Table #2"
		groupChildMenu = scriptTable3TblSettings,			"Script Table #3"
		groupChildMenu = scriptTable4TblSettings,			"Script Table #4"

		groupChildMenu = scriptCurve1Settings,				"Script Curve #1"
		groupChildMenu = scriptCurve2Settings,				"Script Curve #2"
		groupChildMenu = scriptCurve3Settings,				"Script Curve #3"
		groupChildMenu = scriptCurve4Settings,				"Script Curve #4"
		groupChildMenu = scriptCurve5Settings,				"Script Curve #5"
		groupChildMenu = scriptCurve6Settings,				"Script Curve #6"

		subMenu = std_separator
		subMenu = tcuControls,			"Transmission Settings (alpha)"
		subMenu = gearControls,			"Gear Selection Settings (alpha)"
		subMenu = inputSpeedSensor,		"Input Speed Sensor (alpha)"
		subMenu = shiftSpeedDialog,		"Automatic Shift Points (alpha)"
		subMenu = tcuSolenoidTableTbl,		"Shift Solenoids (alpha)"
		subMenu = tccCurves,			"TCC Lock/Unlock Speed (alpha)"
		subMenu = pcPerGearDialog,		"Line Pressure Per Gear (alpha)"
		subMenu = pcPerShiftDialog,		"Line Pressure Per Shift (alpha)"
		subMenu = 32Dialog,			"3-2 Shift Solenoid Percent by Speed (alpha)"
		subMenu = rangeMatrixDialog,		"Range Selector Input Matrix (alpha)"

	menu = "&Sensors"
		groupMenu = "Chassis sensors"
		groupChildMenu = otherSensorInputs,			"Misc sensors", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = vrThreshold,				"VR Sensor Threshold"
		groupChildMenu = speedSensor,				"Vehicle speed sensor"
		groupChildMenu = ambientTempSensor,			"Ambient temp sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = acPressureSensor,			"A/C Pressure"

		# Base analog input settings
		subMenu = analogInputSettings,		"Analog input settings", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = std_separator

		# Thermistors
		subMenu = cltSensor,				"CLT sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = iatSensor,				"IAT sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = std_separator

		# TPS/pedal
		subMenu = tpsSensor,				"TPS", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = pedalSensor,				"Accelerator pedal"
		subMenu = std_separator

		# MAP/Baro
		subMenu = mapSettings,				"MAP sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = mapCurves,				"MAP sampling", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = baroSettings,				"Baro sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = std_separator

		# MAF
		subMenu = mafSettings,				"MAF sensor"
		subMenu = mafDecodingCurve,			"MAF transfer function", 0, {mafAdcChannel != 0 }
		subMenu = std_separator

		# O2 sensor(s)
		subMenu = egoSettings,				"CAN O2 sensors", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = analogEgoSettings,		"Analog O2 sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		subMenu = canReWidebandTools,		"rusEFI Wideband Tools", 0, { canReadEnabled && canWriteEnabled }
		subMenu = std_separator

		subMenu = idleValvePosDialog,		"ETB-style Idle valve position sensor", { etbFunctions1 == 3 || etbFunctions2 == 3 }, { 1 }
		subMenu = std_separator

		# SENT interface
		subMenu = sentInputs,				"SENT inputs"
		subMenu = std_separator

		# Misc sensors
		groupMenu = "Oil sensors"
		groupChildMenu = oilPressureSensor,	"Oil pressure"
		groupChildMenu = oilTempSensor,		"Oil temp sensor"

		groupMenu = "Fuel sensors"
		groupChildMenu = flexSensorDialog, "Flex"
		groupChildMenu = fuelPressureSensor,		"Fuel pressure", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = fuelTempSensor,			"Fuel temp sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = fuelLevelDialog,			"Fuel level sensor", { 1 }, { uiMode == 0 || uiMode == 1 }

		groupMenu = "Turbo sensors", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = wastegatePosDialog,				"Electronic Wastegate position sensor", { etbFunctions1 == 4 || etbFunctions2 == 4 }, { 1 }
		groupChildMenu = compressorDischargeTemperature,	"Compressor discharge temp"

		groupMenu = "Aux sensors", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = auxTempSensor1Sensor,		"AuxTemp1 sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = auxTempSensor2Sensor,		"AuxTemp2 sensor", { 1 }, { uiMode == 0 || uiMode == 1 }
		groupChildMenu = auxLinearSensors,			"Aux Sensors"

	menu = "CAN-bus"
		subMenu = canBusMain,				"CAN Bus Settings"
		subMenu = std_separator

		subMenu = speedSensorCan,			"CAN Vehicle speed sensor"
		subMenu = uegoCan,					"CAN O2 sensors"
		subMenu = egtInputsCan,				"CAN EGT sensors"
		subMenu = msIoBox,					"CAN MS IO-Box Settings"

	menu = "&Controller"
		subMenu = ecuStimulator,			"ECU stimulator"
		subMenu = ioTest,					"Bench test"
		subMenu = injTest,					"Injector test"
		subMenu = engineTypeDialog,			"Base Tunes"
		subMenu = std_separator

		subMenu = monitoringSettings,		"rusEFI console"
		subMenu = std_separator

		subMenu = sdCard,					"SD Card Logger" 
		subMenu = connection,					"Connection"
		subMenu = std_separator

		subMenu = std_separator

		subMenu = allPins1,					"Full pinout 1/3" 
		subMenu = allPins2,					"Full pinout 2/3" 
		subMenu = allPins3_1_and_2,		"Full pinout 3/3" 

		subMenu = std_separator
		subMenu = mc33Dialog,									"GDI Injector Control"
		subMenu = hpfpCamDialog,			"HPFP Cam Configuration"
		subMenu = hpfpPumpDialog,			"HPFP Pump Configuration", {hpfpCamLobes != 0}
		subMenu = hpfpTargetTable,							"HPFP Target Pressure", {hpfpCamLobes != 0}
		subMenu = hpfpCompensationTable,					"HPFP Pump Feed Forward", {hpfpCamLobes != 0}
		subMenu = hpfpFuelMassCompensationTable,			"HPFP Fuel mass compensation factor", {hpfpCamLobes != 0 && injectorCompensationMode == 3}

				subMenu = fancyHardwareDialog,			"Fancy Board"

		subMenu = std_separator

		subMenu = tractionEtbTableTbl,    "Traction Control ETB Drop"
		subMenu = tractionTimingTableTbl,    "Traction Control Timing Adjustment"
		subMenu = tractionIgnitionSkipDialog,    "Traction Control Skip Ignition"
		subMenu = std_separator

		subMenu = parkingLot,				"Experimental 1"
		subMenu = parkingLot2,				"Experimental 2"
		subMenu = parkingLot3,				"Experimental 3"
		subMenu = harleyAcr,                "Harley"
		subMenu = idleFlowEstimate, "Idle flow estimate", { modeledFlowIdle }
		subMenu = idleAirmassTimingEquivalence, "Idle airmass/timing equivalence", { modeledFlowIdle }
		subMenu = rotaryDialog,			"Rotary"
		groupMenu = "Torque"
		  groupChildMenu = throttleEffectiveArea, "Throttle effective area", { 1 }, { uiMode == 0 || uiMode == 1 }
		  groupChildMenu = torqueTableTbl, "Torque"
		  groupChildMenu = torque2TableTbl, "TMF"
		subMenu = dynoChars,				"Virtual Dyno engine"

		menu = "Help"
			subMenu = helpGeneral,	"rusEFI Info"

  menu = "&View", { 1 }, { uiMode == 0 || uiMode == 1 }
			subMenu = fuel_computerDialog, "fuel_computer"
			subMenu = ignition_stateDialog, "ignition_state"
			subMenu = knock_controllerDialog, "knock_controller"
			subMenu = prime_injectionDialog, "prime_injection"
			subMenu = tcu_controllerDialog, "tcu_controller"
			subMenu = throttle_modelDialog, "throttle_model"
			subMenu = high_pressure_fuel_pumpDialog, "high_pressure_fuel_pump"
			subMenu = injector_modelDialog, "injector_model"
			subMenu = launch_control_stateDialog, "launch_control_state"
			subMenu = shift_torque_reduction_stateDialog, "shift_torque_reduction_state"
			subMenu = antilag_system_stateDialog, "antilag_system_state"
			subMenu = boost_controlDialog, "boost_control"
			subMenu = ac_controlDialog, "ac_control"
			subMenu = nitrous_control_stateDialog, "nitrous_control_state"
			subMenu = fan_control0Dialog, "fan_control0"
			subMenu = fan_control1Dialog, "fan_control1"
			subMenu = fuel_pump_controlDialog, "fuel_pump_control"
			subMenu = main_relayDialog, "main_relay"
			subMenu = tps_accel_stateDialog, "tps_accel_state"
			subMenu = trigger_centralDialog, "trigger_central"
			subMenu = trigger_state0Dialog, "trigger_state0"
			subMenu = trigger_state1Dialog, "trigger_state1"
			subMenu = trigger_state2Dialog, "trigger_state2"
			subMenu = trigger_state3Dialog, "trigger_state3"
			subMenu = trigger_state4Dialog, "trigger_state4"
			subMenu = trigger_state_primaryDialog, "trigger_state_primary"
			subMenu = wall_fuel_stateDialog, "wall_fuel_state"
			subMenu = closed_loop_idleDialog, "closed_loop_idle"
			subMenu = live_data_exampleDialog, "live_data_example"
			subMenu = idle_stateDialog, "idle_state"
			subMenu = electronic_throttle0Dialog, "electronic_throttle0"
			subMenu = electronic_throttle1Dialog, "electronic_throttle1"
			subMenu = wideband_state0Dialog, "wideband_state0"
			subMenu = wideband_state1Dialog, "wideband_state1"
			subMenu = dc_motorsDialog, "dc_motors"
			subMenu = sent_stateDialog, "sent_state"
			subMenu = vvtDialog, "vvt"
			subMenu = lambda_monitorDialog, "lambda_monitor"
			subMenu = mc33810_stateDialog, "mc33810_state"
			subMenu = long_term_fuel_trim_stateDialog, "long_term_fuel_trim_state"
			subMenu = short_term_fuel_trim_stateDialog, "short_term_fuel_trim_state"
			subMenu = vvl_controller_stateDialog, "vvl_controller_state"



[ControllerCommands]
; commandName	= command1, command2, commandn...
; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order.
;			This does not include any resultant protocol envelope data, only the response data itself.

; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands
; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition
; and may create error messages.
; It is expected that these commands would not typically alter any ram mapped to a Constant.

;
; see TS_IO_TEST_COMMAND in firmware code
;

cmd_test_spk1  = "Z\x00\x12\x00\x01"
cmd_test_spk2  = "Z\x00\x12\x00\x02"
cmd_test_spk3  = "Z\x00\x12\x00\x03"
cmd_test_spk4  = "Z\x00\x12\x00\x04"
cmd_test_spk5  = "Z\x00\x12\x00\x05"
cmd_test_spk6  = "Z\x00\x12\x00\x06"
cmd_test_spk7  = "Z\x00\x12\x00\x07"
cmd_test_spk8  = "Z\x00\x12\x00\x08"
cmd_test_spk9  = "Z\x00\x12\x00\x09"
cmd_test_spk10 = "Z\x00\x12\x00\x0a"
cmd_test_spk11 = "Z\x00\x12\x00\x0b"
cmd_test_spk12 = "Z\x00\x12\x00\x0c"

cmd_test_lua1  = "Z\x00\x20\x00\x01"
cmd_test_lua2  = "Z\x00\x20\x00\x02"
cmd_test_lua3  = "Z\x00\x20\x00\x03"
cmd_test_lua4  = "Z\x00\x20\x00\x04"
cmd_test_lua5  = "Z\x00\x20\x00\x05"
cmd_test_lua6  = "Z\x00\x20\x00\x06"
cmd_test_lua7  = "Z\x00\x20\x00\x07"
cmd_test_lua8  = "Z\x00\x20\x00\x08"

cmd_test_inj1  = "Z\x00\x13\x00\x01"
cmd_test_inj2  = "Z\x00\x13\x00\x02"
cmd_test_inj3  = "Z\x00\x13\x00\x03"
cmd_test_inj4  = "Z\x00\x13\x00\x04"
cmd_test_inj5  = "Z\x00\x13\x00\x05"
cmd_test_inj6  = "Z\x00\x13\x00\x06"
cmd_test_inj7  = "Z\x00\x13\x00\x07"
cmd_test_inj8  = "Z\x00\x13\x00\x08"
cmd_test_inj9  = "Z\x00\x13\x00\x09"
cmd_test_inj10 = "Z\x00\x13\x00\x0a"
cmd_test_inj11 = "Z\x00\x13\x00\x0b"
cmd_test_inj12 = "Z\x00\x13\x00\x0c"

cmd_test_cancel = "Z\x00\x16\x00\x0f"

cmd_test_sol1 = "Z\x00\x19\x00\x01"
cmd_test_sol2 = "Z\x00\x19\x00\x02"
cmd_test_sol3 = "Z\x00\x19\x00\x03"
cmd_test_sol4 = "Z\x00\x19\x00\x04"
cmd_test_sol5 = "Z\x00\x19\x00\x05"
cmd_test_sol6 = "Z\x00\x19\x00\x06"

cmd_test_main_relay			= "Z\x00\x16\x00\x00"
cmd_test_fuel_pump				= "Z\x00\x16\x00\x01"
cmd_test_starter_relay			= "Z\x00\x16\x00\x02"
cmd_test_starter_disable_relay	= "Z\x00\x16\x00\x03"
cmd_test_ac_relay				= "Z\x00\x16\x00\x06"
cmd_test_fan_1					= "Z\x00\x16\x00\x04"
cmd_test_fan_2					= "Z\x00\x16\x00\x05"
cmd_test_check_engine_light	= "Z\x00\x16\x00\x07"
cmd_test_idle_valve				= "Z\x00\x16\x00\x08"
cmd_test_second_idle_valve		= "Z\x00\x16\x00\x0e"
cmd_test_hpfp_valve				= "Z\x00\x16\x00\x09"
cmd_test_lua_command_1				= "Z\x00\x16\x00\x21"
cmd_test_lua_command_2				= "Z\x00\x16\x00\x22"
cmd_test_lua_command_3				= "Z\x00\x16\x00\x23"
cmd_test_lua_command_4				= "Z\x00\x16\x00\x24"
cmd_test_lua_command_5				= "Z\x00\x16\x00\x25"
cmd_test_lua_command_6				= "Z\x00\x16\x00\x26"
cmd_test_lua_command_7				= "Z\x00\x16\x00\x27"
cmd_test_lua_command_8				= "Z\x00\x16\x00\x28"
cmd_test_lua_command_9				= "Z\x00\x16\x00\x29"
cmd_test_lua_command_10 			= "Z\x00\x16\x00\x2a"
cmd_test_acr_valve				= "Z\x00\x16\x00\x1c"
cmd_test_acr2_valve				= "Z\x00\x16\x00\x1d"
cmd_test_vvt0_valve				= "Z\x00\x16\x00\x10"
cmd_test_vvt1_valve				= "Z\x00\x16\x00\x11"
cmd_test_vvt2_valve				= "Z\x00\x16\x00\x12"
cmd_test_vvt3_valve				= "Z\x00\x16\x00\x13"

cmd_calibrate_pedal_up		= "Z\x00\x14\x00\x06"
cmd_calibrate_pedal_down	= "Z\x00\x14\x00\x07"
cmd_calibrate_tps_closed	= "Z\x00\x14\x00\x20"
cmd_calibrate_tps_open		= "Z\x00\x14\x00\x21"
cmd_tle8888_init			= "Z\x00\x14\x00\x08"
cmd_mc33810_init			= "Z\x00\x14\x00\x14"
cmd_write_config			= "Z\x00\x14\x00\x0a"
;cmd_etb_reset         		= "Z\x00\x14\x00\x0b"
cmd_etb_autotune				= "Z\x00\x14\x00\x0c"
cmd_enable_self_stim			= "Z\x00\x14\x00\x0d"
cmd_etb_auto_calibrate		= "Z\x00\x14\x00\x0e"
cmd_etb_auto_calibrate_fast	= "Z\x00\x14\x00\x1c"
cmd_disable_self_stim		= "Z\x00\x14\x00\x0f"
cmd_etb_autotune_stop		= "Z\x00\x14\x00\x10"
cmd_etb_auto_calibrate_2	= "Z\x00\x14\x00\x11"
cmd_etb_auto_calibrate_2_fast	= "Z\x00\x14\x00\x1d"
cmd_ewg_auto_calibrate_1	= "Z\x00\x14\x00\x1e"
cmd_ewg_auto_calibrate_1_fast	= "Z\x00\x14\x00\x1f"
cmd_wideband_firmare_update  = "Z\x00\x14\x00\x12"
cmd_enable_ext_stim			= "Z\x00\x14\x00\x13"
cmd_etb_disable_jam_detect	= "Z\x00\x14\x00\x14"
cmd_burn_without_flash		= "Z\x00\x14\x00\x15"

cmd_set_wideband_idx_by_id	= "Z\x00\x21\$canReWidebandHwIndex\$canReWidebandCanId"
cmd_set_wideband_sens_by_id	= "Z\x00\x25\$canReWidebandHwIndex\$canReWidebandSensorType"
cmd_set_wideband_ping_by_id	= "Z\x00\x22\$canReWidebandHwIndex\x00"
cmd_set_wideband_flash_by_id= "Z\x00\x23\$canReWidebandHwIndex\x00"

cmd_stop_engine				= "Z\x00\x24\x00\x00"

; reboot ECU
cmd_reset_controller			= "Z\x00\xbb\x00\x00"
; jump to DFU mode
cmd_dfu						= "Z\x00\xba\x00\x00"
; jump to OpenBLT bootloader
cmd_openblt				= "Z\x00\xbc\x00\x00"

; SD card related
cmd_mount_pc				= "Z\x00\x14\x00\x17"
cmd_mount_ecu				= "Z\x00\x14\x00\x18"
cmd_unmount					= "Z\x00\x14\x00\x19"
cmd_format					= "Z\x00\x14\x00\x1a"
cmd_delete_reports			= "Z\x00\x14\x00\x1b"

; STFT and LTFT
cmd_ltft_reset				= "Z\x00\x16\x00\x1e"
cmd_ltft_apply_to_ve		= "Z\x00\x16\x00\x1f"
cmd_ltft_dev_poke			= "Z\x00\x16\x00\x20"


; See 'executeTSCommand' in firmware source code

; 2.5 NA
cmd_set_engine_type_GM_LCV				        = "Z\x00\x1e\x00\x2f"
; 2.0T Generation III, Cadillac ATS
cmd_set_engine_type_GM_LTG				        = "Z\x00\x1e\x00\x37"
; 2.0T Generation II Z20NHH Opel
cmd_set_engine_type_GM_LNF				        = "Z\x00\x1e\x00\x41"

cmd_set_engine_type_GM_SBC       			    = "Z\x00\x1e\x00\x62"
cmd_set_engine_type_GM_SBC_GEN4		        = "Z\x00\x1e\x00\x1b"
cmd_set_engine_type_GM_SBC_GEN5		        = "Z\x00\x1e\x00\x31"



cmd_set_engine_type_default					= "Z\x00\x1f\x00\x00"

[UserDefined]
indicatorPanel = fuel_computerIndicatorPanel, 2
	indicator = {injectorHwIssue}, "injectorHwIssue No", "injectorHwIssue Yes"

dialog = fuel_computerDialog, "fuel_computer"
	panel = fuel_computerIndicatorPanel
	liveGraph = fuel_computer_1_Graph, "Graph", South
		graphLine = totalFuelCorrection
		graphLine = running_postCrankingFuelCorrection
		graphLine = running_intakeTemperatureCoefficient
		graphLine = running_coolantTemperatureCoefficient
	liveGraph = fuel_computer_2_Graph, "Graph", South
		graphLine = running_timeSinceCrankingInSecs
		graphLine = running_baseFuel
		graphLine = running_fuel
		graphLine = afrTableYAxis
	liveGraph = fuel_computer_3_Graph, "Graph", South
		graphLine = targetLambda
		graphLine = targetAFR
		graphLine = stoichiometricRatio
		graphLine = sdTcharge_coff
	liveGraph = fuel_computer_4_Graph, "Graph", South
		graphLine = sdAirMassInOneCylinder
		graphLine = normalizedCylinderFilling
		graphLine = brokenInjector
		graphLine = idealEngineTorque

indicatorPanel = ignition_stateIndicatorPanel, 2
	indicator = {luaIgnitionSkip}, "luaIgnitionSkip No", "luaIgnitionSkip Yes"

dialog = ignition_stateDialog, "ignition_state"
	panel = ignition_stateIndicatorPanel
	liveGraph = ignition_state_1_Graph, "Graph", South
		graphLine = baseDwell
		graphLine = sparkDwell
		graphLine = dwellDurationAngle
		graphLine = cltTimingCorrection
	liveGraph = ignition_state_2_Graph, "Graph", South
		graphLine = timingIatCorrection
		graphLine = timingPidCorrection
		graphLine = dfcoTimingRetard
		graphLine = baseIgnitionAdvance
	liveGraph = ignition_state_3_Graph, "Graph", South
		graphLine = correctedIgnitionAdvance
		graphLine = tractionAdvanceDrop
		graphLine = dwellVoltageCorrection
		graphLine = luaTimingAdd
	liveGraph = ignition_state_4_Graph, "Graph", South
		graphLine = luaTimingMult
		graphLine = trailingSparkAngle
		graphLine = rpmForIgnitionTableDot
		graphLine = rpmForIgnitionIdleTableDot
	liveGraph = ignition_state_5_Graph, "Graph", South
		graphLine = loadForIgnitionTableDot


dialog = knock_controllerDialog, "knock_controller"
	liveGraph = knock_controller_1_Graph, "Graph", South
		graphLine = m_knockLevel
		graphLine = m_knockCyl1
		graphLine = m_knockCyl2
		graphLine = m_knockCyl3
	liveGraph = knock_controller_2_Graph, "Graph", South
		graphLine = m_knockCyl4
		graphLine = m_knockCyl5
		graphLine = m_knockCyl6
		graphLine = m_knockCyl7
	liveGraph = knock_controller_3_Graph, "Graph", South
		graphLine = m_knockCyl8
		graphLine = m_knockCyl9
		graphLine = m_knockCyl10
		graphLine = m_knockCyl11
	liveGraph = knock_controller_4_Graph, "Graph", South
		graphLine = m_knockCyl12
		graphLine = m_knockRetard
		graphLine = m_knockThreshold
		graphLine = m_knockCount
	liveGraph = knock_controller_5_Graph, "Graph", South
		graphLine = m_maximumRetard
		graphLine = m_knockSpectrum1
		graphLine = m_knockSpectrum2
		graphLine = m_knockSpectrum3
	liveGraph = knock_controller_6_Graph, "Graph", South
		graphLine = m_knockSpectrum4
		graphLine = m_knockSpectrum5
		graphLine = m_knockSpectrum6
		graphLine = m_knockSpectrum7
	liveGraph = knock_controller_7_Graph, "Graph", South
		graphLine = m_knockSpectrum8
		graphLine = m_knockSpectrum9
		graphLine = m_knockSpectrum10
		graphLine = m_knockSpectrum11
	liveGraph = knock_controller_8_Graph, "Graph", South
		graphLine = m_knockSpectrum12
		graphLine = m_knockSpectrum13
		graphLine = m_knockSpectrum14
		graphLine = m_knockSpectrum15
	liveGraph = knock_controller_9_Graph, "Graph", South
		graphLine = m_knockSpectrum16
		graphLine = m_knockSpectrumChannelCyl
		graphLine = m_knockFrequencyStart
		graphLine = m_knockFrequencyStep
	liveGraph = knock_controller_10_Graph, "Graph", South
		graphLine = m_knockFuelTrimMultiplier

indicatorPanel = prime_injectionIndicatorPanel, 2
	indicator = {m_isPriming}, "m_isPriming No", "m_isPriming Yes"

dialog = prime_injectionDialog, "prime_injection"
	panel = prime_injectionIndicatorPanel

indicatorPanel = tcu_controllerIndicatorPanel, 2
	indicator = {isShifting}, "isShifting No", "isShifting Yes"

dialog = tcu_controllerDialog, "tcu_controller"
	panel = tcu_controllerIndicatorPanel
	liveGraph = tcu_controller_1_Graph, "Graph", South
		graphLine = tcuCurrentGear
		graphLine = tcRatio
		graphLine = lastShiftTime
		graphLine = tcu_currentRange
	liveGraph = tcu_controller_2_Graph, "Graph", South
		graphLine = pressureControlDuty
		graphLine = torqueConverterDuty

indicatorPanel = throttle_modelIndicatorPanel, 2
	indicator = {throttleUseWotModel}, "throttleUseWotModel No", "throttleUseWotModel Yes"

dialog = throttle_modelDialog, "throttle_model"
	panel = throttle_modelIndicatorPanel
	liveGraph = throttle_model_1_Graph, "Graph", South
		graphLine = throttleModelCrossoverAngle
		graphLine = throttleEstimatedFlow

indicatorPanel = high_pressure_fuel_pumpIndicatorPanel, 2
	indicator = {noValve}, "noValve No", "noValve Yes"
	indicator = {angleAboveMin}, "angleAboveMin No", "angleAboveMin Yes"
	indicator = {isHpfpActive}, "isHpfpActive No", "isHpfpActive Yes"
	indicator = {HpfpValveState}, "HpfpValveState No", "HpfpValveState Yes"

dialog = high_pressure_fuel_pumpDialog, "high_pressure_fuel_pump"
	panel = high_pressure_fuel_pumpIndicatorPanel
	liveGraph = high_pressure_fuel_pump_1_Graph, "Graph", South
		graphLine = m_requested_pump
		graphLine = fuel_requested_percent
		graphLine = fuel_requested_percent_pi
		graphLine = m_pressureTarget_kPa
	liveGraph = high_pressure_fuel_pump_2_Graph, "Graph", South
		graphLine = hpfp_p_control_percent
		graphLine = hpfp_i_control_percent
		graphLine = nextLobe
		graphLine = di_nextStart
	liveGraph = high_pressure_fuel_pump_3_Graph, "Graph", South
		graphLine = HpfdActivationPhase
		graphLine = HpfdDeactivationPhase


dialog = injector_modelDialog, "injector_model"
	liveGraph = injector_model_1_Graph, "Graph", South
		graphLine = m_deadtime
		graphLine = pressureDelta
		graphLine = pressureRatio
		graphLine = pressureCorrectionReference

indicatorPanel = launch_control_stateIndicatorPanel, 2
	indicator = {launchActivatePinState}, "launchActivatePinState No", "launchActivatePinState Yes"
	indicator = {isPreLaunchCondition}, "isPreLaunchCondition No", "isPreLaunchCondition Yes"
	indicator = {isLaunchCondition}, "isLaunchCondition No", "isLaunchCondition Yes"
	indicator = {isSwitchActivated}, "isSwitchActivated No", "isSwitchActivated Yes"
	indicator = {isClutchActivated}, "isClutchActivated No", "isClutchActivated Yes"
	indicator = {isBrakePedalActivated}, "isBrakePedalActivated No", "isBrakePedalActivated Yes"
	indicator = {isValidInputPin}, "isValidInputPin No", "isValidInputPin Yes"
	indicator = {activateSwitchCondition}, "activateSwitchCondition No", "activateSwitchCondition Yes"
	indicator = {rpmLaunchCondition}, "rpmLaunchCondition No", "rpmLaunchCondition Yes"
	indicator = {rpmPreLaunchCondition}, "rpmPreLaunchCondition No", "rpmPreLaunchCondition Yes"
	indicator = {speedCondition}, "speedCondition No", "speedCondition Yes"
	indicator = {tpsCondition}, "tpsCondition No", "tpsCondition Yes"
	indicator = {luaLaunchState}, "luaLaunchState No", "luaLaunchState Yes"

dialog = launch_control_stateDialog, "launch_control_state"
	panel = launch_control_stateIndicatorPanel
	liveGraph = launch_control_state_1_Graph, "Graph", South
		graphLine = retardThresholdRpm

indicatorPanel = shift_torque_reduction_stateIndicatorPanel, 2
	indicator = {isTorqueReductionTriggerPinValid}, "isTorqueReductionTriggerPinValid No", "isTorqueReductionTriggerPinValid Yes"
	indicator = {torqueReductionTriggerPinState}, "torqueReductionTriggerPinState No", "torqueReductionTriggerPinState Yes"
	indicator = {isTimeConditionSatisfied}, "isTimeConditionSatisfied No", "isTimeConditionSatisfied Yes"
	indicator = {isRpmConditionSatisfied}, "isRpmConditionSatisfied No", "isRpmConditionSatisfied Yes"
	indicator = {isAppConditionSatisfied}, "isAppConditionSatisfied No", "isAppConditionSatisfied Yes"
	indicator = {isFlatShiftConditionSatisfied}, "isFlatShiftConditionSatisfied No", "isFlatShiftConditionSatisfied Yes"
	indicator = {isBelowTemperatureThreshold}, "isBelowTemperatureThreshold No", "isBelowTemperatureThreshold Yes"

dialog = shift_torque_reduction_stateDialog, "shift_torque_reduction_state"
	panel = shift_torque_reduction_stateIndicatorPanel

indicatorPanel = antilag_system_stateIndicatorPanel, 2
	indicator = {isAntilagCondition}, "isAntilagCondition No", "isAntilagCondition Yes"
	indicator = {ALSMinRPMCondition}, "ALSMinRPMCondition No", "ALSMinRPMCondition Yes"
	indicator = {ALSMaxRPMCondition}, "ALSMaxRPMCondition No", "ALSMaxRPMCondition Yes"
	indicator = {ALSMinCLTCondition}, "ALSMinCLTCondition No", "ALSMinCLTCondition Yes"
	indicator = {ALSMaxCLTCondition}, "ALSMaxCLTCondition No", "ALSMaxCLTCondition Yes"
	indicator = {ALSMaxThrottleIntentCondition}, "ALSMaxThrottleIntentCondition No", "ALSMaxThrottleIntentCondition Yes"
	indicator = {isALSSwitchActivated}, "isALSSwitchActivated No", "isALSSwitchActivated Yes"
	indicator = {ALSActivatePinState}, "ALSActivatePinState No", "ALSActivatePinState Yes"
	indicator = {ALSSwitchCondition}, "ALSSwitchCondition No", "ALSSwitchCondition Yes"
	indicator = {ALSTimerCondition}, "ALSTimerCondition No", "ALSTimerCondition Yes"
	indicator = {luaAntilagState}, "luaAntilagState No", "luaAntilagState Yes"

dialog = antilag_system_stateDialog, "antilag_system_state"
	panel = antilag_system_stateIndicatorPanel
	liveGraph = antilag_system_state_1_Graph, "Graph", South
		graphLine = fuelALSCorrection
		graphLine = timingALSCorrection
		graphLine = timingALSSkip

indicatorPanel = boost_controlIndicatorPanel, 2
	indicator = {isTpsInvalid}, "isTpsInvalid No", "isTpsInvalid Yes"
	indicator = {m_shouldResetPid}, "m_shouldResetPid No", "m_shouldResetPid Yes"
	indicator = {isBelowClosedLoopThreshold}, "isBelowClosedLoopThreshold No", "isBelowClosedLoopThreshold Yes"
	indicator = {isNotClosedLoop}, "isNotClosedLoop No", "isNotClosedLoop Yes"
	indicator = {isZeroRpm}, "isZeroRpm No", "isZeroRpm Yes"
	indicator = {hasInitBoost}, "hasInitBoost No", "hasInitBoost Yes"
	indicator = {rpmTooLow}, "rpmTooLow No", "rpmTooLow Yes"
	indicator = {tpsTooLow}, "tpsTooLow No", "tpsTooLow Yes"
	indicator = {mapTooLow}, "mapTooLow No", "mapTooLow Yes"
	indicator = {isPlantValid}, "isPlantValid No", "isPlantValid Yes"
	indicator = {isBoostControlled}, "isBoostControlled No", "isBoostControlled Yes"

dialog = boost_controlDialog, "boost_control"
	panel = boost_controlIndicatorPanel
	liveGraph = boost_control_1_Graph, "Graph", South
		graphLine = luaTargetAdd
		graphLine = luaTargetMult
		graphLine = boostControlTarget
		graphLine = openLoopPart
	liveGraph = boost_control_2_Graph, "Graph", South
		graphLine = openLoopYAxis
		graphLine = luaOpenLoopAdd
		graphLine = boostControllerClosedLoopPart
		graphLine = boostOutput

indicatorPanel = ac_controlIndicatorPanel, 2
	indicator = {m_acEnabled}, "m_acEnabled No", "m_acEnabled Yes"
	indicator = {engineTooSlow}, "engineTooSlow No", "engineTooSlow Yes"
	indicator = {engineTooFast}, "engineTooFast No", "engineTooFast Yes"
	indicator = {noClt}, "noClt No", "noClt Yes"
	indicator = {engineTooHot}, "engineTooHot No", "engineTooHot Yes"
	indicator = {tpsTooHigh}, "tpsTooHigh No", "tpsTooHigh Yes"
	indicator = {isDisabledByLua}, "isDisabledByLua No", "isDisabledByLua Yes"
	indicator = {acCompressorState}, "acCompressorState No", "acCompressorState Yes"
	indicator = {acPressureTooLow}, "acPressureTooLow No", "acPressureTooLow Yes"
	indicator = {acPressureTooHigh}, "acPressureTooHigh No", "acPressureTooHigh Yes"

dialog = ac_controlDialog, "ac_control"
	panel = ac_controlIndicatorPanel
	liveGraph = ac_control_1_Graph, "Graph", South
		graphLine = acButtonState

indicatorPanel = nitrous_control_stateIndicatorPanel, 2
	indicator = {isNitrousArmed}, "isNitrousArmed No", "isNitrousArmed Yes"
	indicator = {isNitrousSpeedCondition}, "isNitrousSpeedCondition No", "isNitrousSpeedCondition Yes"
	indicator = {isNitrousTpsCondition}, "isNitrousTpsCondition No", "isNitrousTpsCondition Yes"
	indicator = {isNitrousCltCondition}, "isNitrousCltCondition No", "isNitrousCltCondition Yes"
	indicator = {isNitrousMapCondition}, "isNitrousMapCondition No", "isNitrousMapCondition Yes"
	indicator = {isNitrousAfrCondition}, "isNitrousAfrCondition No", "isNitrousAfrCondition Yes"
	indicator = {isNitrousRpmCondition}, "isNitrousRpmCondition No", "isNitrousRpmCondition Yes"
	indicator = {isNitrousCondition}, "isNitrousCondition No", "isNitrousCondition Yes"

dialog = nitrous_control_stateDialog, "nitrous_control_state"
	panel = nitrous_control_stateIndicatorPanel

indicatorPanel = fan_control0IndicatorPanel, 2
	indicator = {fan1cranking}, "cranking No", "cranking Yes"
	indicator = {fan1notRunning}, "notRunning No", "notRunning Yes"
	indicator = {fan1disabledWhileEngineStopped}, "disabledWhileEngineStopped No", "disabledWhileEngineStopped Yes"
	indicator = {fan1brokenClt}, "brokenClt No", "brokenClt Yes"
	indicator = {fan1enabledForAc}, "enabledForAc No", "enabledForAc Yes"
	indicator = {fan1hot}, "hot No", "hot Yes"
	indicator = {fan1cold}, "cold No", "cold Yes"
	indicator = {fan1disabledBySpeed}, "disabledBySpeed No", "disabledBySpeed Yes"
	indicator = {fan1m_state}, "m_state No", "m_state Yes"

dialog = fan_control0Dialog, "fan_control0"
	panel = fan_control0IndicatorPanel
	liveGraph = fan_control0_1_Graph, "Graph", South
		graphLine = fan1radiatorFanStatus

indicatorPanel = fan_control1IndicatorPanel, 2
	indicator = {fan2cranking}, "cranking No", "cranking Yes"
	indicator = {fan2notRunning}, "notRunning No", "notRunning Yes"
	indicator = {fan2disabledWhileEngineStopped}, "disabledWhileEngineStopped No", "disabledWhileEngineStopped Yes"
	indicator = {fan2brokenClt}, "brokenClt No", "brokenClt Yes"
	indicator = {fan2enabledForAc}, "enabledForAc No", "enabledForAc Yes"
	indicator = {fan2hot}, "hot No", "hot Yes"
	indicator = {fan2cold}, "cold No", "cold Yes"
	indicator = {fan2disabledBySpeed}, "disabledBySpeed No", "disabledBySpeed Yes"
	indicator = {fan2m_state}, "m_state No", "m_state Yes"

dialog = fan_control1Dialog, "fan_control1"
	panel = fan_control1IndicatorPanel
	liveGraph = fan_control1_1_Graph, "Graph", South
		graphLine = fan2radiatorFanStatus

indicatorPanel = fuel_pump_controlIndicatorPanel, 2
	indicator = {isPrime}, "isPrime No", "isPrime Yes"
	indicator = {engineTurnedRecently}, "engineTurnedRecently No", "engineTurnedRecently Yes"
	indicator = {isFuelPumpOn}, "isFuelPumpOn No", "isFuelPumpOn Yes"
	indicator = {ignitionOn}, "ignitionOn No", "ignitionOn Yes"

dialog = fuel_pump_controlDialog, "fuel_pump_control"
	panel = fuel_pump_controlIndicatorPanel

indicatorPanel = main_relayIndicatorPanel, 2
	indicator = {isBenchTest}, "isBenchTest No", "isBenchTest Yes"
	indicator = {hasIgnitionVoltage}, "hasIgnitionVoltage No", "hasIgnitionVoltage Yes"
	indicator = {mainRelayState}, "mainRelayState No", "mainRelayState Yes"
	indicator = {delayedShutoffRequested}, "delayedShutoffRequested No", "delayedShutoffRequested Yes"

dialog = main_relayDialog, "main_relay"
	panel = main_relayIndicatorPanel

indicatorPanel = tps_accel_stateIndicatorPanel, 2
	indicator = {isAboveAccelThreshold}, "isAboveAccelThreshold No", "isAboveAccelThreshold Yes"
	indicator = {isBelowDecelThreshold}, "isBelowDecelThreshold No", "isBelowDecelThreshold Yes"
	indicator = {isTimeToResetAccumulator}, "isTimeToResetAccumulator No", "isTimeToResetAccumulator Yes"
	indicator = {isFractionalEnrichment}, "isFractionalEnrichment No", "isFractionalEnrichment Yes"
	indicator = {belowEpsilon}, "belowEpsilon No", "belowEpsilon Yes"
	indicator = {tooShort}, "tooShort No", "tooShort Yes"

dialog = tps_accel_stateDialog, "tps_accel_state"
	panel = tps_accel_stateIndicatorPanel
	liveGraph = tps_accel_state_1_Graph, "Graph", South
		graphLine = tpsFrom
		graphLine = tpsTo
		graphLine = deltaTps
		graphLine = extraFuel
	liveGraph = tps_accel_state_2_Graph, "Graph", South
		graphLine = valueFromTable
		graphLine = fractionalInjFuel
		graphLine = accumulatedValue
		graphLine = maxExtraPerCycle
	liveGraph = tps_accel_state_3_Graph, "Graph", South
		graphLine = maxExtraPerPeriod
		graphLine = maxInjectedPerPeriod
		graphLine = cycleCnt

indicatorPanel = trigger_centralIndicatorPanel, 2
	indicator = {isDecodingMapCam}, "isDecodingMapCam No", "isDecodingMapCam Yes"

dialog = trigger_centralDialog, "trigger_central"
	panel = trigger_centralIndicatorPanel
	liveGraph = trigger_central_1_Graph, "Graph", South
		graphLine = hwEventCounters1
		graphLine = hwEventCounters2
		graphLine = hwEventCounters3
		graphLine = hwEventCounters4
	liveGraph = trigger_central_2_Graph, "Graph", South
		graphLine = vvtEventRiseCounter1
		graphLine = vvtEventRiseCounter2
		graphLine = vvtEventRiseCounter3
		graphLine = vvtEventRiseCounter4
	liveGraph = trigger_central_3_Graph, "Graph", South
		graphLine = vvtEventFallCounter1
		graphLine = vvtEventFallCounter2
		graphLine = vvtEventFallCounter3
		graphLine = vvtEventFallCounter4
	liveGraph = trigger_central_4_Graph, "Graph", South
		graphLine = vvtCamCounter
		graphLine = mapVvt_MAP_AT_SPECIAL_POINT
		graphLine = mapVvt_MAP_AT_DIFF
		graphLine = mapVvt_MAP_AT_CYCLE_COUNT
	liveGraph = trigger_central_5_Graph, "Graph", South
		graphLine = mapVvt_sync_counter
		graphLine = mapVvt_min_point_counter
		graphLine = temp_mapVvt_index
		graphLine = mapVvt_CycleDelta
	liveGraph = trigger_central_6_Graph, "Graph", South
		graphLine = currentEngineDecodedPhase
		graphLine = triggerToothAngleError
		graphLine = triggerIgnoredToothCount
		graphLine = mapCamPrevToothAngle
	liveGraph = trigger_central_7_Graph, "Graph", South
		graphLine = triggerElapsedUs


dialog = trigger_state0Dialog, "trigger_state0"
	liveGraph = trigger_state0_1_Graph, "Graph", South
		graphLine = trgsynchronizationCounter
		graphLine = trgvvtToothDurations0
		graphLine = trgvvtCurrentPosition
		graphLine = trgvvtToothPosition1
	liveGraph = trigger_state0_2_Graph, "Graph", South
		graphLine = trgvvtToothPosition2
		graphLine = trgvvtToothPosition3
		graphLine = trgvvtToothPosition4
		graphLine = trgtriggerSyncGapRatio
	liveGraph = trigger_state0_3_Graph, "Graph", South
		graphLine = trgtriggerStateIndex
		graphLine = trgtriggerCountersError


dialog = trigger_state1Dialog, "trigger_state1"
	liveGraph = trigger_state1_1_Graph, "Graph", South
		graphLine = vvt1isynchronizationCounter
		graphLine = vvt1ivvtToothDurations0
		graphLine = vvt1ivvtCurrentPosition
		graphLine = vvt1ivvtToothPosition1
	liveGraph = trigger_state1_2_Graph, "Graph", South
		graphLine = vvt1ivvtToothPosition2
		graphLine = vvt1ivvtToothPosition3
		graphLine = vvt1ivvtToothPosition4
		graphLine = vvt1itriggerSyncGapRatio
	liveGraph = trigger_state1_3_Graph, "Graph", South
		graphLine = vvt1itriggerStateIndex
		graphLine = vvt1itriggerCountersError


dialog = trigger_state2Dialog, "trigger_state2"
	liveGraph = trigger_state2_1_Graph, "Graph", South
		graphLine = vvt1esynchronizationCounter
		graphLine = vvt1evvtToothDurations0
		graphLine = vvt1evvtCurrentPosition
		graphLine = vvt1evvtToothPosition1
	liveGraph = trigger_state2_2_Graph, "Graph", South
		graphLine = vvt1evvtToothPosition2
		graphLine = vvt1evvtToothPosition3
		graphLine = vvt1evvtToothPosition4
		graphLine = vvt1etriggerSyncGapRatio
	liveGraph = trigger_state2_3_Graph, "Graph", South
		graphLine = vvt1etriggerStateIndex
		graphLine = vvt1etriggerCountersError


dialog = trigger_state3Dialog, "trigger_state3"
	liveGraph = trigger_state3_1_Graph, "Graph", South
		graphLine = vvt2isynchronizationCounter
		graphLine = vvt2ivvtToothDurations0
		graphLine = vvt2ivvtCurrentPosition
		graphLine = vvt2ivvtToothPosition1
	liveGraph = trigger_state3_2_Graph, "Graph", South
		graphLine = vvt2ivvtToothPosition2
		graphLine = vvt2ivvtToothPosition3
		graphLine = vvt2ivvtToothPosition4
		graphLine = vvt2itriggerSyncGapRatio
	liveGraph = trigger_state3_3_Graph, "Graph", South
		graphLine = vvt2itriggerStateIndex
		graphLine = vvt2itriggerCountersError


dialog = trigger_state4Dialog, "trigger_state4"
	liveGraph = trigger_state4_1_Graph, "Graph", South
		graphLine = vvt2esynchronizationCounter
		graphLine = vvt2evvtToothDurations0
		graphLine = vvt2evvtCurrentPosition
		graphLine = vvt2evvtToothPosition1
	liveGraph = trigger_state4_2_Graph, "Graph", South
		graphLine = vvt2evvtToothPosition2
		graphLine = vvt2evvtToothPosition3
		graphLine = vvt2evvtToothPosition4
		graphLine = vvt2etriggerSyncGapRatio
	liveGraph = trigger_state4_3_Graph, "Graph", South
		graphLine = vvt2etriggerStateIndex
		graphLine = vvt2etriggerCountersError

indicatorPanel = trigger_state_primaryIndicatorPanel, 2
	indicator = {m_hasSynchronizedPhase}, "m_hasSynchronizedPhase No", "m_hasSynchronizedPhase Yes"

dialog = trigger_state_primaryDialog, "trigger_state_primary"
	panel = trigger_state_primaryIndicatorPanel
	liveGraph = trigger_state_primary_1_Graph, "Graph", South
		graphLine = camResyncCounter


dialog = wall_fuel_stateDialog, "wall_fuel_state"
	liveGraph = wall_fuel_state_1_Graph, "Graph", South
		graphLine = wallFuelCorrection
		graphLine = wallFuel

indicatorPanel = closed_loop_idleIndicatorPanel, 2
	indicator = {isStableIdle}, "isStableIdle No", "isStableIdle Yes"

dialog = closed_loop_idleDialog, "closed_loop_idle"
	panel = closed_loop_idleIndicatorPanel
	liveGraph = closed_loop_idle_1_Graph, "Graph", South
		graphLine = emaError


dialog = live_data_exampleDialog, "live_data_example"
	liveGraph = live_data_example_1_Graph, "Graph", South
		graphLine = liveDataExampleField

indicatorPanel = idle_stateIndicatorPanel, 2
	indicator = {mightResetPid}, "mightResetPid No", "mightResetPid Yes"
	indicator = {shouldResetPid}, "shouldResetPid No", "shouldResetPid Yes"
	indicator = {wasResetPid}, "wasResetPid No", "wasResetPid Yes"
	indicator = {isCranking}, "isCranking No", "isCranking Yes"
	indicator = {isIacTableForCoasting}, "isIacTableForCoasting No", "isIacTableForCoasting Yes"
	indicator = {needReset}, "needReset No", "needReset Yes"
	indicator = {isInDeadZone}, "isInDeadZone No", "isInDeadZone Yes"
	indicator = {isBlipping}, "isBlipping No", "isBlipping Yes"
	indicator = {badTps}, "badTps No", "badTps Yes"
	indicator = {looksLikeRunning}, "looksLikeRunning No", "looksLikeRunning Yes"
	indicator = {looksLikeCoasting}, "looksLikeCoasting No", "looksLikeCoasting Yes"
	indicator = {looksLikeCrankToIdle}, "looksLikeCrankToIdle No", "looksLikeCrankToIdle Yes"
	indicator = {isIdleCoasting}, "isIdleCoasting No", "isIdleCoasting Yes"
	indicator = {isIdleClosedLoop}, "isIdleClosedLoop No", "isIdleClosedLoop Yes"
	indicator = {isIdling}, "isIdling No", "isIdling Yes"

dialog = idle_stateDialog, "idle_state"
	panel = idle_stateIndicatorPanel
	liveGraph = idle_state_1_Graph, "Graph", South
		graphLine = idleState
		graphLine = baseIdlePosition
		graphLine = iacByTpsTaper
		graphLine = idleTarget
	liveGraph = idle_state_2_Graph, "Graph", South
		graphLine = idleEntryRpm
		graphLine = idleExitRpm
		graphLine = targetRpmByClt
		graphLine = targetRpmAc
	liveGraph = idle_state_3_Graph, "Graph", South
		graphLine = iacByRpmTaper
		graphLine = luaAdd
		graphLine = m_lastTargetRpm
		graphLine = idleClosedLoop
	liveGraph = idle_state_4_Graph, "Graph", South
		graphLine = currentIdlePosition
		graphLine = idleTargetAirmass
		graphLine = idleTargetFlow

indicatorPanel = electronic_throttle0IndicatorPanel, 2
	indicator = {etb1etbRevLimitActive}, "etbRevLimitActive No", "etbRevLimitActive Yes"
	indicator = {etb1jamDetected}, "jamDetected No", "jamDetected Yes"
	indicator = {etb1validPlantPosition}, "validPlantPosition No", "validPlantPosition Yes"

dialog = electronic_throttle0Dialog, "electronic_throttle0"
	panel = electronic_throttle0IndicatorPanel
	liveGraph = electronic_throttle0_1_Graph, "Graph", South
		graphLine = etb1targetWithIdlePosition
		graphLine = etb1trim
		graphLine = etb1boardEtbAdjustment
		graphLine = etb1luaAdjustment
	liveGraph = electronic_throttle0_2_Graph, "Graph", South
		graphLine = etb1m_wastegatePosition
		graphLine = etb1m_lastPidDtMs
		graphLine = etb1etbFeedForward
		graphLine = etb1integralError
	liveGraph = electronic_throttle0_3_Graph, "Graph", South
		graphLine = etb1etbCurrentTarget
		graphLine = etb1m_adjustedTarget
		graphLine = etb1etbTpsErrorCounter
		graphLine = etb1etbPpsErrorCounter
	liveGraph = electronic_throttle0_4_Graph, "Graph", South
		graphLine = etb1etbErrorCode
		graphLine = etb1etbErrorCodeBlinker
		graphLine = etb1tcEtbDrop
		graphLine = etb1jamTimer
	liveGraph = electronic_throttle0_5_Graph, "Graph", South
		graphLine = etb1adjustedEtbTarget
		graphLine = etb1state

indicatorPanel = electronic_throttle1IndicatorPanel, 2
	indicator = {etb2etbRevLimitActive}, "etbRevLimitActive No", "etbRevLimitActive Yes"
	indicator = {etb2jamDetected}, "jamDetected No", "jamDetected Yes"
	indicator = {etb2validPlantPosition}, "validPlantPosition No", "validPlantPosition Yes"

dialog = electronic_throttle1Dialog, "electronic_throttle1"
	panel = electronic_throttle1IndicatorPanel
	liveGraph = electronic_throttle1_1_Graph, "Graph", South
		graphLine = etb2targetWithIdlePosition
		graphLine = etb2trim
		graphLine = etb2boardEtbAdjustment
		graphLine = etb2luaAdjustment
	liveGraph = electronic_throttle1_2_Graph, "Graph", South
		graphLine = etb2m_wastegatePosition
		graphLine = etb2m_lastPidDtMs
		graphLine = etb2etbFeedForward
		graphLine = etb2integralError
	liveGraph = electronic_throttle1_3_Graph, "Graph", South
		graphLine = etb2etbCurrentTarget
		graphLine = etb2m_adjustedTarget
		graphLine = etb2etbTpsErrorCounter
		graphLine = etb2etbPpsErrorCounter
	liveGraph = electronic_throttle1_4_Graph, "Graph", South
		graphLine = etb2etbErrorCode
		graphLine = etb2etbErrorCodeBlinker
		graphLine = etb2tcEtbDrop
		graphLine = etb2jamTimer
	liveGraph = electronic_throttle1_5_Graph, "Graph", South
		graphLine = etb2adjustedEtbTarget
		graphLine = etb2state

indicatorPanel = wideband_state0IndicatorPanel, 2
	indicator = {wb1isValid}, "isValid No", "isValid Yes"
	indicator = {wb1fwUnsupported}, "fwUnsupported No", "fwUnsupported Yes"
	indicator = {wb1fwOutdated}, "fwOutdated No", "fwOutdated Yes"

dialog = wideband_state0Dialog, "wideband_state0"
	panel = wideband_state0IndicatorPanel
	liveGraph = wideband_state0_1_Graph, "Graph", South
		graphLine = wb1faultCode
		graphLine = wb1heaterDuty
		graphLine = wb1pumpDuty
		graphLine = wb1tempC
	liveGraph = wideband_state0_2_Graph, "Graph", South
		graphLine = wb1nernstVoltage
		graphLine = wb1esr

indicatorPanel = wideband_state1IndicatorPanel, 2
	indicator = {wb2isValid}, "isValid No", "isValid Yes"
	indicator = {wb2fwUnsupported}, "fwUnsupported No", "fwUnsupported Yes"
	indicator = {wb2fwOutdated}, "fwOutdated No", "fwOutdated Yes"

dialog = wideband_state1Dialog, "wideband_state1"
	panel = wideband_state1IndicatorPanel
	liveGraph = wideband_state1_1_Graph, "Graph", South
		graphLine = wb2faultCode
		graphLine = wb2heaterDuty
		graphLine = wb2pumpDuty
		graphLine = wb2tempC
	liveGraph = wideband_state1_2_Graph, "Graph", South
		graphLine = wb2nernstVoltage
		graphLine = wb2esr

indicatorPanel = dc_motorsIndicatorPanel, 2
	indicator = {isEnabled0}, "isEnabled0 No", "isEnabled0 Yes"

dialog = dc_motorsDialog, "dc_motors"
	panel = dc_motorsIndicatorPanel
	liveGraph = dc_motors_1_Graph, "Graph", South
		graphLine = dcOutput0
		graphLine = isEnabled0_int


dialog = sent_stateDialog, "sent_state"
	liveGraph = sent_state_1_Graph, "Graph", South
		graphLine = value0
		graphLine = value1
		graphLine = errorRate


dialog = vvtDialog, "vvt"
	liveGraph = vvt_1_Graph, "Graph", South
		graphLine = vvtTarget
		graphLine = vvtOutput

indicatorPanel = lambda_monitorIndicatorPanel, 2
	indicator = {lambdaCurrentlyGood}, "lambdaCurrentlyGood No", "lambdaCurrentlyGood Yes"
	indicator = {lambdaMonitorCut}, "lambdaMonitorCut No", "lambdaMonitorCut Yes"

dialog = lambda_monitorDialog, "lambda_monitor"
	panel = lambda_monitorIndicatorPanel
	liveGraph = lambda_monitor_1_Graph, "Graph", South
		graphLine = lambdaTimeSinceGood


dialog = mc33810_stateDialog, "mc33810_state"
	liveGraph = mc33810_state_1_Graph, "Graph", South
		graphLine = sparkDuration1
		graphLine = sparkDuration2
		graphLine = sparkDuration3
		graphLine = sparkDuration4

indicatorPanel = long_term_fuel_trim_stateIndicatorPanel, 2
	indicator = {ltftLearning}, "ltftLearning No", "ltftLearning Yes"
	indicator = {ltftCorrecting}, "ltftCorrecting No", "ltftCorrecting Yes"
	indicator = {ltftSavePending}, "ltftSavePending No", "ltftSavePending Yes"
	indicator = {ltftLoadPending}, "ltftLoadPending No", "ltftLoadPending Yes"
	indicator = {ltftLoadError}, "ltftLoadError No", "ltftLoadError Yes"
	indicator = {ltftPageRefreshFlag}, "ltftPageRefreshFlag No", "ltftPageRefreshFlag Yes"

dialog = long_term_fuel_trim_stateDialog, "long_term_fuel_trim_state"
	panel = long_term_fuel_trim_stateIndicatorPanel
	liveGraph = long_term_fuel_trim_state_1_Graph, "Graph", South
		graphLine = ltftCntHit
		graphLine = ltftCntMiss
		graphLine = ltftCntDeadband
		graphLine = ltftCorrection1
	liveGraph = long_term_fuel_trim_state_2_Graph, "Graph", South
		graphLine = ltftCorrection2
		graphLine = ltftAccummulatedCorrection1
		graphLine = ltftAccummulatedCorrection2


dialog = short_term_fuel_trim_stateDialog, "short_term_fuel_trim_state"
	liveGraph = short_term_fuel_trim_state_1_Graph, "Graph", South
		graphLine = stftCorrectionBinIdx
		graphLine = stftLearningBinIdx
		graphLine = stftCorrectionState
		graphLine = stftLearningState1
	liveGraph = short_term_fuel_trim_state_2_Graph, "Graph", South
		graphLine = stftLearningState2
		graphLine = stftInputError1
		graphLine = stftInputError2

indicatorPanel = vvl_controller_stateIndicatorPanel, 2
	indicator = {isVvlTpsCondition}, "isVvlTpsCondition No", "isVvlTpsCondition Yes"
	indicator = {isVvlCltCondition}, "isVvlCltCondition No", "isVvlCltCondition Yes"
	indicator = {isVvlMapCondition}, "isVvlMapCondition No", "isVvlMapCondition Yes"
	indicator = {isVvlAfrCondition}, "isVvlAfrCondition No", "isVvlAfrCondition Yes"
	indicator = {isVvlRpmCondition}, "isVvlRpmCondition No", "isVvlRpmCondition Yes"
	indicator = {isVvlCondition}, "isVvlCondition No", "isVvlCondition Yes"

dialog = vvl_controller_stateDialog, "vvl_controller_state"
	panel = vvl_controller_stateIndicatorPanel




	dialog = cltFuelCorrCurveDialog
		field = "This table is a global multiplier"
		field = "1.00 means no correction"
		field = "1.20 means 20% extra fuel"
		field = "0.80% means 20% less fuel"
		field = ""
		panel = cltFuelCorrCurve

	dialog = scriptTable1TblSettings, "", yAxis
		field = "Name", scriptTableName1
		panel = scriptTable1Tbl

	dialog = scriptTable2TblSettings, "", yAxis
		field = "Name", scriptTableName2
		panel = scriptTable2Tbl

	dialog = scriptTable3TblSettings, "", yAxis
		field = "Name", scriptTableName3
		panel = scriptTable3Tbl

	dialog = scriptTable4TblSettings, "", yAxis
		field = "Name", scriptTableName4
		panel = scriptTable4Tbl

	dialog = scriptCurve1Settings, "", yAxis
		field = "Name", scriptCurveName1
		panel = scriptCurve1

	dialog = scriptCurve2Settings, "", yAxis
		field = "Name", scriptCurveName2
		panel = scriptCurve2

	dialog = scriptCurve3Settings, "", yAxis
		field = "Name", scriptCurveName3
		panel = scriptCurve3

	dialog = scriptCurve4Settings, "", yAxis
		field = "Name", scriptCurveName4
		panel = scriptCurve4

	dialog = scriptCurve5Settings, "", yAxis
		field = "Name", scriptCurveName5
		panel = scriptCurve5

	dialog = scriptCurve6Settings, "", yAxis
		field = "Name", scriptCurveName6
		panel = scriptCurve6

	dialog = tChargeRpmTpsSettings, "RPM+TPS mode"
		field = "We use these coefficients to approximate air/fuel charge"
		field = "temperature based on CLT and IAT, depending on RPM and TPM"
		field = "Low RPM/Low TPS", tChargeMinRpmMinTps
		field = "Low RPM/High TPS", tChargeMinRpmMaxTps
		field = "High RPM/Low TPS", tChargeMaxRpmMinTps
		field = "High RPM/High TPS", tChargeMaxRpmMaxTps

	dialog = tChargeGeneralSettings, ""
		field = "Mode", tChargeMode
		field = "#These two parameters limit the estimate's rate of change"
		field = "Increase rate limit", tChargeAirIncrLimit
		field = "Decrease rate limit", tChargeAirDecrLimit
		field = ""

	dialog = tChargeAirInterpSettings, "Airflow interpolation mode"
		field = "Low flow coefficient", tChargeAirCoefMin
		field = "High flow coefficient", tChargeAirCoefMax
		field = "Max air flow", tChargeAirFlowMax

  dialog = cltCrankingCurveDialog
    field = "ETB idle maximum angle",				etbIdleThrottleRange
    panel = cltCrankingCurve

	dialog = afterCrankingIACtaperDurationDialog
		panel = afterCrankingIACtaperCurve

	dialog = tChargeSettings, "Estimated cylinder air temperature"
		panel = tChargeGeneralSettings
		panel = tChargeRpmTpsSettings, { tChargeMode == 0}
		panel = tChargeAirInterpSettings, { tChargeMode == 1}
		panel = tchargeCurve, { tChargeMode == 2 }

	dialog = baseInjection, "Injection"
		field = "Injection",						isInjectionEnabled

		field = "Mode",							injectionMode, {isInjectionEnabled == 1}
		field = "#Batch injection with individual wiring"
		field = "Alpha-N uses IAT density correction",	alphaNUseIat, { fuelAlgorithm == 2 }
		field = "Override VE table load axis",			veOverrideMode, { isInjectionEnabled }
		field = "Override AFR table load axis",			afrOverrideMode, { isInjectionEnabled }
		field = "Injection timing control mode",				injectionTimingMode, { isInjectionEnabled }

	dialog = ignitionOutputs, "Ignition Outputs"
		field = "# wire each output to the corresponding cylinder number"
		field = "# rusEFI handles firing order"
		field = "Ignition Output Mode",						ignitionPinMode, {isIgnitionEnabled == 1}
		field = "Ignition Output 1",							ignitionPins1, {isIgnitionEnabled == 1}
		; see rusefi_config.txt comment next to 'ignitionPin2logic' which says
		; this section is auto-generated by FiringOrderTSLogic.java
		field = "Ignition Output 2",                       ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23) || (firingOrder == 25) || (firingOrder == 29) || (firingOrder == 33) || (firingOrder == 34)))}
		field = "Ignition Output 3",                       ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23) || (firingOrder == 25) || (firingOrder == 27) || (firingOrder == 28)))}
		field = "Ignition Output 4",                       ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23) || (firingOrder == 25) || (firingOrder == 26) || (firingOrder == 27) || (firingOrder == 31) || (firingOrder == 32)))}
		field = "Ignition Output 5",                       ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23) || (firingOrder == 26) || (firingOrder == 30) || (firingOrder == 31) || (firingOrder == 32) || (firingOrder == 33)))}
		field = "Ignition Output 6",                       ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23) || (firingOrder == 29) || (firingOrder == 30) || (firingOrder == 33) || (firingOrder == 34)))}
		field = "Ignition Output 7",                       ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22) || (firingOrder == 28)))}
		field = "Ignition Output 8",                       ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19) || (firingOrder == 26) || (firingOrder == 28) || (firingOrder == 32) || (firingOrder == 34)))}
		field = "Ignition Output 9",                       ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))}
		field = "Ignition Output 10",                       ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 33)))}
		field = "Ignition Output 11",                       ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))}
		field = "Ignition Output 12",                       ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))}


	dialog = ignitionBasic, ""
		field = "Spark",						isIgnitionEnabled

		field = "Mode",							ignitionMode, {isIgnitionEnabled}
		field = "Spark hardware latency correction", sparkHardwareLatencyCorrection
;todo https://github.com/rusefi/rusefi/issues/5894		field = "Maximum timing advance",		maximumIgnitionTiming, {isIgnitionEnabled}
;todo https://github.com/rusefi/rusefi/issues/5894		field = "Minimum timing advance",		minimumIgnitionTiming, {isIgnitionEnabled}
		field = "Individually wired Wasted Spark",				twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2 }
		field = "Override ignition table load axis",	ignOverrideMode, {isIgnitionEnabled}
		field = "#Use fixed timing while validating with a timing gun"
		field = "Timing Mode",					timingMode, {isIgnitionEnabled}
		field = "Fixed Timing",				fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1}

	dialog = ignitionSettings, "", xAxis
		panel = ignitionBasic
		panel = ignitionOutputs, { 1 }, { uiMode == 0 || uiMode == 1 }

	dialog = engineMetadata, "Engine Metadata"
		field = "#These metadata are used by rusEFI Online"
		field = "Engine Make",							engineMake
		field = "Manufacturer Engine Code",				engineCode
		field = "Vehicle Name",							vehicleName

		field = "VIN",										vinNumber


	dialog = trigger_primary, "Primary Trigger"
		topicHelp = "triggerHelp"
		; see also in firmware '[doesTriggerImplyOperationMode]' tag
		field = "Strokes",						twoStroke
		field = ""
		field = "Trigger type",							trigger_type
		field = "Total tooth count",					trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0}
		field = "Missing/skipped tooth count",					trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0}
		field = "Skipped wheel location",					skippedWheelOnCam, 1, { twoStroke == 0 && (trigger_type == 0 || trigger_type == 8 || trigger_type == 9 || trigger_type == 11 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69 || trigger_type == 73 || trigger_type == 88 || trigger_type == 89) }
		field = ""
		field = "!Reminder that 4-stroke cycle is 720 degrees"
		field = "!For well-known trigger types use '0' trigger angle offset"
		field = "Trigger Angle Advance",					globalTriggerAngleOffset

		field = ""
		field = ""

		field = "#Cam is primary if you have cam sensor as part of trigger shape"
		; cam if
		; two-stroke, or
		; not crank trigger and ((vague trigger and cam choice) or not vague trigger)
		field = "Cam Sensor (Primary channel)",		triggerInputPins1, 1, {twoStroke == 1 || ( !(trigger_type == 2 || trigger_type == 5 || trigger_type == 10 || trigger_type == 12 || trigger_type == 20 || trigger_type == 21 || trigger_type == 26 || trigger_type == 27 || trigger_type == 33 || trigger_type == 38 || trigger_type == 39 || trigger_type == 44 || trigger_type == 45 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 58 || trigger_type == 61 || trigger_type == 62 || trigger_type == 68 || trigger_type == 70 || trigger_type == 71 || trigger_type == 72 || trigger_type == 74 || trigger_type == 75 || trigger_type == 76 || trigger_type == 77 || trigger_type == 84 || trigger_type == 87 || trigger_type == 92 || trigger_type == 93 || trigger_type == 94) && ( ( (trigger_type == 0 || trigger_type == 8 || trigger_type == 9 || trigger_type == 11 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69 || trigger_type == 73 || trigger_type == 88 || trigger_type == 89) && skippedWheelOnCam) || !(trigger_type == 0 || trigger_type == 8 || trigger_type == 9 || trigger_type == 11 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69 || trigger_type == 73 || trigger_type == 88 || trigger_type == 89)  ) )  }
		field = "Crank Sensor (Primary channel)",		triggerInputPins1, 1, { !(twoStroke == 1 || ( !(trigger_type == 2 || trigger_type == 5 || trigger_type == 10 || trigger_type == 12 || trigger_type == 20 || trigger_type == 21 || trigger_type == 26 || trigger_type == 27 || trigger_type == 33 || trigger_type == 38 || trigger_type == 39 || trigger_type == 44 || trigger_type == 45 || trigger_type == 46 || trigger_type == 53 || trigger_type == 55 || trigger_type == 57 || trigger_type == 58 || trigger_type == 61 || trigger_type == 62 || trigger_type == 68 || trigger_type == 70 || trigger_type == 71 || trigger_type == 72 || trigger_type == 74 || trigger_type == 75 || trigger_type == 76 || trigger_type == 77 || trigger_type == 84 || trigger_type == 87 || trigger_type == 92 || trigger_type == 93 || trigger_type == 94) && ( ( (trigger_type == 0 || trigger_type == 8 || trigger_type == 9 || trigger_type == 11 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69 || trigger_type == 73 || trigger_type == 88 || trigger_type == 89) && skippedWheelOnCam) || !(trigger_type == 0 || trigger_type == 8 || trigger_type == 9 || trigger_type == 11 || trigger_type == 17 || trigger_type == 18 || trigger_type == 23 || trigger_type == 48 || trigger_type == 69 || trigger_type == 73 || trigger_type == 88 || trigger_type == 89)  ) )) }
		field = "Primary Edge",						invertPrimaryTriggerSignal
		field = "Secondary channel",					triggerInputPins2, { triggerInputPins2 != 0 || (triggerInputPins1 != 0 && (trigger_type == 1 || trigger_type == 3 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 25 || trigger_type == 31 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) ) }
		field = "Secondary Edge",						invertSecondaryTriggerSignal, {triggerInputPins2 != 0 && (trigger_type == 1 || trigger_type == 3 || trigger_type == 15 || trigger_type == 16 || trigger_type == 19 || trigger_type == 25 || trigger_type == 31 || trigger_type == 35 || trigger_type == 36 || trigger_type == 37 || trigger_type == 40 || trigger_type == 49 || trigger_type == 53 || trigger_type == 54 || trigger_type == 63 || trigger_type == 64) }

	dialog = trigger_cams, "Cam Inputs"
		field = "!<html><a href=https://rusefi.com/s/vvt>https://rusefi.com/s/vvt</a></html>"
		; todo: code generator to hard-code all triggers not requiring VVT?
		; todo: https://github.com/rusefi/rusefi/issues/2077

		field = "Cam mode (intake)",				vvtMode1, {trigger_type != 3}
		field = "2JZ Tooth Detection Position",                     camDecoder2jzPosition, 1, {vvtMode1 == 2}
		field = "2JZ Detection Precision",                    camDecoder2jzPrecision, 1, {vvtMode1 == 2}
		field = "Cam mode (exhaust)",				vvtMode2, {trigger_type != 3}
		field = ""
		field = "Cam sensor bank 1 intake",			camInputs1, { camInputs1 != 0 || (vvtMode1 != 0 ) }
		field = "Cam sensor bank 1 exhaust",		camInputs2, { camInputs2 != 0 || (vvtMode2 != 0 && camInputs1 != 0 ) }
		field = "Cam sensor bank 2 intake",			camInputs3, { camInputs3 != 0 || (vvtMode1 != 0 && camInputs1 != 0 ) }
		field = "Cam sensor bank 2 exhaust",		camInputs4, { camInputs4 != 0 || (vvtMode2 != 0 && camInputs2 != 0 ) }
		field = "intake Cam Edge Select",					      invertCamVVTSignal, { camInputs1 != 0 }
		field = "exhaust Cam Edge Select",					    invertExhaustCamVVTSignal, { camInputs2 != 0 }
		field = ""

		field = "#Set offset so VVT indicates 0 degrees in default position"
		field = "VVT offset bank 1 intake",				vvtOffsets1, { camInputs1 != 0 }
		field = "VVT offset bank 1 exhaust",			vvtOffsets2, { camInputs2 != 0 }
		field = "VVT offset bank 2 intake",				vvtOffsets3, { camInputs3 != 0 }
		field = "VVT offset bank 2 exhaust",			vvtOffsets4, { camInputs4 != 0 }
		field = ""
		field = "Cam for engine sync resolution",		engineSyncCam, { vvtMode1 != 0 || vvtMode2 != 0 }

	dialog = triggerConfiguration_gap, "Trigger Gap Override"
		field = "!This is a pretty advanced feature for when you are debugging trigger synchronization"
		field = "Override well known trigger gaps",	overrideTriggerGaps
		field = gapTrackingLengthOverride,				gapTrackingLengthOverride, { overrideTriggerGaps == 1 }
		field = "First gap from",	triggerGapOverrideFrom1,    { overrideTriggerGaps == 1 }
		field = "First gap to",		triggerGapOverrideTo1,      { overrideTriggerGaps == 1 }
		field = "Second gap from",	triggerGapOverrideFrom2,    { overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 2 }
		field = "Second gap to",	triggerGapOverrideTo2,      { overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 2 }
		field = "Gap #3 from",		triggerGapOverrideFrom3,    { overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 3 }
		field = "Gap #3 to",		triggerGapOverrideTo3,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 3 }
		field = "Gap #4 from",		triggerGapOverrideFrom4,	{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 4 }
		field = "Gap #4 to",		triggerGapOverrideTo4,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 4 }
		field = "Gap #5 from",		triggerGapOverrideFrom5,	{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 5 }
		field = "Gap #5 to",		triggerGapOverrideTo5,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 5 }
		field = "Gap #6 from",		triggerGapOverrideFrom6,	{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 6 }
		field = "Gap #6 to",		triggerGapOverrideTo6,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 6 }
		field = "Gap #7 from",		triggerGapOverrideFrom7,	{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 7 }
		field = "Gap #7 to",		triggerGapOverrideTo7,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 7 }
		field = "Gap #8 from",		triggerGapOverrideFrom8,	{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 8 }
		field = "Gap #8 to",		triggerGapOverrideTo8,		{ overrideTriggerGaps == 1 && gapTrackingLengthOverride >= 8 }
		field = "Override well known VVT gaps",	overrideVvtTriggerGaps
		field = gapVvtTrackingLengthOverride,				gapVvtTrackingLengthOverride, { overrideVvtTriggerGaps == 1 }
		field = "First VVT gap from",	triggerVVTGapOverrideFrom1, { overrideVvtTriggerGaps == 1 }
		field = "First VVT gap to",		triggerVVTGapOverrideTo1,   { overrideVvtTriggerGaps == 1 }
		field = "Second VVT gap from",	triggerVVTGapOverrideFrom2, { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 2 }
		field = "Second VVT gap to",	triggerVVTGapOverrideTo2,     { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 2 }
		field = "VVT gap #3 from",	triggerVVTGapOverrideFrom3,     { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 3 }
		field = "VVT gap #3 to",	triggerVVTGapOverrideTo3,         { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 3 }
		field = "VVT gap #4 from",	triggerVVTGapOverrideFrom4      { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 4 }
		field = "VVT gap #4 to",	triggerVVTGapOverrideTo4          { overrideVvtTriggerGaps == 1 && gapVvtTrackingLengthOverride >= 4 }

  dialog = trigger_console, "Console Logging"
		field = "Print verbose VVT sync details to console",verboseVVTDecoding
		field = "Print verbose trigger sync to console",	verboseTriggerSynchDetails
		field = "Display logic signals",				displayLogicLevelsInEngineSniffer
		field = "Do not print messages in case of sync error",  silentTriggerError
		field = "Focus on inputs in engine sniffer",	engineSnifferFocusOnInputs

	dialog = trigger_advanced,	"Advanced Trigger"
		field = "Require cam/VVT sync for ignition",	isPhaseSyncRequiredForIgnition
		field = "Cam sync crank revolution",      camSyncOnSecondCrankRevolution
		field = "Maximum cam/VVT sync RPM",				maxCamPhaseResolveRpm
		field = "MAP readout angle",					mapCamDetectionAnglePosition, 1, { vvtMode1 == 13 }
		field = "MAP delta threshold",        mapSyncThreshold, 1, { vvtMode1 == 13 }
		field = "Enable noise filtering",				useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9}
		panel = trigger_console

	dialog = triggerConfiguration, "", xAxis
		panel = trigger_primary, {1}, { consumeObdSensors == 0 }
		panel = trigger_cams, {1}, { consumeObdSensors == 0 }

;			Engine->Injection Settings
	dialog = injChars, "Injector Settings",	yAxis

		field = "Injector flow",			injector_flow, {isInjectionEnabled == 1}
		field = "Injector flow units",		injectorFlowAsMassFlow, {isInjectionEnabled == 1}
		field = "Fuel rail pressure sensor", injectorPressureType, { isInjectionEnabled && (highPressureFuel_hwChannel || lowPressureFuel_hwChannel) }
		field = "Injector flow compensation mode", injectorCompensationMode, { isInjectionEnabled }
		field = "Injector reference pressure", fuelReferencePressure, { isInjectionEnabled && injectorCompensationMode != 0 && injectorCompensationMode != 3 }

	dialog = fuelParams, "Fuel characteristics", yAxis
		field = "Stoichiometric ratio",			stoichRatioPrimary, {isInjectionEnabled == 1}
		field = "E100 stoichiometric ratio",	stoichRatioSecondary, {isInjectionEnabled == 1 && flexSensorPin != 0 }

	dialog = injectorOutputSettings, "Injector Outputs",	yAxis
		field = "Use only first half of outputs for batch mode"
		field = "# wire each output to the corresponding cylinder number"
		field = "# rusEFI handles firing order"
		field = "Injection Output 1",						injectionPins1, {isInjectionEnabled == 1}
		field = "Injection Output 2",						injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1}
		field = "Injection Output 3",						injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2}
		field = "Injection Output 4",						injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3}
		field = "Injection Output 5 ",					injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4}
		field = "Injection Output 6 ",					injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5}
		field = "Injection Output 7 ",					injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6}
		field = "Injection Output 8 ",					injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7}
		field = "Injection Output 9 ",					injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8}
		field = "Injection Output 10 ",					injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9}
		field = "Injection Output 11 ",					injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10}
		field = "Injection Output 12 ",					injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11}

	dialog = cylinderBankSelect, "Cylinder Banks", yAxis
		field = "Cylinder 1",						cylinderBankSelect1, {isInjectionEnabled == 1}
		field = "Cylinder 2",						cylinderBankSelect2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1}
		field = "Cylinder 3",						cylinderBankSelect3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2}
		field = "Cylinder 4",						cylinderBankSelect4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3}
		field = "Cylinder 5 ",						cylinderBankSelect5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4}
		field = "Cylinder 6 ",						cylinderBankSelect6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5}
		field = "Cylinder 7 ",						cylinderBankSelect7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6}
		field = "Cylinder 8 ",						cylinderBankSelect8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7}
		field = "Cylinder 9 ",						cylinderBankSelect9, {isInjectionEnabled == 1 && cylindersCount > 8}
		field = "Cylinder 10 ",						cylinderBankSelect10, {isInjectionEnabled == 1 && cylindersCount > 9}
		field = "Cylinder 11 ",						cylinderBankSelect11, {isInjectionEnabled == 1 && cylindersCount > 10}
		field = "Cylinder 12 ",						cylinderBankSelect12, {isInjectionEnabled == 1 && cylindersCount > 11}

	dialog = injectorNonlinearPolynomial, "Polynomial Adder", yAxis
		field = "Also known as GM mode"
		field = "Add nonlinearity below pulse",		applyNonlinearBelowPulse
		field = "constant offset",				injectorCorrectionPolynomial1
		field = "multiplier for pulsewidth",								injectorCorrectionPolynomial2
		field = "multiplier for pulsewidth^2",								injectorCorrectionPolynomial3
		field = "multiplier for pulsewidth^3",								injectorCorrectionPolynomial4
		field = "multiplier for pulsewidth^4",								injectorCorrectionPolynomial5
		field = "multiplier for pulsewidth^5",								injectorCorrectionPolynomial6
		field = "multiplier for pulsewidth^6",								injectorCorrectionPolynomial7
		field = "multiplier for pulsewidth^7",								injectorCorrectionPolynomial8

	dialog = injectorNonlinearFord, "Ford-model Small Pulse Correction", yAxis
		field = "Small pulse slope (ALOSL)",			fordInjectorSmallPulseSlope
		field = "Set this to 'mass flow'",				injectorFlowAsMassFlow
		field = "Large pulse slope (AHISL)",			injector_flow
		field = "Small pulse breakpoint (FUEL_BKPT)",	fordInjectorSmallPulseBreakPoint

	dialog = injectorNonlinear
		field = "Small pulse correction mode",		injectorNonlinearMode
		panel = injectorNonlinearPolynomial, {1}, { injectorNonlinearMode == 1 }
		panel = injectorNonlinearFord, {1}, { injectorNonlinearMode == 2 }

	dialog = testLuaOut, "Lua Out Test"
		commandButton = "Lua Out #1",	cmd_test_lua1
		commandButton = "Lua Out #2",	cmd_test_lua2
		commandButton = "Lua Out #3",	cmd_test_lua3
		commandButton = "Lua Out #4",	cmd_test_lua4
		commandButton = "Lua Out #5",	cmd_test_lua5
		commandButton = "Lua Out #6",	cmd_test_lua6
		commandButton = "Lua Out #7",	cmd_test_lua7
		commandButton = "Lua Out #8",	cmd_test_lua8
		commandButton = "Abort test", cmd_test_cancel

	dialog = testInjectors, "Injector Test"
		commandButton = "Injector #1", cmd_test_inj1
		commandButton = "Injector #2", cmd_test_inj2, { cylindersCount >= 2 }
		commandButton = "Injector #3", cmd_test_inj3, { cylindersCount >= 3 }
		commandButton = "Injector #4", cmd_test_inj4, { cylindersCount >= 4 }
		commandButton = "Injector #5", cmd_test_inj5, { cylindersCount >= 5 }
		commandButton = "Injector #6", cmd_test_inj6, { cylindersCount >= 6 }
		commandButton = "Injector #7", cmd_test_inj7, { cylindersCount >= 7 }
		commandButton = "Injector #8", cmd_test_inj8, { cylindersCount >= 8 }
		commandButton = "Injector #9", cmd_test_inj9, { cylindersCount >= 9 }
		commandButton = "Injector #10", cmd_test_inj10, { cylindersCount >= 10 }
		commandButton = "Injector #11", cmd_test_inj11, { cylindersCount >= 11 }
		commandButton = "Injector #12", cmd_test_inj12, { cylindersCount >= 12 }
		commandButton = "Abort test", cmd_test_cancel

	dialog = testTcuSolenoids, "TCU Solenoid Test"
		commandButton = "Solenoid #1", cmd_test_sol1
		commandButton = "Solenoid #2", cmd_test_sol2
		commandButton = "Solenoid #3", cmd_test_sol3
		commandButton = "Solenoid #4", cmd_test_sol4
		commandButton = "Solenoid #5", cmd_test_sol5
		commandButton = "Solenoid #6", cmd_test_sol6
		commandButton = "Abort test", cmd_test_cancel

	dialog = testOther
		field = "Count", benchTestCount
		field = "On Time", benchTestOnTime
		field = "Off Time", benchTestOffTime
		panel = testTcuSolenoids
		commandButton = "Reset firmware settings", cmd_set_engine_type_default

	dialog = injectionSettingsEast, "", yAxis
		panel = testInjectors
		field = ""

	dialog = injectionSettingsWest, "", yAxis
		panel = injectorOutputSettings
		field = ""

	dialog = injectionSettings, "", xAxis
		panel = injectionSettingsWest
		panel = injectionSettingsEast

	dialog = injectorConfig, "", yAxis
		topicHelp = "fuelHelp"
		panel = baseInjection
		field = useInjectorFlowLinearizationTable, useInjectorFlowLinearizationTable
		panel = injChars, { ! useInjectorFlowLinearizationTable}
		panel = fuelParams
		panel = injectorsDeadTime, {isInjectionEnabled}

	dialog = ignitionCylExtra, "Cylinder offsets"
		field = "Offset angle for each cylinder if you have an odd fire"
		field = "engine, like a v-twin or some V6/V10 engines"
		field = "#Positive numbers retard, negative numbers advance"
		field = "Offset cyl 1",							timing_offset_cylinder1
		field = "Offset cyl 2",							timing_offset_cylinder2, {cylindersCount > 1}
		field = "Offset cyl 3",							timing_offset_cylinder3, {cylindersCount > 2}
		field = "Offset cyl 4",							timing_offset_cylinder4, {cylindersCount > 3}
		field = "Offset cyl 5",							timing_offset_cylinder5, {cylindersCount > 4}
		field = "Offset cyl 6",							timing_offset_cylinder6, {cylindersCount > 5}
		field = "Offset cyl 7",							timing_offset_cylinder7, {cylindersCount > 6}
		field = "Offset cyl 8",							timing_offset_cylinder8, {cylindersCount > 7}
		field = "Offset cyl 9",							timing_offset_cylinder9, {cylindersCount > 8}
		field = "Offset cyl 10",							timing_offset_cylinder10, {cylindersCount > 9}
		field = "Offset cyl 11",							timing_offset_cylinder11, {cylindersCount > 10}
		field = "Offset cyl 12",							timing_offset_cylinder12, {cylindersCount > 11}

	dialog = stagedInjectionOutputs, "", yAxis
		field = "Injection Stage 2 Output 1",					injectionPinsStage21, {isInjectionEnabled && enableStagedInjection}
		field = "Injection Stage 2 Output 2",					injectionPinsStage22, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 1}
		field = "Injection Stage 2 Output 3",					injectionPinsStage23, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 2}
		field = "Injection Stage 2 Output 4",					injectionPinsStage24, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 3}
		field = "Injection Stage 2 Output 5 ",					injectionPinsStage25, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 4}
		field = "Injection Stage 2 Output 6 ",					injectionPinsStage26, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 5}
		field = "Injection Stage 2 Output 7 ",					injectionPinsStage27, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 6}
		field = "Injection Stage 2 Output 8 ",					injectionPinsStage28, {isInjectionEnabled && enableStagedInjection && injectionMode != 3 && cylindersCount > 7}
		field = "Injection Stage 2 Output 9 ",					injectionPinsStage29, {isInjectionEnabled && enableStagedInjection && cylindersCount > 8}
		field = "Injection Stage 2 Output 10 ",					injectionPinsStage210, {isInjectionEnabled && enableStagedInjection && cylindersCount > 9}
		field = "Injection Stage 2 Output 11 ",					injectionPinsStage211, {isInjectionEnabled && enableStagedInjection && cylindersCount > 10}
		field = "Injection Stage 2 Output 12 ",					injectionPinsStage212, {isInjectionEnabled && enableStagedInjection && cylindersCount > 11}

	dialog = stagedInjection, "",	yAxis
		field = "Enable", enableStagedInjection, {isInjectionEnabled}
		field = ""
		field = "Secondary injector flow",                      injectorSecondary_flow,                     {isInjectionEnabled && enableStagedInjection}
		field = "Secondary injector flow compensation mode",    secondaryInjectorCompensationMode,         { isInjectionEnabled && enableStagedInjection }
		field = "Secondary injector reference pressure",        secondaryInjectorFuelReferencePressure,    { isInjectionEnabled && enableStagedInjection && secondaryInjectorCompensationMode != 0 }
		field = ""
		panel = injectorsSecondaryDeadTime, {isInjectionEnabled && enableStagedInjection}

	dialog = multisparkDwellParams, "Delay & Dwell"
		field = "Spark duration",						multisparkSparkDuration, {multisparkEnable}
		field = "Subsequent spark dwell",				multisparkDwell, {multisparkEnable}

	dialog = multisparkMain, "Configuration"
		field = "Maximum engine speed",					multisparkMaxRpm, {multisparkEnable}
		field = "Fire sparks for this angle duration"	multisparkMaxSparkingAngle, {multisparkEnable}
		field = "Maximum extra spark count"				multisparkMaxExtraSparkCount, {multisparkEnable}

	dialog = multisparkSettings, "Multispark"
		field = "#WARNING! These settings have the potential to overheat ignition components"
		field = "#and cause other nasty misbehavior.  Use with care, at your own risk!"
		field = "#Not recommended for use on distributor or wasted spark ignition systems."
		field = "Enable multiple sparks",				multisparkEnable
		panel = multisparkMain
		panel = multisparkDwellParams

	dialog = ignAdder1Cfg, "Ignition adder 1 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the base ignition table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in 5.0 degrees of ignition timing added."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", ignBlends1_blendParameter
		field = "Y axis override (set Zero for no override)", ignBlends1_yAxisOverride, {ignBlends1_blendParameter}
		panel = ignAdder1Bias, {ignBlends1_blendParameter}

	dialog = ignAdder2Cfg, "Ignition adder 2 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the base ignition table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in 5.0 degrees of ignition timing added."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", ignBlends2_blendParameter
		field = "Y axis override (set Zero for no override)", ignBlends2_yAxisOverride, {ignBlends2_blendParameter}
		panel = ignAdder2Bias, {ignBlends2_blendParameter}

	dialog = ignAdder3Cfg, "Ignition adder 3 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the base ignition table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in 5.0 degrees of ignition timing added."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", ignBlends3_blendParameter
		field = "Y axis override (set Zero for no override)", ignBlends3_yAxisOverride, {ignBlends3_blendParameter}
		panel = ignAdder3Bias, {ignBlends3_blendParameter}

	dialog = ignAdder4Cfg, "Ignition adder 4 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the base ignition table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in 5.0 degrees of ignition timing added."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", ignBlends4_blendParameter
		field = "Y axis override (set Zero for no override)", ignBlends4_yAxisOverride, {ignBlends4_blendParameter}
		panel = ignAdder4Bias, {ignBlends4_blendParameter}

	dialog = veBlend1Cfg, "VE blend 1 config"
	  topicHelp = "blendUniversalHelp"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the VE table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0% added to the VE. Note that this doesn't add 5% VE,"
		field = "instead, it adds 5% to the current VE value, multiplying VE by 1.05."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", veBlends1_blendParameter
		field = "Y axis override (set Zero for no override)", veBlends1_yAxisOverride, {veBlends1_blendParameter}
		panel = veBlend1Bias, {veBlends1_blendParameter}

	dialog = veBlend2Cfg, "VE blend 2 config"
	  topicHelp = "blendUniversalHelp"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the VE table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0% added to the VE. Note that this doesn't add 5% VE,"
		field = "instead, it adds 5% to the current VE value, multiplying VE by 1.05."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", veBlends2_blendParameter
		field = "Y axis override (set Zero for no override)", veBlends2_yAxisOverride, {veBlends2_blendParameter}
		panel = veBlend2Bias, {veBlends2_blendParameter}

	dialog = veBlend3Cfg, "VE blend 3 config"
	  topicHelp = "blendUniversalHelp"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the VE table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0% added to the VE. Note that this doesn't add 5% VE,"
		field = "instead, it adds 5% to the current VE value, multiplying VE by 1.05."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", veBlends3_blendParameter
		field = "Y axis override (set Zero for no override)", veBlends3_yAxisOverride, {veBlends3_blendParameter}
		panel = veBlend3Bias, {veBlends3_blendParameter}

	dialog = veBlend4Cfg, "VE blend 4 config"
	  topicHelp = "blendUniversalHelp"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the VE table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0% added to the VE. Note that this doesn't add 5% VE,"
		field = "instead, it adds 5% to the current VE value, multiplying VE by 1.05."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", veBlends4_blendParameter
		field = "Y axis override (set Zero for no override)", veBlends4_yAxisOverride, {veBlends4_blendParameter}
		panel = veBlend4Bias, {veBlends4_blendParameter}

	indicatorPanel = isBoostControlledPanel, 1
		indicator = {isBoostControlled}, "No Boost Control", "Boost Control Active"

	dialog = boostOpenBlend1Cfg, "Boost open loop blend 1 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the open loop boost table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to the boost open loop %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		panel = isBoostControlledPanel
		field = "Blend parameter", boostOpenLoopBlends1_blendParameter
		field = "Y axis override (set Zero for no override)", boostOpenLoopBlends1_yAxisOverride, {boostOpenLoopBlends1_blendParameter}
		panel = boostOpenLoopBlend1Bias, {boostOpenLoopBlends1_blendParameter}

	dialog = boostOpenBlend2Cfg, "Boost open loop blend 2 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the open loop boost table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to the boost open loop %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		panel = isBoostControlledPanel
		field = "Blend parameter", boostOpenLoopBlends2_blendParameter
		field = "Y axis override (set Zero for no override)", boostOpenLoopBlends2_yAxisOverride, {boostOpenLoopBlends2_blendParameter}
		panel = boostOpenLoopBlend2Bias, {boostOpenLoopBlends2_blendParameter}

	dialog = boostClosedBlend1Cfg, "Boost closed loop blend 1 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the closed loop boost table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to the boost closed loop %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", boostClosedLoopBlends1_blendParameter
		field = "Y axis override (set Zero for no override)", boostClosedLoopBlends1_yAxisOverride, {boostClosedLoopBlends1_blendParameter}
		panel = boostClosedLoopBlend1Bias, {boostClosedLoopBlends1_blendParameter}

	dialog = boostClosedBlend2Cfg, "Boost closed loop blend 2 config"
		field = "#The bias table controls how much of the blend table"
		field = "#is mixed in to the closed loop boost table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to the boost closed loop %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", boostClosedLoopBlends2_blendParameter
		field = "Y axis override (set Zero for no override)", boostClosedLoopBlends2_yAxisOverride, {boostClosedLoopBlends2_blendParameter}
		panel = boostClosedLoopBlend2Bias, {boostClosedLoopBlends2_blendParameter}

	dialog = targetAfrBlend1Cfg, "Target AFR adder 1 config"
		field = "#The bias table controls how much of the adder table"
		field = "#is mixed in to the target AFR table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to target AFR %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", targetAfrBlends1_blendParameter
		field = "Y axis override (set Zero for no override)", targetAfrBlends1_yAxisOverride, { targetAfrBlends1_blendParameter }
		panel = targetAfrBlend1Bias, { targetAfrBlends1_blendParameter }

	dialog = targetAfrBlend2Cfg, "Target AFR adder 2 config"
		field = "#The bias table controls how much of the adder table"
		field = "#is mixed in to the target AFR table. For example, a value of"
		field = "#+10 in the table, with 50 as the current bias will result"
		field = "#in +5.0 added to target AFR %."
		field = "#The X axis of the bias table is controlled by the selected blend"
		field = "#parameter below."
		field = "Blend parameter", targetAfrBlends2_blendParameter
		field = "Y axis override (set Zero for no override)", targetAfrBlends2_yAxisOverride, { targetAfrBlends2_blendParameter }
		panel = targetAfrBlend2Bias, { targetAfrBlends2_blendParameter }

	dialog = dwellSettings, "", yAxis
		panel = dwellCorrection
		panel = dwellVoltageCorrection

	dialog = auxTempSensor1_thermistor,	"aux1 Thermistor Settings"
		field = "Input channel",			auxTempSensor1_adcChannel

		field = "#Here is three pairs of thermistor temperature and resistance."
		field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C"
		field = ""
		field = "Lowest temperature",					auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 0}
		field = "Resistance @ LT",						auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 0}
		field = ""
		field = "Middle temperature",					auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 0}
		field = "Resistance @ MT",						auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 0}
		field = ""
		field = "Highest temperature",					auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 0}
		field = "Resistance @ HT",						auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 0}

	dialog = auxTempSensor1Gauges
		gauge = rawAuxTemp1Gauge

	dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings", border
		panel = auxTempSensor1_thermistor, West
		panel = auxTempSensor1Gauges, East

	dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings"
		field = "Input channel",						auxTempSensor2_adcChannel

		field = "#Here is three pairs of thermistor temperature and resistance."
		field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C"
		field = ""
		field = "Lowest temperature",					auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 0}
		field = "Resistance @ LT",						auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 0}
		field = ""
		field = "Middle temperature",					auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 0}
		field = "Resistance @ MT",						auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 0}
		field = ""
		field = "Highest temperature",					auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 0}
		field = "Resistance @ HT",						auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 0}

	dialog = oilTempSensor,	"Oil Temp Sensor Settings"
		field = "Input channel",			oilTempSensor_adcChannel
		field = "Pullup resistor",			oilTempSensor_bias_resistor, {oilTempSensor_adcChannel != 0}

		field = "Lowest temperature",		oilTempSensor_tempC_1, {oilTempSensor_adcChannel != 0}
		field = "Resistance @ LT",			oilTempSensor_resistance_1, {oilTempSensor_adcChannel != 0}
		field = ""
		field = "Middle temperature",		oilTempSensor_tempC_2, {oilTempSensor_adcChannel != 0}
		field = "Resistance @ MT",			oilTempSensor_resistance_2, {oilTempSensor_adcChannel != 0}
		field = ""
		field = "Highest temperature",		oilTempSensor_tempC_3, {oilTempSensor_adcChannel != 0}
		field = "Resistance @ HT",			oilTempSensor_resistance_3, {oilTempSensor_adcChannel != 0}

  dialog = flexSensorDialogLeft, ""
		field = "!<html><a href=https://github.com/rusefi/rusefi/wiki/Flex-Fuel>https://github.com/rusefi/rusefi/wiki/Flex-Fuel</a></html>"
		field = "Flex fuel sensor",					flexSensorPin
		field = "Flex Signal",         flexSensorInverted

	dialog = flexGauges
		gauge = flexPercentGauge
		gauge = fuelTempGauge
		gauge = rawFlexFreqGauge

  dialog = flexSensorDialog, "Flex Sensor"
		panel = flexSensorDialogLeft, West
		panel = flexGauges, East

	dialog = fuelTempSensor,	"Fuel Temp Sensor Settings"
		field = "Input channel",			fuelTempSensor_adcChannel
		field = "Pullup resistor",			fuelTempSensor_bias_resistor, {fuelTempSensor_adcChannel != 0}

		field = "Lowest temperature",		fuelTempSensor_tempC_1, {fuelTempSensor_adcChannel != 0}
		field = "Resistance @ LT",			fuelTempSensor_resistance_1, {fuelTempSensor_adcChannel != 0}
		field = ""
		field = "Middle temperature",		fuelTempSensor_tempC_2, {fuelTempSensor_adcChannel != 0}
		field = "Resistance @ MT",			fuelTempSensor_resistance_2, {fuelTempSensor_adcChannel != 0}
		field = ""
		field = "Highest temperature",		fuelTempSensor_tempC_3, {fuelTempSensor_adcChannel != 0}
		field = "Resistance @ HT",			fuelTempSensor_resistance_3, {fuelTempSensor_adcChannel != 0}

	dialog = ambientTempSensor,	"Ambient Temp Sensor Settings"
		field = "!Put this sensor before any turbocharger/supercharger"
		field = "!near the air filter."
		field = "Input channel",			ambientTempSensor_adcChannel
		field = "Pullup resistor",			ambientTempSensor_bias_resistor, {ambientTempSensor_adcChannel != 0}

		field = "Lowest temperature",		ambientTempSensor_tempC_1, {ambientTempSensor_adcChannel != 0}
		field = "Resistance @ LT",			ambientTempSensor_resistance_1, {ambientTempSensor_adcChannel != 0}
		field = ""
		field = "Middle temperature",		ambientTempSensor_tempC_2, {ambientTempSensor_adcChannel != 0}
		field = "Resistance @ MT",			ambientTempSensor_resistance_2, {ambientTempSensor_adcChannel != 0}
		field = ""
		field = "Highest temperature",		ambientTempSensor_tempC_3, {ambientTempSensor_adcChannel != 0}
		field = "Resistance @ HT",			ambientTempSensor_resistance_3, {ambientTempSensor_adcChannel != 0}

	dialog = compressorDischargeTemperature,	"Compressor Discharge Temp Settings"
		field = "!Put this sensor after the turbocharger/supercharger"
		field = "!but before the intercooler."
		field = "Input channel",			compressorDischargeTemperature_adcChannel
		field = "Pullup resistor",			compressorDischargeTemperature_bias_resistor, {compressorDischargeTemperature_adcChannel != 0}

		field = "Lowest temperature",		compressorDischargeTemperature_tempC_1, {compressorDischargeTemperature_adcChannel != 0}
		field = "Resistance @ LT",			compressorDischargeTemperature_resistance_1, {compressorDischargeTemperature_adcChannel != 0}
		field = ""
		field = "Middle temperature",		compressorDischargeTemperature_tempC_2, {compressorDischargeTemperature_adcChannel != 0}
		field = "Resistance @ MT",			compressorDischargeTemperature_resistance_2, {compressorDischargeTemperature_adcChannel != 0}
		field = ""
		field = "Highest temperature",		compressorDischargeTemperature_tempC_3, {compressorDischargeTemperature_adcChannel != 0}
		field = "Resistance @ HT",			compressorDischargeTemperature_resistance_3, {compressorDischargeTemperature_adcChannel != 0}

	dialog = tpsNum1, "Throttle Body #1 Sensor(s)"
		field = "Primary sensor input",			tps1_1AdcChannel
		field = "Primary closed",				tpsMin, 1, {isTps1Primary}
		field = "Primary open",					tpsMax, 1, {isTps1Primary}
		field = "Secondary sensor input",		tps1_2AdcChannel, 1, {isTps1Primary}
		field = "Secondary closed",				tps1SecondaryMin, 1, {isTps1Primary && isTps1Secondary}
		field = "Secondary open",				tps1SecondaryMax, 1, {isTps1Primary && isTps1Secondary}
		commandButton = "Auto Calibrate ETB 1", cmd_etb_auto_calibrate,   { hasIgnitionVoltage && isEtb1Enabled && isTps1Primary && calibrationMode == 0}
		commandButton = "Grab Closed Throttle voltage", cmd_calibrate_tps_closed, {!isEtb1Enabled}
		commandButton = "Grab Fully Opened Throttle voltage ", cmd_calibrate_tps_open, {!isEtb1Enabled}
;dev		commandButton = "Fast Auto Calibrate ETB 1", cmd_etb_auto_calibrate_fast,   { hasIgnitionVoltage && isEtb1Enabled && isTps1Primary && calibrationMode == 0}

	dialog = tpsNum2, "Throttle Body #2 Sensor(s)"
		field = "Primary sensor",				tps2_1AdcChannel
		field = "Primary min",					tps2Min, 1, {isTps2Primary}
		field = "Primary max",					tps2Max, 1, {isTps2Primary}
		field = "Secondary sensor",				tps2_2AdcChannel, 1, {isTps2Primary}
		field = "Secondary min",				tps2SecondaryMin, 1, {isTps2Primary && isTps2Secondary}
		field = "Secondary max",				tps2SecondaryMax, 1, {isTps2Primary && isTps2Secondary}
		commandButton = "Auto Calibrate ETB 2", cmd_etb_auto_calibrate_2, { hasIgnitionVoltage && isEtb2Enabled && isTps2Primary && calibrationMode == 0}
;dev		commandButton = "Fast Auto Calibrate ETB 2", cmd_etb_auto_calibrate_2_fast, { hasIgnitionVoltage && isEtb2Enabled && isTps2Primary && calibrationMode == 0}

	dialog = tpsSent1, "SENT TPS"
		field = "ETB SENT type",					    sentEtbType
		field = "ETB SENT input"						EtbSentInput, 1, {sentEtbType != 0 }
		field = "Closed value",                         customSentTpsMin, 1, {sentEtbType == 3 }
		field = "Open value",                           customSentTpsMax, 1, {sentEtbType == 3 }

	dialog = tpsPpsLimits, "TPS/PPS Limits"
		field = "TPS/PPS minimum valid value",	tpsErrorDetectionTooLow, {isTps1Primary || isTps2Primary || isPpsPrimary}
		field = "TPS/PPS maximum valid value",	tpsErrorDetectionTooHigh, {isTps1Primary || isTps2Primary || isPpsPrimary}
		field = "TPS/PPS Error Detection Threshold",  etbSplit, {isTps1Primary || isTps2Primary || isPpsPrimary}

	dialog = tpsSpecialSensors, "ETB Position Sensors special cases"
		field = "Ford/Toyota redundant TPS mode",	useFordRedundantTps
		field = "Secondary TPS maximum",	tpsSecondaryMaximum, {useFordRedundantTps}

	dialog = tpsSensorLeft
		panel = tpsNum1
		panel = tpsNum2
		panel = tpsSent1, Center, {isEtbEnabled}
		panel = tpsPpsLimits
		panel = tpsSpecialSensors, Center, {isEtbEnabled}

	dialog = tpsGauges
		gauge = rawTps1PrimaryGauge
		gauge = rawTps1SecondaryGauge
		gauge = rawTps2PrimaryGauge
		gauge = rawTps2SecondaryGauge

	dialog = tpsSensor, "", border
		panel = tpsSensorLeft, West
		panel = tpsGauges, East

	dialog = ppsSpecialSensors, "Pedal Position Sensors special cases"
		field = "Ford/Toyota redundant PPS mode", useFordRedundantPps
		field = "Secondary PPS maximum", ppsSecondaryMaximum, {useFordRedundantPps}

	dialog = pedalSensorLeft, "Accelerator pedal"
		field = "Accelerator position primary sensor", throttlePedalPositionAdcChannel
		field = "Up (idle) voltage", throttlePedalUpVoltage, 1, {isPpsPrimary}
		field = "Down (WOT) voltage", throttlePedalWOTVoltage, 1, {isPpsPrimary}
		field = "Accelerator position secondary sensor", throttlePedalPositionSecondAdcChannel
		field = "Up (idle) voltage", throttlePedalSecondaryUpVoltage, 1, {isPpsSecondary}
		field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage, 1, {isPpsSecondary}
		commandButton = "Grab Idle/Up", cmd_calibrate_pedal_up, { hasIgnitionVoltage && isPpsPrimary }
		commandButton = "Grab WOT/Down", cmd_calibrate_pedal_down, { hasIgnitionVoltage && isPpsPrimary }
		field = "Accelerator Exp Average", ppsExpAverageAlpha
		panel = tpsPpsLimits
		panel = ppsSpecialSensors

	dialog = pedalGauges
		gauge = pedalPositionGauge
		gauge = rawPpsPrimaryGauge
		gauge = rawPpsSecondaryGauge

	dialog = pedalSensor, "", border
		panel = pedalSensorLeft, West
		panel = pedalGauges, East

	dialog = wastegatePosConfig, ""
		field = "Input",								wastegatePositionSensor
		field = "Min (fully closed, most boost)",		wastegatePositionClosedVoltage
		field = "Max (fully open, least boost)",		wastegatePositionOpenedVoltage

	dialog = wastegatePosGauges, ""
		gauge = rawWastegatePositionGauge, West
		gauge = wastegatePosGauge, East

	dialog = wastegatePosDialog, "Electronic Wastegate position sensor", border
		panel = wastegatePosConfig, West
		panel = wastegatePosGauges, East

	dialog = idleValvePosConfig, ""
		field = "Input",							    idlePositionChannel
		field = "Min (valve closed, low idle)",			idlePositionMin
		field = "Max (valve open, high idle)",			idlePositionMax

	dialog = idleValvePosGauges, ""
		gauge = rawIdlePositionSensorGauge
		gauge = idlePosSensGauge

	dialog = idleValvePosDialog, "ETB-style Idle valve position sensor", border
		panel = idleValvePosConfig, West
		panel = idleValvePosGauges, East

  dialog = tractionIgnitionSkipDialog, "Traction Ignition Skip"
    field = useHardSkipInTraction,  useHardSkipInTraction
    panel = tractionIgnitionSkipTableTbl

	dialog = mc33Dialog, "Low-Z smart injector control"

		field = "Boost voltage",						mc33_hvolt
		field = "Boost current target",					mc33_i_boost
		field = "Min boost time",						mc33_t_min_boost
		field = "Max boost time (timeout)",				mc33_t_max_boost

		field = "Peak phase current target",			mc33_i_peak
		field = "Peak phase duration",					mc33_t_peak_tot
		field = "Peak phase loop off time",				mc33_t_peak_off
		field = "Peak -> Hold Bypass Time",				mc33_t_bypass

		field = "Hold current target",					mc33_i_hold
		field = "Hold phase loop off time",				mc33_t_hold_off
		field = "Maximum injection duration",			mc33_t_hold_tot

;			Sensor Inputs
	dialog = otherSensorInputs,					"Other Sensor Inputs"
		field = "Clutch Down",							clutchDownPin
		field = "Clutch Down mode",						clutchDownPinMode

		field = "Clutch Up",								clutchUpPin
		field = "Clutch Up mode",						clutchUpPinMode
		field = "Brake Pedal",					    brakePedalPin
		field = "Brake Pedal Mode",					brakePedalPinMode
		field = "Turbo Speed Sensor",						turboSpeedSensorInputPin
		field = "Turbo Speed Multiplier",					turboSpeedSensorMultiplier, { turboSpeedSensorInputPin }
		field = "Throttle inlet pressure sensor",			throttleInletPressureChannel
		field = "Compressor discharge pressure sensor",		compressorDischargePressureChannel

	dialog = fuelLevelGauges
		gauge = rawFuelLevelGauge
		gauge = fuelTankLevelGauge

	dialog = fuelLevelSettings
		field = "Input channel",	fuelLevelSensor
		field = "Low threshold",	fuelLevelLowThresholdVoltage, {fuelLevelSensor != 0}
		field = "High threshold",	fuelLevelHighThresholdVoltage, {fuelLevelSensor != 0}
		field = "Filter Alpha",		fuelLevelAveragingAlpha
		field = "Update period",	fuelLevelUpdatePeriodSec
		panel = fuelLevelCurve

	dialog = fuelLevelDialog, "Fuel Level Sensor", border
		panel = fuelLevelSettings, West
		panel = fuelLevelGauges, East

;
; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to
; configure the features.
;
	dialog = allPinsSensors, "Sensors"
		field = "Throttle pedal Position Channel",		throttlePedalPositionAdcChannel
		field = "Throttle pedal Position #2",			throttlePedalPositionSecondAdcChannel
		field = "Primary input channel",				triggerInputPins1
		field = "Secondary channel",					triggerInputPins2
		field = "Cam Sync/VVT input",					camInputs1
		field = "CLT ADC input",						clt_adcChannel
		field = "IAT ADC input",						iat_adcChannel
		field = "vBatt ADC input",						vbattAdcChannel
		field = "TPS1 ADC input",						tps1_1AdcChannel
		field = "TPS2 ADC input",						tps2_1AdcChannel
		field = "MAF ADC input",						mafAdcChannel
		field = "MAF 2 ADC input",						maf2AdcChannel
		field = "AFR ADC input",						afr_hwChannel
		field = "AFR 2 ADC input",						afr_hwChannel2
		field = "Baro ADC input",						baroSensor_hwChannel
		field = "MAP ADC input",						map_sensor_hwChannel
		field = "Fuel Level input",					fuelLevelSensor
		field = "Vehicle Speed input",				vehicleSpeedSensorInputPin
		field = "Clutch Down input",					clutchDownPin
		field = "Clutch Up input",						clutchUpPin
		field = "Brake pedal input",					brakePedalPin
		field = "A/C Switch",							acSwitch
		field = "Aux Temperature #1",					auxTempSensor1_adcChannel
		field = "Aux Temperature #2",					auxTempSensor2_adcChannel
		field = "Aux Fast Analog",						auxFastSensor1_adcChannel

	dialog = allPinsMC33, "MC33816"
		field = "Chip Select",							mc33816_cs
		field = rstb,									mc33816_rstb
		field = flag0,									mc33816_flag0
		field = mc33816_driven,							mc33816_driven
		field = mc33816spiDevice,						mc33816spiDevice
		field = hpfpValvePin,							hpfpValvePin

	dialog = allPins1_1
		field = "trigger stimulator output #1",			triggerSimulatorPins1
		field = "trigger stimulator output #2",			triggerSimulatorPins2
		field = camSimulatorPin,                    camSimulatorPin
		field = "tle6240_cs",							tle6240_cs
		field = "tle6240 SPI",							tle6240spiDevice

	dialog = allPins1_2
		field = "Tachometer output",					tachOutputPin
		field = "Narrowband O2 heater output",					o2heaterPin
		field = "Idle Solenoid Primary output",	idle_solenoidPin
		field = "Idle Solenoid Secondary output",secondSolenoidPin
		field = "Idle Stepper Dir",						idle_stepperDirectionPin
		field = "Idle Stepper Step",					idle_stepperStepPin
		field = "Idle Stepper Enable",					stepperEnablePin
		field = "Fuel Pump output",						fuelPumpPin
		field = "SD CS Pin",							sdCardCsPin 
;		field = "MIL/Check Engine output",			malfunctionIndicatorPin
		field = "Fan Pin",								fanPin
		field = "A/C Relay",							acRelayPin
		field = "Main Relay Pin",						mainRelayPin
		field = "Starter Relay Pin",					starterRelayDisablePin

	dialog = allPins2_1
		field = "Injection Output 1",						injectionPins1
		field = "Injection Output 2",						injectionPins2
		field = "Injection Output 3",						injectionPins3
		field = "Injection Output 4",						injectionPins4
		field = "Injection Output 5 ",					injectionPins5
		field = "Injection Output 6 ",					injectionPins6
		field = "Injection Output 7 ",					injectionPins7
		field = "Injection Output 8 ",					injectionPins8
		field = "Injection Output 9 ",					injectionPins9
		field = "Injection Output 10 ",					injectionPins10
		field = "Injection Output 11 ",					injectionPins11
		field = "Injection Output 12 ",					injectionPins12
		field = auxSpeedSensorInputPin1,					auxSpeedSensorInputPin1
		field = auxSpeedSensorInputPin2,					auxSpeedSensorInputPin2


	dialog = allPins2_2
		field = "Ignition Output 1",						ignitionPins1
		field = "Ignition Output 2",						ignitionPins2
		field = "Ignition Output 3",						ignitionPins3
		field = "Ignition Output 4",						ignitionPins4
		field = "Ignition Output 5",						ignitionPins5
		field = "Ignition Output 6",						ignitionPins6
		field = "Ignition Output 7",						ignitionPins7
		field = "Ignition Output 8",						ignitionPins8
		field = "Ignition Output 9",						ignitionPins9
		field = "Ignition Output 10",						ignitionPins10
		field = "Ignition Output 11",						ignitionPins11
		field = "Ignition Output 12",						ignitionPins12

	dialog = allPins2_3
		field = "Debug Trigger Sync",					debugTriggerSync
		panel = allPinsMC33

	dialog = allPins1_3
		field = "Aux ADC #1",							auxAnalogInputs1
		field = "Aux ADC #2",							auxAnalogInputs2
		field = "Aux ADC #3",							auxAnalogInputs3
		field = "Aux ADC #4",							auxAnalogInputs4
		field = "Aux ADC #5",							auxAnalogInputs5
		field = "Aux ADC #6",							auxAnalogInputs6
		field = "Aux ADC #7",							auxAnalogInputs7
		field = "Aux ADC #8",							auxAnalogInputs8
		field = "Saab CDM knock",						cdmInputPin
		field = "DRV8860 CS",							drv8860_cs
		field = "DRV8860 CS Mode",						drv8860_csPinMode
		field = "DRV8860 MISO pin",						drv8860_miso
		field = "DRV8860 SPI",							drv8860spiDevice

	dialog = allPins3_1
		panel = allPinsSensors

	dialog = allPins3_2
		field = "VVT solenoid bank 1 intake",		vvtPins1
		field = "VVT solenoid bank 1 exhaust",		vvtPins2
		field = "VVT solenoid bank 2 intake",		vvtPins3
		field = "VVT solenoid bank 2 exhaust",		vvtPins4
		field = "Aux Valve #1",						auxValves1
		field = "Aux Valve #2",						auxValves2
		field = "Start/Stop Button",					startStopButtonPin
		field = "Upshift Pin",							tcuUpshiftButtonPin
		field = "Downshift Pin",						tcuDownshiftButtonPin

	dialog = allPins3_1_and_2, "All IO 3/3", xAxis
		panel = allPins3_1
		panel = allPins3_2

	dialog = allPins1_1_and_2, "", xAxis
		panel = allPins1_1
		panel = allPins1_2

	dialog = allPins1, "All IO 1/3", xAxis
		panel = allPins1_1_and_2
		panel = allPins1_3

	dialog = allPins2_1_and_2, "", xAxis
		panel = allPins2_1
		panel = allPins2_2

	dialog = allPins2, "All IO 2/3", xAxis
		panel = allPins2_1_and_2
		panel = allPins2_3

	dialog = clt_thermistor, "CLT sensor"
		field = "Input channel",						clt_adcChannel

		settingSelector = "Common CLT Sensors"
			settingOption = "GM CLT", clt_tempC_1=-40,clt_resistance_1=100000,clt_tempC_2=40,clt_resistance_2=1459,clt_tempC_3=130,clt_resistance_3=70,useLinearCltSensor=0
			settingOption = "Miata NA", clt_tempC_1=-20,clt_resistance_1=16150,clt_tempC_2=40,clt_resistance_2=1150,clt_tempC_3=80,clt_resistance_3=330,useLinearCltSensor=0
			settingOption = "Miata NB", clt_tempC_1=-10,clt_resistance_1=9000,clt_tempC_2=20,clt_resistance_2=2500,clt_tempC_3=80,clt_resistance_3=320,useLinearCltSensor=0
			settingOption = "Bosch Various", clt_tempC_1=0,clt_resistance_1=5896,clt_tempC_2=50,clt_resistance_2=834,clt_tempC_3=100,clt_resistance_3=187,useLinearCltSensor=0

		field = "#Input three pairs of thermistor temperature and resistance."
		field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C"
		field = ""
		field = "Lowest temperature",					clt_tempC_1, {clt_adcChannel != 0}
		field = "Resistance @ LT",								clt_resistance_1, {clt_adcChannel != 0}
		field = ""
		field = "Middle temperature",					clt_tempC_2, {clt_adcChannel != 0}
		field = "Resistance @ MT",							clt_resistance_2, {clt_adcChannel != 0}
		field = ""
		field = "Highest temperature",					clt_tempC_3, {clt_adcChannel != 0}
		field = "Resistance @ HT",							clt_resistance_3, {clt_adcChannel != 0}
		field = ""
		field = "Linear characteristic",				useLinearCltSensor, {clt_adcChannel != 0}

	dialog = cltGauges
		gauge = CLTGauge
		gauge = rawCltGauge

	dialog = cltSensor, "CLT Sensor", border
		panel = clt_thermistor, West
		panel = cltGauges, East

	dialog = iat_thermistor, "IAT sensor"
		field = "Input channel",						iat_adcChannel

		settingSelector = "Common IAT Sensors", {iat_adcChannel != 0}
			settingOption = "GM IAT", iat_tempC_1=8.9,iat_resistance_1=7000,iat_tempC_2=30.6,iat_resistance_2=1930,iat_tempC_3=63.3,iat_resistance_3=560,useLinearIatSensor=0
			settingOption = "Miata NA/NB", iat_tempC_1=-20,iat_resistance_1=16150,iat_tempC_2=40,iat_resistance_2=1150,iat_tempC_3=80,iat_resistance_3=330,useLinearIatSensor=0
			settingOption = "Miata MSM IAT2", iat_tempC_1=0,iat_resistance_1=112000,iat_tempC_2=40,iat_resistance_2=17000,iat_tempC_3=60,iat_resistance_3=8000,useLinearIatSensor=0
			settingOption = "Bosch Various", iat_tempC_1=-10,iat_resistance_1=9397,iat_tempC_2=30,iat_resistance_2=1707,iat_tempC_3=70,iat_resistance_3=436,useLinearIatSensor=0

		field = "#Input three pairs of thermistor temperature and resistance."
		field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C"
		field = ""
		field = "Lowest temperature",					iat_tempC_1, {iat_adcChannel != 0}
		field = "Resistance @ LT",						iat_resistance_1, {iat_adcChannel != 0}
		field = ""
		field = "Middle temperature",					iat_tempC_2, {iat_adcChannel != 0}
		field = "Resistance @ MT",						iat_resistance_2, {iat_adcChannel != 0}
		field = ""
		field = "Highest temperature",					iat_tempC_3, {iat_adcChannel != 0}
		field = "Resistance @ HT",						iat_resistance_3, {iat_adcChannel != 0}
		field = ""
		field = "Linear characteristic",				useLinearIatSensor, {iat_adcChannel != 0}

	dialog = iatGauges
		gauge = IATGauge
		gauge = rawIatGauge

	dialog = iatSensor, "IAT Sensor", border
		panel = iat_thermistor, West
		panel = iatGauges, East

	dialog = oilp_settings, "Oil Pressure Sensor"
		field = "Oil Pressure input",				    oilPressure_hwChannel
		field = "low voltage",							oilPressure_v1, {oilPressure_hwChannel != 0}
		field = "low pressure",							oilPressure_value1, {oilPressure_hwChannel != 0}
		field = "high voltage",							oilPressure_v2, {oilPressure_hwChannel != 0}
		field = "high pressure",						oilPressure_value2, {oilPressure_hwChannel != 0}

	dialog = oilPressureGauges
		gauge = OilPressGauge
		gauge = rawOilPressureGauge

	dialog = oilPressureSensor, "", border
		panel = oilp_settings, West
		panel = oilPressureGauges, East

	dialog = fuellop_analog_settings, "Sensor scaling"
		field = "low voltage",							lowPressureFuel_v1, {lowPressureFuel_hwChannel != 0}
		field = "low pressure",							lowPressureFuel_value1, {lowPressureFuel_hwChannel != 0}
		field = "high voltage",							lowPressureFuel_v2, {lowPressureFuel_hwChannel != 0}
		field = "high pressure",						lowPressureFuel_value2, {lowPressureFuel_hwChannel != 0}

	dialog = fuelhip_analog_settings, "Sensor scaling"
		field = "low voltage",							highPressureFuel_v1, {highPressureFuel_hwChannel != 0}
		field = "low pressure",							highPressureFuel_value1, {highPressureFuel_hwChannel != 0}
		field = "high voltage",							highPressureFuel_v2, {highPressureFuel_hwChannel != 0}
		field = "high pressure",						highPressureFuel_value2, {highPressureFuel_hwChannel != 0}

	dialog = fuellop_settings, "Fuel Low Pressure Sensor"
		field = "Analog input",			    			lowPressureFuel_hwChannel
		field = "sensor type",							fuelPressureSensorMode, {lowPressureFuel_hwChannel != 0}
		panel = fuellop_analog_settings, {lowPressureFuel_hwChannel != 0}

	dialog = fuelhip_settings, "Fuel High Pressure Sensor"
		field = "Sensor SENT type"						FuelHighPressureSentType
		field = "Sensor SENT input",					FuelHighPressureSentInput, {FuelHighPressureSentType != 0 }
		field = "Analog input",							highPressureFuel_hwChannel, {FuelHighPressureSentType == 0 }
		panel = fuelhip_analog_settings, {FuelHighPressureSentType == 0 && highPressureFuel_hwChannel != 0}

	dialog = fuelp_settings, "Fuel Pressure Sensor"
		panel = fuellop_settings
		panel = fuelhip_settings

	dialog = fuelPressureGauges
		gauge = lowFuelPressureGauge
		gauge = rawLowFuelPressureGauge
		gauge = highFuelPressureGauge
		gauge = rawHighFuelPressureGauge

	dialog = fuelPressureSensor, "", border
		panel = fuelp_settings, West
		panel = fuelPressureGauges, East

    dialog = acPressureSensorSettings, "A/C Pressure Sensor"
		field = "Input",	    acPressure_hwChannel
		field = "Low voltage",	acPressure_v1, {acPressure_hwChannel != 0}
		field = "Low value",	acPressure_value1, {acPressure_hwChannel != 0}
		field = "High voltage",	acPressure_v2, {acPressure_hwChannel != 0}
		field = "High value",	acPressure_value2, {acPressure_hwChannel != 0}

	dialog = acPressureGauges
		gauge = acPressureGauge
		gauge = rawAcPressureGauge

	dialog = acPressureSensor, "", border
		panel = acPressureSensorSettings, West
		panel = acPressureGauges, East

	dialog = auxLinearSensor1, "Aux Linear Sensor #1"
		field = "Input",	    auxLinear1_hwChannel
		field = "Low voltage",	auxLinear1_v1, {auxLinear1_hwChannel != 0}
		field = "Low value",	auxLinear1_value1, {auxLinear1_hwChannel != 0}
		field = "High voltage",	auxLinear1_v2, {auxLinear1_hwChannel != 0}
		field = "High value",	auxLinear1_value2, {auxLinear1_hwChannel != 0}

	dialog = auxLinearSensor2, "Aux Linear Sensor #2"
		field = "Input",	    auxLinear2_hwChannel
		field = "Low voltage",	auxLinear2_v1, {auxLinear2_hwChannel != 0}
		field = "Low value",	auxLinear2_value1, {auxLinear2_hwChannel != 0}
		field = "High voltage",	auxLinear2_v2, {auxLinear2_hwChannel != 0}
		field = "High value",	auxLinear2_value2, {auxLinear2_hwChannel != 0}

	dialog = auxLinearSensor3, "Aux Linear Sensor #3"
		field = "ADC input",	auxLinear3_hwChannel
		field = "Low voltage",	auxLinear3_v1, {auxLinear3_hwChannel != 0}
		field = "Low value",	auxLinear3_value1, {auxLinear3_hwChannel != 0}
		field = "High voltage",	auxLinear3_v2, {auxLinear3_hwChannel != 0}
		field = "High value",	auxLinear3_value2, {auxLinear3_hwChannel != 0}

	dialog = auxLinearSensor4, "Aux Linear Sensor #4"
		field = "ADC input",	auxLinear4_hwChannel
		field = "Low voltage",	auxLinear4_v1, {auxLinear4_hwChannel != 0}
		field = "Low value",	auxLinear4_value1, {auxLinear4_hwChannel != 0}
		field = "High voltage",	auxLinear4_v2, {auxLinear4_hwChannel != 0}
		field = "High value",	auxLinear4_value2, {auxLinear4_hwChannel != 0}

	dialog = auxLinearSensors
		panel = auxLinearSensor1
		panel = auxLinearSensor2
		field = "Aux Speed Input 1",					auxSpeedSensorInputPin1
		field = "Aux Speed Input 2",					auxSpeedSensorInputPin2
		field = "Use Aux Speed Sensors for slip ratio",	useAuxSpeedForSlipRatio
		field = "Use VSS As Second Wheel Speed",		useVssAsSecondWheelSpeed

    dialog = sentInputs, "SENT protocol inputs"
		field = "SENT Input #1",						sentInputPins1

;			Sensors->MAP sensor
	dialog = mapSensorAnalog, "MAP sensor", yAxis
		field = "MAP input",						    map_sensor_hwChannel
		field = "MAP type",								map_sensor_type, { map_sensor_hwChannel != 0 }
		field = "MAP value low point",				map_sensor_lowValue, { map_sensor_hwChannel != 0 && map_sensor_type == 0 }
		field = "MAP voltage low point",				mapLowValueVoltage,  { map_sensor_hwChannel != 0 && map_sensor_type == 0 }
		field = "MAP value high point",						map_sensor_highValue, { map_sensor_hwChannel != 0 && map_sensor_type == 0 }
		field = "MAP voltage high value",					mapHighValueVoltage, { map_sensor_hwChannel != 0 && map_sensor_type == 0 }

	indicatorPanel = mapValidIndicators, 1
		indicator = {isMapValid}, "BAD Map Input", "Good MAP Input", red, black, green, black

	dialog = mapCommon, "MAP common settings"
		field = "Low value threshold",					mapErrorDetectionTooLow
		field = "High value threshold",					mapErrorDetectionTooHigh
		panel = mapValidIndicators
		field = ""
		field = "Measure Map Only In One Cylinder",		measureMapOnlyInOneCylinder
		field = "Cylinder count to sample MAP",					mapMinBufferLength
    field = "MAP sensor ExpAverage dampening", mapExpAverageAlpha

	dialog = mapSettingsLeft, "", yAxis
		panel = mapCommon
		panel = mapSensorAnalog

	dialog = mapGauges
		gauge = MAPGauge
		gauge = rawMapGauge

	dialog = mapSettings, "", border
		panel = mapSettingsLeft, West
		panel = mapGauges, East

	dialog = analogBaroSettings, "Analog Sensor"
		field = "Baro input",						    baroSensor_hwChannel, { baroSensor_hwChannel != 0 || (lps25BaroSensorScl == 0 && lps25BaroSensorSda == 0) }
		field = "Low Value",					baroSensor_lowValue, {baroSensor_hwChannel != 0}
		field = "High Value",					baroSensor_highValue, {baroSensor_hwChannel != 0}
		field = "Type",									baroSensor_type, {baroSensor_hwChannel != 0}

	dialog = digitalBaroSettings, "Digital Sensor"
		field = "LPS2x Baro SCL",						lps25BaroSensorScl, { baroSensor_hwChannel == 0}
		field = "LPS2x Baro SDA",						lps25BaroSensorSda, { baroSensor_hwChannel == 0}

	dialog = baroSettings, "Baro sensor"
	  panel = analogBaroSettings
	  panel = digitalBaroSettings

	dialog = mapCurves, "MAP sampling", yAxis
		field = "Window averaging",				isMapAveragingEnabled
		field = mapExpAverageAlpha,       mapExpAverageAlpha
		panel = map_samplingAngleCurve
		panel = map_samplingWindowCurve

	dialog = mafSettings, "MAF sensor", yAxis
	  field = "!<html><a href=https://github.com/rusefi/rusefi/wiki/MAF>https://github.com/rusefi/rusefi/wiki/MAF</a></html>"
		field = "MAF ADC input",						mafAdcChannel
		field = "MAF 2 ADC input",						maf2AdcChannel
		field = ""
		field = "MAF filter parameter",					mafFilterParameter

;			Sensors->EGO sensor
	dialog = egoSettings_sensor,	"O2 sensor"
		settingSelector = "O2 Type"
			settingOption = "BPSX", afr_v1=0,afr_value1=9,afr_v2=5,afr_value2=19
			settingOption = "Innovate", afr_v1=0,afr_value1=7.35,afr_v2=5,afr_value2=22.39
			settingOption = "14Point7", afr_v1=0,afr_value1=9.996,afr_v2=5,afr_value2=19.992
			settingOption = "PLX", afr_v1=0,afr_value1=10,afr_v2=5,afr_value2=20
			settingOption = "Narrow Band", afr_v1=0.1,afr_value1=15,afr_v2=0.9,afr_value2=14
			settingOption = "AEM", afr_v1=0.5,afr_value1=8.5,afr_v2=4.5,afr_value2=18

		field = "Type",									afr_type
; todo: only use these values for custom!
		field = "low voltage",							afr_v1
		field = "low value",							afr_value1
		field = "high voltage",						afr_v2
		field = "high value",							afr_value2
		field = "Correction",							egoValueShift

	dialog = egoSettings_IO1,	"O2 Sensor 1 I/O"
		field = "Input channel",						afr_hwChannel,{afr_hwChannel != 0 || enableAemXSeries == 0 }
		field = "Narrowband Heater output",				o2heaterPin,  {  o2heaterPin != 0 || enableAemXSeries == 0 }

	dialog = egoSettings_IO2,	"O2 Sensor 2 I/O"
		field = "Input channel",						afr_hwChannel2

	indicatorPanel = uegoCan0Indicators, 1, { enableAemXSeries == 1 && canWbo1_type <= 1 }
		indicator = { wb1faultCode == 1 }, "Communication ok", "Timeout reading", green, black, red, black
		indicator = { !wb1isValid }, "AFR: Valid", "AFR: Invalid", green, black, yellow, black
		indicator = { wb1faultCode != 0 }, "Sensor: Ok", "Sensor: Fail", green, black, red, black

	indicatorPanel = uegoCan1Indicators, 1, { enableAemXSeries == 1 && canWbo2_type <= 1 }
		indicator = { wb2faultCode == 1 }, "Communication ok", "Timeout reading", green, black, red, black
		indicator = { !wb2isValid }, "AFR: Valid", "AFR: Invalid", green, black, yellow, black
		indicator = { wb2faultCode != 0 }, "Sensor: Ok", "Sensor: Fail", green, black, red, black

	indicatorPanel = uegoCan0IndicatorsExt, 1, { enableAemXSeries == 1 && canWbo1_type == 0 }
		indicator = { wb1faultCode == 2 }, "Heating allowed", "Heating prohibited", green, black, yellow, black
		indicator = { wb1faultCode == 3 }, "No heating failure", "Heating failed", green, black, red, black
		indicator = { wb1faultCode == 4 }, "No overheat", "Overheat", green, black, red, black
		indicator = { wb1faultCode == 5 }, "No underheat", "Underheat", green, black, red, black
		indicator = { wb1faultCode == 6 }, "Heater supply ok", "No heater supply", green, black, yellow, black
		indicator = { wb1fwOutdated }, "FW: compatible", "FW: need update", green, black, yellow, black

	indicatorPanel = uegoCan1IndicatorsExt, 1, { enableAemXSeries == 1 && canWbo2_type == 0 }
		indicator = { wb2faultCode == 2 }, "Heating allowed", "Heating prohibited", green, black, yellow, black
		indicator = { wb2faultCode == 3 }, "No heating failure", "Heating failed", green, black, red, black
		indicator = { wb2faultCode == 4 }, "No overheat", "Overheat", green, black, red, black
		indicator = { wb2faultCode == 5 }, "No underheat", "Underheat", green, black, red, black
		indicator = { wb2faultCode == 6 }, "Heater supply ok", "No heater supply", green, black, yellow, black
		indicator = { wb2fwOutdated }, "FW: compatible", "FW: need update", green, black, yellow, black

	indicatorPanel = ignitionTableIndicators, 1
		indicator =			{ isIdling && useSeparateAdvanceForIdle == 1 }, "Using normal ignition table", "Using idle ignition table",  white,  black,  green,  black

	dialog = uegoCan0Gauges
		gauge = afr1Gauge
		gauge = wb1tempC
		gauge = wb1heaterDuty
		gauge = wb1nernstVoltage

	dialog = uegoCan1Gauges
		gauge = afr2Gauge
		gauge = wb2tempC
		gauge = wb2heaterDuty
		gauge = wb2nernstVoltage

	dialog = uegoCan0IndicatorPanel
		panel = uegoCan0Indicators
		panel = uegoCan0IndicatorsExt

	dialog = uegoCan1IndicatorPanel
		panel = uegoCan1Indicators
		panel = uegoCan1IndicatorsExt

	dialog = uegoCan0ConfigPanel
		field = "UEGO type", canWbo1_type
		field = "RusEFI WBO ID", canWbo1_reId, { canWbo1_type == 0 }
		field = "AEM ID", canWbo1_aemId, { canWbo1_type == 1 }

	dialog = uegoCan1ConfigPanel
		field = "UEGO type", canWbo2_type
		field = "RusEFI WBO ID", canWbo2_reId, { canWbo2_type == 0 }
		field = "AEM ID", canWbo2_aemId, { canWbo2_type == 1 }

	dialog = uegoCan0StatusPanel, "CAN UEGO 1", border
		panel = uegoCan0ConfigPanel, North
		panel = uegoCan0Gauges, West
		panel = uegoCan0IndicatorPanel, East

	dialog = uegoCan1StatusPanel, "CAN UEGO 2", border
		panel = uegoCan1ConfigPanel, North
		panel = uegoCan1IndicatorPanel, West
		panel = uegoCan1Gauges, East

	dialog = uegoCan, "CAN O2 sensors"
		field = "Support for AEM or RusEFI CAN UEGO"
		field = "Enable CAN Wideband", enableAemXSeries, { canReadEnabled }
		field = "Wideband CAN bus", widebandOnSecondBus
		field = "Force O2 sensor heating", forceO2Heating
		commandButton = "Update 2023 Firmware", cmd_wideband_firmare_update, { (canWbo1_type == 0 && wb1fwOutdated) || (canWbo2_type == 0 && wb2fwOutdated) }
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""

	dialog = egoSettings, "", xAxis
		panel = uegoCan0StatusPanel, { enableAemXSeries == 1 }
		panel = uegoCan
		panel = uegoCan1StatusPanel, { enableAemXSeries == 1 }

	dialog = analogEgoSettings, "", yAxis
		field = "Disable CAN O2 sensor(s) to enable this settings"
		panel = egoSettings_sensor, {afr_hwChannel != 0 && enableAemXSeries == 0}
		panel = egoSettings_IO1
		panel = egoSettings_IO2, {afr_hwChannel != 0 && enableAemXSeries == 0}
		field = "Smoothing Factor", afrExpAverageAlpha

;			Engine->EGT inputs
	dialog = egtInputsCan, "CAN EGT sensors"
		field = "CAN support EGT1 to EGT6 inputs"
		field = "CAN EGT (AEM X series of RusEFI)", enableAemXSeriesEgt, { canReadEnabled }

	dialog = egtInputsSpi, "SPI EGT sensors"
		field = "If both CAN and SPI EGT sensors are used, please leave two first for CAN"
		field = "MAX31855/MAX31856 SPI",				max31855spiDevice
		field = "CS for EGT1",							max31855_cs1
		field = "CS for EGT2",							max31855_cs2
		field = "CS for EGT3",							max31855_cs3
		field = "CS for EGT4",							max31855_cs4
		field = "CS for EGT5",							max31855_cs5
		field = "CS for EGT6",							max31855_cs6
		field = "CS for EGT7",							max31855_cs7
		field = "CS for EGT8",							max31855_cs8

	dialog = egtInputs, "EGT inputs"
		panel = egtInputsCan
		panel = egtInputsSpi

;			Engine->idle Settings
	dialog = idleSolenoid, "Solenoid"
		field = "Idle Solenoid Primary output",		idle_solenoidPin,  { idle_solenoidPin != 0 ||  !useStepperIdle }
		field = "Double Solenoid Mode",		isDoubleSolenoidIdle
		field = "Idle Solenoid Secondary output",		secondSolenoidPin, { idle_solenoidPin != 0 || (!useStepperIdle && isDoubleSolenoidIdle ) }
		field = "Idle Solenoid output(s) Mode",		idle_solenoidPinMode, !useStepperIdle
		field = "Idle Solenoid Frequency",				idle_solenoidFrequency, !useStepperIdle

	dialog = dcHbridgeHardwareNo1, "H-Bridge Hardware No1"
		field = "No1 Direction #1",						etbIo1_directionPin1
		field = "No1 Direction #2",						etbIo1_directionPin2
		field = "No1 Control",							etbIo1_controlPin
		field = "No1 Disable",							etbIo1_disablePin

	dialog = dcHbridgeHardwareNo2, "H-Bridge Hardware No2"
		field = "No2 Direction #1",						etbIo2_directionPin1
		field = "No2 Direction #2",						etbIo2_directionPin2
		field = "No2 Control",							etbIo2_controlPin
		field = "No2 Disable",							etbIo2_disablePin

	dialog = dcHbridgeHardware, "H-Bridge Hardware"
		field = "Two-wire mode",						etb_use_two_wires

	dialog = dcMotorActuatorHw, "DC motor actuator(s) hardware"
		; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility
		; criteria for the same panel when used in multiple places
		; todo: report bug to TS?
		; another todo: split panel into two panels so that we can enable/disable h-bridge #1 separately from h-bridge #2
		panel = dcHbridgeHardware

	dialog = dcMotorActuatorFunction, "DC motor actuator(s) function"
		field = "H-Bridge #1 function",					etbFunctions1
		field = "H-Bridge #2 function",					etbFunctions2

	dialog = stepperHbridgeHardwareNo1, "H-Bridge Hardware No1"
		field = "No1 Direction #1",						stepperDcIo1_directionPin1
		field = "No1 Direction #2",						stepperDcIo1_directionPin2
		field = "No1 Control",						  stepperDcIo1_controlPin
		field = "No1 Disable",							stepperDcIo1_disablePin

	dialog = stepperHbridgeHardwareNo2, "H-Bridge Hardware No2"
		field = "No2 Direction #1",						stepperDcIo2_directionPin1
		field = "No2 Direction #2",						stepperDcIo2_directionPin2
		field = "No2 Control",						  stepperDcIo2_controlPin
		field = "No2 Disable",							stepperDcIo2_disablePin

	dialog = stepperHbridgeHardware, "Stepper H-Bridge Hardware"
		topicHelp = "stepperHbridgeHardwareHelp"
		field = "Inverted driver pins",					stepperDcInvertedPins
		panel = stepperHbridgeHardwareNo1, { etbFunctions1 == 0 }
		panel = stepperHbridgeHardwareNo2, { etbFunctions2 == 0 }

	dialog = idleStepperHw, "Stepper Controller Hardware"
		topicHelp = "idleStepperHwHelp"
		field = "Idle Stepper Step Pin",				idle_stepperStepPin
		field = "Idle Stepper Dir Pin",					idle_stepperDirectionPin
		field = "Idle Stepper Dir Pin Mode",			stepperDirectionPinMode
		field = "Idle Stepper Enable Pin",				stepperEnablePin
		field = "Idle Stepper Enable Pin Mode",			stepperEnablePinMode

	dialog = stepperDirectDriveHardware, "Stepper Direct-Drive Hardware"
		topicHelp = "stepperDirectDriveHardwareHelp"
		field = "Stepper A+",								stepper_raw_output1
		field = "Stepper A-",								stepper_raw_output2
		field = "Stepper B+",								stepper_raw_output3
		field = "Stepper B-",								stepper_raw_output4

	dialog = idleStepperHwType, ""
		panel = idleStepperHw, { useStepperIdle && !useHbridgesToDriveIdleStepper && !useRawOutputToDriveIdleStepper }
		panel = stepperHbridgeHardware, { useStepperIdle && useHbridgesToDriveIdleStepper && !useRawOutputToDriveIdleStepper }

	dialog = idleStepperGeneral, ""
		field = "Drive stepper with dual H bridges",	useHbridgesToDriveIdleStepper, useStepperIdle
		field = "Drive stepper with PushPull outputs", useRawOutputToDriveIdleStepper, { useStepperIdle && !useHbridgesToDriveIdleStepper }
		field = "Stepper reaction time",				idleStepperReactionTime, useStepperIdle
		field = "Stepper total steps",					idleStepperTotalSteps, useStepperIdle
		field = "Stepper parking extra steps, %",		stepperParkingExtraSteps, useStepperIdle
		field = "Force parking every restart",			stepperForceParkingEveryRestart, useStepperIdle

	dialog = idleStepperMicro, "Micro-Stepping"
		field = "Stepping Mode",						stepperNumMicroSteps, useHbridgesToDriveIdleStepper
		field = "Min. Duty Cycle",						stepperMinDutyCycle, { useHbridgesToDriveIdleStepper && stepperNumMicroSteps > 1 }
		field = "Max. Duty Cycle",						stepperMaxDutyCycle, { useHbridgesToDriveIdleStepper && stepperNumMicroSteps > 1 }

	dialog = idleStepper, "Stepper"
		panel = idleStepperGeneral
		panel = idleStepperHwType
		panel = idleStepperMicro

	dialog = idleHwType, "Idle Valve Hardware", yAxis
		panel = idleSolenoid
		panel = idleStepper

	dialog = idlehw, "", yAxis
		field = "!ECU reboot needed to apply these settings"
		field = "Use Stepper",				useStepperIdle
		field = "Electronic throttle idle range",			etbIdleThrottleRange
		panel = idleHwType

	dialog = idlePidSettings, "Closed Loop Idle"
		field = "P-factor",								idleRpmPid_pFactor
		field = "I-factor",								idleRpmPid_iFactor
		field = "D-factor",								idleRpmPid_dFactor
		field = "Min",									idleRpmPid_minValue
		field = "Max",									idleRpmPid_maxValue
		field = "iTerm Min",							idlerpmpid_iTermMin
		field = "iTerm Max",							idlerpmpid_iTermMax
		field = "PID Extra for low RPM",				pidExtraForLowRpm
		field = "Use IAC PID Multiplier Table",			useIacPidMultTable

	dialog = idleOpenLoop, "Open Loop Idle"
		field = "A/C adder",							acIdleExtraOffset
		field = "A/C RPM target",						acIdleRpmTarget
		field = "Fan #1 adder",							fan1ExtraIdle
		field = "Fan #2 adder",							fan2ExtraIdle

	dialog = idleGating, "Idle Detection Thresholds"
		field = "TPS threshold",	idlePidDeactivationTpsThreshold
		field = "RPM upper limit",	idlePidRpmUpperLimit
		field = "RPM deadzone",	idlePidRpmDeadZone
		field = "Max vehicle speed", maxIdleVss

	dialog = idleExtra, "Extra Idle Features"
		field = "Separate idle ignition table",	useSeparateAdvanceForIdle
		field = "Use idle ignition table while coasting", useIdleAdvanceWhileCoasting, { useSeparateAdvanceForIdle == 1 }
		field = "Separate idle VE table",		useSeparateVeForIdle
		field = "Override Idle VE table load axis", idleVeOverrideMode, { useSeparateVeForIdle == 1 }
		field = "Ramp target on return to idle",	idleReturnTargetRamp, { idleMode == 0 }
		field = "Ramp target duration",	idleReturnTargetRampDuration, { idleMode == 0 && idleReturnTargetRamp }
		field = "Separate idle tables for cranking taper",		useSeparateIdleTablesForCrankingTaper
		field = "Separate coasting idle table",	useIacTableForCoasting
		field = "Dashpot coasting-to-idle Initial idle Adder",	    iacByTpsTaper
		field = "Dashpot coasting-to-idle Hold time", iacByTpsHoldTime
		field = "Dashpot coasting-to-idle Decay time", iacByTpsDecayTime

	dialog = idleSettings, "", yAxis
		field = "Idle control mode",					idleMode, { !modeledFlowIdle }

		field = "! Solenoid idle control is disabled at zero RPM"
		field = "!<html><a href=https://github.com/rusefi/rusefi/wiki/Idle-Control>https://github.com/rusefi/rusefi/wiki/Idle-Control</a></html>"

; gating applies both to open loop and closed loop!
		panel = idleGating
; closed loop mode is an addition on top of open loop, so idleOpenLoop stays open even when closed loop is selected
		panel = idleOpenLoop
		panel = idlePidSettings, { idleMode == 0 || modeledFlowIdle }
		panel = idleExtra

	dialog = idleTimingPidCorrDialog, "", yAxis
		field = ""
		field = "Enable closed loop idle ignition timing",	useIdleTimingPidControl
		field = ""
		field = "#Gain is in degrees advance per rpm away from target"
		field = "#A good starting point is 0.1 = 10 deg per 100 rpm"
		field = "Proportional gain",									idleTimingPid_pFactor, {useIdleTimingPidControl == 1}
		field = "Integral gain",									idleTimingPid_iFactor, {useIdleTimingPidControl == 1}
		field = "Derivative gain",									idleTimingPid_dFactor, {useIdleTimingPidControl == 1}
		field = ""
		field = "Min adjustment (retard)",								idleTimingPid_minValue, {useIdleTimingPidControl == 1}
		field = "Max adjustment (advance)",								idleTimingPid_maxValue, {useIdleTimingPidControl == 1}
		field = ""
		field = "Soft entry time",								idleTimingSoftEntryTime, {useIdleTimingPidControl == 1}
		field = ""

;			Engine->Fan Settings
	dialog = fan1Settings, "Fan 1"
		field = "Output",								fanPin, 1, { uiMode == 0 || uiMode == 1 }
		field = "Output mode",						fanPinMode, { uiMode == 0 || uiMode == 1 }
		field = "On temperature",					fanOnTemperature
		field = "Off temperature",					fanOffTemperature
		field = "Enable with AC",					enableFan1WithAc
		field = "Disable when engine stopped",		disableFan1WhenStopped
		field = "Disable above vehicle speed",    disableFan1AtSpeed
		field = "Idle adder",							fan1ExtraIdle

	dialog = fan2Settings, "Fan 2"
		field = "Output",								fan2Pin
		field = "Output mode",						fan2PinMode
		field = "On temperature",					fan2OnTemperature
		field = "Off temperature",					fan2OffTemperature
		field = "Enable with AC",					enableFan2WithAc
		field = "Disable when engine stopped",		disableFan2WhenStopped
		field = "Disable above vehicle speed",    disableFan2AtSpeed
		field = "Idle adder",							fan2ExtraIdle

	dialog = fanTest, "", xAxis
		commandButton = "Test Fan 1", cmd_test_fan_1
		commandButton = "Test Fan 2", cmd_test_fan_2

	indicatorPanel = fanIndicators, 2
		indicator = { fan1m_state },	"fan 1 off", "fan 1 on", white, black, green, black
		indicator = { fan2m_state }, "fan 2 off", "fan 2 on", white, black, green, black

	dialog = acSettingsWest, "A/C Settings"
		field = "A/C switch",                       acSwitch
		field = "A/C switch mode",                  acSwitchMode
		field = "A/C Relay",                        acRelayPin
		field = "A/C Relay Mode",                   acRelayPinMode
		field = "A/C compressor delay",             acDelay
		field = "Max RPM",                          maxAcRpm
		field = "Max CLT",                          maxAcClt
		field = "Max TPS",                          maxAcTps
		field = "A/C Idle adder",                   acIdleExtraOffset
		field = "A/C Idle RPM",                     acIdleRpmTarget
		field = "RPM low threshold",                acLowRpmLimit
		field = "Pressure Low disable",             minAcPressure
		field = "Pressure High disable",            maxAcPressure
		field = "A/C Pressure Enable Hysteresis",   acPressureEnableHyst

	dialog = acSettings, "", border
		panel = acSettingsWest, West
		panel = ac_controlIndicatorPanel, East

	dialog = fanSetting, "Fan Settings"
		panel = fan1Settings
		panel = fan2Settings
		panel = fanTest
		panel = fanIndicators

	dialog = fuelPumpDialog, "Fuel Pump"
		field = "Output",							fuelPumpPin
		field = "Output mode",					fuelPumpPinMode
		field = "Prime duration",				startUpFuelPumpDuration
		commandButton = "Test Fuel Pump", cmd_test_fuel_pump

;			Controller->Actuator Outputs
	dialog = mainRelayDialog, "Main relay output"
		field = "Output",						mainRelayPin
		field = "Output mode",					mainRelayPinMode
		commandButton = "Test Main Relay", cmd_test_main_relay

	dialog = starterRelayDialog, "Starter Disable"
		field = "Output",						starterRelayDisablePin
		field = "Output mode",					starterRelayDisablePinMode
		commandButton = "Test Starter Disable", cmd_test_starter_disable_relay

	dialog = startStopDialog, "Starter Control"
        field = "Require Foot On Pedal To Crank",        crankingCondition
		field = "Start/Stop Button input",		startStopButtonPin
		field = "Start/Stop Button input mode",				startStopButtonMode
		field = "Start Button",                       startRequestPinInverted
		field = "Starter Control",						starterControlPin
		field = "Start cranking maximum time",			startCrankingDuration, {startStopButtonPin != 0}
		field = "Suppress On Start Up (Ms)",         startButtonSuppressOnStartUpMs, {startStopButtonPin != 0}
		commandButton = "Test Starter Relay", cmd_test_starter_relay

;			Engine->MIL Settings
	dialog = malfunctionDialog,	"Check Engine Settings"
		field = "Output",						malfunctionIndicatorPin
		field = "Output mode",				malfunctionIndicatorPinMode
		field = "Warning Period",									warningPeriod
		commandButton = "Test Check Engine", cmd_test_check_engine_light

	dialog = tachSettings, "Tachometer output"
		field = "Output",									tachOutputPin
		field = "Output mode",							tachOutputPinMode
		field = "Pulse Mode",							tachPulseDurationAsDutyCycle
		field = "Pulse duration",						tachPulseDuractionMs
		field = "Pulse per Rev",						tachPulsePerRev

	dialog = speedoSettings, "Speedometer output"
		field = "Output",			speedometerOutputPin
		field = "Pulse per km",		speedometerPulsePerKm, { speedometerOutputPin }

  dialog = outputsDialogLeft
		panel = mainRelayDialog
		panel = fuelPumpDialog
		panel = tachSettings

    dialog = outputsDialogRight
		panel = startStopDialog
		panel = starterRelayDialog
		panel = speedoSettings
		panel = malfunctionDialog

    dialog = outputsDialog, "Outputs", border
        panel = outputsDialogLeft, West
        panel = fanSetting, Center
        panel = outputsDialogRight, East

	dialog = statusLeds, "Status LEDs"
		field = "Trigger error LED",					triggerErrorPin
		field = "Debug Trigger Sync",					debugTriggerSync

  dialog = knockCylinderMapping, "Select the nearest sensor for each cylinder"
		field = "Cylinder 1",			knockBankCyl1,  {enableSoftwareKnock}
		field = "Cylinder 2",			knockBankCyl2,  {enableSoftwareKnock && cylindersCount >= 2}
		field = "Cylinder 3",			knockBankCyl3,  {enableSoftwareKnock && cylindersCount >= 3}
		field = "Cylinder 4",			knockBankCyl4,  {enableSoftwareKnock && cylindersCount >= 4}
		field = "Cylinder 5",			knockBankCyl5,  {enableSoftwareKnock && cylindersCount >= 5}
		field = "Cylinder 6",			knockBankCyl6,  {enableSoftwareKnock && cylindersCount >= 6}
		field = "Cylinder 7",			knockBankCyl7,  {enableSoftwareKnock && cylindersCount >= 7}
		field = "Cylinder 8",			knockBankCyl8,  {enableSoftwareKnock && cylindersCount >= 8}
		field = "Cylinder 9",			knockBankCyl9,  {enableSoftwareKnock && cylindersCount >= 9}
		field = "Cylinder 10",			knockBankCyl10, {enableSoftwareKnock && cylindersCount >= 10}
		field = "Cylinder 11",			knockBankCyl11, {enableSoftwareKnock && cylindersCount >= 11}
		field = "Cylinder 12",			knockBankCyl12, {enableSoftwareKnock && cylindersCount >= 12}

	dialog = softwareKnockCfg, "Sense"
		field = "Knock sensing",				enableSoftwareKnock
		field = "Cylinder Bore",			cylinderBore, {enableSoftwareKnock}
		field = "Estimated Knock Frequency",knockFrequency, {enableSoftwareKnock}
		field = "Detection mode",   knockDetectionUseDoubleFrequency
		field = "Detection Window Start",knockDetectionWindowStart, {enableSoftwareKnock}
		field = "Sampling Duration",	knockSamplingDuration, {enableSoftwareKnock}
		field = "Enable Knock Spectrogram",	enableKnockSpectrogram, {enableSoftwareKnock}
		field = "Enable Knock Spectrogram Filter",	enableKnockSpectrogramFilter, {enableKnockSpectrogram}
		field = "Knock Spectrum Sensitivity", knockSpectrumSensitivity, {enableKnockSpectrogram}
		panel = knockCylinderMapping

	dialog = softwareKnockResponseCfg, "Response"
		field = knockRetardAggression,		knockRetardAggression
		field = knockRetardReapplyRate,	knockRetardReapplyRate
		field = knockFuelTrimAggression,		knockFuelTrimAggression
		field = knockFuelTrimReapplyRate,	knockFuelTrimReapplyRate
		field = knockFuelTrim, 		knockFuelTrim
		field = knockSuppressMinTps, knockSuppressMinTps

	dialog = softwareKnockLeft, ""
		panel = softwareKnockCfg
		panel = softwareKnockResponseCfg

	dialog = softwareKnock, "Software Knock", border
		panel = softwareKnockLeft, West
		panel = knockThresholdCurve, Center


	dialog = spiBus1, "SPI1 settings"
		field = "Enable",								is_enabled_spi_1
		field = "MOSI",									spi1mosiPin,  {1}, {is_enabled_spi_1 == 1} 
		field = "MOSI mode",							spi1MosiMode, {1}, {is_enabled_spi_1 == 1} 
		field = "MISO",									spi1misoPin,  {1}, {is_enabled_spi_1 == 1} 
		field = "MISO mode",							spi1MisoMode, {1}, {is_enabled_spi_1 == 1} 
		field = "SCK",									spi1sckPin,   {1}, {is_enabled_spi_1 == 1} 
		field = "SCK mode",								spi1SckMode,  {1}, {is_enabled_spi_1 == 1} 

	dialog = spiBus2, "SPI2 settings"
		field = "Enable",								is_enabled_spi_2
		field = "MOSI",									spi2mosiPin,  {1}, {is_enabled_spi_2 == 1}
		field = "MOSI mode",							spi2MosiMode, {1}, {is_enabled_spi_2 == 1}
		field = "MISO",									spi2misoPin,  {1}, {is_enabled_spi_2 == 1}
		field = "MISO mode",							spi2MisoMode, {1}, {is_enabled_spi_2 == 1}
		field = "SCK",									spi2sckPin,   {1}, {is_enabled_spi_2 == 1}
		field = "SCK mode",								spi2SckMode,  {1}, {is_enabled_spi_2 == 1}

	dialog = spiBus3, "SPI3 settings"
		field = "Enable",								is_enabled_spi_3
		field = "MOSI",									spi3mosiPin,  {1}, {is_enabled_spi_3 == 1}
		field = "MOSI mode",							spi3MosiMode, {1}, {is_enabled_spi_3 == 1}
		field = "MISO",									spi3misoPin,  {1}, {is_enabled_spi_3 == 1}
		field = "MISO mode",							spi3MisoMode, {1}, {is_enabled_spi_3 == 1}
		field = "SCK",									spi3sckPin,   {1}, {is_enabled_spi_3 == 1}
		field = "SCK mode",								spi3SckMode,  {1}, {is_enabled_spi_3 == 1}

	dialog = spiBus4, "SPI4 settings"
		field = "Enable",								is_enabled_spi_4

	dialog = spiBus5, "SPI5 settings"
		field = "Enable",								is_enabled_spi_5

	dialog = spiBus6, "SPI6 settings"
		field = "Enable",								is_enabled_spi_6

	dialog = spiBuses, "SPI buses settings"
		field = "!ECU reboot needed to apply these settings"
		panel = spiBus1
		panel = spiBus2
		panel = spiBus3
		panel = spiBus4
		panel = spiBus5
		panel = spiBus6

	dialog = spiDevices, "SPI devices settings"
		field = "Use SPI accelerometer",		useSpiImu

	dialog = stftPartitioning, "Region Configuration"
		field = "Idle region RPM",						stft_maxIdleRegionRpm
		field = "Overrun region load",					stft_maxOverrunLoad
		field = "Power region load",					stft_minPowerLoad

	dialog = stftPartitionSettingsIdle, "Idle Region", xAxis
		field = "Time const",							stft_cellCfgs1_timeConstant
		field = "Max add",								stft_cellCfgs1_maxAdd
		field = "Max remove",							stft_cellCfgs1_maxRemove

	dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis
		field = "Time const",							stft_cellCfgs2_timeConstant
		field = "Max add",								stft_cellCfgs2_maxAdd
		field = "Max remove",							stft_cellCfgs2_maxRemove

	dialog = stftPartitionSettingsPower, "Power Region", xAxis
		field = "Time const",							stft_cellCfgs3_timeConstant
		field = "Max add",								stft_cellCfgs3_maxAdd
		field = "Max remove",							stft_cellCfgs3_maxRemove

	dialog = stftPartitionSettingsMain, "Main Region", xAxis
		field = "Time const",							stft_cellCfgs4_timeConstant
		field = "Max add",								stft_cellCfgs4_maxAdd
		field = "Max remove",							stft_cellCfgs4_maxRemove

	indicatorPanel = fuelClosedLoopIndicatorsPanel
		indicator = { stftCorrectionState != 0 }, { Correction using bitStringValue(stftBinIdxList, stftCorrectionBinIdx) region }, { Not active: bitStringValue(stftStateList, stftCorrectionState) }, green, black, while, black
		indicator = { isTuningNow }, "No tuning happening", "Tuning Detected",  white,  black,  green,  black

	dialog = fuelClosedLoopIndicators, "Status"
		panel = fuelClosedLoopIndicatorsPanel

	dialog = fuelClosedLoopSettings, "Short term fuel trim"
		field = "Short term fuel trim",								fuelClosedLoopCorrectionEnabled
		field = "Settings used for both correction and learning:"
		field = "Minimum CLT",							stft_minClt, { isSTFT }
		field = "Startup delay"							stft_startupDelay, { isSTFT }
		field = "After DFCO delay",						noFuelTrimAfterDfcoTime, { isSTFT }
		field = "Detect Tuning and Suspend",			tuningDetector, { isSTFT }
		field = "Settings used for learning only:"
		field = "Minimum AFR for learning",				stft_minAfr, { isSTFT }
		field = "Maximum AFR for learning",				stft_maxAfr, { isSTFT }
		field = "Adjustment deadband",					stft_deadband, { isSTFT }
		field = "Ignore error magnitude",				stftIgnoreErrorMagnitude, { isSTFT }

	dialog = fuelClosedLoopConfig
		panel = fuelClosedLoopSettings
		panel = stftPartitioning, { isSTFT }
		panel = stftPartitionSettingsIdle, { isSTFT }
		panel = stftPartitionSettingsOverrun, { isSTFT }
		panel = stftPartitionSettingsPower, { isSTFT }
		panel = stftPartitionSettingsMain, { isSTFT }
		panel = fuelClosedLoopIndicators

	indicatorPanel = fuelClosedLoopInputIndicatorsPanelBank1, 2
		; indicator = { stftLearningState1 == 1      },  { bitStringValue(stftStateList, 1     ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 2        },  { bitStringValue(stftStateList, 2       ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 3           },  { bitStringValue(stftStateList, 3          ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 4 },  { bitStringValue(stftStateList, 4) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 5           },  { bitStringValue(stftStateList, 5          ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 6 },  { bitStringValue(stftStateList, 6) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 7          },  { bitStringValue(stftStateList, 7         ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 8      },  { bitStringValue(stftStateList, 8     ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		indicator = { stftLearningState1 == 9       },  { bitStringValue(stftStateList, 9      ) }, { bitStringValue(stftStateList, stftLearningState1) }, green, black, red, black
		; replace individual indicators with following
		; indicator = { stftLearningState1 != 0 },  { Learning region bitStringValue(stftBinIdxList, stftLearningBinIdx) }, { Not learning: bitStringValue(stftStateList, stftLearningState1) }, green, black, while, black

	indicatorPanel = fuelClosedLoopInputIndicatorsPanelBank2, 2
		; indicator = { stftLearningState2 == 1      },  { bitStringValue(stftStateList, 1     ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 2        },  { bitStringValue(stftStateList, 2       ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 3           },  { bitStringValue(stftStateList, 3          ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 4 },  { bitStringValue(stftStateList, 4) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 5           },  { bitStringValue(stftStateList, 5          ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 6 },  { bitStringValue(stftStateList, 6) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 7          },  { bitStringValue(stftStateList, 7         ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 8      },  { bitStringValue(stftStateList, 8     ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		indicator = { stftLearningState2 == 9       },  { bitStringValue(stftStateList, 9      ) }, { bitStringValue(stftStateList, stftLearningState2) }, green, black, red, black
		; replace individual indicators with following
		; indicator = { stftLearningState2 != 0 },  { Learning region bitStringValue(stftBinIdxList, stftLearningBinIdx) }, { Not learning: bitStringValue(stftStateList, stftLearningState2) }, green, black, while, black

	dialog = fuelClosedLoopInputBank1, "Input/Learning state"
		gauge = fuelStftInputError1Gauge
		panel = fuelClosedLoopInputIndicatorsPanelBank1

	dialog = fuelClosedLoopInputBank2, "Input/Learning state"
		gauge = fuelStftInputError2Gauge
		panel = fuelClosedLoopInputIndicatorsPanelBank2

	indicatorPanel = fuelClosedLoopOutputIndicatorsPanel, 2
		; indicator = { stftCorrectionState == 1      },  { bitStringValue(stftStateList, 1     ) }, { bitStringValue(stftStateList, stftCorrectionState) }, green, black, red, black
		indicator = { stftCorrectionState == 2        },  { bitStringValue(stftStateList, 2       ) }, { bitStringValue(stftStateList, stftCorrectionState) }, green, black, red, black
		indicator = { stftCorrectionState == 3           },  { bitStringValue(stftStateList, 3          ) }, { bitStringValue(stftStateList, stftCorrectionState) }, green, black, red, black
		indicator = { stftCorrectionState == 4 },  { bitStringValue(stftStateList, 4) }, { bitStringValue(stftStateList, stftCorrectionState) }, green, black, red, black
		indicator = { stftCorrectionState == 5           },  { bitStringValue(stftStateList, 5          ) }, { bitStringValue(stftStateList, stftCorrectionState) }, green, black, red, black
		; replace individual indicators with following
		; indicator = { stftLearningState1 != 0 },  { Learning region bitStringValue(stftBinIdxList, stftLearningBinIdx) }, { Not learning: bitStringValue(stftStateList, stftLearningState1) }, green, black, while, black

	dialog = fuelClosedLoopOutputBank1, "Output correction"
		gauge = fuelStftCorrection1Gauge
		field = "Correction state:"
		panel = fuelClosedLoopOutputIndicatorsPanel

	dialog = fuelClosedLoopOutputBank2, "Output correction"
		gauge = fuelStftCorrection2Gauge
		field = "Correction state:"
		panel = fuelClosedLoopOutputIndicatorsPanel

	dialog = fuelClosedLoopBank1, "Bank 1"
		panel = fuelClosedLoopInputBank1
		panel = fuelClosedLoopOutputBank1

	dialog = fuelClosedLoopBank2, "Bank 2"
		panel = fuelClosedLoopInputBank2
		panel = fuelClosedLoopOutputBank2

	dialog = fuelClosedLoopDialog, "Short term fuel trim/Closed loop", xAxis
		panel = fuelClosedLoopBank1
		panel = fuelClosedLoopConfig
		panel = fuelClosedLoopBank2

	dialog = fuelLTFCSettings, "Long term fuel trim"
		field = "Gathering Data",						ltft_enabled
		field = "Time const",							ltft_timeConstant, { ltft_enabled }
		field = "Max add",								ltft_maxAdd, { ltft_enabled }
		field = "Max remove",							ltft_maxRemove, { ltft_enabled }
		field = "Learning deadband",					ltft_deadband, { ltft_enabled }
		field = "Apply Correction",					ltft_correctionEnabled

	indicatorPanel = ltftIndicatorsPanel
		indicator = { ltftLearning }, "No gather data", "Gathering data" , while, black, green, black
		indicator = { ltftCorrecting }, "Not correcting", "Correcting" , while, black, green, black

	readoutPanel = ltftValuesReadoutPanel, 1
		readout = fuelLtftCntHitGauge
		readout = fuelLtftCntMissGauge
		readout = fuelLtftCntDeadbandGauge

	dialog = ltftIndicators, "Status"
		panel = ltftIndicatorsPanel
		panel = ltftValuesReadoutPanel

	dialog = ltftButtons, "Commands"
		commandButton = "Reset LTFT trims", cmd_ltft_reset
		commandButton = "Apply LTFT to VE and reset", cmd_ltft_apply_to_ve

	dialog = fuelLTFCConfig
		field = "Short term fuel trims should be enabled and configured"
		panel = fuelLTFCSettings, Center, { isSTFT }
		panel = ltftButtons, { isSTFT }
		panel = ltftIndicators

	dialog = fuelLtftLoopBank1, "Trim bank 1"
		gauge = fuelLtftCorrection1Gauge
		gauge = fuelLtftAccumulatedCorrection1Gauge

	dialog = fuelLtftLoopBank2, "Trim bank 2"
		gauge = fuelLtftCorrection2Gauge
		gauge = fuelLtftAccumulatedCorrection2Gauge

	dialog = fuelLTFCDialog, "Long term fuel trims", xAxis
		panel = fuelLtftLoopBank1
		panel = fuelLTFCConfig
		panel = fuelLtftLoopBank2

	dialog = lambdaProtectionLeft, ""
		field = "Enable lambda protection", lambdaProtectionEnable
		field = "Check above load", lambdaProtectionMinLoad, { lambdaProtectionEnable }
		field = "and above TPS", lambdaProtectionMinTps, { lambdaProtectionEnable }
		field = "and above RPM", lambdaProtectionMinRpm, { lambdaProtectionEnable }
		field = "and after delay", lambdaProtectionTimeout { lambdaProtectionEnable }
		field = "Then cut fuel until:"
		field = "Load less than", lambdaProtectionRestoreLoad, { lambdaProtectionEnable }
		field = "and TPS less than", lambdaProtectionRestoreTps, { lambdaProtectionEnable }
		field = "and RPM less than", lambdaProtectionRestoreRpm, { lambdaProtectionEnable }

	dialog = lambdaProtectionRight, "Lambda Difference Table"
		panel = lambdaMaxDeviationTableTbl

	dialog = lambdaProtection, "Lambda Protection", border
		panel = lambdaProtectionLeft, West
		panel = lambdaProtectionRight, East

	dialog = vvtPidDialog0, "Configuration"
		field = "Activation Delay",						vvtActivationDelayMs
		field = "Do not control below RPM",				vvtControlMinRpm
		field = "Do not control below CLT",				vvtControlMinClt
		field = "VVT solenoid bank 1 intake",					vvtPins1
		field = "VVT solenoid bank 1 exhaust",						vvtPins2
		field = "VVT solenoid bank 2 intake",						vvtPins3
		field = "VVT solenoid bank 2 exhaust",						vvtPins4
		field = "VVT solenoid intake cams control direction", invertVvtControlIntake, { vvtPins1 != 0 || vvtPins3 != 0 }
		field = "VVT solenoid exhaust cams control direction", invertVvtControlExhaust, { vvtPins2 != 0 || vvtPins4 != 0 }

	dialog = vvtPidDialog1, "Intake PID"
		field = "offset",										auxPid1_offset, {vvtPins1 != 0}
		field = "P factor",									auxPid1_pFactor, {vvtPins1 != 0}
		field = "I factor",									auxPid1_iFactor, {vvtPins1 != 0}
		field = "D factor",									auxPid1_dFactor, {vvtPins1 != 0}
		field = "Min",											auxPid1_minValue, {vvtPins1 != 0}
		field = "Max",											auxPid1_maxValue, {vvtPins1 != 0}
		commandButton = "Bench bank 1", cmd_test_vvt0_valve, { engineTurnedRecently == 0 }
		commandButton = "Bench bank 2", cmd_test_vvt2_valve, { engineTurnedRecently == 0 }

	dialog = vvtPidDialog2, "Exhaust PID"
		field = "offset",										auxPid2_offset, {vvtPins2 != 0}
		field = "P factor",									auxPid2_pFactor, {vvtPins2 != 0}
		field = "I factor",									auxPid2_iFactor, {vvtPins2 != 0}
		field = "D factor",									auxPid2_dFactor, {vvtPins2 != 0}
		field = "Min",											auxPid2_minValue, {vvtPins2 != 0}
		field = "Max",											auxPid2_maxValue, {vvtPins2 != 0}
		commandButton = "Bench bank 1", cmd_test_vvt1_valve, { engineTurnedRecently == 0 }
		commandButton = "Bench bank 2", cmd_test_vvt3_valve, { engineTurnedRecently == 0 }

	dialog = vvtPidDialog, "VVT Configuration & PID", border
		panel = vvtPidDialog0,			West
		panel = vvtPidDialog1,  Center
		panel = vvtPidDialog2,	East

	dialog = ignitionInputDialog, "Ignition key input Settings"

;			Engine->Battery & Alternator
	dialog = batteryDialog, "Battery Settings",	yAxis
		field = "vBatt ADC input",						vbattAdcChannel
		field = "Battery Input Divider Coefficient",	vbattDividerCoeff

	dialog = alternator, "Alternator Settings",	yAxis
		field = "Enabled",								isAlternatorControlEnabled
		field = "Control output",						alternatorControlPin, {isAlternatorControlEnabled == 1}
		field = "Control output mode",				    alternatorControlPinMode, {isAlternatorControlEnabled == 1}
		field = "PWM frequency",						alternatorPwmFrequency, {isAlternatorControlEnabled == 1}
		field = "A/C duty adder",                       acRelayAlternatorDutyAdder, {isAlternatorControlEnabled == 1}
		field = "#PID control"
		field = "offset",								alternatorControl_offset, {isAlternatorControlEnabled == 1}
		field = "P factor",								alternatorControl_pFactor, {isAlternatorControlEnabled == 1}
		field = "I factor",								alternatorControl_iFactor, {isAlternatorControlEnabled == 1}
		field = "D factor",								alternatorControl_dFactor, {isAlternatorControlEnabled == 1}
		field = "iTerm min",								alternator_iTermMin, {isAlternatorControlEnabled == 1}
		field = "iTerm max",								alternator_iTermMax, {isAlternatorControlEnabled == 1}
		field = "Min",									alternatorControl_minValue, {isAlternatorControlEnabled == 1}
		field = "Max",									alternatorControl_maxValue, {isAlternatorControlEnabled == 1}
		field = "#% duty = Pterm + Iterm + Dterm + offset%"

	dialog = alternatorSettings,    "Alternator Settings", border
		panel = alternator,							West
		panel = alternatorVoltageTargetTableTbl,	East

	dialog = energySystems, "Battery and Alternator Settings",	yAxis
		panel = alternatorSettings

	dialog = speedSensorAnalog, "Speed sensor"
		field = "Input",				vehicleSpeedSensorInputPin
		field = "Filter parameter",		vssFilterReciprocal, { vehicleSpeedSensorInputPin != 0 }

;
; We prefer quantities that users can actually measure or inspect without math, so we have
; two separate natural settings here without one 'sensor tooth to wheel revolution' ratio
;
		field = "Wheel revolutions per kilometer",	driveWheelRevPerKm
		field = "Speed sensor gear ratio",	vssGearRatio, { vehicleSpeedSensorInputPin != 0 }
		field = "Speed sensor tooth count",	vssToothCount, { vehicleSpeedSensorInputPin != 0 }

	dialog = speedSensorCan, "CAN Vehicle Speed"
		field = "Enable CAN VSS",			enableCanVss, { canReadEnabled }
		field = "CAN VSS type",				canVssNbcType, { enableCanVss }
		field = "CAN VSS scaling",			canVssScaling, { canReadEnabled }

	dialog = speedSensorLeft, "", yAxis
		panel = speedSensorAnalog, { enableCanVss == 0 }
		panel = speedSensorCan

	dialog = gearDetection, "Gear Detection"
		field = "Wheel revolutions per kilometer",	driveWheelRevPerKm
		field = "Final drive ratio",		finalGearRatio
		field = ""
		field = "Forward gear count", totalGearsCount
		field = ""
		field = "1st gear", gearRatio1, { totalGearsCount >= 1 }
		field = "2nd gear", gearRatio2, { totalGearsCount >= 2 }
		field = "3rd gear", gearRatio3, { totalGearsCount >= 3 }
		field = "4th gear", gearRatio4, { totalGearsCount >= 4 }
		field = "5th gear", gearRatio5, { totalGearsCount >= 5 }
		field = "6th gear", gearRatio6, { totalGearsCount >= 6 }
		field = "7th gear", gearRatio7, { totalGearsCount >= 7 }
		field = "8th gear", gearRatio8, { totalGearsCount >= 8 }

	dialog = speedSensor, "Speed sensor", xAxis
		panel = speedSensorLeft
		gauge = VSSGauge
		panel = gearDetection

;			Engine->Other inputs
	dialog = analogInputSettings, "Analog Input Settings"
		field = "!ECU reboot needed to apply these settings"
		field = "Grab baro value from MAP",		useFixedBaroCorrFromMap


;			Board->Connection
	dialog = tsPort, "Calibration Secondary Serial"
		field = "tunerStudioSerialSpeed",				tunerStudioSerialSpeed
		field = "TX pin",										binarySerialTxPin
		field = "RX pin",										binarySerialRxPin

	dialog = canHw1, "Primary CAN"
		field = "Verbose Can",  verboseCan
		field = "Bitrate",		canBaudRate
		field = "Allow OpenBLT",	canOpenBLT

	dialog = canHw2, "Secondary CAN"
		field = "Verbose Can2", verboseCan2
		field = "Bitrate",		can2BaudRate
		field = "Allow OpenBLT",	can2OpenBLT

	dialog = canBus, "CAN Bus"
		field = "CAN dash type",						canNbcType
		field = "Inertia Measurement Unit",				imuType
		field = "CAN read enabled",						canReadEnabled
		field = "CAN write enabled",					canWriteEnabled
		field = "Enable rusEFI CAN broadcast",			enableVerboseCanTx
		field = "rusEFI CAN data bus",	canBroadcastUseChannelTwo, { enableVerboseCanTx }
		field = "rusEFI CAN data base address",			verboseCanBaseAddress, { enableVerboseCanTx }
		field = "rusEFI CAN data address type",			rusefiVerbose29b, { enableVerboseCanTx }
		field = "rusEFI CAN data period",				canSleepPeriodMs, { enableVerboseCanTx }
		field = "Enable board state broadcast",			enableExtendedCanBroadcast

	dialog = canBus2, "Secondary CAN Bus"

	dialog = canBusMain, "CAN Bus Communication", yAxis
		panel = canBus

		panel = canHw1
		panel = canHw2	

	dialog = sdCardHW, "SD Card Interface"
		field = "SD Card Logging",						isSdCardEnabled
		field = "CS Pin",								sdCardCsPin, { isSdCardEnabled }			
		field = "SPI",									sdCardSpiDevice, { isSdCardEnabled }		

	indicatorPanel = sdPresentIndicators, 1, { isSdCardEnabled }
		indicator = { sd_present },	 "No SD card", "SD card present", white, black, green, black

	indicatorPanel = sdCardActivityIndicators, 2, { isSdCardEnabled }
		indicator = { sd_active_wr }, "SD WR", "SD WR", white, black, green, black
		indicator = { sd_active_rd }, "SD RD", "SD RD", white, black, green, black

	dialog = sdCardLogging, "SD Card Logging"
		field = "#rusEFI logs to SD when powered without USB connected"
		field = "#and USB not connected for 15 seconds"
		field = "#OR when Always start in Logging mode is enabled"
		field = "#rusEFI connects SD to your PC when powered by USB"
		field = "Always start in Logging mode",			alwaysWriteSdCard, { isSdCardEnabled }
		field = "SD logger rate",						sdCardLogFrequency, { isSdCardEnabled }
		field = "SD logger mode",						sdTriggerLog, { isSdCardEnabled }

	dialog = sdCardCommands, "SD commands"
		commandButton = "Mount to PC",					cmd_mount_pc
		commandButton = "Mount to ECU",					cmd_mount_ecu
		commandButton = "Unmount",						cmd_unmount
		commandButton = "Format",						cmd_format

	indicatorPanel = sdCardStateIndicators, 2, { isSdCardEnabled }
		indicator = { sd_logging_internal }, "No SD logging", "SD logging", white, black, green, black
		indicator = { sd_msd }, "No SD USB", "SD USB",  white,  black,  green,  black
		indicator =	{ sd_formating }, "No SD formating", "SD formating", white, black, green, black
		indicator = { sd_error }, "No SD card error", "SD error", white, black, red, black

	readoutPanel = sdCardErrorPanel
		readout = sd_error, "FRESULT", "", 0, 20, 0, 0, 1, 1, 0, 0

	indicatorPanel = sdCardErrorReportIndicators, 1, { isSdCardEnabled }
		indicator = { hasFaultReportFile }, "No error reports", "Error report on SD", white, black, red, black

	dialog = sdReportCommands, "Fail reports"
		field = "Executed only when SD card is mounted to ECU"
		commandButton = "Remove all fail reports",		cmd_delete_reports
		panel = sdCardErrorReportIndicators

	dialog = sdCard, "SD Card"
		panel = sdCardHW
		panel = sdPresentIndicators
		panel = sdCardActivityIndicators
		panel = sdCardLogging
		panel = sdCardStateIndicators
		panel = sdCardErrorPanel
		panel = sdCardCommands
		panel = sdReportCommands

	dialog = tle8888Dialog, "TLE8888", yAxis
		field = "Trigger Input Mode",									tle8888mode
		field = "useTLE8888 cranking reset hack",		useTLE8888_cranking_hack
		field = "useTLE8888 stepper",					useTLE8888_stepper
		commandButton = "Reinitialize",					cmd_tle8888_init

	dialog = l9779Dialog, "L9779", yAxis

	dialog = connection, "",	yAxis
		panel = tsPort							
		field = "uartConsoleSerialSpeed",				uartConsoleSerialSpeed
		field = enableKline, enableKline

	dialog = monitoringSettings, "rusEFI Console Settings"
		field = "Engine Sniffer Threshold",			engineSnifferRpmThreshold

	dialog = fuelStrategyPanel, "Fuel"
		field = "!https://rusefi.com/s/fuel"
		field = "Fuel strategy",						fuelAlgorithm

	dialog = dutyCycleLimiting, "Injector Duty Cycle Limiter"
		field = "Instantaneous injector duty cycle limit",	maxInjectorDutyInstant, {isInjectionEnabled}
		field = "Sustained injector duty cycle limit",	maxInjectorDutySustained, {isInjectionEnabled}
		field = "Sustained injector duty cycle delay",	maxInjectorDutySustainedTimeout, {isInjectionEnabled}

	dialog = limitsSettings, "Limits"
		field = "Cut fuel on RPM limit",				cutFuelOnHardLimit
		field = "Cut spark on RPM limit",				cutSparkOnHardLimit
		field = "Use Engine Temperature RPM limit curve",		useCltBasedRpmLimit, { cutFuelOnHardLimit || cutSparkOnHardLimit }
		field = "RPM hard limit",						rpmHardLimit, { (cutFuelOnHardLimit || cutSparkOnHardLimit) &&  !useCltBasedRpmLimit }
		field = "RPM limit hysteresis",					rpmHardLimitHyst
		field = "Boost cut pressure",					boostCutPressure
		field = "Boost cut pressure hysteresis",		boostCutPressureHyst
		panel = dutyCycleLimiting

	dialog = softRpmLimitSettings, "Soft RPM Limit"
		field = "Window size",							rpmSoftLimitWindowSize
		field = "Timing retard",						rpmSoftLimitTimingRetard, { cutSparkOnHardLimit }
		field = "Fuel added",							rpmSoftLimitFuelAdded, { cutFuelOnHardLimit }

	dialog = lowOilPressureProtection, "Low oil pressure protection"
		field = "Enable low oil pressure protection",	enableOilPressureProtect
		field = "Minimum oil pressure after start",		minOilPressureAfterStart, { enableOilPressureProtect }
		field = "Low oil pressure protection timeout", 	minimumOilPressureTimeout, { enableOilPressureProtect }
		panel = minimumOilPressure

	dialog = highOilPressureProtection, "High oil pressure protection"
		field = "High oil pressure protection timeout", maxOilPressureTimeout
		panel = maximumOilPressure

	dialog = etbLimits, "Electronic Throttle Limiting"
		field = "Smoothly close the throttle to limit RPM."
		field = "Soft limiter start",				etbRevLimitStart
		field = "Soft limiter range",				etbRevLimitRange

	dialog = limitsAndFallbackLeft
		panel = limitsSettings
		panel = softRpmLimitSettings, West, { (cutFuelOnHardLimit || cutSparkOnHardLimit) &&  !useCltBasedRpmLimit }
		panel = etbLimits

    dialog = limitsAndFallbackCenter, "Engine Temperature RPM Limit"
        panel = cltRevLimitCurve

	dialog = limitsAndFallback, "Limits and fallbacks", border
	    panel = limitsAndFallbackLeft, West
   		panel = limitsAndFallbackCenter, Center, { (cutFuelOnHardLimit || cutSparkOnHardLimit) && useCltBasedRpmLimit }

;			Engine->Base Engine Settings
	dialog = engineChars, "Vehicle Information"
		topicHelp = "baseHelp"
		field = "Number of cylinders",					cylindersCount
		field = "Displacement",						displacement
		field = "Firing order",							firingOrder
		panel = engineMetadata, {1}, { uiMode == 0 || uiMode == 1 }
		panel = fuelStrategyPanel
    field = "Tuning View",                                 uiMode

    dialog = dynoCharsBase, "Base Settings"
    	  field =  "Car mass", dynoCarCarMassKg
    	  field =  "Cargo mass", dynoCarCargoMassKg
    	  field =  "Drag coefficient", dynoCarCoeffOfDrag
    	  field =  "Frontal car area", dynoCarFrontalAreaM2

    dialog = dynoCharsSaeCorrections, "Sae Corrections"
    	  field =  "Air temperature", dynoSaeTemperatureC
    	  field =  "Relative air humidity", dynoSaeRelativeHumidity
    	  field =  "Atmospheric pressure", dynoSaeBaro

    dialog = dynoCharsWheels, "Wheels"
    	  field =  "Disc diameter", dynoCarWheelDiaInch
    	  field =  "Tyre height", dynoCarWheelAspectRatio
    	  field =  "Tire width", dynoCarWheelTireWidthMm

    dialog = dynoCharsGears, "Gears"
    	  field =  "Primary reduction", dynoCarGearPrimaryReduction
    	  field =  "Gear ratio", dynoCarGearRatio
    	  field =  "Final drive", dynoCarGearFinalDrive

	dialog = dynoChars, "Virtual Dyno Settings"
	  field =  "Rpm trim window", dynoRpmStep
	  panel =  dynoCharsBase
	  panel =  dynoCharsSaeCorrections
	  panel =  dynoCharsWheels
	  panel =  dynoCharsGears

	dialog = crankingFuel, "Fuel"
		field = "Injection mode",						crankingInjectionMode
		field = "Fuel Source For Cranking",				useRunningMathForCranking

	dialog = crankingIgnition, "Ignition"
		field = "Timing Advance mode",	useSeparateAdvanceForCranking
		field = "Fixed cranking advance",	crankingTimingAngle, {useSeparateAdvanceForCranking == 0}
		field = "Fixed Cranking Dwell",						ignitionDwellForCrankingMs

	dialog = primingFuelPulsePanel, "Priming fuel pulse"

		field = "Priming delay",	primingDelay
		panel = primingPulse

	dialog = crankingAdv, "Advanced"
		field = "Flood clear",				isCylinderCleanupEnabled
		field = "Faster engine spin-up",			isFasterEngineSpinUpEnabled
		field = "Use Advance Corrections for cranking",	useAdvanceCorrectionsForCranking
		field = "Separate Flex Fuel cranking table",			flexCranking, { flexSensorPin != 0 }

;			Cranking->Cranking Settings
	dialog = crankingDialog, "Cranking Settings"
		field = "Cranking RPM limit",						cranking_rpm
		panel = crankingFuel
		panel = crankingIgnition
		panel = crankingAdv

	dialog = TpsAccelPanel, "TPS"
		field = "Accel Enrichment Mode",        accelEnrichmentMode
		field = "Detect Tuning and Suspend",	tuningDetector
		field = "" ; spacer
		field = "Length",						tpsAccelLookback,							{ accelEnrichmentMode != 2 }
		field = "Inhibit closed loop fuel after accel", noFuelTrimAfterAccelTime,			{ accelEnrichmentMode != 2 }
		field = "Accel Activation Threshold",				tpsAccelEnrichmentThreshold,	{ accelEnrichmentMode != 2 }
		field = "Decel Threshold",				tpsDecelEnleanmentThreshold,				{ accelEnrichmentMode != 2 }
;		field = "Decel Multiplier",				tpsDecelEnleanmentMultiplier
		field = "#Accelerator Pump model:"
		field = "Fraction Period",				tpsAccelFractionPeriod,									{ accelEnrichmentMode != 2 }

	dialog = WallWettingAccelPanel, "Wall Wetting"
		field = "Wall fueling model type",				complexWallModel
		field = "evaporation time constant / tau",		wwaeTau, { complexWallModel == 0 }
		field = "added to wall coef / beta",			wwaeBeta, { complexWallModel == 0 }

	indicatorPanel = AccelEnfichIndicatorsPanel
		indicator = { isTuningNow }, "No tuning happening", "Tuning Detected",  white,  black,  green,  black

;			Tuning->AccelEnrichment
	dialog = AccelEnrich,	"Accel/Decel Enrichment"
		panel = TpsAccelPanel
		panel = WallWettingAccelPanel
		panel = AccelEnfichIndicatorsPanel

	dialog = wwTauCurves, "Wall wetting AE evaporation time"
		field = "#Set a base evaporation time based on coolant temperature, and a multiplier based on MAP."
		panel = wwTauCltCurve
		panel = wwTauMapCurve

	dialog = wwBetaCurves, "Wall wetting AE impact fraction"
		field = "#Set a base impact fraction based on coolant temperature, and a multiplier based on MAP."
		panel = wwBetaCltCurve
		panel = wwBetaMapCurve

	dialog = auxValvesIO, "Outputs"
		field = "aux valve #1",						auxValves1
		field = "aux valve #2",						auxValves2

	dialog = scriptSetting, "Setting"
		field = "!Use rusEFI console for Lua script editing"
		field = "Set number is not associated with the output number."
		field = "Set number, only the cell number with some numbers."
		field = "Name #1",								scriptSettingName1
		field = "Setting #1",								scriptSetting1
		field = "Name #2",								scriptSettingName2
		field = "Setting #2",								scriptSetting2
		field = "Name #3",								scriptSettingName3
		field = "Setting #3",								scriptSetting3
		field = "Name #4",								scriptSettingName4
		field = "Setting #4",								scriptSetting4
		field = "Name #5",								scriptSettingName5
		field = "Setting #5",								scriptSetting5
		field = "Name #6",								scriptSettingName6
		field = "Setting #6",								scriptSetting6

	dialog = scriptSettingDialog, "Script Settings", border
		panel = scriptSetting,	East

	dialog = luaDigitalInputsLeftDialog
		field = "!Read these with getAuxDigital(0) etc"
		field = "Digital #1",							luaDigitalInputPins1
		field = "Digital #2",							luaDigitalInputPins2
		field = "Digital #3",							luaDigitalInputPins3
		field = "Digital #4",							luaDigitalInputPins4
		field = "Digital #5",							luaDigitalInputPins5
		field = "Digital #6",							luaDigitalInputPins6
		field = "Digital #7",							luaDigitalInputPins7
		field = "Digital #8",							luaDigitalInputPins8

	dialog = luaDigitalInputsRightDialog
		field = "Mode #1",							luaDigitalInputPinModes1
		field = "Mode #2",							luaDigitalInputPinModes2
		field = "Mode #3",							luaDigitalInputPinModes3
		field = "Mode #4",							luaDigitalInputPinModes4
		field = "Mode #5",							luaDigitalInputPinModes5
		field = "Mode #6",							luaDigitalInputPinModes6
		field = "Mode #7",							luaDigitalInputPinModes7
		field = "Mode #8",							luaDigitalInputPinModes8

	dialog = luaDigitalInputsDialog, "Lua Digital Aux Inputs", border
		panel = luaDigitalInputsLeftDialog,	West
		panel = luaDigitalInputsRightDialog,	East

	dialog = auxInputsDialog, "Lua Analog Inputs"
		field = "ADC #1",								auxAnalogInputs1
		field = "ADC #2",								auxAnalogInputs2
		field = "ADC #3",								auxAnalogInputs3
		field = "ADC #4",								auxAnalogInputs4
		field = "ADC #5",								auxAnalogInputs5
		field = "ADC #6",								auxAnalogInputs6
		field = "ADC #7",								auxAnalogInputs7
		field = "ADC #8",								auxAnalogInputs8

	dialog = luaOutputs, "Lua Outputs"
		field = "!Use rusEFI console for Lua script editing"
		field = "#Call startPwm to initialize, then call"
		field = "#setPwmDuty and setPwmFreq to vary duty/freq"
		field = "#See rusefi.com/s/lua for more info"
		field = "output #0",							luaOutputPins1
		field = "output #1",							luaOutputPins2
		field = "output #2",							luaOutputPins3
		field = "output #3",							luaOutputPins4
		field = "output #4",							luaOutputPins5
		field = "output #5",							luaOutputPins6
		field = "output #6",							luaOutputPins7
		field = "output #7",							luaOutputPins8

	dialog = transmissionPanel
		field = "TCU Enabled"		tcuEnabled
		field = "Gear Controller" gearControllerMode, { tcuEnabled }
		field = "Transmission Controller" transmissionControllerMode, { tcuEnabled }

	dialog = shiftSolenoidPanel, "Shift Solenoids"
		field = "Solenoid 1 output"	tcu_solenoid1, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 1 output Mode"	tcu_solenoid_mode1, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 2 output"	tcu_solenoid2, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 2 output Mode"	tcu_solenoid_mode2, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 3 output"	tcu_solenoid3, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 3 output Mode"	tcu_solenoid_mode3, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 4 output"	tcu_solenoid4, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 4 output Mode"	tcu_solenoid_mode4, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 5 output"	tcu_solenoid5, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 5 output Mode"	tcu_solenoid_mode5, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 6 output"	tcu_solenoid6, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Solenoid 6 output Mode"	tcu_solenoid_mode6, { tcuEnabled && (transmissionControllerMode == 1 || transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "3-2 Solenoid output" tcu_32_solenoid_pin, { tcuEnabled && (transmissionControllerMode == 3) }
		field = "3-2 Solenoid output mode" tcu_32_solenoid_pin_mode, { tcuEnabled && (transmissionControllerMode == 3) }
		field = "3-2 Solenoid Frequency" tcu_32_solenoid_freq, { tcuEnabled && (transmissionControllerMode == 3) }

	dialog = otherSolenoidPanel, "Other Solenoids"
		field = "TCC On/Off Solenoid Pin" tcu_tcc_onoff_solenoid, { tcuEnabled && (transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "TCC On/Off Solenoid Pin Mode" tcu_tcc_onoff_solenoid_mode, { tcuEnabled && (transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "TCC PWM Solenoid Pin" tcu_tcc_pwm_solenoid, { tcuEnabled && (transmissionControllerMode == 3) }
		field = "TCC PWM Solenoid Pin Mode" tcu_tcc_pwm_solenoid_mode, { tcuEnabled && (transmissionControllerMode == 3) }
		field = "TCC PWM Solenoid Frequency" tcu_tcc_pwm_solenoid_freq, { tcuEnabled && (transmissionControllerMode == 3) }
		field = "Pressure Control Solenoid Pin" tcu_pc_solenoid_pin, { tcuEnabled && (transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Pressure Control Solenoid Pin Mode" tcu_pc_solenoid_pin_mode, { tcuEnabled && (transmissionControllerMode == 2 || transmissionControllerMode == 3) }
		field = "Pressure Control Solenoid Frequency" tcu_pc_solenoid_freq, { tcuEnabled && (transmissionControllerMode == 2 || transmissionControllerMode == 3) }

	dialog = shiftSettingsPanel, "Shift Settings"
		field = "Assumed Shift Time" tcu_shiftTime, { tcuEnabled }


	dialog = buttonShiftInputPanel, "Switch/Button Shift"
		field = "Upshift Pin"		tcuUpshiftButtonPin, { tcuEnabled && gearControllerMode == 1 }
		field = "Upshift Pin Mode"	tcuUpshiftButtonPinMode, { tcuEnabled && gearControllerMode == 1 }
		field = "Downshift Pin"		tcuDownshiftButtonPin, { tcuEnabled && gearControllerMode == 1 }
		field = "Downshift Pin Mode"	tcuDownshiftButtonPinMode, { tcuEnabled && gearControllerMode == 1 }

	dialog = inputSpeedSensorPanel, "Input Speed Sensor"
		field = "Input Pin", tcuInputSpeedSensorPin
		field = "Filter parameter",		issFilterReciprocal, { tcuInputSpeedSensorPin != 0 }
		field = "Tooth Count", tcuInputSpeedSensorTeeth

dialog = rangeMatrixInputPanel, "Range Selector Inputs"
		field = "Analog Bias Resistor", tcu_rangeSensorBiasResistor, { tcuEnabled }
		field = "Pulldown?", tcu_rangeSensorPulldown, { tcuEnabled }
		field = "Analog Pin 1", tcu_rangeAnalogInput1, { tcuEnabled && tcu_rangeInput1 == 0 }
		field = "Digital Pin 1", tcu_rangeInput1, { tcuEnabled && tcu_rangeAnalogInput1 == 0 }
		field = "Digital Pin 1 Mode", tcu_rangeInputMode1, { tcuEnabled && tcu_rangeInput1 != 0 && tcu_rangeAnalogInput1 == 0 }
		field = "Analog Pin 2", tcu_rangeAnalogInput2, { tcuEnabled && tcu_rangeInput2 == 0 }
		field = "Digital Pin 2", tcu_rangeInput2, { tcuEnabled && tcu_rangeAnalogInput2 == 0 }
		field = "Digital Pin 2 Mode", tcu_rangeInputMode2, { tcuEnabled && tcu_rangeInput2 != 0 && tcu_rangeAnalogInput2 == 0 }
		field = "Analog Pin 3", tcu_rangeAnalogInput3, { tcuEnabled && tcu_rangeInput3 == 0 }
		field = "Digital Pin 3", tcu_rangeInput3, { tcuEnabled && tcu_rangeAnalogInput3 == 0 }
		field = "Digital Pin 3 Mode", tcu_rangeInputMode3, { tcuEnabled && tcu_rangeInput3 != 0 && tcu_rangeAnalogInput3 == 0 }
		field = "Analog Pin 4", tcu_rangeAnalogInput4, { tcuEnabled && tcu_rangeInput4 == 0 }
		field = "Digital Pin 4", tcu_rangeInput4, { tcuEnabled && tcu_rangeAnalogInput4 == 0 }
		field = "Digital Pin 4 Mode", tcu_rangeInputMode4, { tcuEnabled && tcu_rangeInput4 != 0 && tcu_rangeAnalogInput4 == 0 }

dialog = tcuControls, "Transmission Settings"
		panel = transmissionPanel
		panel = shiftSolenoidPanel
		panel = otherSolenoidPanel
		panel = shiftSettingsPanel

	dialog = gearControls, "Gear Selection Settings"
		panel = buttonShiftInputPanel
		panel = rangeMatrixInputPanel

	dialog = inputSpeedSensor, "Input Speed Sensor"
		panel = inputSpeedSensorPanel

	dialog = shiftSpeedDialog, "Line Pressure Per Gear Steady State"
		panel = shiftSpeedCurve

	dialog = tccCurves, "TCC Lock/Unlock Speed"
		panel = tccLockCurve

	dialog = pcPerGearDialog, "Line Pressure Per Gear Steady State"
		panel = pcPerGearCurve

	dialog = pcPerShiftDialog, "Line Pressure Per Shift"
		panel = pcPerShiftCurve

	dialog = 32Dialog, "3-2 Shift Solenoid Percent by Speed"
		panel = 32Curve

	dialog = rangeMatrixDocumentation, "Digital Cell Values"
		field = "0 = this pin must be low to reach this state"
		field = "1 = this pin must be high to reach this state"
		field = "2 = this pin is ignored for reaching this state"
		field = "3 = this state is unreachable"

	dialog = rangeMatrixDialog, "Range Selector Input Matrix", border
		panel = rangeMatrix, Center
		panel = rangeMatrixDocumentation, South

;Boost Open Loop

	dialog = boostDialog, ""
		field = "Boost Control",									isBoostControlEnabled
		field = "Control Mode",							boostType, { isBoostControlEnabled }
		field = "Output",							boostControlPin, { boostControlPin != 0 || isBoostControlEnabled }
		field = "Output Mode",							boostControlPinMode, { isBoostControlEnabled }
		field = "Frequency",						boostPwmFrequency, { isBoostControlEnabled }
		field = "Safe duty cycle",					boostControlSafeDutyCycle, { isBoostControlEnabled }
		field = "No boost control below RPM",	boostControlMinRpm, { isBoostControlEnabled }
		field = "No boost control below TPS",	boostControlMinTps, { isBoostControlEnabled }
		field = "No boost control below MAP",	boostControlMinMap, { isBoostControlEnabled }

	dialog = boostOpenLoopYAxisSelector, ""
		field = "Y Axis", boostOpenLoopYAxis

	dialog = boostOpenLoopDialog, "", border
	    panel = boostOpenLoopYAxisSelector, North
		panel = boostTableTbl, Center

	dialog = tpsTpsModeSelector
	  field = "Mode",   accelEnrichmentMode

	dialog = tpsTpsDialog, "", border
	  panel = tpsTpsModeSelector, North
		panel = tpsTpsAccelTbl, Center

	dialog = boostOpenLoopGearAdderDialog, "", border
		panel = boostOpenLoopGearAdderCurve, Center

;Boost Closed Loop

	dialog = boostPidDialog, ""
	    topicHelp = "boostPidHelp"
			field = "Enable closed loop above",			minimumBoostClosedLoopMap, { isBoostControlEnabled && boostType == 1 }
				field = "P Gain",									boostPid_pFactor, { isBoostControlEnabled && boostType == 1 }
			field = "I Gain",									boostPid_iFactor, { isBoostControlEnabled && boostType == 1 }
			field = "D Gain",									boostPid_dFactor, { isBoostControlEnabled && boostType == 1 }
			field = "Min adjustment",					boostPid_minValue, { isBoostControlEnabled && boostType == 1 }
			field = "Max adjustment",					boostPid_maxValue, { isBoostControlEnabled && boostType == 1 }

			dialog = boostTargetDialog, "", card
					panel = boostClosedTbl

	dialog = msIoBox1, "MS IO box 1"
		field = "Base CAN identifier", msIoBox0_id
		field = "VSS settings", msIoBox0_vss, { msIoBox0_id }

	dialog = msIoBox, ""
		panel = msIoBox1

    help = boostPidHelp, "Boost Control PID"
        text = "P = % per kPa error<br>"
        text = "I = % per kPa-seconds<br>"
        text = "D = % per kPa/sec<br>"
        text = "<br>"
        text = "If the boost error is 5kpa, and your P is set to 2, it will make a correction of 10%.<br>"
        text = "If the boost error has been 5kPa for 2 second (10 kPa-seconds) and I is set to 0.1, it will make a correction of 1%<br>"
        text = "If the boost is changing at 10kPa/s and D is set to 0.5, it will make a correction of 5%.<br>"
        text = "Those three terms are then added together, and limited by the PID min/max settings.<br>"
        text = "<br>"
        text = "That is then added to the value from the open loop table, and sent to PWM the valve.<br>"

	help = veTableDialogHelp, "Volumetric Efficiency"
		text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode. VE incorporates pressure ratio as measured by MAP sensor in boost (no VE ever above 105%ish)"
		webHelp = "https://rusefi.com/s/fuel"

  help = WidebandToolsHelp, "Wideband Tools"
    webHelp = "https://github.com/rusefi/rusefi/wiki/rusEFI-Wideband-Controller"

	help = stepperHbridgeHardwareHelp, "Stepper driven by Dual H-bridge"
		text = "In case you are using two H-bridges driving 4-wire stepper. H-brigde control signals connected to MCU pins configured here."

	help = idleStepperHwHelp, "Stepper drivern by step motor driver IC"
		text = "In case you have some special IC that drives your stepper. MCU to IC control signals (DIR/STEP/EN) configured here"

	help = stepperDirectDriveHardwareHelp, "Stepper driven by 4 Push-Pull/Pull outputs"
		text = "In case you have 4/6-wire stepper driven by 4 ECU outputs in Push-Pull or Pull mode. Set ECU outputs used for each phase here."

  help = blendUniversalHelp, "Blend"
    text = "Blend is advanced versions of dual map<br><br>"
    text = "Blend factor of 0% means that values from base table are used<br>"
    text = "Blend factor of 100% means that values from secondary blend table are used<br>"
    text = "Blend factor of 50% means that values from average values between primary and secondary able are used<br>"

    help = iatFuelCorrCurveHelp, "IAT Fuel Correction"
        text = "Charge temperature estimation coefficient is the more proper way to handle IAT for fuel purposes<br>"
        text = "Open question who if anyone needs IAT Fuel Correction when"

  help = baroCorrectionHelp, "Baro Correction"
    text = "MAP already adjusts fueling for altitude on the intake side."
    text = "baro table is an extra tweak for the exhaust side: lower barometric pressure usually means lower exhaust backpressure, which improves scavenging so the engine breathes a bit better than MAP alone predicts. That non-linear effect needs its own correction."

	help = fuelHelp, "Fuel Control"
		text = "More about fuel control on the web"
		webHelp = "https://rusefi.com/s/fuel"

	help = triggerHelp, "Trigger Settings"
		text = "More about Trigger Settings on the web"
		webHelp = "https://rusefi.com/s/trigger"

	help = etbHelp, "ETB Control"
		text = "More about electronic throttle body on the web"
		webHelp = "<html><a href=https://rusefi.com/s/etb>https://rusefi.com/s/etb</a></html>"

	help = vrThresholdHelp, "VR Sensor Threshold"
		text = "This is about rusEFI VR Discrete decoder"
		webHelp = "https://rusefi.com/"

	help = tpsTpsHelp, "Acceleration Enrichment"
		text = "More about Tps To Tps acceleration on the web"
		webHelp = "https://rusefi.com/s/tpstps"

	help = baseHelp, "Base Settings Control"
		text = "More about rusefi on the web"
		webHelp = "https://rusefi.com/"

	dialog = veOverrideModeSelector, "Load override"
		field = "Override VE table load axis", veOverrideMode

	dialog = veTableDialog, ""
		topicHelp = "veTableDialogHelp"
		panel = fuelStrategyPanel
		panel = veOverrideModeSelector
		panel = veTableTbl

	dialog = veTableDialog3D, "VE Table"
		topicHelp = "veTableDialogHelp"
		panel = veTableMap, South

#if LAMBDA
	dialog = lambdaOverrideModeSelector, "Load override"
		field = "Override Lambda table load axis", afrOverrideMode, { isInjectionEnabled }

	dialog = lambdaTableDialog
		panel = lambdaOverrideModeSelector
		panel = lambdaTableTbl
#else
	dialog = afrOverrideModeSelector, "Load override"
		field = "Override AFR table load axis",	afrOverrideMode, { isInjectionEnabled }

	dialog = afrTableDialog
		panel = afrOverrideModeSelector
		panel = afrTableTbl
#endif

	dialog = etbPidDialog, "PID settings"
		field = "pFactor",								etb_pFactor
		field = "iFactor",								etb_iFactor
		field = "dFactor",								etb_dFactor
		field = "pid min",								etb_minValue
		field = "pid max",								etb_maxValue
		field = "iTermMin",								etb_iTermMin
		field = "iTermMax",								etb_iTermMax

	dialog = etbDialogIdle, "ETB Idle"
		field = "ETB idle maximum angle",				etbIdleThrottleRange

    indicatorPanel = etbIndicatorPanel, 1
	      indicator = {etb1jamDetected}, "jamDetected No", "jamDetected Yes"

	dialog = etbDialogBase, "Base ETB settings"
		field = "https://rusefi.com/s/etb"
		field = "Disable ETB if engine is stopped",		disableEtbWhenEngineStopped
		field = ""
		field = "PWM Frequency",						etbFreq
		field = ""
		field = "Minimum ETB position",					etbMinimumPosition
		field = "Maximum ETB position",					etbMaximumPosition

	dialog = etbDialogJam, "ETB Jam detection settings"
		field = "Jam detection error max",				etbJamDetectThreshold, { etbJamDetectThreshold == 0 || etbJamTimeout != 0 }
		field = "Jam detection timeout period",			etbJamTimeout, { etbJamDetectThreshold != 0 }
		field = "Disables jam detection for testing until the next power cycle"
		commandButton = "Temporarily disable jam detection", cmd_etb_disable_jam_detect

	dialog = etbDialogLeft
		panel = etbDialogBase
		panel = etbDialogIdle, { isEtbEnabled }
		panel = etbDialogJam
		panel = etbIndicatorPanel
;		commandButton = "Reset ETB", cmd_etb_reset

	dialog = etbTps1Calib, "ETB 1 TPS sensor calibration"
		field = "First step: calibrate TPS and hit 'Burn'"
		field = "Should first OPEN, then CLOSE"
		field = "!Please check with your eyes that throttle first OPENS and then CLOSES"
		field = "!If order is reversed swap ETB+/ETB- wires"
		commandButton = "Auto Calibrate ETB 1", cmd_etb_auto_calibrate,   {hasIgnitionVoltage && isEtb1Enabled && isTps1Primary && calibrationMode == 0}
;dev		commandButton = "Fast Auto Calibrate ETB 1", cmd_etb_auto_calibrate_fast,   { hasIgnitionVoltage && isEtb1Enabled && isTps1Primary && calibrationMode == 0}

	dialog = etbTps2Calib, "ETB 2 TPS sensor calibration"
		field = "First step: calibrate TPS and hit 'Burn'"
		field = "Should first OPEN, then CLOSE"
		field = "!Please check with your eyes that throttle first OPENS and then CLOSES"
		field = "!If order is reversed swap ETB+/ETB- wires"
		commandButton = "Auto Calibrate ETB 2", cmd_etb_auto_calibrate_2, {hasIgnitionVoltage && isEtb2Enabled && isTps2Primary && calibrationMode == 0}
;dev		commandButton = "Fast Auto Calibrate ETB 2", cmd_etb_auto_calibrate_2_fast, { hasIgnitionVoltage && isEtb2Enabled && isTps2Primary && calibrationMode == 0}

	dialog = etbAutotune, "Sensor/PID autotune"
		field = "Second step: calibrate PID"
		field = "Run PID calibration for 10..15 seconds and press Stop"
		field = "Autotune executed for ETB 1 only, values applied for all ETBs"
		commandButton = "Start ETB PID Autotune", cmd_etb_autotune,       {hasIgnitionVoltage && isEtbEnabled && calibrationMode = 0}
		commandButton = "Stop ETB PID Autotune",  cmd_etb_autotune_stop,  {hasIgnitionVoltage && isEtbEnabled && calibrationMode >= 3 && calibrationMode <= 5}

	dialog = etbDialogRight
		panel = etbPidDialog, Center, { isEtbEnabled }
		panel = etbTps1Calib, Center, { isEtb1Enabled }
		panel = etbTps2Calib, Center, { isEtb2Enabled }
		panel = etbAutotune,  Center, { isEtbEnabled }

	dialog = etbDialog, "Electronic Throttle Body", border
		topicHelp = "etbHelp"
		panel = etbDialogLeft, West
		panel = etbDialogRight, East

	dialog = ewgPidDialog, "PID settings"
		field = "This PID is controlling how EWG Actuator DC motor reaches desired position"
		field = ""
		field = "!This section is for advanced users only!"
		field = "P gain",							etbWastegatePid_pFactor
		field = "I gain",							etbWastegatePid_iFactor
		field = "D gain",							etbWastegatePid_dFactor
		field = "PID min",							etbWastegatePid_minValue
		field = "PID max",							etbWastegatePid_maxValue

	dialog = ewgDialogLeft
		field = "No one lives here"

	dialog = ewgAutotune, "Sensor autotune"
		field = "First step: calibrate EWG position sensor and hit 'Burn'"
		commandButton = "Auto Calibrate EWG", cmd_ewg_auto_calibrate_1, {hasIgnitionVoltage && (etbFunctions1 == 4 || etbFunctions2 == 4) && wastegatePositionSensor != 0}
;dev		commandButton = "Fast Auto Calibrate EWG", cmd_ewg_auto_calibrate_1_fast, { hasIgnitionVoltage && (etbFunctions1 == 4 || etbFunctions2 == 4) && wastegatePositionSensor != 0}

	dialog = ewgDialogRight
		panel = ewgPidDialog, { etbFunctions1 == 4 || etbFunctions2 == 4 }
		panel = ewgAutotune

	dialog = ewgDialog, "Electronic Wastegate actuator", border
		panel = ewgDialogLeft, West
		panel = ewgDialogRight, East

	dialog = testSpark, "Spark"
		commandButton = "Spark #1",  cmd_test_spk1
		commandButton = "Spark #2",  cmd_test_spk2,  { cylindersCount >= 2 }
		commandButton = "Spark #3",  cmd_test_spk3,  { cylindersCount >= 3 }
		commandButton = "Spark #4",  cmd_test_spk4,  { cylindersCount >= 4 }
		commandButton = "Spark #5",  cmd_test_spk5,  { cylindersCount >= 5 }
		commandButton = "Spark #6",  cmd_test_spk6,  { cylindersCount >= 6 }
		commandButton = "Spark #7",  cmd_test_spk7,  { cylindersCount >= 7 }
		commandButton = "Spark #8",  cmd_test_spk8,  { cylindersCount >= 8 }
		commandButton = "Spark #9",  cmd_test_spk9,  { cylindersCount >= 9 }
		commandButton = "Spark #10", cmd_test_spk10, { cylindersCount >= 10 }
		commandButton = "Spark #11", cmd_test_spk11, { cylindersCount >= 11 }
		commandButton = "Spark #12", cmd_test_spk12, { cylindersCount >= 12 }
		commandButton = "Abort test", cmd_test_cancel

	dialog = testMisc, "Misc"
		commandButton = "A/C Relay", cmd_test_ac_relay
		commandButton = "Idle Air Valve", cmd_test_idle_valve
		commandButton = "Idle Second Air Valve", cmd_test_second_idle_valve
		commandButton = "Stop Engine", cmd_stop_engine
		commandButton = "Write Config", cmd_write_config
		commandButton = "Reboot ECU", cmd_reset_controller
		commandButton = "Reset to DFU", cmd_dfu
		commandButton = "Reset to OpenBLT", cmd_openblt
		commandButton = "No flash Burn mode", cmd_burn_without_flash
		commandButton = "Random fill LTFT (danger!)", cmd_ltft_dev_poke

	; bench test
	dialog = ioTest, "Bench Test & Commands", xAxis
		panel = testSpark
		panel = testInjectors
		panel = testOther
		panel = testLuaOut
		panel = testMisc

	; Injectors test
	dialog = injTest_l, "Output test modes", yAxis
		field = "Iterations", benchTestCount
		field = "On Time", benchTestOnTime
		field = "Off Time", benchTestOffTime

	dialog = injTest_r, "Reference gauges", yAxis
		gauge = VBattGauge,North
		gauge = testBenchIterGauge,South

	dialog = injTest, "", xAxis
		panel = injTest_l
		panel = injTest_r

	dialog = canReWidebandLegacyTools, "Legacy 2023 firmware"
		field = "!Please connect exactly one wideband controller before pressing this button!"
		commandButton = "Update 2023 Firmware", cmd_wideband_firmare_update

	readoutPanel = canReWidebandBuildDate, 4, { 1 }
		readout = canReWidebandVersion, "Version", "", 150, 255, 159, 160, 162, 162, 0, 0
		readout = canReWidebandFwDay, "Day", "", 0, 32, 1, 1, 31, 31, 0, 0
		readout = canReWidebandFwMon, "Month", "", 0, 13, 1, 1, 12, 12, 0, 0
		readout = canReWidebandFwYear, "Year", "", 19, 51, 20, 20, 50, 50, 0, 0

	dialog = canReWidebandNewTools, "2025 firmware"
		field = "Wideband CAN bus", widebandOnSecondBus
		field = "Target device HW ID", canReWidebandHwIndex
		commandButton = "Ping/Get FW version", cmd_set_wideband_ping_by_id
		field = ""
		field = "Required CAN ID", canReWidebandCanId
		commandButton = "Set Index", cmd_set_wideband_idx_by_id
		field = ""
		field = "Sensor type", canReWidebandSensorType
		commandButton = "Set sensor type", cmd_set_wideband_sens_by_id
		field = ""
		commandButton = "Update 2025 Firmware", cmd_set_wideband_flash_by_id
		field = "FW version and build date:"
		panel = canReWidebandBuildDate

	indicatorPanel = canReWidebandIndicators
		indicator = { canReWidebandCmdStatus > 1 }, { bitStringValue(canReWidebandCmdStatusList, canReWidebandCmdStatus) }, { bitStringValue(canReWidebandCmdStatusList, canReWidebandCmdStatus) }, green, black, red, black

	dialog = canReWidebandRemap1, "rusEFI Wideband 1 auto remap"
		field = "Auto remap on start", canWbo1_enableRemap
		field = "rusEFI WBO hardware index", canWbo1_reHwidx, { canWbo1_enableRemap }
		field = "rusEFI WBO CAN ID", canWbo1_reId, { canWbo1_enableRemap }

	dialog = canReWidebandRemap2, "rusEFI Wideband 2 auto remap"
		field = "Auto remap on start", canWbo2_enableRemap
		field = "rusEFI WBO hardware index", canWbo2_reHwidx, { canWbo2_enableRemap }
		field = "rusEFI WBO CAN ID", canWbo2_reId, { canWbo2_enableRemap }

	dialog = canReWidebandTools, "rusEFI Wideband Tools"
    topicHelp = "WidebandToolsHelp"
		panel = canReWidebandNewTools
		panel = canReWidebandLegacyTools
		panel = canReWidebandIndicators
		panel = canReWidebandRemap1, Center, { canWbo1_type == 0 }
		panel = canReWidebandRemap2, Center, { canWbo2_type == 0 }

	dialog = engineTypeDialog, "Base Tunes"
		field = "!These buttons send a command to rusEFI controller to apply preset values"
		field = "!Once you send the command, please reconnect to rusEFI controller in order to read fresh values"

commandButton = "GM LCV 2.5NA",		        cmd_set_engine_type_GM_LCV
commandButton = "GM LNF 2.0T",		        cmd_set_engine_type_GM_LNF
commandButton = "GM LTG 2.0T",		        cmd_set_engine_type_GM_LTG

commandButton = "Small Block Chevy",		        cmd_set_engine_type_GM_SBC
commandButton = "GM Gen4 SBC",      cmd_set_engine_type_GM_SBC_GEN4
commandButton = "GM Gen5 SBC",      cmd_set_engine_type_GM_SBC_GEN5



;			Board->ECU stimulator
	dialog = ecuStimulator, "ECU stimulator"
		field = "Trigger Simulator",						triggerSimulatorRpm
		commandButton = "Enable internal trigger simulation", cmd_enable_self_stim
		commandButton = "Enable external trigger simulation", cmd_enable_ext_stim 
		commandButton = "Disable trigger simulation", cmd_disable_self_stim
;		field = ""
;		field = "digipot spi",							digitalPotentiometerSpiDevice
;		field = "digipot CS #0",						digitalPotentiometerChipSelect1
;		field = "digipot CS #1",						digitalPotentiometerChipSelect2
;		field = "digipot CS #2",						digitalPotentiometerChipSelect3
;		field = "digipot CS #3",						digitalPotentiometerChipSelect4
		field = ""
		field = "trigger stimulator output #1",			triggerSimulatorPins1
		field = "trigger stimulator output mode #1",		triggerSimulatorPinModes1
		field = "trigger stimulator output #2",			triggerSimulatorPins2
		field = "trigger stimulator output mode #2",		triggerSimulatorPinModes2
		field = camSimulatorPin,                    camSimulatorPin
		field = camSimulatorPinMode,                camSimulatorPinMode
		field = ""
		field = "Logic input channel 1",				logicAnalyzerPins1
		field = "Logic input channel 2",				logicAnalyzerPins2
		field = "Logic input channel 3",				logicAnalyzerPins3
		field = "Logic input channel 4",				logicAnalyzerPins4
		field = ""
		field = "Engine chart size",					engineChartSize

				;			Racing Features->Launch Control
	dialog = smLaunchControlWest, "Launch Control Settings"
	  field = "#Also known as Rolling antilag"
		field = "Launch Control",						launchControlEnabled
		field = "Activation Mode",                      launchActivationMode,   {launchControlEnabled == 1}

		field = "Launch Button",						  launchActivatePin,      {launchControlEnabled == 1 && (launchActivatePin != 0 || (launchActivationMode == 0))}
		field = "Launch Button mode",					launchActivatePinMode,  {launchControlEnabled == 1 && launchActivationMode == 0}

		field = "Clutch Down",							  clutchDownPin,         {launchControlEnabled == 1 && (clutchDownPin != 0 || (launchActivationMode == 1))}
		field = "Clutch Down mode",						clutchDownPinMode,     {launchControlEnabled == 1 && launchActivationMode == 1}
		field = ""

; dead code		field = "Rpm Threshold",								launchRpmThreshold,  {launchControlEnabled == 1}
		field = "Speed Threshold",							launchSpeedThreshold,  {launchControlEnabled == 1}
		field = ""
		field = "Launch RPM",								launchRpm,  {launchControlEnabled == 1}
		field = "Launch Control Window",				launchRpmWindow,  {launchControlEnabled == 1}
		field = "TPS Threshold",								launchTpsThreshold,  {launchControlEnabled == 1}
		field = "Use Ignition Retard",					enableLaunchRetard,  {launchControlEnabled == 1}
		field = "Ignition Retard",						launchTimingRetard,  {launchControlEnabled == 1 && enableLaunchRetard == 1}
		field = "Fuel Added %",                     launchFuelAdderPercent,  {launchControlEnabled == 1}
		field = "Smooth Retard Mode",						launchSmoothRetard,     {launchControlEnabled == 1 && enableLaunchRetard == 1}
		field = "Launch Corrections End RPM",           launchCorrectionsEndRpm,                {launchSmoothRetard == 1 || launchSparkCutEnable == 1}
		field = "Hard Cut Mode"
		field = "Ignition Cut",							launchSparkCutEnable,  {launchControlEnabled == 1}
		field = "Initial Ignition Cut %",               initialIgnitionCutPercent,              {launchSparkCutEnable == 1}
		field = "Final Ignition Cut % Before launch",   finalIgnitionCutPercentBeforeLaunch,    {launchSparkCutEnable == 1}
		field = "Fuel Cut",								launchFuelCutEnable,  {launchControlEnabled == 1}

	dialog = TorqueReductionButtonDialog, "Torque Reduction Button"
		field = "Torque Reduction Button",		torqueReductionTriggerPin

	dialog = LaunchButtonDialog, "Launch Button"
		field = "Launch Button",			launchActivatePin

	dialog = ClutchDownDialog, "Clutch Down"
		field = "Clutch Down",			clutchDownPin
		field = "Clutch Down Mode",		clutchDownPinMode,		{clutchDownPin != 0}

	dialog = ClutchUpDialog, "Clutch Up"
		field = "Clutch Up",			clutchUpPin
		field = "Clutch Up Mode",		clutchUpPinMode,		{clutchUpPin != 0}

	dialog = TorqueReductionActivationModeDialog, "Activation", yAxis
		field = "Activation Mode",	torqueReductionActivationMode
		field = "Minimal Engine Temperature",	torqueReductionActivationTemperature
		panel = TorqueReductionButtonDialog,	{torqueReductionActivationMode == 0}
		panel = LaunchButtonDialog,				{torqueReductionActivationMode == 1}
		panel = ClutchDownDialog,				{torqueReductionActivationMode == 2}
		panel = ClutchUpDialog, 				{torqueReductionActivationMode == 3}

	dialog = TorqueReductionSettings, "Settings"
		field = "Torque Reduction Arming RPM",		torqueReductionArmingRpm
		field = "Torque Reduction Arming APP",		torqueReductionArmingApp

	dialog = ShiftTorqueReductionSettingsDialog, "", yAxis
		field = "Enable Shift Torque Reduction",		torqueReductionEnabled
		panel = TorqueReductionActivationModeDialog,	{torqueReductionEnabled == 1}
		panel = TorqueReductionSettings,				{torqueReductionEnabled == 1 && ((torqueReductionActivationMode == 0) || (torqueReductionActivationMode == 1 && launchActivatePin != 0) || (torqueReductionActivationMode == 2) || (torqueReductionActivationMode == 3))}

	dialog = ShiftTorqueReductionDialog, "", border
		panel = ShiftTorqueReductionSettingsDialog, West
		panel = shift_torque_reduction_stateDialog, East

	dialog = torqueReductionTimeDialog, "", yAxis
		field = "X axis",						torqueReductionTimeXaxis
		panel =	torqueReductionTimeTlb, { torqueReductionTimeXaxis != 0}

	dialog = torqueReductionIgnitionRetardDialog, "", yAxis
		field = "X axis",						torqueReductionIgnitionRetardXaxis
		panel = torqueReductionIgnitionRetardTlb, { torqueReductionIgnitionRetardXaxis != 0}

	dialog = torqueReductionIgnitionCutDialog, "", yAxis
		field = "X axis",						torqueReductionCutXaxis
		panel = torqueReductionIgnitionCutTlb, { torqueReductionCutXaxis != 0}

	dialog = NitrousControlButtonDialog, "Digital Switch Input"
		field = "Nitrous Control Button",	nitrousControlTriggerPin
		field = "Nitrous Control Mode",		nitrousControlTriggerPinMode,		{nitrousControlTriggerPin != 0}

	dialog = NitrousControlLuaGaugeDialog, "Lua Gauge"
		field = "Lua Gauge",		nitrousLuaGauge
		field = "Value Meaning",	nitrousLuaGaugeMeaning
		field = "Arming Value",		nitrousLuaGaugeArmingValue

	dialog = NitrousControlArmingMethodDialog, "Arming Method", yAxis
		field = "Arming Method",				nitrousControlArmingMethod
		panel = NitrousControlButtonDialog,		{nitrousControlArmingMethod == 0}
		panel = NitrousControlLuaGaugeDialog,	{nitrousControlArmingMethod == 1}

	dialog = NitrousControlSettings, "Settings"
		field = "Nitrous Relay",			nitrousRelayPin
		field = "Nitrous Relay Mode",		nitrousRelayPinMode
		field = "Minimum Vehicle Speed",	nitrousMinimumVehicleSpeed
		field = "Minimum TPS",				nitrousMinimumTps
		field = "Minimum CLT",				nitrousMinimumClt
		field = "Maximum MAP",				nitrousMaximumMap
		field = "Maximum AFR",				nitrousMaximumAfr
		field = "Activation RPM",			nitrousActivationRpm
		field = "Dectivation RPM",			nitrousDeactivationRpm
		field = "Dectivation RPM Window",	nitrousDeactivationRpmWindow
		field = "Fuel Adder",				nitrousFuelAdderPercent
		field = "Ignition Retard",			nitrousIgnitionRetard

	dialog = NitrousControlSettingsDialog, "", yAxis
		field = "Nitrous Control",			nitrousControlEnabled
		panel = NitrousControlArmingMethodDialog,	{nitrousControlEnabled == 1}
		panel = NitrousControlSettings,				{nitrousControlEnabled == 1 && ((nitrousControlArmingMethod == 0 && nitrousControlTriggerPin != 0) || (nitrousControlArmingMethod == 1))}

	dialog = NitrousControlDialog, "", border
		panel = NitrousControlSettingsDialog, West
		panel = nitrous_control_stateDialog, East

	dialog = smLaunchControl, "", border
		panel = smLaunchControlWest, West
		panel = launch_control_stateDialog, East

	dialog = antiLagDialog, "AntiLag/Rotational Idle Settings"
	  field = "#Also known as Rotational Idle"
	  field = "AntiLag",                   antiLagEnabled
		field = "Activation Mode",          	    antiLagActivationMode,  {antiLagEnabled == 1}
		field = "Switch Input",                     ALSActivatePin,  {antiLagActivationMode == 0 && antiLagEnabled == 1}
		field = "ALS Button mode",                  ALSActivatePinMode,  {antiLagActivationMode == 0 && antiLagEnabled == 1}
		field = "ALS timeout",                      ALSMaxDuration,  {antiLagEnabled == 1}
		field = "Max TPS",                          ALSMaxTPS,  {antiLagEnabled == 1}
		field = "Min RPM",            	    		ALSMinRPM,  {antiLagEnabled == 1}
		field = "Max RPM",                          ALSMaxRPM,  {antiLagEnabled == 1}
		field = "Min CLT",                          ALSMinCLT,  {antiLagEnabled == 1}
		field = "Max CLT",          	    		ALSMaxCLT,  {antiLagEnabled == 1}
		field = "Idle Air Add",                     ALSIdleAdd, {antiLagEnabled == 1}
		field = "ETB Air Add",                      ALSEtbAdd,  {antiLagEnabled == 1}
		panel = FuelAdderTableALS,  {antiLagEnabled == 1}
		panel = IgnRetardTableALS,  {antiLagEnabled == 1}
; code is commented out?		panel = IgnSkipTableALS,  {antiLagEnabled == 1}


	dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings"
		field = "Enable Coasting Fuel Cutoff",			coastingFuelCutEnabled
		field = "No cut below CLT",				coastingFuelCutClt, {coastingFuelCutEnabled}
		field = "RPM cut fuel above",		coastingFuelCutRpmHigh, {coastingFuelCutEnabled}
		field = "RPM restore fuel below",	coastingFuelCutRpmLow, {coastingFuelCutEnabled}
		field = "Vehicle speed cut above",		coastingFuelCutVssHigh, {coastingFuelCutEnabled}
		field = "Vehicle speed restore below",	coastingFuelCutVssLow, {coastingFuelCutEnabled}
		field = "Cut fuel below TPS",			coastingFuelCutTps, {coastingFuelCutEnabled}
		field = "Cut fuel below MAP",		coastingFuelCutMap, {coastingFuelCutEnabled}
		field = "Fuel cut delay", dfcoDelay, {coastingFuelCutEnabled}
		field = "Inhibit closed loop fuel after cut", noFuelTrimAfterDfcoTime, {coastingFuelCutEnabled}
		field = ""
		field = "Ignition retard during cut", dfcoRetardDeg, {coastingFuelCutEnabled}
		field = "After cut timing ramp-in time", dfcoRetardRampInTime, {coastingFuelCutEnabled}

	dialog = rotaryDialog, "Rotary"
		field = "Enable Trailing Sparks", enableTrailingSparks
		field = "Trailing Pin 1",						trailingCoilPins1, {enableTrailingSparks}
		field = "Trailing Pin 2",						trailingCoilPins2, {enableTrailingSparks && cylindersCount >= 2}
		field = "Trailing Pin 3",						trailingCoilPins3, {enableTrailingSparks && cylindersCount >= 3}
		field = "Trailing Pin 4",						trailingCoilPins4, {enableTrailingSparks && cylindersCount >= 4}
		panel = trailingSparkTable

			dialog = fancyHardwareDialog, "Board Control"
		field = "IAT/CLT Temperature Inputs Pull-Up",		boardUseTempPullUp
		field = "Hall 1 Pull-Down",			boardUseH1PullDown
		field = "Hall 2 Pull-Down",			boardUseH2PullDown
		field = "Hall 3 Pull-Down",			boardUseH3PullDown
		field = "Hall 4 Pull-Down",			boardUseH4PullDown
		field = "Hall 5 Pull-Down",			boardUseH5PullDown
		field = "Flex Input Pull-Down",			boardUseFlexPullDown
		field = "A15/A16 Temperature Inputs Pull-Up",		boardUseTempPullUp
		field = "1B/2B Crank+ Input Pull-Up",					boardUseCrankPullUp
		field = "C21 2-step input Pull-Down",				boardUse2stepPullDown
		field = "B14 Digital Input 2 Pull-Down",			boardUseD2PullDown
		field = "B15 Digital Input 3 Pull-Down",			boardUseD3PullDown


    dialog = parkingLot2, "Experimental 2"
        field = dacOutputPins1,         dacOutputPins1
        field = dacOutputPins2,         dacOutputPins2

        field = "luaCanRxWorkaround CAN performance hack",     luaCanRxWorkaround
        field = "Read RPM matching VSS profile",    canInputBCM
        field = auxSpeed1Multiplier,    auxSpeed1Multiplier
        field = magicNumberAvailableForDevTricks, magicNumberAvailableForDevTricks
        field = brakeMeanEffectivePressureDifferential, brakeMeanEffectivePressureDifferential

    dialog = parkingLot3, "Experimental 3"
        field = triggerEventsTimeoutMs,   triggerEventsTimeoutMs
        field = devBit0,         devBit0
        field = devBit1,         devBit1
        field = devBit2,         devBit2
        field = devBit3,         devBit3
        field = devBit4,         devBit4
        field = devBit5,         devBit5
        field = devBit6,         devBit6
        field = devBit7,         devBit7


	dialog = mc33810Dialog, "MC33810 IGN/INJ driver"
		field = "SPI settings"
		field = "Chip configuration"
		field = "Nominal coil charge current (3..10.75)",	mc33810Nomi
		field = "Maximum coil charge current (6..21)",		mc33810Maxi
		field = "Maximum dwell (IGN pins mode only)",		mc33810maxDwellTimer
		field = "Disable auto recovery from OV/UV",			mc33810DisableRecoveryMode
		field = "Disable ING mode if you have no IGBT/MOSFETs on board and no feedback routed to IC"
		field = "GD0 output disable IGN mode",				mc33810Gpgd0Mode
		field = "GD1 output disable IGN mode",				mc33810Gpgd1Mode
		field = "GD2 output disable IGN mode",				mc33810Gpgd2Mode
		field = "GD3 output disable IGN mode",				mc33810Gpgd3Mode
		commandButton = "Reinitialize",						cmd_mc33810_init

	indicatorPanel = acrActiveDiagPanel, 1, { 1 }
		indicator = { acrActive }, "ACR off", "ACR on", white, black, green, black

  dialog = luaCommands, "Lua Buttons"
		commandButton = "Lua Button #1",	cmd_test_lua_command_1
		commandButton = "Lua Button #2",	cmd_test_lua_command_2
		commandButton = "Lua Button #3",	cmd_test_lua_command_3
		commandButton = "Lua Button #4",	cmd_test_lua_command_4
		commandButton = "Lua Button #5",	cmd_test_lua_command_5
		commandButton = "Lua Button #6",	cmd_test_lua_command_6
		commandButton = "Lua Button #7",	cmd_test_lua_command_7
		commandButton = "Lua Button #8",	cmd_test_lua_command_8
		commandButton = "Lua Button #9",	cmd_test_lua_command_9
		commandButton = "Lua Button #10",	cmd_test_lua_command_10

	dialog = harleyAcr, "Harley Automatic Compression Release"
		field = "Pin",	acrPin
		field = "Pin 2", acrPin2
		field = "#ACR is disabled after the specified number"
		field = "#of revolutions, plus degrees of engine phase"
		field = "Disable after revolutions",	acrRevolutions
		field = "Disable after engine phase",	acrDisablePhase
		commandButton = "Test ACR #1",	cmd_test_acr_valve
		commandButton = "Test ACR #2",	cmd_test_acr2_valve
		panel = acrActiveDiagPanel

	dialog = kLineDialog, "K Line"
		field = kLineBaudRate,                          kLineBaudRate
		field = verboseKLine,                           verboseKLine
		field = hondaK,                                 hondaK
		field = kLineDoHondaSend,                       kLineDoHondaSend
		field = kLinePeriodUs,                          kLinePeriodUs

	dialog = VvlControlSettings, "Settings"
		field = "VVL Relay",				vvlRelayPin
		field = "VVL Relay Mode",			vvlRelayPinMode
		field = "Minimum TPS",				vvlController_minimumTps
		field = "Minimum CLT",				vvlController_minimumClt
		field = "Maximum MAP",				vvlController_maximumMap
		field = "Maximum AFR",				vvlController_maximumAfr
		field = "Activation RPM",			vvlController_activationRpm
		field = "Deactivation RPM",			vvlController_deactivationRpm
		field = "Deactivation RPM Window",	vvlController_deactivationRpmWindow
		field = "Fuel Adder",				vvlController_fuelAdderPercent
		field = "Ignition Retard",			vvlController_ignitionRetard

	dialog = VvlControlSettingsDialog, "", yAxis
		field = "VVL/Switched cam Control",			vvlControlEnabled
		panel = VvlControlSettings,				{vvlControlEnabled == 1}

	dialog = VvlControlDialog, "", border
		panel = VvlControlSettingsDialog, West
		panel = vvl_controller_stateDialog, East

	dialog = parkingLot, "Experimental/Broken"
    field = uiMode,                                 uiMode
		field = can1ListenMode,                         can1ListenMode
		field = can2ListenMode,                         can2ListenMode
		field = rethrowHardFault,                       rethrowHardFault
		field = canGpioType,                            canGpioType
		field = "I understand ECU Locking",				yesUnderstandLocking
		field = "! Use console for unlocking"
		field = "Tune read/write password",				tuneHidingKey, { yesUnderstandLocking == 1 }
		field = verboseQuad,									verboseQuad
;		field = useEeprom,										useEeprom
		field = "#System hacks"
		field = "vvtBooleanForVerySpecialCases",		vvtBooleanForVerySpecialCases
		field = watchOutForLinearTime,			        watchOutForLinearTime
		field = "TS over CAN debug",					verboseIsoTp

		field = "consumeObdSensors",						consumeObdSensors, { canReadEnabled == 1 && canWriteEnabled == 1}
		field = "BRZ/FRS/GT86 pedal",							allowIdenticalPps
		field = "Artificial Misfire",						artificialTestMisfire
		field = "Always use instant RPM",				alwaysInstantRpm
		field = "Modeled flow idle",					modeledFlowIdle
		field = "Max idle flow",						idleMaximumAirmass
		field = vinNumber,										vinNumber
		field = turbochargerFilter,							turbochargerFilter
		field = auxFrequencyFilter,							auxFrequencyFilter
		field = useBiQuadOnAuxSpeedSensors,				useBiQuadOnAuxSpeedSensors
		field = "TODO KS mode 4569",						kickStartCranking

		help = helpGeneral, "rusEFI General Help"
		webHelp = "https://rusefi.com/s/8chan"
		text = "<img src='https://rusefi.com/style/logo_100.gif'>"

	dialog = vrThreshold1, "VR 1 Threshold"
		panel = vrThresholdCurve1

	dialog = vrThreshold2, "VR 2 Threshold"
		panel = vrThresholdCurve2

	dialog = vrThreshold
		topicHelp = "vrThresholdHelp"
		panel = vrThreshold1
		panel = vrThreshold2

	dialog = gppwm1left, ""
		field = "Output", gppwm1_pin
		field = ""
		field = "Set frequency to 0hz for on-off mode"
		field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0}
		field = ""
		field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0}
		field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0}
		field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0}
		field = ""
		field = "X Axis", gppwm1_rpmAxis, {gppwm1_pin != 0}
		field = "Y Axis", gppwm1_loadAxis, {gppwm1_pin != 0}
		field = "Note", gpPwmNote1
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""

	dialog = gppwm1, "General Purpose PWM 1", xAxis
		panel = gppwm1left
		panel = gppwm1Tbl, {gppwm1_pin != 0}

	dialog = gppwm2left, ""
		field = "Output", gppwm2_pin
		field = ""
		field = "Set frequency to 0hz for on-off mode"
		field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0}
		field = ""
		field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0}
		field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0}
		field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0}
		field = ""
		field = "X Axis", gppwm2_rpmAxis, {gppwm2_pin != 0}
		field = "Y Axis", gppwm2_loadAxis, {gppwm2_pin != 0}
		field = "Note", gpPwmNote2
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""

	dialog = gppwm2, "General Purpose PWM 2", xAxis
		panel = gppwm2left
		panel = gppwm2Tbl, {gppwm2_pin != 0}

	dialog = gppwm3left, ""
		field = "Output", gppwm3_pin
		field = ""
		field = "Set frequency to 0hz for on-off mode"
		field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0}
		field = ""
		field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0}
		field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0}
		field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0}
		field = ""
		field = "X Axis", gppwm3_rpmAxis, {gppwm3_pin != 0}
		field = "Y Axis", gppwm3_loadAxis, {gppwm3_pin != 0}
		field = "Note", gpPwmNote3
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""

	dialog = gppwm3, "General Purpose PWM 3", xAxis
		panel = gppwm3left
		panel = gppwm3Tbl, {gppwm3_pin != 0}

	dialog = gppwm4left, ""
		field = "Output", gppwm4_pin
		field = ""
		field = "Set frequency to 0hz for on-off mode"
		field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0}
		field = ""
		field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0}
		field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0}
		field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0}
		field = ""
		field = "X Axis", gppwm4_rpmAxis, {gppwm4_pin != 0}
		field = "Y Axis", gppwm4_loadAxis, {gppwm4_pin != 0}
		field = "Note", gpPwmNote4
		field = ""
		field = ""
		field = ""
		field = ""
		field = ""

	dialog = gppwm4, "General Purpose PWM 4", xAxis
		panel = gppwm4left
		panel = gppwm4Tbl, {gppwm4_pin != 0}

	dialog = hpfpCamDialog, "HPFP Cam Configuration"
		field = "Number of lobes", hpfpCamLobes
		field = "If using VVT, which cam the pump is driven from", hpfpCam, {hpfpCamLobes != 0}
		field = "Angle of first lobe peak", hpfpPeakPos, {hpfpCamLobes != 0}
		panel = hpfpLobeProfileCurve, {hpfpCamLobes != 0}

	dialog = hpfpPumpDialog, "HPFP Pump Configuration"
		field = "Valve Pin", hpfpValvePin, {hpfpCamLobes != 0}
		field = "Valve Pin Mode", hpfpValvePinMode, {hpfpCamLobes != 0}
		commandButton = "Bench Test HPFP Valve", cmd_test_hpfp_valve
	field = "Valve peak current", mc33_hpfp_i_peak, {hpfpCamLobes != 0}
	field = "Valve hold current", mc33_hpfp_i_hold, {hpfpCamLobes != 0}
	field = "Valve hold off time", mc33_hpfp_i_hold_off, {hpfpCamLobes != 0}
	field = "Valve maximum duration", mc33_hpfp_max_hold, {hpfpCamLobes != 0}
		field = "Pump volume", hpfpPumpVolume, {hpfpCamLobes != 0}
		field = "Minimum angle", hpfpMinAngle, {hpfpCamLobes != 0}
		field = "Activation angle", hpfpActivationAngle, {hpfpCamLobes != 0}
		field = "Target decay rate", hpfpTargetDecay, {hpfpCamLobes != 0}
		field = "Proportional gain", hpfpPidP, {hpfpCamLobes != 0}
		field = "Integral gain", hpfpPidI, {hpfpCamLobes != 0}
		field = "iTerm Min", hpfpPid_iTermMin, {hpfpCamLobes != 0}
		field = "iTerm Max", hpfpPid_iTermMax, {hpfpCamLobes != 0}
		panel = hpfpDeadtimeCurve, {hpfpCamLobes != 0}

	indicatorPanel = IgnitionDiagPanel, 1, { 1 }
		indicator = { ignitorDiagnostic1  > 1 }, { Ignition out 1: bitStringValue(outputDiagErrorList, ignitorDiagnostic1 )}, { Ignition out 1: bitStringValue(outputDiagErrorList, ignitorDiagnostic1 )}, green, black, red, black
		indicator = { ignitorDiagnostic2  > 1 }, { Ignition out 2: bitStringValue(outputDiagErrorList, ignitorDiagnostic2 )}, { Ignition out 2: bitStringValue(outputDiagErrorList, ignitorDiagnostic2 )}, green, black, red, black
		indicator = { ignitorDiagnostic3  > 1 }, { Ignition out 3: bitStringValue(outputDiagErrorList, ignitorDiagnostic3 )}, { Ignition out 3: bitStringValue(outputDiagErrorList, ignitorDiagnostic3 )}, green, black, red, black
		indicator = { ignitorDiagnostic4  > 1 }, { Ignition out 4: bitStringValue(outputDiagErrorList, ignitorDiagnostic4 )}, { Ignition out 4: bitStringValue(outputDiagErrorList, ignitorDiagnostic4 )}, green, black, red, black
		indicator = { ignitorDiagnostic5  > 1 }, { Ignition out 5: bitStringValue(outputDiagErrorList, ignitorDiagnostic5 )}, { Ignition out 5: bitStringValue(outputDiagErrorList, ignitorDiagnostic5 )}, green, black, red, black
		indicator = { ignitorDiagnostic6  > 1 }, { Ignition out 6: bitStringValue(outputDiagErrorList, ignitorDiagnostic6 )}, { Ignition out 6: bitStringValue(outputDiagErrorList, ignitorDiagnostic6 )}, green, black, red, black
		indicator = { ignitorDiagnostic7  > 1 }, { Ignition out 7: bitStringValue(outputDiagErrorList, ignitorDiagnostic7 )}, { Ignition out 7: bitStringValue(outputDiagErrorList, ignitorDiagnostic7 )}, green, black, red, black
		indicator = { ignitorDiagnostic8  > 1 }, { Ignition out 8: bitStringValue(outputDiagErrorList, ignitorDiagnostic8 )}, { Ignition out 8: bitStringValue(outputDiagErrorList, ignitorDiagnostic8 )}, green, black, red, black
		indicator = { ignitorDiagnostic9  > 1 }, { Ignition out 9: bitStringValue(outputDiagErrorList, ignitorDiagnostic9 )}, { Ignition out 9: bitStringValue(outputDiagErrorList, ignitorDiagnostic9 )}, green, black, red, black
		indicator = { ignitorDiagnostic10 > 1 }, {Ignition out 10: bitStringValue(outputDiagErrorList, ignitorDiagnostic10)}, {Ignition out 10: bitStringValue(outputDiagErrorList, ignitorDiagnostic10)}, green, black, red, black
		indicator = { ignitorDiagnostic11 > 1 }, {Ignition out 11: bitStringValue(outputDiagErrorList, ignitorDiagnostic11)}, {Ignition out 11: bitStringValue(outputDiagErrorList, ignitorDiagnostic11)}, green, black, red, black
		indicator = { ignitorDiagnostic12 > 1 }, {Ignition out 12: bitStringValue(outputDiagErrorList, ignitorDiagnostic12)}, {Ignition out 12: bitStringValue(outputDiagErrorList, ignitorDiagnostic12)}, green, black, red, black
		

	indicatorPanel = InjectionDiagPanel, 1, { 1 }
		indicator = { injectorDiagnostic1  > 1 }, { Injector out 1: bitStringValue(outputDiagErrorList, injectorDiagnostic1 )}, { Injector out 1: bitStringValue(outputDiagErrorList, injectorDiagnostic1 )}, green, black, red, black
		indicator = { injectorDiagnostic2  > 1 }, { Injector out 2: bitStringValue(outputDiagErrorList, injectorDiagnostic2 )}, { Injector out 2: bitStringValue(outputDiagErrorList, injectorDiagnostic2 )}, green, black, red, black
		indicator = { injectorDiagnostic3  > 1 }, { Injector out 3: bitStringValue(outputDiagErrorList, injectorDiagnostic3 )}, { Injector out 3: bitStringValue(outputDiagErrorList, injectorDiagnostic3 )}, green, black, red, black
		indicator = { injectorDiagnostic4  > 1 }, { Injector out 4: bitStringValue(outputDiagErrorList, injectorDiagnostic4 )}, { Injector out 4: bitStringValue(outputDiagErrorList, injectorDiagnostic4 )}, green, black, red, black
		indicator = { injectorDiagnostic5  > 1 }, { Injector out 5: bitStringValue(outputDiagErrorList, injectorDiagnostic5 )}, { Injector out 5: bitStringValue(outputDiagErrorList, injectorDiagnostic5 )}, green, black, red, black
		indicator = { injectorDiagnostic6  > 1 }, { Injector out 6: bitStringValue(outputDiagErrorList, injectorDiagnostic6 )}, { Injector out 6: bitStringValue(outputDiagErrorList, injectorDiagnostic6 )}, green, black, red, black
		indicator = { injectorDiagnostic7  > 1 }, { Injector out 7: bitStringValue(outputDiagErrorList, injectorDiagnostic7 )}, { Injector out 7: bitStringValue(outputDiagErrorList, injectorDiagnostic7 )}, green, black, red, black
		indicator = { injectorDiagnostic8  > 1 }, { Injector out 8: bitStringValue(outputDiagErrorList, injectorDiagnostic8 )}, { Injector out 8: bitStringValue(outputDiagErrorList, injectorDiagnostic8 )}, green, black, red, black
		indicator = { injectorDiagnostic9  > 1 }, { Injector out 9: bitStringValue(outputDiagErrorList, injectorDiagnostic9 )}, { Injector out 9: bitStringValue(outputDiagErrorList, injectorDiagnostic9 )}, green, black, red, black
		indicator = { injectorDiagnostic10 > 1 }, {Injector out 10: bitStringValue(outputDiagErrorList, injectorDiagnostic10)}, {Injector out 10: bitStringValue(outputDiagErrorList, injectorDiagnostic10)}, green, black, red, black
		indicator = { injectorDiagnostic11 > 1 }, {Injector out 11: bitStringValue(outputDiagErrorList, injectorDiagnostic11)}, {Injector out 11: bitStringValue(outputDiagErrorList, injectorDiagnostic11)}, green, black, red, black
		indicator = { injectorDiagnostic12 > 1 }, {Injector out 12: bitStringValue(outputDiagErrorList, injectorDiagnostic12)}, {Injector out 12: bitStringValue(outputDiagErrorList, injectorDiagnostic12)}, green, black, red, black
		

	dialog = OutputDiagDialog, "Output diagnostic", xAxis
		panel = IgnitionDiagPanel
		panel = InjectionDiagPanel

	dialog = IgnitionTableDialog, ""
		panel = ignitionTableIndicators
		panel = ignitionTableTbl

[Tools]
 ;addTool = toolName, PanelName
 addTool = veTableGenerator, "VE Table Generator", veTableTbl
#if LAMBDA
#else
 addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl
#endif

[EventTriggers]
  triggeredPageRefresh = 1, { triggerPageRefreshFlag }
  triggeredPageRefresh = 3, { ltftPageRefreshFlag }
